Tout sur les réseaux de neurones récurrents

 

Réseaux de neurones récurrents

Les humains ne commencent pas leur réflexion à partir de zéro chaque seconde. En lisant cet essai, vous comprenez chaque mot en fonction de votre compréhension des mots précédents. Vous ne jetez pas tout et recommencez à penser à partir de zéro. Vos pensées sont persistantes.

Les réseaux de neurones traditionnels ne peuvent pas faire cela, et cela semble être une lacune majeure. Par exemple, imaginez que vous souhaitez classer le type d'événement qui se produit à chaque étape d'un film. On ne sait pas comment un réseau de neurones traditionnel pourrait utiliser son raisonnement sur les événements précédents du film pour informer les événements ultérieurs.

Les réseaux neuronaux récurrents résolvent ce problème. Ce sont des réseaux avec des boucles qui permettent aux informations de persister.

Les réseaux de neurones récurrents ont des boucles.

Dans le diagramme ci-dessus, un morceau de réseau neuronal, UNE, regarde une entrée xt et sort une valeur htUne boucle permet de transmettre des informations d'une étape du réseau à la suivante.

Ces boucles rendent les réseaux de neurones récurrents un peu mystérieux. Cependant, si vous réfléchissez un peu plus, il s'avère qu'ils ne sont pas si différents d'un réseau de neurones normal. Un réseau neuronal récurrent peut être considéré comme plusieurs copies du même réseau, chacune transmettant un message à un successeur. Considérez ce qui se passe si nous déroulons la boucle:

Un réseau neuronal récurrent déroulé.
Un réseau neuronal récurrent déroulé.

Cette nature en forme de chaîne révèle que les réseaux de neurones récurrents sont intimement liés aux séquences et aux listes. Il s'agit de l'architecture naturelle du réseau neuronal à utiliser pour de telles données.

Et ils sont certainement utilisés! Ces dernières années, il y a eu un succès incroyable en appliquant les RNN à une variété de problèmes: reconnaissance vocale, modélisation du langage, traduction, sous-titrage d'images… La liste est longue. Je vais laisser la discussion sur les exploits incroyables que l'on peut réaliser avec les RNN à l'excellent article de blog d'Andrej Karpathy, L'efficacité déraisonnable des réseaux de neurones récurrents . Mais ils sont vraiment incroyables.

L'essentiel de ces succès est l'utilisation de «LSTM», un type très spécial de réseau neuronal récurrent qui fonctionne, pour de nombreuses tâches, bien mieux que la version standard. Presque tous les résultats passionnants basés sur des réseaux de neurones récurrents sont obtenus avec eux. Ce sont ces LSTM que cet essai explorera.

Le problème des dépendances à long terme

L'un des attraits des RNN est l'idée qu'ils pourraient être en mesure de connecter des informations précédentes à la tâche actuelle, comme l'utilisation d'images vidéo précédentes pourrait informer la compréhension de l'image actuelle. Si les RNN pouvaient faire cela, ils seraient extrêmement utiles. Mais le peuvent-ils? Ça dépend.

Parfois, nous n'avons besoin que de regarder des informations récentes pour effectuer la tâche actuelle. Par exemple, considérons un modèle de langage essayant de prédire le mot suivant en fonction des précédents. Si nous essayons de prédire le dernier mot de «les nuages ​​sont dans le ciel », nous n'avons pas besoin de plus de contexte - il est assez évident que le prochain mot sera ciel. Dans de tels cas, où l'écart entre les informations pertinentes et l'endroit où elles sont nécessaires est faible, les RNN peuvent apprendre à utiliser les informations passées.

Mais il y a aussi des cas où nous avons besoin de plus de contexte. Pensez à essayer de prédire le dernier mot du texte «J'ai grandi en France… je parle couramment le français ». Des informations récentes suggèrent que le mot suivant est probablement le nom d'une langue, mais si nous voulons préciser quelle langue, nous avons besoin du contexte de la France, de plus en arrière. Il est tout à fait possible que l'écart entre les informations pertinentes et le point où elles sont nécessaires devienne très grand.

Malheureusement, à mesure que cet écart se creuse, les RNN deviennent incapables d'apprendre à connecter les informations.

Les réseaux de neurones sont aux prises avec des dépendances à long terme.

En théorie, les RNN sont absolument capables de gérer de telles «dépendances à long terme». Un humain pourrait choisir soigneusement des paramètres pour résoudre les problèmes de jouets de cette forme. Malheureusement, dans la pratique, les RNN ne semblent pas être en mesure de les apprendre. Le problème a été étudié en profondeur par Hochreiter (1991) [allemand] et Bengio, et al. (1994) , qui ont trouvé des raisons assez fondamentales pour lesquelles cela pourrait être difficile.

Heureusement, les LSTM n'ont pas ce problème!

Réseaux LSTM

