Je peux voir deux raisons d'utiliser des dégradés synthétiques dans RNN:
- Pour accélérer l'entraînement, en corrigeant immédiatement chaque couche avec le gradient prévu
- Pour pouvoir apprendre des séquences plus longues
Je vois des problèmes avec les deux. Veuillez noter que j'aime vraiment les dégradés synthétiques et je voudrais les implémenter. Mais je dois comprendre où ma piste de pensée est incorrecte.
Je vais maintenant montrer pourquoi les points 1 et 2 ne semblent pas être bénéfiques, et j'ai besoin que vous me corrigiez, s'ils sont réellement bénéfiques:
Point 1:
Les dégradés synthétiques nous disent que nous pouvons compter sur un autre "mini-réseau d'assistance" (appelé DNI) pour informer notre couche actuelle des gradients qui arriveront d'en haut, même pendant la propulsion avant.
Cependant, de tels gradients ne viendront que plusieurs opérations plus tard. La même quantité de Backprop devra être faite que sans DNI, sauf que maintenant nous devons également former notre DNI.
L'ajout de cette asyncronisité ne devrait pas faire en sorte que les couches s'entraînent plus rapidement que lors de la séquence prop traditionnelle "verrouillée" fwdprop -> full back prop, car le même nombre de calculs doit être effectué par le périphérique. C'est juste que les calculs seront glissés dans le temps
Cela me fait penser que le point 1) ne fonctionnera pas. Le simple ajout de SG entre chaque couche ne devrait pas améliorer la vitesse d'entraînement.
Point 2:
Ok, que diriez-vous d'ajouter SG uniquement sur la dernière couche pour prédire le "gradient du futur" et seulement si c'est le dernier pas de temps pendant l'hélice avant .
De cette façon, même si notre LSTM doit cesser de prédire et doit se propager à rebours, il peut toujours prédire le gradient futur qu'il aurait reçu (avec l'aide de DNI assis sur le dernier pas de temps).
Envisagez plusieurs sessions de formation (session A, session B):
fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ----> stop et bkprop!
fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ----> stop et bkprop!
Nous venons de forcer notre réseau à "analyser" 6 pas de temps en deux moitiés: 3 pas de temps, puis encore 3 pas de temps.
Remarquez, nous avons notre DNI assis à la toute fin de la "Session A" et prédisant "quel gradient j'obtiendrai à partir du début de la Session B (à partir du futur)". Pour cette raison, timestep_3A sera équipé d'un gradient "qui proviendrait de timestep_1B", donc en effet, les corrections effectuées pendant A seront plus fiables.
Mais salut! Ces « gradients synthétiques » prévus seront très faible (négligeable) de toute façon - après tout, c'est la raison pour laquelle nous commençons une nouvelle backprop séance B . N'étaient-ils pas trop petits, nous analyserions simplement les 6 pas de temps dans une seule "session A" bkprop longue.
Par conséquent, je pense que le point 2) ne devrait pas non plus être avantageux. L'ajout de SG sur le dernier pas de temps de fwdprop permet d'entraîner efficacement des séquences plus longues, mais les gradients disparaissants ne sont allés nulle part.
D'accord. Peut-être pouvons-nous bénéficier de la formation "session A" , "session B" etc. sur des machines séparées? Mais en quoi est-ce différent de simplement s'entraîner avec les minibatches habituels en parallèle? Gardez à l'esprit, a été mentionné au point 2: les choses sont aggravées par la session A prédisant des gradients qui disparaissent de toute façon.
Question: Veuillez m'aider à comprendre les avantages du dégradé synthétique, car les 2 points ci-dessus ne semblent pas être bénéfiques