Pourquoi les poids des réseaux RNN / LSTM sont-ils partagés dans le temps?

20

Je me suis récemment intéressé aux LSTM et j'ai été surpris d'apprendre que les poids sont partagés dans le temps.

  • Je sais que si vous partagez les pondérations dans le temps, vos séquences temporelles d'entrée peuvent être de longueur variable.

  • Avec des poids partagés, vous avez beaucoup moins de paramètres à entraîner.

D'après ma compréhension, la raison pour laquelle on se tournerait vers un LSTM contre une autre méthode d'apprentissage est parce que vous pensez qu'il y a une sorte de structure / dépendance temporelle / séquentielle dans vos données que vous aimeriez apprendre. Si vous sacrifiez le luxe de longueur variable et acceptez un temps de calcul long, un RNN / LSTM sans poids partagés (c'est-à-dire pour chaque pas de temps dont vous avez des poids différents) fonctionnerait-il mieux ou y a-t-il quelque chose qui me manque?

beeCwright
la source

Réponses:

17

La réponse acceptée se concentre sur le côté pratique de la question: elle nécessiterait beaucoup de ressources si les paramètres n'étaient pas partagés. Cependant, la décision de partager les paramètres dans un RNN a été prise lorsque tout calcul sérieux était un problème (années 1980 selon wiki ), donc je pense que ce n'était pas l'argument principal (bien que toujours valide).

Il existe des raisons théoriques pures pour le partage des paramètres:

  • Il aide à appliquer le modèle à des exemples de différentes longueurs. Lors de la lecture d'une séquence, si le modèle RNN utilise des paramètres différents pour chaque étape pendant la formation, il ne généralisera pas pour des séquences invisibles de différentes longueurs.

  • Souvent, les séquences fonctionnent selon les mêmes règles à travers la séquence. Par exemple, en PNL:

                                                     "Lundi, il neige"

                                                     "Il neigeait lundi"

... ces deux phrases signifient la même chose, bien que les détails se trouvent dans différentes parties de la séquence. Le partage de paramètres reflète le fait que nous effectuons la même tâche à chaque étape, par conséquent, nous n'avons pas à réapprendre les règles à chaque point de la phrase.

LSTM n'est pas différent dans ce sens, il utilise donc également des paramètres partagés.

Maxime
la source
4
C'est de loin la raison la plus importante que la réponse acceptée!
JLH
Je crois que ma réponse a été mal interprétée ici. J'ai dit que plus de ressources de calcul seraient nécessaires sans partage de poids, mais ce n'était pas prévu comme point principal. En particulier, j'ai également écrit qu'un modèle sans poids partagés serait beaucoup plus flexible et donc plus sujet au sur-ajustement. Partager les poids au fil du temps est un moyen de surmonter cela. Comme indiqué à juste titre ici, cette stratégie correspond à l '«a priori» selon lequel les mêmes règles s'appliquent à chaque pas de temps. Donc, les deux réponses ne sont pas en désaccord.
user20160
12

La perspective des «poids partagés» vient de la réflexion sur les RNN en tant que réseaux à action directe déroulés dans le temps. Si les poids étaient différents à chaque instant, ce ne serait qu'un réseau à action directe. Mais, je suppose qu'une autre façon de penser serait comme un RNN dont les poids sont une fonction variant dans le temps (et qui pourrait vous permettre de conserver la possibilité de traiter des séquences de longueur variable).

Si vous faisiez cela, le nombre de paramètres augmenterait linéairement avec le nombre de pas de temps. Ce serait une grosse explosion de paramètres pour des séquences de n'importe quelle longueur appréciable. Cela rendrait en effet le réseau plus puissant, si vous aviez les ressources de calcul massives pour l'exécuter et les données massives pour le contraindre. Pour de longues séquences, il serait probablement impossible de calculer et vous obtiendrez un sur-ajustement. En fait, les gens vont généralement dans la direction opposée en exécutant une rétropropagation tronquée dans le temps, ce qui ne déroule le réseau que pendant une courte période, plutôt que sur toute la séquence. Ceci est fait pour la faisabilité du calcul. Fait intéressant, les RNN peuvent toujours apprendre une structure temporelle qui s'étend au-delà de la longueur de troncature, car les unités récurrentes peuvent stocker de la mémoire d'avant.

user20160
la source
Si vous ne partagez pas de poids, vous avez toujours l'état de cellule qui persiste dans le temps. Un LSTM déroulé avec des pondérations temporelles uniques ressemblerait à un réseau à action directe où chaque «couche» représenterait une tranche de temps, mais chaque «couche» aurait des informations d'état de cellule entrantes. Cela ressemblerait à une action directe, mais avec l'ajout de l'état des cellules.
beeCwright
0

Je pense que puisque les RNN avec des récurrences cachées à cachées (et des poids partagés dans le temps) sont équivalents aux machines de Turing universelles, leur laisser des poids différents pour différents pas de temps ne les rend pas plus puissants.

Hossein
la source
Pourriez-vous préciser ce que vous entendez par «puissant»? La référence à Turing Machines suggère que ce que vous avez en tête peut être complètement différent de ce que l'on entend par statistiques.
whuber
Les RNN sont utilisés pour traiter la séquence de données. L'un de leurs types les plus courants obtient une séquence en entrée et produit une autre séquence en sortie (comme les systèmes de traduction de langue). Je dis qu'une famille de modèles RNN M1 est plus puissante qu'une autre famille de modèles RNN M2, si pour un problème (comme le mappage d'un ensemble de séquences d'entrée à un ensemble de séquences de sortie), il existe un modèle m1 dans M1 où peut résoudre ce problème mais il n'y a pas de modèle en M2 pour résoudre ce problème.
Hossein