Construisez des architectures neuronales modulaires

Dans ce chapitre, nous allons constater que les réseaux de neurones sont des architectures modulaires, permettant d'empiler des couches diverses, entraînées avec un seul algorithme. Nous allons identifier le rôle de chaque type de couche et présenter des architectures profondes classiques sur des problèmes réels.

Jouez aux LEGO avec des réseaux de neurones

Tout au long de ce cours "Initiez-vous au Deep Learning", nous avons présenté différents types de couches de neurones, telles que les couches denses, les couches convolutionnelles, les couches récurrentes, etc.

Dans tous les chapitres de ce cours, vous avez peut-être remarqué que pour tous les types de couches, on revenait toujours à l'algorithme d'apprentissage de la rétropropagation du gradient pour apprendre les paramètres du réseau (les poids, voir premier cours, chapitre 2).

Généralisation de la rétropropagation du gradient

Afin de bien comprendre qu'on peut empiler les couches sans se préoccuper de leur nature pour l'apprentissage, il est important de faire un point sur la généralisation de la rétropropagation du gradient.

La figure suivante permet de s'affranchir de la nature de la couche, comme présenté dans le  cours de Y. Lecun au collège de France. Les fonctions  $\(F_i\)$ sont soit des sommes pondérées (couches linéaires paramétrées par $\(W_i\)$), soit des fonctions d'activation (ReLU, tanh, etc. ; dans ce cas elles n'ont pas de paramètres  $\(W_i\)$) :

Schéma générique d'une couche de neurones
Schéma générique d'une couche de neurones appliquant la fonction  \(F_i\) à l'entrée  \(H_{i-1}\) pour calculer la sortie  \(H_i\).

En phase de décision (de bas en haut sur le schéma), on propage l'information des entrées vers les sorties, en calculant simplement les  $\(H_i\)$ successifs,  :  $\(H_i = F_i(H_{i-1})\)$ 

En phase d'apprentissage, on calcule successivement les gradients de l'erreur depuis la sortie vers l'entrée (du haut vers le bas sur le schéma) :

  $\(\frac{\partial J}{\partial H_{i-1}} = \color{blue}\frac{\partial J}{\partial H_{i}} \color{black}\times \color{green}\frac{\partial H_{i}}{\partial H_{i-1}}\)$  

Le terme bleu provenant de la couche précédente, et le terme magenta étant facilement calculable en fonction du type de couche considéré.

Maintenant que nous savons "empiler des couches" et les apprendre, faisons le point sur les différents types de couches et identifions le contexte dans lequel il faut les utiliser.

Intérêt des différents types de couches

Couches denses, pour décider

Les couches denses sont les couches "historiques" des réseaux de neurones feedforward. Elles consistent en une interconnexion totale entre une couche de neurones et la suivante.

Comme leur nom l'indique (elles sont aussi appelées fully connected), ces couches sont assez "lourdes", car elles comportent beaucoup de paramètres.

 Les couches denses doivent être utilisées afin de prendre une décision, qu'il s'agisse d'une classification ou d'une régression. Elles sont donc généralement utilisées comme dernière(s) couche(s) d'un modèle. 

Couches convolutionnelles, pour caractériser

Les couches convolutionnelles (voir cours 1, chapitre 3) sont beaucoup plus légères, puisqu'elles ne comportent que les poids liés aux filtres (dont la taille est généralement réduite, par exemple  $\(3 \times 3\)$ ou  $\(5\times 5\)$ ), multipliés par quelques dizaines de filtres.

Rappelons que les couches convolutionnelles sont souvent utilisées avec des couches de pooling, afin de concentrer l'information.

Les filtres appris par les couches convolutionnelles peuvent être considérés comme des extracteurs de caractéristiques ; ils sont donc souvent utilisés dans les couches basses des réseaux, afin d'apprendre des représentations adaptées à la fonction de décision considérée.

À titre illustratif, la figure suivante présente un modèle convolutionnel dédié au texte présenté dans l'article "Convolutional neural networks for sentence classification" [1]. Le modèle comporte 4 parties :

  • la première consiste Ă  encoder les mots sous la forme d'une reprĂ©sentation numĂ©rique de taille fixe ;

  • la seconde est constituĂ©e des fameux filtres convolutionnels ;

  • la troisième rĂ©alise une opĂ©ration de pooling sur l'axe temporel ;

  • la dernière est une couche dense traditionnelle permettant de classifier le texte.

Exemple de CNN appliqué à du texte pour la classification de phrase courte (image issue de [2])

Exemple de CNN appliqué à du texte pour la classification de phrases courtes (image issue de [1]).

Couches récurrentes, pour modéliser les dépendances...

Comme nous l'avons vu tout au long de ce chapitre, les RNN permettent de modéliser les dépendances au sein d'un signal.

Ils sont donc adaptés pour tous les problèmes impliquant des séquences. En revanche, les couches récurrentes sont lourdes à cause des connexions récurrentes, notamment dans le cas de l'utilisation de cellule LSTM plus performante.

... ou pour générer des séquences

 Voici un exemple de tutoriel pour générer du texte à partir d'un apprentissage du livre Alice au pays des merveilles de Lewis Carroll : lien (en anglais).

Exemple d'architectures "LEGO"

Dans cette section, nous allons analyser certains modèles profonds "classiques" pour traiter des problèmes donnés. Ils sont tous constitués des types de couches standard résumés ci-dessus.

Exemple de modèle profond pour la classification d'images

Plusieurs architectures profondes ont été proposées pour traiter l'immense base "ImageNet", qui contient plus de 14 millions d'images de scènes naturelles (animaux, véhicules, personnes, etc.).

L'une des plus connues s'appelle VGG, proposée dans l'article en anglais "Very deep convolutional networks for large-scale image recognition" [2], destinée à la classification d'images et représentée ci-dessous.

Modèle profonf proposé par [2] pour la classification d'images
Modèle profond proposé par [2] pour la classification d'images. 

Compte tenu de la tâche à effectuer, les choix suivants ont été faits :

  • les couches basses sont des couches convolutionnelles (en noir dans la figure ci-dessus) pour caractĂ©riser les images. Chaque couche possède plusieurs filtres, conduisant Ă  plusieurs cartes de caractĂ©ristiques (souvent appelĂ©s channels en anglais). Dans la notation $\(x \times y \times z\)$, les deux premiers nombres dĂ©signent la taille des cartes, et le troisième dĂ©signe le nombre de cartes. La version VGG16 comporte 16 couches convolutionnelles ;

  • les couches convolutionnelles sont alternĂ©es avec des couches de max pooling (en rouge) (ici 2 x 2) qui rĂ©duisent la taille des cartes de caractĂ©ristiques pour concentrer l'information spatiale ;

  • afin de classifier les images, 3 couches denses (fully connected, en bleu) sont appliquĂ©es en sortie des couches convolutionnelles. La dernière fonction d'activation est une "softmax" (en marron) qui permet d'estimer des probabilitĂ©s a posteriori.

Exemple de modèle profond pour la reconnaissance d'écriture

Un autre exemple d'application est la reconnaissance d'écriture. Dans l'article en anglais "Are Multidimensional Recurrent Layers Really Necessary for Handwritten Text Recognition?" [3], les auteurs proposent un modèle assez classique pour cette tâche, présenté ci-dessous.

Modèle proposé dans [2] pour la reconnaissance d'écriture manuscrite.
Modèle proposé dans [3] pour la reconnaissance d'écriture manuscrite. 

Le modèle comporte quatre parties :

  • l'image d'entrĂ©e (Input image) est soumise Ă  des blocs convolutifs avec batch normalization, activation leaky ReLU et max pooling (Convolution + BatchNorm + leaky ReLU + Max Pool) ;

  • les sorties du bloc prĂ©cĂ©dent sont ensuite concatĂ©nĂ©es par colonne (Columnwise concat) ;

  • puis soumises Ă  des blocs rĂ©currents (BLSTM + depth concat) ;

  • la dernière couche du modèle est naturellement une couche dense (appelĂ©e linear sur le schĂ©ma) associĂ©e Ă  une fonction d'activation softmax pour rĂ©aliser la classification en caractères des sĂ©quences d'entrĂ©e.

L'architecture proposée n'est pas très éloignée du modèle précédent pour la classification d'images. Le modèle est également composé de couches convolutionnelles alternées avec des couches de max pooling sur les couches basses, destinées à extraire des caractéristiques. 

La réelle différence avec le modèle VGG est la présence d'une couche BLSTM destinée à traiter l'aspect séquentiel de l'écriture manuscrite.

Exemple de modèle profond pour la génération de légende

Le dernier modèle présenté est le plus complexe. Il est destiné à réaliser la tâche suivante :

"étant donné une image, on cherche à générer une légende décrivant la scène".

L'architecture proposée sur le schéma suivant est composée de plusieurs modules :

1) image d'entrée, 2) extraction de caractéristiques convolutionnelles, 3) réseau récurrent avec modèle d'attention sur l'image, et 4) génération mot par mot.