Les réseaux de mémoire à long terme à court terme - généralement appelés simplement «LSTM» - sont un type spécial de RNN, capable d'apprendre les dépendances à long terme. Ils ont été introduits par Hochreiter & Schmidhuber (1997) , et ont été affinés et popularisés par de nombreuses personnes dans les travaux suivants. 1 Ils fonctionnent extrêmement bien sur une grande variété de problèmes et sont maintenant largement utilisés.

Les LSTM sont explicitement conçus pour éviter le problème de dépendance à long terme. Se souvenir des informations pendant de longues périodes est pratiquement leur comportement par défaut, pas quelque chose qu'ils ont du mal à apprendre!

Tous les réseaux de neurones récurrents ont la forme d'une chaîne de modules répétitifs de réseau de neurones. Dans les RNN standard, ce module répétitif aura une structure très simple, telle qu'une seule couche de tanh.

Le module répétitif dans un RNN standard contient une seule couche.

Les LSTM ont également cette structure en chaîne, mais le module répétitif a une structure différente. Au lieu d'avoir une seule couche de réseau neuronal, il y en a quatre, qui interagissent d'une manière très spéciale.

Un réseau de neurones LSTM.
Le module répétitif dans un LSTM contient quatre couches interactives.

Ne vous inquiétez pas des détails de ce qui se passe. Nous allons parcourir le diagramme LSTM étape par étape plus tard. Pour l'instant, essayons simplement de nous familiariser avec la notation que nous utiliserons.

Dans le diagramme ci-dessus, chaque ligne porte un vecteur entier, de la sortie d'un nœud aux entrées des autres. Les cercles roses représentent des opérations ponctuelles, comme l'ajout de vecteurs, tandis que les cases jaunes sont des couches de réseau neuronal appris. La fusion des lignes indique la concaténation, tandis qu'une fourchette de ligne indique que son contenu est copié et que les copies vont à des emplacements différents.

L'idée centrale derrière les LSTM

La clé des LSTM est l'état de la cellule, la ligne horizontale qui traverse le haut du diagramme.

L'état de la cellule est un peu comme une bande transporteuse. Il parcourt toute la chaîne, avec seulement quelques interactions linéaires mineures. Il est très facile pour les informations de circuler inchangées.

Le LSTM a la capacité de supprimer ou d'ajouter des informations à l'état de la cellule, soigneusement régulé par des structures appelées portes.

Les portes sont un moyen de laisser éventuellement passer des informations. Ils sont composés d'une couche de réseau neuronal sigmoïde et d'une opération de multiplication ponctuelle.

La couche sigmoïde produit des nombres entre zéro et un, décrivant la quantité de chaque composant à laisser passer. Une valeur de zéro signifie "ne rien laisser passer", tandis qu'une valeur de un signifie "tout laisser passer!"

Un LSTM a trois de ces portes, pour protéger et contrôler l'état de la cellule.

Présentation détaillée du LSTM

La première étape de notre LSTM est de décider quelles informations nous allons jeter de l'état de la cellule. Cette décision est prise par une couche sigmoïde appelée «couche de porte oublié». Il regardeht1 et xtet génère un nombre entre 0 et 1 pour chaque nombre dans l'état de la cellule Ct1UNE1 signifie «garder complètement ceci» tandis qu'un 0 signifie «se débarrasser complètement de cela».

Revenons à notre exemple de modèle de langage essayant de prédire le mot suivant à partir de tous les précédents. Dans un tel problème, l'état de la cellule pourrait inclure le sexe du sujet actuel, de sorte que les pronoms corrects puissent être utilisés. Quand nous voyons un nouveau sujet, nous voulons oublier le genre de l'ancien sujet.

L'étape suivante consiste à décider quelles nouvelles informations nous allons stocker dans l'état de la cellule. Cela comporte deux parties. Tout d'abord, une couche sigmoïde appelée «couche de porte d'entrée» décide des valeurs que nous mettrons à jour. Ensuite, une couche tanh crée un vecteur de nouvelles valeurs candidates,C~t, cela pourrait être ajouté à l'État. Dans l'étape suivante, nous combinerons ces deux éléments pour créer une mise à jour de l'état.

Dans l'exemple de notre modèle de langage, nous voudrions ajouter le sexe du nouveau sujet à l'état de la cellule, pour remplacer l'ancien que nous oublions.

Il est maintenant temps de mettre à jour l'ancien état de la cellule, Ct1, dans le nouvel état de cellule CtLes étapes précédentes ont déjà décidé de ce qu'il faut faire, il suffit de le faire.

Nous multiplions l'ancien état par ft, oubliant les choses que nous avons décidé d'oublier plus tôt. Puis on ajoutejetC~tIl s'agit des nouvelles valeurs candidates, mises à l'échelle de combien nous avons décidé de mettre à jour chaque valeur d'état.

Dans le cas du modèle de langage, c'est là que nous supprimions les informations sur le sexe de l'ancien sujet et ajoutions les nouvelles informations, comme nous l'avons décidé dans les étapes précédentes.

