Les informations pratiques concernant le déroulement de l’unité d’enseignement RCP209 « Apprentissage, réseaux de neurones et modèles graphiques » au Cnam se trouvent dans ce préambule.
Cours - Réseaux de neurones convolutifs¶
Bien que le théorème d’approximation universel donne des garanties théoriques intéressantes sur les perceptrons multi-couches, ces modèles ont pourtant des limitations pratiques considérables. En effet, l’utilisation de couches entièrement connectées n’est pas adapté à tous les types d’observation.
Considérons par exemple un problème de classification d’images, comme la classification de chiffres manuscrits à partir d’images en noir et blanc comme celles du jeu de données MNIST. Si l’on utilise un perceptron multi-couche avec une seule couche cachée de \(n\) neurones, alors le nombre de paramètres pour la première couche est en \(O(wh\times n)\) avec \(w\) et \(h\) respectivement la largeur et la hauteur des images.

Fig. 74 Le nombre de paramètres du perceptron multi-couche croit rapidement avec la dimension de l’entrée et la dimension de la couche cachée. Pour des images au-delà de quelques dizaines de pixels de côté, le nombre de paramètres devient de l’ordre du million.¶
Pour des petites images comme celles de MNIST, cela représente \(28\times 28 = 784\) pixels d’entrée. Pour une couche cachée d’environ 100 neurones, le nombre de paramètres est donc approximativement 80000. Mais la plupart des images de la vie courante sont nettement mieux résolues. Pour une image \(1000\times1000\), nous aurions un million de pixels, soit un milliard de paramètres pour une couche cachée de seulement 1000 neurones!
Cette explosion du nombre de paramètres pose deux problèmes. Premièrement, les coûts calculatoires augmentent, aussi bien le temps de calcul que la mémoire nécessaire au stockage des poids du modèle. Deuxièmement, l’augmentation massive du nombre de paramètres favorise le surapprentrissage et complique donc la modélisation décisionnelle.
Qui plus est, il est assez intuitif de voir qu’il n’est pas probablement pas nécessaire de connecter tous les pixels de l’image d’entrée à tous les pixels de l’image. La sémantique des images peut se déduire en observant les structures locales et en les combinant. Par exemple, en considérant les déformations ci-dessous, on remarque assez rapidement que le catégorie de l’image (la lettre « A ») ne change pas lorsque l’on modifie localement les valeurs des pixels.

Fig. 75 De légères déformations géométriques (translation, rotation, warping) ne changent pas la sémantique de l’image. La classe de l’image est invariante à ces déformations. Cette invariance est difficile à modéliser pour des perceptrons, qui n’ont aucune notion de structure locale.¶
On dit alors que la classe des images est invariantes à certaines transformations. Notamment, la classe d’un objet est invariante à la translation: un chat est un chat, peu importe sa position dans l’image. Pourtant, ces invariances sont difficiles à modéliser pour des perceptrons. En effet, les perceptrons connectent tous les pixels à tous les autres pixels. En représentant une image sous sa forme vectorielle, on ne considère plus sa structure spatiale 2D mais seulement un « sac de pixel » dont on peut réarranger l’ordre comme on le souhaite sans modifier les performances de classification du perceptron.