architecture proposée dans [4] pour la génération de légende
Architecture proposée dans l'article de Xu et al. (référence [4] ci-dessous) pour la génération de légende.
  • le premier module est un module caractĂ©risant l'image. Il est naturellement composĂ© de couches convolutionnelles et de pooling, comme dans les autres modèles prĂ©sentĂ©s ci-dessus ;

  • le dernier module est un module permettant de gĂ©nĂ©rer la description textuelle de l'image. Il s'agit d'un rĂ©seau de neurones rĂ©current de type LSTM, utilisĂ© en mode gĂ©nĂ©ratif. Il gĂ©nère itĂ©rativement chaque nouveau mot Ă  ajouter Ă  la lĂ©gende. Ce rĂ©seau rĂ©alise donc une tâche de classification parmi tous les mots de la langue, anglaise en l'occurrence. Un mot "fin de lĂ©gende" est ajoutĂ© Ă  cette liste pour dĂ©cider quand la lĂ©gende est terminĂ©e ; 

  • le troisième module permet de "relier" les deux autres modules : il s'agit d'un modèle d'attention.  Il permet de prĂ©senter au modèle gĂ©nĂ©ratif la meilleure partie de l'image, en fonction du contexte, pour chaque nouveau mot. Par exemple, le modèle d'attention va se porter sur les ailes d'un oiseau au moment de sortir le mot "flying" (voler). L'implĂ©mentation du modèle d'attention est rĂ©alisĂ©e par un modèle rĂ©current, gĂ©nĂ©ralement de type LSTM. Nous renvoyons Ă  l'article en anglais "Show, attend and tell: Neural image caption generation with visual attention" [4] pour une description plus dĂ©taillĂ©e du modèle d'attention.

