J'essaie de comprendre comment les rnn peuvent être utilisés pour prédire des séquences en travaillant à travers un exemple simple. Voici mon réseau simple, composé d'une entrée, d'un neurone caché et d'une sortie:
Le neurone caché est la fonction sigmoïde et la sortie est considérée comme une simple sortie linéaire. Donc, je pense que le réseau fonctionne comme suit: si l'unité cachée commence dans l'état s
, et que nous traitons un point de données qui est une séquence de longueur , , alors:
Au moment 1
, la valeur prédite, , est
Parfois 2
, nous avons
Parfois 3
, nous avons
Jusqu'ici tout va bien?
Le rnn "déroulé" ressemble à ceci:
Si nous utilisons une somme de termes d'erreur carrés pour la fonction objectif, comment est-elle définie? Sur toute la séquence? Dans ce cas, nous aurions quelque chose comme ?
Les poids sont-ils mis à jour uniquement une fois que la séquence entière a été examinée (dans ce cas, la séquence en 3 points)?
En ce qui concerne le gradient par rapport aux poids, nous devons calculer , je vais essayer de le faire simplement en examinant les 3 équations de ci-dessus, si tout le reste semble correct. En plus de le faire de cette façon, cela ne ressemble pas à une rétro-propagation de la vanille, car les mêmes paramètres apparaissent dans différentes couches du réseau. Comment ajustons-nous cela?
Si quelqu'un peut m'aider à travers cet exemple de jouet, je serais très reconnaissant.
Réponses:
Je pense que vous avez besoin de valeurs cibles. Donc, pour la séquence , vous auriez besoin de cibles correspondantes . Puisque vous semblez vouloir prédire le prochain terme de la séquence d'entrée d'origine, vous aurez besoin de:(x1,x2,x3) (t1,t2,t3)
Vous auriez besoin de définir , donc si vous aviez une séquence d'entrée de longueur pour former le RNN, vous ne seriez en mesure d'utiliser que les premiers termes comme valeurs d'entrée et les derniers termes comme cible valeurs.x4 N N−1 N−1
Pour autant que je sache, vous avez raison - l'erreur est la somme sur toute la séquence. Cela est dû au fait que les poids , et sont les mêmes à travers le RNN déplié.u v w
Donc,
Oui, si j'utilise la propagation arrière dans le temps, je le pense.
En ce qui concerne les différentiels, vous ne voudrez pas étendre l'expression entière pour et la différencier quand il s'agit de RNN plus grands. Ainsi, certaines notations peuvent le rendre plus net:E
Ensuite, les dérivés sont:
Où pour une séquence de longueur , et:t∈[1, T] T
Cette relation récurrente vient du fait de réaliser que l' activité cachée non seulement affecte l'erreur à la sortie , , mais elle affecte également le reste de l'erreur plus bas sur le RNN, :tth tth Et E−Et
Cette méthode est appelée rétropropagation dans le temps (BPTT) et est similaire à la rétropropagation dans le sens où elle utilise l'application répétée de la règle de chaîne.
Un exemple travaillé plus détaillé mais compliqué pour un RNN peut être trouvé dans le chapitre 3.2 de 'Étiquetage de séquence supervisé avec des réseaux de neurones récurrents' par Alex Graves - lecture vraiment intéressante!
la source
Erreur que vous décrivez ci-dessus (après une modification que j'ai écrite en commentaire sous la question), vous ne pouvez l'utiliser que comme une erreur de prédiction totale, mais vous ne pouvez pas l'utiliser dans le processus d'apprentissage. À chaque itération, vous mettez une valeur d'entrée dans le réseau et obtenez une sortie. Lorsque vous obtenez une sortie, vous devez vérifier le résultat de votre réseau et propager l'erreur à tous les poids. Après la mise à jour, vous placerez la valeur suivante dans l'ordre et effectuerez une prédiction pour cette valeur, puis vous propagerez également l'erreur, etc.
la source