Long Short-Term Memory (LSTM)

LSTM (Long Short-Term Memory)

Comprendre comment fonctionnent les réseaux LSTM, où les appliquer et comment les concevoir

Un réseau Long Short-Term Memory (LSTM) est un type de réseau de neurones récurrents (RNN). Les LSTM sont principalement utilisés pour l’apprentissage, le traitement et la classification de données séquentielles, puisqu’ils sont capables d’apprendre les dépendances à long terme entre les pas de temps des données.

Fonctionnement des LSTM

Réseaux LSTM et RNN

Les réseaux LSTM sont une forme spécifique de l’architecture RNN. Les RNN se servent d’informations passées afin d’améliorer les performances d’un réseau de neurones pour les entrées actuelles et futures. Ils contiennent un état caché et des boucles, qui permettent au réseau de stocker des informations passées dans l’état caché et de fonctionner de manière séquentielle. Les RNN ont deux ensembles de poids : un pour le vecteur d’état caché et l’autre pour les entrées. Lors de l’apprentissage, le réseau apprend les poids pour les entrées et pour l’état caché. Lorsque le réseau est implémenté, la sortie se base sur l’entrée actuelle ainsi que sur l’état caché, qui est lui-même basé sur les entrées passées.

En pratique, la capacité d’apprentissage des RNN simples est limitée pour les dépendances à plus long terme. Les RNN sont généralement entraînés par rétropropagation. Avec cette méthode, ils peuvent être confrontés à des problèmes de disparition ou d’explosion du gradient. Ces problèmes rendent les poids du réseau très faibles ou très élevés, ce qui limite son efficacité pour des applications qui nécessitent que le réseau apprenne des relations à long-terme.

Le RNN utilise un état caché sur l’entrée, qui est également utilisé comme entrée supplémentaire pour le RNN au pas de temps suivant.

Flux de données au pas de temps t pour un RNN traditionnel.

Architecture des couches des LSTM

Les couches des LSTM utilisent des portes supplémentaires afin de contrôler quelles informations de l’état caché sont exportées en tant que sortie puis vers le prochain état caché. Ces portes supplémentaires permettent de surmonter le problème courant d’apprentissage des dépendances à long terme des RNN. En plus de l’état caché présent dans les RNN traditionnels, l’architecture d’un bloc LSTM comprend généralement une cellule mémoire, une porte d’entrée, une porte de sortie et une porte d’oubli. Les portes supplémentaires permettent au réseau d’apprendre de manière plus efficace les relations à long terme entre les données. Bénéficiant d’une plus faible sensibilité à l’écart temporel, les réseaux LSTM sont plus à même d’analyser les données séquentielles que les RNN simples. Dans la figure ci-dessous, vous pouvez voir l’architecture LSTM et le flux de données à un pas de temps t.

Un réseau LSTM utilise des unités supplémentaires, comme la porte d’oubli et la cellule mémoire, qui lui permettent d’éviter de rencontrer des problèmes de disparition ou d’explosion du gradient.

Flux de données à un pas de temps t pour une unité LSTM. La porte d’oubli et la cellule mémoire évitent les problèmes de disparition et d’explosion du gradient.

Les poids et les biais de la porte d’entrée contrôlent dans quelle mesure une nouvelle valeur circule au sein de l’unité LSTM. De la même façon, les poids et les biais de la porte d’oubli et de la porte de sortie contrôlent, respectivement, la mesure dans laquelle une valeur reste dans l’unité et la mesure dans laquelle la valeur de l’unité est utilisée pour calculer l’activation de la sortie du bloc LSTM.

Le diagramme illustre le flux de données à travers une couche LSTM avec plusieurs pas de temps. Le nombre de canaux dans la sortie correspond au nombre d’unités cachées dans la couche LSTM.

Diagramme montrant comment l’information se propage à travers les nombreuses étapes d’une couche LSTM.

Flux de données pour un LSTM avec plusieurs pas de temps. Chaque opération du LSTM reçoit un état caché et un état de cellule provenant de l’opération précédente, puis transmet les versions mises à jour de ces états à l’opération suivante.

Architecture du réseau LSTM

Les LSTM sont bien adaptés aux données séquentielles et aux données de séries temporelles pour les tâches de classification et de régression. Les LSTM sont également efficaces sur les vidéos, ces dernières étant fondamentalement constituées d’une séquence d’images. Tout comme le travail avec des signaux, il est utile d’effectuer une extraction de caractéristiques avant d’alimenter la couche LSTM avec la séquence d’images. Utilisez les réseaux de neurones à convolution (CNN) (par exemple GoogLeNet), pour l’extraction des caractéristiques de chaque image. La figure suivante montre comment concevoir un réseau LSTM pour différentes tâches.

Diagramme de l’architecture d’un réseau LSTM avec des couches utilisées pour construire un RNN pour différentes tâches.

Architecture du réseau LSTM pour des tâches de classification, de régression et de classification de vidéos.

LSTM bidirectionnel

Un LSTM bidirectionnel (BiLSTM) apprend les dépendances bidirectionnelles entre les pas de temps des données de séries temporelles ou de séquences. Ces dépendances peuvent être utiles lorsque vous souhaitez que le réseau apprenne à partir de données de séries temporelles complètes à chaque pas de temps. Les réseaux BiLSTM permettent un apprentissage supplémentaire, puisque les données d’entrée passent par la couche LSTM à deux reprises, ce qui augmente les performances de votre réseau.

