NLP & fastai | LSTM & GRU

Pierre Guillou
6 min readNov 19, 2019

--

Ce post concerne les vidéos 11 et 15 du cours fastai de Rachel Thomas sur NLP (A code-first introduction to NLP). Son objectif est d’expliquer les concepts clés des modèles LSTM et GRU en NLP (qui sont des modèles particuliers de RNN) présentés dans les slides RNNs.pptx, dans ces vidéos et leurs notebooks associés: 6-rnn-english-numbers.ipynb (NLP, 2019) et 6-rnn-english-numbers-GRU.ipynb (NLP, 2019).

Autres posts de la série NLP & fastai: Topic Modeling | Sentiment Classification | Language Model | Transfer Learning | ULMFiT | MultiFiT | French Language Model | Portuguese Language Model | RNN | SentencePiece | Sequence-to-Sequence Model (seq2seq) | Attention Mechanism | Transformer Model | GPT-2

Remerciements

De nombreuses images et explications utilisées dans ce post proviennent de 3 blog posts. Merci à eux! (liste des liens dans le paragraphe “Autres ressources sur GRU & LSTM”)

Motivation

Nous fonctionnons ainsi: quand nous lisons un texte, nous sélectionnons automatiquement les mots et expressions qui nous semblent plus importants que les autres. Nous portons alors notre attention sur ces parties du texte que nous mémorisons plus ou moins longtemps ensuite.

Ce procédé nous permet de garder en mémoire le contexte qui nous sera bien utile au moment de comprendre par exemple à qui ou quoi se rapporte un pronom plusieurs lignes plus loin après la présentation de la personne ou de l’objet, ou aussi pour inférer un mot comme dans cet exemple: “J’ai été élevé en France”(début du texte), “Je parle le français” (phrase plusieurs lignes plus loin).

Attention portée sur des parties d’un texte (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

Pour qu’un modèle IA réussisse à garder en mémoire les points clés du texte déjà vu, il lui faut générer un vecteur d’état caché avec en plus un mécanisme d’attention. C’est ce que font les RNNs. Cependant, dès que la séquence en entrée d’un RNN augmente son nombre de tokens (ie, long texte), les RNNs échouent à se souvenir.

Le problème: les RNNs souffrent de mémoire à court terme

Comme pour tous les Réseaux Neuronaux, la mise à jour des valeurs des paramètres d’un RNN se fait via l’algorithme d’apprentissage à partir du gradient de l’erreur appelé BackPropagation.

Comme toutes les couches d’un RNN sont identiques (il s’agit en fait d’un Fully Connnected Layer a BPTT couches, avec BPTT — BackPropagation Through Time — qui le nombre de tokens de la séquence dont le modèle a gardé la mémoire), chaque paramètre d’un RNN est mis à jour BPTT fois lors de la backpropagation du gradient de l’erreur, cad qu’il est multiplié BPTT fois par un nombre inférieur à un comme le Learning Rate et le gradient de l’erreur. Il finit par conséquent par converger vers zéro: il y a alors perte de gradient et il n’est plus possible de mettre à jour les paramètres du RNN (The Vanishing Gradient Problem).

Dans ce cas, le modèle n’apprend plus. Pour solutionner ce problème, il faut soit diminuer le BPTT (ce qui est dommage), soit utiliser des architectures de RNN un peu plus complexes comme LSTM (Long Short Term Memory) ou GRU (Gated Recurrent Units) dont l’architecture permet de garder à chaque cellule une partie du vecteur d’état précédent (et donc du vecteur d’état initial).

LSTM (Long Short Term Memory)

LSTM (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

Les réseaux neuronaux LSTM sont des RNNs qui permettent de limiter le Vanishing Gradient problem par un ensemble de 3 portes (gates).

Point clé: “cell state”

La ligne horizontale dans le schéma correspond à la propagation quasi à l’identique du vecteur d’état de celulle (cell state), ce qui assure la propagation de l’information initiale.

Que signifie “portes”?

Chaque “porte” correspond à un petit réseau neuronal avec sigmoïde comme fonction d’activation dont le but est de ramener les valeurs des vecteurs en entrée de la porte entre 0 et 1, puis en multipliant élément par élément (element wise) ces valeurs inférieures à 1 avec un autre vecteur, il s’agit de définir les valeurs de cet autre vecteur que l’on souhaite “laisser passer à travers la porte” et inversement les valeurs que l’on souhaite lifter (pour continuer à filer la métaphore, il s’agit en fait d’ouvrir plus ou moins la porte de manière personnalisée à chaque information/valeur d’un vecteur).

Les 3 portes d’un LSTM

  1. forget gate layer: cette première porte apprend ce qu’elle doit oublier du vecteur d’état de cellule (cell state) en multipliant ce vecteur élément par élément par un vecteur de valeurs entre 0 et 1 obtenu suivant la fonction ft suivante (transformation via un réseau neuronal linéaire à 1 couche avec fonction d’activation sigmoïd du vecteur obtenu par concaténation entre le vecteur d’état caché et le nouveau vecteur d’entrée).
“forget gate layer” du LSTM (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

2. input gate layer: à présent que le LSTM a éléminé ce qu’il ne souhaitait pas se souvenir, il doit décider de ce qu’il veut garder, cad ajouter au vecteur d’état de cellule. Le schéma suivant explicite comment calculer ce qui doit lui être ajouté.

“input gate layer” du LSTM (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)
Mise à jour du vecteur d’état de cellule du LSTM (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

3. output gate: il s’agit alors de calculer la sortie du LSTM (le nouveau vecteur d’état caché), ce qui revient en fait à sélectionner via une multiplication élément à élément une partie du vecteur d’état de cellule comme illustré ci-après.

“output gate” du LSTM (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

Variantes

Il existe plusieurs variantes d’un LSTM (lire le paragraphe: “Variants on Long Short Term Memory”).

GRU (Gated Recurrent Units)

GRU (source: Illustrated Guide to LSTM’s and GRU’s: A step by step explanation)

Les GRUs sont similaires aux LSTM mais ils n’ont pas de vecteur d’état de cellule et ils ont seulement deux portes (gates), une porte de réinitialisation r (reset gate) et une porte de mise à jour z (update gate):

  • la porte de réinitialisation r détermine la quantité d’information à oublier,
  • la porte de mise à jour z définit la quantité d’information à conserver (elle fonctionne comme la porte forget et input d’un LSTM).

Le vecteur d’état caché calculé va s’écrire sous la forme (1-z)*h +z*h(t-1) avec les éléments du vecteur z appris e de valeurs entre 0 et 1 (h(t-1) est le vecteur d’état caché précédent et h, le vecteur d’état caché calculé). Il s’agit d’une weighted average.

LSTM ou GRU?

Il n’y a pas de réponse unique. Il faut tester les 2 modèles.

Les LSTM et GRU sont utilisés dans les applications de Deep Learning les plus récentes, telles que la reconnaissance de la parole, la synthèse de la parole, la compréhension du langage naturel, etc.

Autres ressources sur GRU & LSTM

À propos de l’auteur: Pierre Guillou est consultant en Intelligence Artificielle au Brésil et en France. Merci de le contacter via son profil Linkedin.

--

--