Long Short-Term Memory (LSTM)
Un LSTM est un réseau récurrent dont l’état de cellule à portes transporte des informations sur de longues séquences. Présentation de ses portes, de ses équations, comparaison avec le GRU et code.
La mémoire à long et court terme (LSTM) est une architecture de réseau neuronal récurrent (RNN) qui ajoute une mémoire à portes, l’état de cellule, à l’état caché d’un RNN simple. Elle peut ainsi conserver des informations pendant des centaines ou des milliers de pas de temps. Sepp Hochreiter et Jürgen Schmidhuber l’ont introduite en 1997 pour résoudre le problème du gradient évanescent, qui empêche les RNN simples d’apprendre les dépendances à longue portée ; leur article indiquait qu’elle permettait de franchir des délais de plus de 1 000 pas. Dans les années 2010, les LSTM ont alimenté la reconnaissance vocale, la traduction automatique et la reconnaissance de l’écriture manuscrite, jusqu’à ce que les transformeurs prennent le relais pour la plupart des tâches linguistiques. Les LSTM restent courantes pour l’analyse de séries temporelles, les flux de capteurs et les modèles exécutés sur l’appareil, où un état de taille constante et un coût constant par pas sont importants.
Fonctionnement d’une cellule LSTM#
À chaque pas de temps t, une LSTM lit l’entrée xₜ et l’état caché précédent hₜ₋₁, puis calcule trois portes et un candidat, chacun avec ses propres poids. Les portes utilisent la fonction sigmoïde, de sorte que chaque élément se situe entre 0 et 1 ; le candidat utilise tanh, de sorte qu’il se situe entre −1 et 1 :
- Porte d’oubli : fₜ = σ(W_f xₜ + U_f hₜ₋₁ + b_f) détermine quelle part de chaque élément de l’ancien état de cellule doit être conservée.
- Porte d’entrée : iₜ = σ(W_i xₜ + U_i hₜ₋₁ + b_i) détermine quelle part du candidat doit être écrite.
- Candidat : gₜ = tanh(W_g xₜ + U_g hₜ₋₁ + b_g) propose un nouveau contenu.
- Porte de sortie : oₜ = σ(W_o xₜ + U_o hₜ₋₁ + b_o) détermine quelle part de la cellule doit être exposée.
Les deux états sont ensuite mis à jour ainsi : cₜ = fₜ ⊙ cₜ₋₁ + iₜ ⊙ gₜ et hₜ = oₜ ⊙ tanh(cₜ), où ⊙ désigne une multiplication élément par élément. L’état de cellule constitue la mémoire à long terme, et l’état caché la sortie à court terme qui alimente la couche suivante et le pas suivant.
La mise à jour de la cellule est additive. Le gradient de cₜ par rapport à cₜ₋₁ vaut fₜ, élément par élément ; lorsque la porte d’oubli reste proche de 1, le signal d’erreur est rétropropagé à travers de nombreux pas presque sans changement, selon le mécanisme que l’article original appelait « carrousel d’erreur constante ». La LSTM de 1997 n’avait pas de porte d’oubli et ses cellules ne pouvaient qu’accumuler. En 2000, Felix Gers, Schmidhuber et Fred Cummins ont ajouté cette porte pour permettre la réinitialisation des cellules ; toutes les LSTM standard en ont une aujourd’hui. L’initialisation du biais de la porte d’oubli à 1, recommandée par Rafal Jozefowicz et ses collègues en 2015, maintient la porte ouverte au début de l’entraînement, de sorte que le réseau commence par mémoriser.
LSTM dans PyTorch#
Le nn.LSTM de PyTorch exécute la cellule sur une séquence entière et renvoie l’état caché à chaque pas, ainsi que les états caché et de cellule finaux. L’extrait ci-dessous classe de courts clips vidéo à partir de vecteurs de caractéristiques par image, tels que ceux qu’un réseau neuronal convolutif (CNN) extrait de chaque image :
import torch
from torch import nn
# 8 video clips, 16 frames each, 512 features per frame: (batch, time, features)
clips = torch.randn(8, 16, 512)
# One LSTM layer with a 128-dim hidden state, and a classifier over 5 actions
lstm = nn.LSTM(input_size=512, hidden_size=128, batch_first=True)
classifier = nn.Linear(128, 5)
# output holds h at every step; h_n and c_n are the final hidden and cell states
output, (h_n, c_n) = lstm(clips)
logits = classifier(h_n[-1])
print(f"output {tuple(output.shape)}, h_n {tuple(h_n.shape)}, c_n {tuple(c_n.shape)}, logits {tuple(logits.shape)}")
# Each weight matrix stacks four blocks of 128 rows: input gate, forget gate, candidate, output gate
print(f"Input weights {tuple(lstm.weight_ih_l0.shape)}, recurrent weights {tuple(lstm.weight_hh_l0.shape)}")Il affiche output (8, 16, 128), h_n (1, 8, 128), c_n (1, 8, 128), logits (8, 5) et Input weights (512, 512), recurrent weights (512, 128). L’état caché final résume chaque clip de 16 images pour le classificateur à cinq classes, et chaque matrice de poids comporte 4 × 128 = 512 lignes, car PyTorch stocke les quatre blocs de portes dans une seule matrice.
LSTM et architectures apparentées#
- RNN simple : Réécrit tout son état à chaque pas au moyen d’une seule couche tanh ; les gradients diminuent ou augmentent donc de façon géométrique avec la longueur de la séquence, ce qui rend difficile l’apprentissage des dépendances à longue portée.
- GRU : Fusionne les états de cellule et caché et utilise deux portes au lieu de trois, soit trois blocs de poids au lieu de quatre et les trois quarts des paramètres d’une LSTM de même largeur. Aucune des deux architectures ne l’emporte systématiquement selon les tâches.
- Transformer : Traite toutes les positions en parallèle avec l’auto-attention, ce qui accélère considérablement l’entraînement sur GPU et permet d’accéder directement à un contexte distant ; les transformers ont ainsi remplacé les LSTM en modélisation du langage et en traduction. Le coût de l’attention augmente avec la longueur du contexte, tandis qu’une LSTM consomme la même quantité de calcul et de mémoire à chaque nouveau pas.
- xLSTM : Issue du groupe de Hochreiter en 2024, xLSTM ajoute des portes exponentielles et une mémoire matricielle qui permet un entraînement parallèle. Son modèle de langage de 7 milliards de paramètres, xLSTM 7B, a été présenté à ICML 2025 ; ses performances sont comparables à celles de transformers de taille similaire, avec une inférence plus rapide.
Applications#
- Reconnaissance vocale : En 2015, Google a adopté des modèles acoustiques LSTM entraînés par classification temporelle connexionniste (CTC) pour la recherche vocale, et les systèmes de reconnaissance intégrés aux appareils se sont longtemps appuyés sur des LSTM empilées.
- Traduction automatique : Lancé en 2016, Google Neural Machine Translation empilait huit couches LSTM dans son encodeur et huit dans son décodeur.
- Prévision des crues : Le système de prévision des crues de Google, décrit dans Nature en 2024, utilise des réseaux LSTM pour prédire le débit des cours d’eau à partir de données météorologiques et prévoit les crues extrêmes jusqu’à cinq jours à l’avance dans des bassins versants non jaugés.
- Reconnaissance d’actions : Un CNN encode chaque image vidéo et une LSTM lit la séquence de caractéristiques des images pour classer le clip ; c’est l’architecture utilisée dans l’extrait ci-dessus.
- Prédiction de trajectoire : Social LSTM exécute une LSTM par piéton et agrège les états cachés des personnes à proximité pour prévoir les trajectoires dans les foules. En mode suivi, YOLO26 attribue à chaque personne un identifiant persistant d’une image vidéo à l’autre, transformant les détections par image en historiques de positions exploités par ce type de système de prévision.










