Dans ce chapitre, nous allons découvrir comment donner une faculté de mémoire aux réseaux de neurones, grâce aux réseaux récurrents. Ensuite nous allons comprendre l'approximation dépliée d'un réseau de neurones récurrent. Finalement, nous allons apprendre à distinguer un problème d'étiquetage de séquences d'un problème de classification de séquences.
Les réseaux de neurones récurrents
Les réseaux de neurones récurrents (ou RNN pour Recurrent Neural Networks) sont une catégorie de réseaux de neurones dédiée au traitement de séquences, c'est-à-dire aux signaux de taille variable.
Si l'on reprend l'équation de sortie d'une couche de neurones "classique", les notations pour le calcul de la sortie d'une couche deviennent :
Les réseaux de neurones récurrents reposent sur deux principes :
le premier principe est l'astuce de la fenêtre glissante vue dans le chapitre précédent, qui permet de traiter des signaux de taille variable ;
le second principe est l'utilisation de connexions récurrentes qui permettent d'analyser la partie passée du signal.
Des connexions récurrentes permettent au réseau de neurones à un instant de "voir" la fenêtre correspondante à cet instant, mais aussi de se "souvenir" de sa décision à un instant précédent (voir figure suivante).
Si l'on reprend l'exemple de la reconnaissance d'écriture, le réseau reconnaît désormais des caractères en se "souvenant" du caractère reconnu à l'instant précédent :
Le schéma suivant montre le détail d'une couche récurrente. Les et les désignent respectivement les entrées et les sorties de la couche à l'instant .
Remarquons la présence de poids reliant les entrées à la sortie (comme pour un MLP classique), et la présence de poids entre la sortie et l'entrée de la couche, qui sont les fameuses connexions récurrentes (en rouge).
Le calcul de la sortie d'une couche de neurones peut donc se faire par l'équation :
où le deuxième terme modélise la récurrence du réseau.
Utilisation combinée avec une couche dense
On combine généralement des couches récurrentes avec des couches classiques, telles que des couches denses ou des couches de convolution. La figure suivante montre un réseau à une couche récurrente de deux neurones, suivie d'une couche dense de 4 neurones. Le réseau comprend donc trois matrices de poids :
deux matrices de poids pour la couche récurrente : les sont les poids reliant la ème entrée au ème neurone de la couche récurrente, et les sont les poids de la récurrence, reliant la sortie du ème neurone récurrent à l'entrée du ème neurone récurrent ;
une matrice de poids pour la couche dense, reliant le ème neurone de la couche récurrente au ème neurone de la couche de sortie.
Comme les réseaux de neurones récurrents possèdent de nombreuses connexions, on utilise souvent des représentations simplifiées où une seule flèche représente une matrice de poids complète. La figure suivante représente ainsi un réseau classique, avec une couche récurrente suivie d'une couche dense classique :
Dépliement d'un réseau de neurones récurrent
Qu'elle soit détaillée ou simplifiée, la représentation d'un réseau récurrent n'est pas aisée, car il est difficile de faire apparaître la dimension temporelle sur le schéma. C'est notamment le cas pour les connexions récurrentes, qui utilisent l'information du temps précédent.
Pour solutionner ce problème, on utilise souvent une représentation du réseau "déplié dans le temps", afin de faire apparaître explicitement celui-ci. La figure suivante montre un exemple de réseau déplié :
Cette version dépliée dans le temps fait désormais apparaître clairement les variables d'entrée au cours du temps : , , , etc. (idem pour la sortie), et l'impact des sorties précédentes sur la sortie courante du réseau.
Étiquetage de séquences, classification de séquences ou génération de séquences ?
En faisant explicitement apparaître la dimension temporelle, la version dépliée suggère trois utilisations possibles d'un réseau récurrent : étiquetage de séquences, classification de séquences ou génération de séquences.
Étiquetage de séquences (sequence labeling, en anglais)
Dans ce mode de fonctionnement, on demande au réseau de se prononcer à chaque pas de temps , comme sur la figure suivante :
Ce type de modèle est adapté aux problèmes où l'on souhaite produire une séquence de sortie qui a la même taille que la séquence d'entrée. Dans le cas où la séquence de sortie est plus petite que la séquence d'entrée, une classe de type "blank" peut parfois permettre d'utiliser ce type de modèle, comme vu avec l'exemple de la reconnaissance d'écriture.
De nombreux problèmes d'analyse et de reconnaissance de séquences rentrent dans cette catégorie.
Classification de séquence (sequence classification, en anglais)
Dans ce second mode de fonctionnement, le réseau parcourt la séquence d'entrée de taille selon le sens de lecture, et ne produit une sortie qu'une fois la séquence d'entrée terminée, comme illustré sur la figure suivante :
Dans ce cas, la sortie n'est pas une séquence, mais seulement une étiquette. Cette approche fonctionne aussi en régression ; dans ce cas, la sortie est une valeur ou un vecteur de valeurs.
Dans le domaine de l'analyse de sentiments, un exemple de tâche de type classification de séquences est la classification automatique de textes comme "positifs", "négatifs" ou "neutres", très utilisée sur les avis de sites marchands ou sur les réseaux sociaux :
"Ce séjour était merveilleux" -> positif ;
"Nous avons passé une nuit terrible, notre voisin a ronflé toute la nuit" -> négatif.
Génération de séquences (ou prédiction)
Ce dernier mode de fonctionnement est une variante de la classification de séquence. Il consiste à appliquer exactement la même approche, mais la sortie à calculer lors de la lecture du dernier élément de la séquence d'entrée en est le prochain élément de la séquence . Cette approche fonctionne également en régression.
En Résumé
Dans ce chapitre, nous avons vu que les réseaux de neurones récurrents permettent de traiter des séquences de taille variable, tout en modélisant les dépendances au sein de la séquence d'entrée.
Nous avons montré qu'un réseau récurrent peut être approximé par un réseau non récurrent déplié dans le temps.
Pour finir, nous avons décrit les trois différents types de problème pouvant être traités par des RNN : l'étiquetage de séquence, la classification de séquence et la génération de séquence.