Fig. 76 Apprendre un perceptron multi-couche les images originales de MNIST ou sur les images dont on a permuté l’ordre des pixels ne change pas les performances du modèle. En effet, le perceptron considère les valeurs de chaque indépendamment de toutes les autres. Intuitivement, on comprend ainsi pourquoi les invariances sont difficiles à modéliser par ce type de modèle.¶
Il semble donc y avoir un intérêt à ajouter un a priori dans notre modèle. Puisque la structure locale est importante, il est probablement pertinent de ne connecter un pixel qu’à son voisinage proche. Et comme nos prédictions devraient être invariantes à la translation, il faut donc appliquer les mêmes transformations sur chaque région de l’image.
Ces constats ont amené à l’idée du partage de poids dans les réseaux de neurones. Le Neocognitron de Fukushima (1980) est le premier modèle à avoir appliqué ce principe. Plutôt que d’appliquer un perceptron multi-couche sur toute l’image, on applique un ensemble de perceptrons sur chaque région de l’image. Pour économiser le nombre de paramètres, tous les perceptrons partagent les mêmes poids. C’est l’ancêtre des réseaux de neurones convolutifs.
Convolution¶
La convolution est un opérateur mathématique particulièrement courant en traitement du signal. Le produit de convolution entre deux fonctions \(f: \mathbb{R} \rightarrow \mathbb{R}\) et \(g: \mathbb{R} \rightarrow \mathbb{R}\), habituellement noté \(f * g\), est défini par:
On peut remarquer que cet opérateur est commutatif (\(f * g = g * f\)) et bilinéaire (\((\lambda f) * g = \lambda (f * g)\) et \((f + f') * g = f * g + f' * g\)).
Même si la définition ci-dessus vaut pour les fonctions univariées, elle s’étend sans difficulté aux fonctions de plusieurs variables. Dans ce cas, l’intégrale porte alors sur l’ensemble des variables (intégrale multiple).
Lien avec la transformée de Fourier¶
L’ubiquité des convolutions en traitement du signal s’explique de par leur relation avec la transformée de Fourier, qui est un outil central en analyse harmonique. En effet, la transformée de Fourier \(\mathcal{F}\) transporte les convolutions dans l’espace réel en multiplications dans l’espace spectral, et inversement:
Convolution discrète¶
En pratique, les signaux manipulés sont représentés numériquement sur un support discret, c’est-à-dire que l’on manipule une fonction \(f: \mathbb{Z} \rightarrow \mathbb{R}\). Dans ce cas, le produit de convolution se réécrit:
Dans cette formulation, \(f\) et \(g\) sont des fonctions (des « signaux ») unidimensionnels. Pour des images, qui sont des signaux 2D, on peut sans difficulté étendre cette définition. En deux dimensions, si l’on note \(I : \llbracket 1;w \rrbracket \times \llbracket 1;h \rrbracket \rightarrow \mathbb{R}\) une image \(I\) de taille \(w\times{}h\) et \(Kg \llbracket 1;k_w \rrbracket \times \llbracket 1;k_h \rrbracket \rightarrow \mathbb{R}\) le noyau de convolution de dimension \(k_w \times k_h\), alors on définit le filtre \(\mathcal{K}\) tel que,:
avec \(p = \frac{k_w-1}{2}\) et \(q = \frac{k_h-1}{2}\).

Fig. 77 Illustration d’un filtrage par convolution.¶
Un des inconvénients de ce produit est que le noyau de convolution \(K\) et l’image \(I\) sont parcourus en sens inverse, les indices de l’un augmentant tandis que les indices de l’autre décroissent. En pratique, la plupart des bibliothèques implémentent l’opérateur \(\star\) de corrélation croisée:
Cet opérateur perd la commutativité mais est plus simple à programmer. Dans notre cas, cela ne fera aucune différence car les valeurs de la matrice \(K\) seront des paramètres appris. Il est équivalent d’utiliser une corrélation croisée ou une convolution, les matrices étant identiques à symétrie près. Comme nous le verrons plus tard, les autres opérations intervenant dans les réseaux de neurones convolutifs ne sont de toute façon pas commutatives. La perte de cette propriété est donc sans importance. Dans la suite, on utilisera indifféremment la convolution ou la corrélation croisée.
La corrélation croisée et la convolution souffrent toutes deux d’une inconnue lorsque l’opérateur agit sur les bords, puisque les valeurs de \(I\) hors de l’image sont indéfinies. En règle générale, on ne calcule pas ces valeurs et les lignes et colonnes pour lesquelles le produit de convolution est indéfini sont ignorées, ce qui réduit la taille effective de l’image. On parle alors de corrélation croisée valide. Il est également possible de remplir les valeurs manquantes de \(I\) par des zéros (zero-padding) (cf.~cref{fig:convolution}), pour un nombre de lignes et de colonnes égal à la moitié de la taille du noyau de convolution dans chaque direction. On parle alors de corrélation croisée identique, car le résultat du filtrage est de même dimension que l’image d’entrée. Enfin, il est possible de remplir les valeurs manquantes par autant de zéros que nécessaire pour que chaque élément de \(I\) soit visité par chaque élément de \(K\), auquel cas on parle de corrélation croisée complète.
Couche convolutive¶
En pratique, une couche de convolution en dimension \(n\) d’un réseau de neurones qui s’applique sur un tenseur d’entrée avec \(C_\text{in}\) canaux est paramétrée par:
Les dimensions \((k_1, \dots, k_n)\) des noyaux de convolution, généralement identique selon toutes les dimensions,
Le nombre \(C_\text{out}\) de convolutions parallèles, qui définit le nombre de cartes d’activations en sortie de couche,
Le pas \(s\) de la convolution,
Le padding \(p\).
Ainsi, une couche de convolution possède \(k_1 \times \dots \times k_n \times C_\text{in} \times C_\text{out}\) paramètres optimisables. Dans le cas le plus courant de la dimension 2, les noyaux de convolution sont généralement carrés, c’est-à-dire qu’une couche de convolution 2D contient \(C k^2\) paramètres.
L’intérêt de la convolution dans les réseaux de neurones profonds est triple~cite{goodfellow_deep_2016}:
Les interactions convolutives sont parcimonieuses, la taille des noyaux de convolution étant très faible devant la taille des images
Les caractéristiques extraites par convolution sont équivariantes aux translations de l’image, c’est-à-dire qu’une translation de l’image d’entrée translate les cartes d’activation de la même façon,
Les paramètres de la convolution sont partagés pour l’ensemble de l’image, ce qui permet de détecter les mêmes caractéristiques peu importe leur position dans l’image avec un très faible coût de stockage en mémoire des paramètres.
Comparée à une couche entièrement connectée, la couche convolutive n’est pas invariante à la permutation des pixels car elle possède un a priori fort sur la structure spatiale des données. Cet a priori est lié à la notion d’équivariance sémantique des images par rapport à certaines transformations géométriques. Néanmoins, il faut garder à l’esprit que cette connaissance structurelle n’est pas toujours respectée. Dans une série temporelle, l’apparition d’une anomalie peut avoir un sens différent en fonction du moment auquel elle se produit. À l’inverse, la convolution 1D part du principe que l’anomalie excitera les neurones de la même façon quelle que soit sa position dans le temps. Cet a priori fort est bien adapté aux images, et tout particulièrement aux images aériennes et satellitaires, qui présentent des régularités spécifiques qui seront détaillées plus tard. La structure même des gls{CNN} est donc adaptée au traitement d’images, qu’ils permettent de décomposer dans un espace de représentation doté d’une équivariance forte à diverses transformations~cite{ulyanov_deep_2018}.
Conventionnellement, en 2D, on représente les cartes d’activation des neurones, ou cartes de caractéristiques, sous la forme de tenseurs de dimension 3 \((C, W, H)\) avec \(C\) le nombre de canaux, également appelé nombre de plans de convolutions, \(W\) la largeur et \(H\) la hauteur des cartes.
Une couche convolutive combine les \(n_\text{in}\) cartes d’activation d’entrée avec le \(j\)ieme{} noyau de convolution \(K_j\)
c’est-à-dire:
Ainsi, une convolution transforme un tenseur \((C_{in}, W_{in}, H_{in})\) en tenseur \((C_{out}, W_{out}, H_{out})\) dont les dimensions spatiales se calculent parfootnote{Les équations d’arithmétique des convolutions sont tirées de~citet{dumoulin_guide_2016}.}
Convolution à pas¶
Une première variante du produit de convolution consiste à sous-échantillonner virtuellement la dimension des cartes d’activation produites d’un facteur \(s\). Pour ce faire, il suffit de ne visiter les éléments de \(I\) qu’avec un pas de \(s\)
Une convolution à pas transforme donc un tenseur \((C_{in}, W_{in}, H_{in})\) en tenseur \((C_{out}, W_{out}, H_{out})\) avec les dimensions spatiales se calculant par
Convolution à trous¶
La convolution à trous, ou convolution dilatée~cite{yu_multi-scale_2015}footnote{L’algorithme à trous~cite{shensa_discrete_1992} applique un même filtre à plusieurs échelles en utilisant des convolutions dilatées. La différence entre les deux est subtile et ne sera pas discutée ici.}, consiste à réaliser une convolution en observant \(I\) à une résolution plus faible que sa résolution réelle, en sautant certaines de ses valeurs. Le noyau de convolution est ainsi virtuellement dilaté d’un facteur \(d\), les valeurs manquantes étant remplacées par des 0. En pratique, la convolution à trous se calcule par la formule
Les cartes d’activation en sortie d’une convolution à trous ont pour dimensions
Convolution transposée¶
La convolution transposée est une opération s’opposant à la convolution traditionnelle en ce qu’elle correspond à son gradient par rapport à ses entrées. Pour un noyau de convolution \(k\) donné, la convolution transposée permet de reconstruire une image \(I\) à partir des activations \(Z\), dont les dimensions s’obtiennent par
Plus prosaïquement, il est possible d’envisager la convolution transposée comme une convolution à pas fractionnel, c’est-à-dire une convolution de pas \(s = \frac{1}{s'}\) avec \(s' \in \mathbb{N}^*\).
Cette convolution est parfois appelée à tort « déconvolution » dans la littérature, sans toutefois correspondre à l’opérateur mathématique éponyme, défini comme l’inverse de l’opérateur de convolution. La convolution transposée est particulièrement utile pour inverser les effets d’une couche convolutive, par exemple dans la phase de décodage d’un auto-encodeur convolutif~cite{zhao_stacked_2015} ou pour la super-résolution~cite{dong_accelerating_2016}.
Échantillonnage¶
Sous-échantillonnage¶
Afin de réduire la dimension des cartes d’activation dans le réseau, il est utile d’opérer des sous-échantillonnages. Il s’agit généralement d’appliquer un filtre par fenêtre glissante non-recouvrante sur les données d’entrée. Ce filtre est en règle générale l’opérateur \(\max\) ou l’opérateur de moyenne sur une fenêtre de taille fixe. On parle alors de max pooling ou d”average pooling. Un exemple de sous-échantillonnage en 2D est illustré dans la~cref{fig:pooling}. Dans certains cas, la taille de la fenêtre de sous-échantillonnage n’est pas définie à l’avance mais la dimension des cartes d’activation de sortie l’est. On parle alors de sous-échantillonnage adaptatif. Il est utilisé dans certains réseaux pour réduire brutalement la dimension des cartes d’activation lorsque la taille des images est arbitraire. Dans le cas contraire, les dimensions des couches entièrement connectées déterminent la taille des images d’entrée. Outre la réduction de dimension, l’intérêt de ces opérateurs est d’introduire une invariance aux déformations locales.
Les dimensions d’une carte d’activation en sortie d’un sous-échantillonnage sont
Le sous-échantillonnage n’a pas de paramètre optimisable, il s’agit d’une fonction complètement déterminée.
Sur-échantillonnage¶
Le sur-échantillonnage, ou unpooling, est l’opération inverse du sous-échantillonnage et tente de reconstruire une entrée à partir de sa sortie. Le sous-échantillonnage étant une opération perdant de l’information, le sur-échantillonnage est approximatif. Dans le cas du sur-échantillonnage par valeur moyenne, la même valeur sera répliquée plusieurs fois dans l’image à résolution augmentée. Dans le cas du sur-échantillonnage par valeur maximale, le maximum sera replacé à sa position initiale et les valeurs restantes complétées par des zéros, comme illustré dans la~cref{fig:pooling}. Les dimensions d’une carte d’activation en sortie d’un sur-échantillonnage sont
Comme pour le sous-échantillonnage dont il est la transposée, le sur-échantillonnage ne comprend aucun paramètre optimisable.
Réseaux convolutifs¶

Fig. 78 Schéma de l’architecture AlexNet. En gris sont représentés les différentes cartes d’activation, c’est-à-dire les tenseurs intermédiaires après chaque couche du modèle.¶