L'idée derrière le réseau neuronal récurrent (RNN) est claire pour moi. Je le comprends de la manière suivante:
nous avons une séquence d'observations ( ) (ou, en d'autres termes, des séries temporelles multivariées). Chaque observation est un vecteur numérique à dimensions. Dans le modèle RNN, nous supposons que la prochaine observation est fonction de l'observation précédente ainsi que du précédent "état caché" , où les états cachés sont également représentés par des nombres vecteurs (les dimensions des états observés et cachés peuvent être différentes). Les états cachés eux-mêmes sont également supposés dépendre de l'observation précédente et de l'état caché:
Enfin, dans le modèle RNN, la fonction est supposée être un réseau neuronal. Nous formons (ajustons) le réseau neuronal en utilisant les données disponibles (une séquence d'observations). Notre objectif dans la formation est de pouvoir prédire la prochaine observation aussi précisément que possible en utilisant les observations précédentes.
Maintenant, le réseau LSTM est une modification du réseau RNN. D'après ce que j'ai compris, la motivation derrière LSTM est de résoudre le problème de la mémoire courte qui est propre aux RNN (les RNN conventionnels ont des problèmes à relier des événements trop éloignés dans le temps).
Je comprends le fonctionnement des réseaux LSTM. Voici la meilleure explication de LSTM que j'ai trouvée. L'idée basique est la suivante:
En plus du vecteur d'état caché, nous introduisons un vecteur dit "d'état de cellule" qui a la même taille (dimensionnalité) que le vecteur d'état caché ( ). Je pense que le vecteur "état cellulaire" est introduit pour modéliser la mémoire à long terme. Comme dans le cas des RNN conventionnels, le réseau LSTM obtient l'état observé et caché en entrée. En utilisant cette entrée, nous calculons un nouvel "état de cellule" de la manière suivante:
où les fonctions de , et sont modélisées par des réseaux de neurones. Pour rendre l'expression plus simple, je supprime simplement les arguments:
Ainsi, nous pouvons voir que le nouveau "vecteur d'état de cellule" ( ) est une somme pondérée de l'ancien vecteur d'état ( ) et un vecteur d'état de cellule "intermédiaire" ( ). La multiplication entre les vecteurs est composante (nous multiplions deux vecteurs N dimensionnels et obtenons, par conséquent, un autre vecteur N dimensionnel). En d'autres termes, nous mélangeons deux vecteurs d'états de cellule (l'ancien et intermédiaire) en utilisant des poids spécifiques aux composants.
Voici l'intuition entre les opérations décrites. Le vecteur d'état de cellule peut être interprété comme un vecteur mémoire. Le deuxième vecteur de poids (calculé par un réseau de neurones) est une porte "garder" (ou oublier). Ses valeurs décident si nous gardons ou oublions (effaçons) une valeur correspondante du vecteur d'état de cellule (ou vecteur de mémoire à long terme). Le premier vecteur de poids ( ), qui est calculé par un autre réseau de neurones, est appelé porte "écrire" ou "mémoriser". Il décide si une nouvelle mémoire (le vecteur d'état de cellule "intermédiaire") doit être sauvegardée (ou plus précisément, si un composant particulier doit être sauvegardé / écrit). "Intermédiaire"vecteur). En fait, il serait plus juste de dire qu'avec les deux vecteurs de poids ( et ) nous "mélangeons" l'ancienne et la nouvelle mémoire.
Ainsi, après le mélange (ou l'oubli et la mémorisation) décrit ci-dessus, nous avons un nouveau vecteur d'état cellulaire. Ensuite, nous calculons un état caché "intermédiaire" en utilisant un autre réseau de neurones (comme précédemment, nous utilisons en état observé et l'état caché ). Enfin, nous combinons le nouvel état de cellule (mémoire) avec l'état caché "intermédiaire" ( ) pour obtenir le nouvel état caché (ou "final") que nous émettons réellement:
où est une fonction sigmoïde appliquée à chaque composante du vecteur d'état de cellule.
Donc, ma question est: pourquoi (ou comment exactement) cette architecture résout-elle le problème?
En particulier, je ne comprends pas ce qui suit:
- Nous utilisons un réseau de neurones pour générer une mémoire "intermédiaire" (vecteur d'état cellulaire) qui est mélangée à la "vieille" mémoire (ou état cellulaire) pour obtenir une "nouvelle" mémoire (état cellulaire). Les facteurs de pondération pour le mélange sont également calculés par les réseaux de neurones. Mais pourquoi ne pouvons-nous pas utiliser un seul réseau neuronal pour calculer le "nouvel" état cellulaire (ou mémoire). Ou, en d'autres termes, pourquoi ne pouvons-nous pas utiliser l'état observé, l'état caché et l'ancienne mémoire comme entrées dans un réseau neuronal qui calcule la "nouvelle" mémoire?
- En fin de compte, nous utilisons les états observés et masqués pour calculer un nouvel état masqué, puis nous utilisons le «nouvel» état de cellule (ou la mémoire (à long terme)) pour corriger la composante du nouvel état masqué calculé. En d'autres termes, les composants de l'état de cellule sont utilisés comme des poids qui réduisent simplement les composants correspondants de l'état caché calculé. Mais pourquoi le vecteur d'état cellulaire est-il utilisé de cette manière particulière? Pourquoi ne pouvons-nous pas calculer le nouvel état caché en mettant le vecteur d'état cellulaire (mémoire à long terme) à l'entrée d'un réseau neuronal (qui prend également les états observés et cachés comme entrée)?
Ajoutée:
Voici une vidéo qui pourrait aider à clarifier l'organisation des différentes portes ("garder", "écrire" et "lire").