Faire fonctionner réellement les RNN : LSTM, bidirectionnalité et codeur-décodeur

DEV - 31/05
Empilement, bidirectionnalité, encodeur-décodeur et LSTM Le dernier article s'est terminé par un simple...

Empilement, bidirectionnalité, encodeur-décodeur et LSTM

Le dernier message se terminait par un simple RNN et trois promesses : LSTM, RNN bidirectionnels et attention. Cet article présente les deux premiers, ainsi que les améliorations qui transforment un RNN de travail sur papier en quelque chose que vous déploieriez réellement. À la fin, vous saurez comment empiler les RNN pour plus de profondeur, pourquoi la lecture d'une phrase en arrière comme en avant (bidirectionnalité) rend les représentations plus nettes, comment l'encodeur-décodeur transforme une séquence en une autre pour la traduction automatique, et exactement quelles sont les ruptures dans un RNN simple pour lequel les LSTM et les GRU ont été inventés. Attention, la solution au dernier problème que nous allons rencontrer trouve sa place dans le poste du transformateur, nous nous arrêterons donc juste au bord de celui-ci.

Le simple RNN était l’idée. Ce poste est l'ingénierie. Un RNN vanille transporte un fil d'état caché à travers le temps, mais en pratique, ce fil s'effiloche sur de longues séquences, ne voit que le passé et bloque tout à travers un dernier vecteur. Chaque section ici est une solution à l'un de ces problèmes. Mettez-les ensemble, et le chemin de « RNN » à « transformateur » ressemble moins à un saut qu’à une série d’étapes suivantes évidentes.

Empiler des RNN pour la profondeur

Le premier raffinement est le plus facile. Rien ne dit que la sortie d'un RNN doit aller directement à une prédiction. Vous pouvez transmettre l'intégralité de la séquence de sortie d'un RNN comme séquence d'entrée à un autre. Puis un autre. Ce sont des RNN empilés (également appelés RNN profonds) et ils surpassent généralement une seule couche.

Pourquoi la profondeur aide-t-elle ? Pour la même raison, cela aide à la vision. Chaque couche apprend des représentations à un niveau d'abstraction différent. Les couches inférieures captent des propriétés locales fondamentales ; dans le langage, c'est à peu près le niveau des parties du discours et des entités nommées. Les couches supérieures les regroupent en groupes plus grands : phrases descriptives, « ceci est la réponse à une question », etc.

Nous ne pouvons pas pointer vers la couche 3 et dire « celle-ci fait une coréférence ». Mais la théorie tient suffisamment bien pour que les chercheurs aient sondé des modèles comme BERT et trouvé des couches spécifiques qui semblent se spécialiser dans des domaines tels que la résolution de coréférence. L’intuition est réelle même lorsque les frontières sont floues.

Combien de couches faut-il empiler ? Ça dépend. Plus de couches coûtent plus cher à former et elles ont besoin de plus de données pour en valoir la peine. Si vous ne disposez pas de beaucoup de données d’entraînement, une pile profonde peut nuire plutôt qu’aider. Et dans les configurations encodeur-décodeur, les deux côtés n'ont même pas besoin de correspondre ; il est courant que l'encodeur utilise 2 à 4 couches tandis que le décodeur en utilise davantage.

En haut de la pile, vous placez généralement un réseau feedforward qui produit tout ce dont vous avez réellement besoin : un softmax sur le vocabulaire, un sigmoïde pour la classification binaire, une distribution sur des balises. La pile RNN construit la représentation ; la tête de rétroaction le lit.

RNN bidirectionnels

Voici un problème que le RNN simple présente et qu'il est facile de manquer. Faites une analyse des sentiments sur cette phrase :

Le film était terriblement excitant.

Parcourez un RNN de gauche à droite. Lorsqu'il atteint terriblement, l'état caché à ce stade est une représentation du mot terriblement dans ce contexte, mais uniquement dans le contexte situé à sa gauche. Tout depuis le début de la phrase jusqu'à terriblement, et rien après.

C'est un problème ici, car terriblement a presque toujours une connotation négative. À lui seul, le contexte de gauche indique que « cette critique devient négative ». Mais le mot suivant est passionnant, ce qui renverse complètement le sens. Terriblement excitant, c’est positif. Le RNN, en lisant de gauche à droite, ne dispose pas d'excitant lorsqu'il construit la représentation du terrible.

La solution : lisez la phrase dans les deux sens.

A bidirectional RNN runs two separate RNNs over the same input. On va de gauche...
[Courte citation de 8% de l'article original]

Loading...