• 8 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 25/05/2021

Découvrez le fonctionnement des réseaux de neurones récurrents

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 :

$\(y_j^t = f(\sum_i W_{ji} x_i^t)\)$  

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  $\(t\)$ 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 réseau récurrent parcourt le signal de gauche à droite à l'aide d'une fenêtre glissante. Il décide du caractère à reconnaitre en se basant sur le contenu de la fenêtre et de sa décision sur la fenêtre précédente.
Le réseau récurrent parcourt le signal de gauche à droite à l'aide d'une fenêtre glissante. Il décide du caractère à reconnaître, en se basant sur le contenu de la fenêtre et sur sa décision sur la fenêtre précédente.

Le schéma suivant montre le détail d'une couche récurrente. Les  $\(x_i^t\)$  et les $\(y_j^t\)$ désignent respectivement les entrées et les sorties de la couche à l'instant  $\(t\)$

Exemple d'un RNN simple. Les connexions récurrentes sont notées en rouge.
Exemple d'une couche RNN simple à trois entrée et deux sorties. Les connexions récurrentes sont notées en rouge.

Remarquons la présence de poids  $\(w_{ji}\)$ reliant les entrées à la sortie (comme pour un MLP classique), et la présence de poids  $\(r_{jj'}\)$ 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 :

$\(y_j^{t} = f(\sum_i W_{ji} x_i^{t} + \sum_{j'} r_{ii'} y_i^{t-1})\)$

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  $\(w_{ji}\)$ sont les poids reliant la $\(i\)$ ème entrée au $\(j\)$ ème neurone de la couche récurrente, et les  $\(r_{jj'}\)$ sont les poids de la récurrence, reliant la sortie du  $\(j'\)$ ème neurone récurrent à l'entrée du  $\(j\)$ ème neurone récurrent ;

  • une matrice de poids  $\(v_{kj}\)$ pour la couche dense, reliant le  $\(j\)$ ème neurone de la couche récurrente au  $\(k\)$ ème neurone de la couche de sortie.

Réseau de neurone avec une couche de neurones récurrente et une couche dense. Le réseau comprend donc trois matrice de poids : w, r et v.
Réseau de neurones avec une couche récurrente et une couche dense. Les entrées sont indicées \(i\), les neurones récurrents sont indicés \(j\) et les sorties sont indicées \(k\).

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  $\(W\)$ complète. La figure suivante représente ainsi un réseau classique, avec une couche récurrente suivie d'une couche dense classique :

RNN avec une couche récurrente et une couche dense
Représentation simplifiée d'un RNN simple, avec une couche récurrente et une couche dense.

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é :

RNN : version récurrente et version simplifiée
RNN : version récurrente et version dépliée

 Cette version dépliée dans le temps fait désormais apparaître clairement les variables d'entrée au cours du temps :  $\(x_{t-1}\)$ ,  $\(x_t\)$ ,  $\(x_{t+1}\)$, 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  $\(t\)$, comme sur la figure suivante :

Étiquetage de séquence : le modèle produit une sortie à chaque pas de temps.
Étiquetage de séquence : le modèle produit une sortie à chaque pas de temps.

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  $\(T\)$ 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 :

Classification de séquences : le réseau
Classification de séquences : le réseau "lit" la séquence dans son intégralité, et produit sa sortie au dernier pas de temps.

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  $\(y\)$ lors de la lecture du dernier élément de la séquence d'entrée en  $\(x^T\)$ est le prochain élément de la séquence  $\(x^{T+1}\)$. 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.

Exemple de certificat de réussite
Exemple de certificat de réussite