Enfin, nous devons décider de ce que nous allons produire. Cette sortie sera basée sur l'état de notre cellule, mais sera une version filtrée. Tout d'abord, nous exécutons une couche sigmoïde qui décide quelles parties de l'état de la cellule nous allons générer. Ensuite, nous mettons l'état de la cellule à traversde poisson (pour pousser les valeurs entre 1 et 1) et multipliez-le par la sortie de la porte sigmoïde, de sorte que nous ne sortions que les parties que nous avons décidées.

Pour l'exemple de modèle de langage, comme il vient de voir un sujet, il peut vouloir afficher des informations pertinentes pour un verbe, au cas où ce serait ce qui suivrait. Par exemple, il peut indiquer si le sujet est au singulier ou au pluriel, de sorte que nous sachions dans quelle forme un verbe doit être conjugué si c'est ce qui suit.

Variantes sur la mémoire à long terme

Ce que j'ai décrit jusqu'à présent est un LSTM assez normal. Mais tous les LSTM ne sont pas identiques à ceux ci-dessus. En fait, il semble que presque tous les articles impliquant des LSTM utilisent une version légèrement différente. Les différences sont mineures, mais il convient d'en mentionner quelques-unes.

Une variante LSTM populaire, introduite par Gers & Schmidhuber (2000) , consiste à ajouter des «connexions judas». Cela signifie que nous laissons les couches de grille regarder l'état de la cellule.

Le diagramme ci-dessus ajoute des judas à toutes les portes, mais de nombreux papiers donneront des judas et pas d'autres.

Une autre variante consiste à utiliser des portes d'entrée et d'entrée couplées. Au lieu de décider séparément ce qu'il faut oublier et ce à quoi nous devrions ajouter de nouvelles informations, nous prenons ces décisions ensemble. On oublie seulement quand on va entrer quelque chose à sa place. Nous n'entrons de nouvelles valeurs dans l'état que lorsque nous oublions quelque chose de plus ancien.

Une variation légèrement plus dramatique sur le LSTM est l'unité récurrente fermée, ou GRU, introduite par Cho et al. (2014) . Il combine les portes d’oubli et d’entrée en une seule «porte de mise à jour». Il fusionne également l'état de la cellule et l'état masqué et apporte d'autres modifications. Le modèle résultant est plus simple que les modèles LSTM standard et est de plus en plus populaire.

Un réseau neuronal d'unité récurrente fermée.

Ce ne sont que quelques-unes des variantes les plus notables du LSTM. Il y en a beaucoup d'autres, comme les RNN à seuil de profondeur de Yao et al. (2015) . Il existe également une approche complètement différente pour lutter contre les dépendances à long terme, comme les RNN Clockwork de Koutnik et al. (2014) .

Laquelle de ces variantes est la meilleure? Les différences comptent-elles? Greff et coll. (2015) font une belle comparaison des variantes populaires, constatant qu'elles sont toutes à peu près identiques. Jozefowicz et coll. (2015) ont testé plus de dix mille architectures RNN, en trouvant certaines qui fonctionnaient mieux que les LSTM sur certaines tâches.

Conclusion

Plus tôt, j'ai mentionné les résultats remarquables que les gens obtiennent avec les RNN. Pour l'essentiel, tout cela est réalisé à l'aide de LSTM. Ils fonctionnent vraiment beaucoup mieux pour la plupart des tâches!

Rédigés sous forme d'un ensemble d'équations, les LSTM semblent assez intimidants. Espérons que les parcourir étape par étape dans cet essai les a rendus un peu plus accessibles.

Les LSTM ont été une étape importante dans ce que nous pouvons accomplir avec les RNN. Il est naturel de se demander: y a-t-il un autre grand pas? Une opinion commune parmi les chercheurs est: «Oui! Il y a une prochaine étape et c'est l'attention! » L'idée est de laisser chaque étape d'un RNN sélectionner des informations à regarder à partir d'une plus grande collection d'informations. Par exemple, si vous utilisez un RNN pour créer une légende décrivant une image, il peut choisir une partie de l'image à regarder pour chaque mot qu'il produit. En fait, Xu et al. (2015) faites exactement cela - ce pourrait être un point de départ amusant si vous voulez explorer l'attention! Il y a eu un certain nombre de résultats vraiment passionnants en utilisant l'attention, et il semble que beaucoup d'autres sont au coin de la rue ...

L'attention n'est pas le seul fil conducteur de la recherche RNN. Par exemple, les LSTM Grid de Kalchbrenner et al. (2015) semblent extrêmement prometteurs. Travailler en utilisant les RNN dans des modèles génératifs - tels que Gregor, et al. (2015) , Chung et al. (2015) , ou Bayer & Osendorfer (2015) - semble également très intéressant. Les dernières années ont été une période passionnante pour les réseaux de neurones récurrents, et les prochains promettent de l'être encore plus!


Commentaires

Posts les plus consultés de ce blog

Comment fonctionne l'optimise d'Adam

RESEAU DE NEURONE CONVOLUTIF

Comment utiliser les diagrammes PlantUML dans Visual Studio Code pour Windows 10