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
la source
Réponses:
-Ce n'est pas nécessairement correct. Nous tronquons et démarrons généralement un nouveau backprop en raison de contraintes matérielles, telles que la mémoire ou la vitesse de calcul. Le gradient de fuite peut être amélioré par d'autres moyens, tels que la normalisation du gradient - augmenter le vecteur de gradient s'il devient trop petit au-delà de certaines couches, ou réduire si il est sur le point d'exploser. Ou même en utilisant la normalisation par lots
Il est important de comprendre comment mettre à jour n'importe quel module DNI. Pour clarifier les choses, considérons un exemple de réseau avec plusieurs couches et 3 modules DNI:
Les calques antérieurs devront se contenter de dégradés synthétiques, car eux ou leur DNI ne verront jamais le "vrai dégradé".
Concernant la formation en parallèle avec des minibatches au lieu de la parallélisation via des notes synthétiques:
Les séquences plus longues sont plus précises que les minibatches, mais les minibatches ajoutent un effet de régulation . Mais, étant donné une certaine technique pour empêcher le gradient d'exploser ou de disparaître, la formation de séquences plus longues peut fournir un bien meilleur aperçu du contexte du problème. C'est parce que le réseau déduit la sortie après avoir considéré une séquence d'entrée plus longue, donc le résultat est plus rationnel.
Pour la comparaison des avantages accordés par SG, reportez-vous aux diagrammes page 6 du document , pouvant principalement résoudre des séquences plus longues, ce qui me semble le plus bénéfique (nous pouvons déjà paralléliser via Minibatches de toute façon, et donc SG ne devrait pas accélérer la lorsqu’il est exécuté sur la même machine - même si nous ne propageons en effet que jusqu’au DNI suivant).
Cependant, plus nous avons de modules DNI, plus le signal doit être bruyant. Il peut donc être utile de former les couches et DNI par le backprop hérité, et seulement après que certaines époques se soient écoulées, nous commençons à utiliser le bootstrap DNI discuté ci-dessus.
De cette façon, le premier DNI acquerra au moins une certaine idée de ce à quoi s'attendre au début de la formation. C'est parce que les DNI suivants ne sont pas eux-mêmes sûrs de ce à quoi ressemble le véritable gradient, lorsque la formation commence, donc au début, ils conseilleront le gradient "poubelle" à toute personne assise plus tôt qu'eux.
N'oubliez pas que les auteurs ont également expérimenté la prédiction des entrées réelles pour chaque couche.
Si vos couches ont un backprop coûteux (peut-être que vous avez la normalisation par lots ou certaines fonctions d'activation fantaisistes), la correction avec DNI pourrait être beaucoup moins chère, une fois qu'elle est suffisamment bien formée. N'oubliez pas que DNI n'est pas gratuit - il nécessite une multiplication matricielle et ne fournira probablement pas beaucoup d'accélération sur une simple couche dense.
Les minibatches nous donnent de l'accélération (via la parallélisation) et nous donnent également la régularisation. Les dégradés synthétiques nous permettent de mieux déduire en travaillant avec des séquences plus longues et un gradient (potentiellement) moins cher. Dans l'ensemble, c'est un système très puissant.
la source
Les gradients synthétiques accélèrent l'entraînement, non pas en réduisant le nombre d'époques nécessaires ou en accélérant la convergence de la descente de gradient, mais plutôt en accélérant le calcul de chaque époque. Le gradient synthétique est plus rapide à calculer que le gradient réel (le calcul du gradient synthétique est plus rapide que la rétropropagation), de sorte que chaque itération de descente de gradient peut être calculée plus rapidement.
la source