Concernant l'apprentissage du modèle, il est réalisé en plusieurs étapes. Le modèle convolutionnel est un modèle préappris sur la base ImageNet, et le modèle génératif est également préappris sur une très grosse base de texte telle que Wikipedia. L'apprentissage du système complet, y compris le modèle d'attention, est finalisé sur une base de couples (image, légende) annotés.

Allez plus loin

[1] Kim, Y. (2014). Convolutional neural networks for sentence classification. arXiv preprint arXiv:1408.5882.

[2] Simonyan, K., & Zisserman, A. (2014). Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556.

[3] Joan Puigcerver: Are Multidimensional Recurrent Layers Really Necessary for Handwritten Text Recognition? ICDAR 2017: 67-72

[4] Xu, K., Ba, J., Kiros, R., Cho, K., Courville, A., Salakhudinov, R., ... & Bengio, Y. (2015, June). Show, attend and tell: Neural image caption generation with visual attention. In International conference on machine learning (pp. 2048-2057).

En résumé

Dans ce chapitre, nous avons synthétisé le rôle de chaque type de couche. Nous avons montré qu'une architecture adaptée pouvait être mise en place pour traiter des problèmes variés. Il suffit pour cela :

  • d'empiler les couches adĂ©quates ;

  • d’entraĂ®ner le modèle ainsi construit par la rĂ©tropropagation du gradient.

Nous avons ensuite présenté trois modèles classiques pour la reconnaissance d'image, la reconnaissance d'écriture manuscrite et la génération de légende à partir d'une image.

Vous êtes arrivé à la fin de ce cours, félicitations ! Vous avez à présent tous les éléments en main pour :

  • expliquer les principes de base des rĂ©seaux de neurones artificiels ;

  • mettre en place un modèle de Deep Learning ;

  • adapter les paramètres d'un modèle de Deep Learning afin de l'amĂ©liorer.

N'oubliez pas de réaliser les exercices qui se trouvent à la fin de chaque partie pour valider ces compétences. À vous de jouer, maintenant !

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best