Une introduction à la Convolution pour débutant

Publié par Auguste Hoang le

Partagez sur les réseaux sociaux !

La convolution, dans le domaine du Deep Learning, est une opération mathématique essentielle dans de nombreux types de réseaux de neurones. Elle est particulièrement centrale dans les réseaux de neurones convolutifs (CNNs), fréquemment utilisés pour des tâches de vision par ordinateur, telles que la reconnaissance d’images.

Dans cet article, tu découvriras les principes fondamentaux de la convolution.

Pourquoi a-t-on besoin de la convolution?

Supposons que l’on souhaite entraîner un réseau de neurones pour effectuer de la classification d’images. Pour simplifier, imaginons que les images sont des matrices de 128×128 pixels.

Si nous envisageons d’appliquer une opération linéaire, cela signifie calculer une combinaison linéaire de tous les coefficients :

\displaystyle y = \sum_{i=1}^{128} \sum_{j=1}^{128} \omega_{i,j} \times x_{i,j}

Étant donné qu’une image contient 128×128 = 16384 coefficients, une telle couche linéaire nécessiterait au moins autant de paramètres à entraîner, ce qui est considérable pour une seule couche !

De plus, l’opération linéaire ne prend pas en compte le fait que l’entrée est une image, c’est-à-dire qu’elle traite les 16384 coefficients de manière indépendante. Or, dans une image, deux pixels adjacents ne sont généralement pas indépendants (leurs couleurs sont souvent similaires).

Il est donc important d’utiliser une opération qui tient compte du fait que l’entrée est une image.
Cette opération est la convolution.

L’opération de convolution se divise en deux catégories principales : la convolution 1D et la convolution 2D. Le choix entre ces deux dépend du format du tenseur en entrée :

  • Convolution 1D : si c’est un tenseur à une dimension, avec éventuellement des composantes dites channels. C’est typiquement le cas pour les séries temporelles, qui sont des tenseurs du format [timestep, channels].
  • 2D : adaptée à un tenseur à deux dimensions, toujours avec éventuellement des composantes channels. Par exemple les images qui sont des tenseurs de format [width, height, channels]

La convolution 1D est relativement peu utilisée, notamment parce que les cellules récurrentes, que nous aborderons dans cet article, traitent les séries temporelles de manière plus efficace que la convolution.

Cependant, nous débuterons par l’exploration approfondie de la convolution 1D.
En effet, les principes sous-jacents des convolutions 1D et 2D sont similaires, et la compréhension du cas 1D facilitera l’appréhension du cas 2D.

Le principe de la convolution 1D

Commençons par le cas de la dimension 1.

Supposons que l’entrée du réseau de neurones soit une séquence de taille N (comme le signal d’un son):

X = (x_1, x_2, x_3, \cdots, x_N)

Une opération linéaire traditionnelle consisterait à effectuer une combinaison des N valeurs x_i.

Le principe de la convolution est différent : au lieu d’appliquer une opération linéaire sur l’ensemble de la séquence, on choisit une taille K et on applique une même opération linéaire sur toutes les blocs de taille K.

Par exemple, choisissons K=3. La convolution consiste à:

  • Prendre le premier bloc de taille 3: (x_1, x_2, x_3).
  • Lui appliquer une combinaison linéaire en calculant y_1 définie par:

y_1 := \omega_1 \cdot x_1 + \omega_2 \cdot x_2 + \omega_3 \cdot x_3.

  • Recommencer avec (x_2, x_3, x_4), en calculant y_2 définie par:

y_2 := \omega_1 \cdot x_1 + \omega_2 \cdot x_3 + \omega_3 \cdot x_4.

  • Plus généralement, pour entier k, on calcule y_k définie par:

y_k := \omega_1 \cdot x_{k+1} + \omega_2 \cdot x_{k+2} + \omega_3 \cdot x_{k+3}.

Notez bien que les coefficients (w_1, w_2, w_3) sont les mêmes à chaque calcul.

La matrice [w_1, w_2, w_3] s’appelle le kernel (noyau en anglais) de la convolution et K s’appelle de le kernel size.

Voici une animation pour illustrer le calcul fait par une convolution:

Illustration de la Convolution 1D.

La Convolution 2D

La convolution 2D découle naturellement de la convolution 1D.

Dans ce cas, on utilise un kernel à deux dimensions et on le fait glisser à la fois horizontalement et verticalement sur l’entrée.

L’objectif reste similaire à celui de la convolution 1D : plutôt que de réaliser une combinaison linéaire sur l’ensemble des éléments de l’entrée, on effectue cette opération uniquement sur des petites zones.

Conclusion

Ce qu’il faut retenir : pour traiter les images et les séquences de données, la convolution est une opération plus adaptée qu’une opération linéaire, car la convolution ne traitent que des données corrélées entre elles.

N’hésite pas à partager tes impressions sur cet article et à poser tes questions dans les commentaires !



0 commentaire

Laisser un commentaire

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boîte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boîte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boîte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".