Un BiLSTM est constitué de deux composantes LSTM : le LSTM de type forward et le LSTM de type backward. Le LSTM forward fonctionne du premier pas de temps au dernier pas de temps. Le LSTM backward fonctionne du dernier pas de temps au premier pas de temps. Après avoir fait passer les données à travers les deux composantes LSTM, l’opération effectue une concaténation des sorties le long de la dimension du canal.

Diagramme montrant les opérations LSTM forward et backward dans un BiLSTM.

Architecture d’un BiLSTM avec plusieurs pas de temps.

Exemples de LSTM dans MATLAB

Applications des LSTM

Les LSTM sont particulièrement efficaces pour le travail avec des données séquentielles, qui peuvent varier en longueur, et pour l’apprentissage de dépendances à long terme entre les pas de temps de ces données. Parmi les applications courantes des LSTM, on trouve l’analyse de sentiments, la modélisation de langage, la reconnaissance vocale et l’analyse vidéo.

Applications larges des LSTM

Les RNN forment une technologie essentielle dans les champs d’application suivants :

  • Traitement du signal. Les signaux sont des données naturellement séquentielles, puisqu’ils sont souvent collectés par des capteurs au cours du temps. La classification et la régression automatiques sur des jeux de données de signaux volumineux permettent une prédiction en temps réel. Les données de signaux brutes peuvent être utilisées pour alimenter des réseaux profonds ou peuvent être prétraitées afin de se concentrer sur des caractéristiques particulières, comme les composantes fréquentielles. L’extraction de caractéristiques peut grandement améliorer les performances d’un réseau.
  • Traitement du langage naturel (NLP). Le langage est naturellement séquentiel, et la longueur des morceaux de texte est variable. Les LSTM sont un excellent outil pour les tâches de traitement du langage naturel, comme la classification et la génération de texte, la traduction automatique et l’analyse de sentiments, puisqu’ils peuvent apprendre à contextualiser les mots dans une phrase.

Apprenez-en davantage avec les exemples suivants, pour commencer à appliquer les LSTM au traitement du signal et au traitement du langage naturel.

Applications verticales des LSTM

Alors que les applications du Deep Learning se développent toujours plus, les LSTM sont utilisés pour les applications verticales suivantes :

Utiliser des réseaux LSTM pour estimer les émissions de NOx

Les ingénieurs Renault ont utilisé des LSTM pour le développement d’une technologie nouvelle génération pour les véhicules zéro émission (ZEV).

Ils ont obtenu les données d’apprentissage de tests effectués sur un moteur réel. Pendant ces tests, le moteur a fonctionné sur des cycles de conduite courants. Les données capturées, qui comprenaient le couple moteur, la vitesse du moteur, la température du liquide de refroidissement et les émissions selon le rapport engagé, ont fourni les entrées au réseau LSTM. Après plusieurs itérations sur le design de l’architecture LSTM, la version finale du LSTM a atteint une précision de 85 à 90 % dans la prédiction des niveaux de NOX.

LSTM avec MATLAB

Avec MATLAB® et Deep Learning Toolbox™, vous pouvez concevoir, entraîner et déployer des LSTM. Avec Text Analytics Toolbox™ ou Signal Processing Toolbox™, vous pouvez appliquer les LSTM à l’analyse de texte ou de signaux.

Concevoir et entraîner des réseaux

Vous pouvez concevoir et entraîner des LSTM de manière programmatique, avec quelques lignes de code. Utilisez des couches LSTM, des couches LSTM bidirectionnelles et des couches LSTM projetées pour construire des LSTM. Vous pouvez également concevoir, analyser et modifier des LSTM de manière interactive avec l’application Deep Network Designer.

Capture d’écran d’un réseau BiLSTM simple, construit de manière interactive avec l’application Deep Network Designer.

Utiliser l’application Deep Network Designer pour construire, visualiser et modifier des réseaux LSTM de manière interactive.

Importer et exporter des réseaux

Vous pouvez échanger des réseaux LSTM avec des frameworks de Deep Learning basés sur Python® :

  • Importez des modèles PyTorch®, TensorFlow™ et ONNX™ avec une ligne de code.
  • Importez des modèles PyTorch et TensorFlow de manière interactive avec Deep Network Designer.
  • Exportez des réseaux LSTM vers TensorFlow et ONNX avec une ligne de code.
Diagramme montrant l’interopérabilité entre MATLAB, TensorFlow, ONNX et PyTorch pour des LSTM et d’autres réseaux de neurones profonds.

Convertir des réseaux LSTM entre MATLAB, TensorFlow, ONNX et PyTorch.

Déployer des réseaux

Déployez votre LSTM entraîné sur des systèmes embarqués, des systèmes d’entreprise ou dans le cloud :

  • Générez automatiquement du code C/C++ et CUDA optimisé pour le déploiement sur des CPU et GPU.
  • Générez du code Verilog® et VHDL® synthétisable pour le déploiement sur des FPGA et SoC.
Diagramme montrant la génération de code MATLAB et Simulink pour le déploiement de réseaux de neurones profonds sur des CPU, des GPU, des microcontrôleurs et des FPGA.

Déployer rapidement en production des réseaux de Deep Learning entraînés.