Ainsi, la descente de gradient basée sur la quantité de mouvement fonctionne comme suit:
où est la mise à jour précédente du poids, et est le gradient actuel par rapport aux paramètres , est le taux d'apprentissage et est une constante.
et la descente de gradient accélérée de Nesterov fonctionne comme suit:
qui équivaut à:
ou
source: https://github.com/fchollet/keras/blob/master/keras/optimizers.py
Il me semble donc que la descente de gradient accélérée de Nesterov ne fait que donner plus de poids au terme lr * g au terme m de changement de poids perméable m (par rapport à un vieil élan normal). Cette interprétation est-elle correcte?
Réponses:
La réponse d'Arech à propos de l'élan Nesterov est correcte, mais le code fait essentiellement la même chose. Ainsi, à cet égard, la méthode Nesterov donne plus de poids au terme et moins au terme .vlr⋅g v
Pour illustrer la raison pour laquelle la mise en œuvre de Keras est correcte, je vais emprunter l' exemple de Geoffrey Hinton .
La méthode Nesterov adopte l'approche "pari-> correction". Le vecteur brun est (pari / saut), le vecteur rouge est (correction), et le vecteur vert est (où nous devrions en fait passer à). est la fonction de dégradé.
v′=m⋅v−lr⋅∇(w+m⋅v)
w′=w+v′
m⋅v −lr⋅∇(w+m⋅v) m⋅v−lr⋅∇(w+m⋅v) ∇(⋅)
Le code semble différent car il se déplace par le vecteur brun au lieu du vecteur vert , car la méthode Nesterov ne nécessite que l’évaluation de au lieu de . Par conséquent, à chaque étape, nous voulons∇(w+m⋅v)=:g ∇(w)
Le code de Keras écrit en abrégé est , et nous faisons quelques calculsp′=p+m⋅(m⋅v−lr⋅g)−lr⋅g
et c’est exactement . En réalité, le code original prend un chemin plus court .1→0→2→3 1→2→3
La valeur estimée réelle (vecteur vert) doit être , qui doit être proche de lorsque l’apprentissage converge.p−m⋅v p
la source
Il me semble que l'on a déjà répondu à la question du PO, mais j'essaierais de donner une autre explication (intuitive, espérons-le) sur l'élan et la différence entre Classical Momentum (CM) et Nesterov's Accelerated Gradient (NAG).
tl; dr
Il suffit de passer à l'image à la fin.
Le raisonnement de NAG_ball est un autre élément important, mais je ne suis pas sûr que ce serait facile à comprendre sans tout le reste.
CM et NAG sont les deux méthodes permettant de choisir le vecteur suivant dans l’espace des paramètres, afin de trouver le minimum d’une fonction .θ f(θ)
Dans d'autres nouvelles, ces deux bals sensibles se sont récemment manifestés:
Il s’avère (en fonction du comportement observé des balles et de l’article sur l’importance de l’initialisation et de l’élan dans l’apprentissage en profondeur , qui décrit à la fois CM et NAG dans la section 2) que chaque balle se comporte exactement comme l’une de ces méthodes , et nous les appellerions donc "CM_ball" et "NAG_ball":
(NAG_ball sourit, car il a récemment regardé la fin de la Lecture 6c - La méthode de l'élan, de Geoffrey Hinton avec Nitish Srivastava et Kevin Swersky , et croit donc plus que jamais que son comportement conduit à trouver un minimum plus rapidement.)
Voici comment les balles se comportent:
Soit le ième emplacement d' une balle dans l'espace des paramètres, et le ième saut de la balle . Ensuite, sauter entre les points de l’espace des paramètres peut être décrit par .
De la même manière, le saut de pente est dirigé dans la direction de la pente la plus raide (la direction opposée à la pente), et plus la pente est grande, plus le saut est important.
Le Slope Jump dépend également de , du niveau d’empressement de la balle (naturellement, ): plus la balle est impatiente, plus le Slope Jump est avancé. (En CM et en NAG, est un hyperparamètre appelé "taux d’apprentissage".) Soit
Ainsi, le double saut de CM_ball est:
En revanche, NAG_ball a réfléchi pendant un certain temps, puis a décidé de toujours commencer par le Momentum Jump.vt=μvt−1−ϵ∇f(θt−1+μvt−1)
Par conséquent, le double saut de NAG_ball est:
Le raisonnement de NAG_ball
Je devrais donc considérer la situation comme si j’avais déjà fait mon saut en vitesse et que je suis sur le point de faire mon saut en pente.
Enfin, hier, j'ai eu la chance d'observer chacune des balles sauter dans un espace paramétrique à une dimension.θ
f(θ) 7
Je pense que regarder leurs positions changeantes dans l'espace des paramètres n'aiderait pas beaucoup à gagner de l'intuition, car cet espace est une ligne.
Donc, au lieu de cela, j'ai dessiné pour chaque balle un graphe à 2 dimensions dans lequel l'axe horizontal est . Ensuite, j'ai dessiné aide d'un pinceau noir, et j'ai également dessiné chaque balle dans ses premières positions, ainsi que des chiffres pour montrer l'ordre chronologique des positions. Enfin, j'ai dessiné des flèches vertes pour indiquer la distance dans l'espace des paramètres (c'est-à-dire la distance horizontale dans le graphique) de chaque saut Momentum et saut de pente.
Annexe 1 - Une démonstration du raisonnement de NAG_ball
Dans ce gif hypnotisant d’ Alec Radford , vous pouvez voir que NAG fonctionne sans doute mieux que CM ("Momentum" dans le gif).
(Le minimum correspond à l'endroit où se trouve l'étoile et les courbes sont des lignes de contour . Pour une explication des lignes de contour et de leur raison d'être perpendiculaires au dégradé, voir les vidéos 1 et 2 de la légendaire 3Blue1Brown .)
L'analyse d'un moment spécifique démontre le raisonnement de NAG_ball:
Annexe 2 - choses que j'ai inventées (pour l'intuition)
Annexe 3 - Termes que je n'ai pas inventés
la source
Je ne pense pas.
Il existe une bonne description des propriétés de Nesterov Momentum (ou Nesterov Accelerated Gradient) dans, par exemple, Sutskever, Martens et al. "Sur l'importance de l'initialisation et de l'élan dans l'apprentissage en profondeur" 2013 .
La différence principale réside dans l’impulsion classique; vous corrigez d’abord votre vélocité, puis vous effectuez un grand pas en fonction de cette vélocité (puis vous répétez); sur le nouvel emplacement (puis répétez).
Moment classique:
Alors que l’impulsion de Nesterov est la suivante:
En fait, cela fait une énorme différence dans la pratique ...
la source
Ajouté: un cours de Stanford sur les réseaux de neurones, cs231n , donne encore une autre forme d'étapes:
Voici la
v
vélocité aka step aka state, etmu
est un facteur de quantité de mouvement, typiquement 0,9 ou plus. (v
,x
etlearning_rate
peuvent être de très longs vecteurs; avec numpy, le code est le même.)v
dans la première ligne est gradient descente avec élan;v_nesterov
extrapole, continue. Par exemple, avec mu = 0.9,La description suivante comporte 3 termes: le
terme 1 seul correspond à une descente de pente simple (GD),
1 + 2 correspondant à GD + quantité de mouvement,
1 + 2 + 3 à Nesterov GD.
Nesterov GD est généralement décrit comme une alternance des étapes de mouvement et des étapes de gradient :xt→yt yt→xt+1
où est le gradient négatif et est stepize, ou taux d'apprentissage.gt≡−∇f(yt) h
Combinez ces deux équations en une seule fois en , les points auxquels les gradients sont évalués, en branchant la deuxième équation dans la première, et réorganisez les termes:yt
Le dernier terme est la différence entre GD avec un élan simple et GD avec un élan Nesterov.
On pourrait utiliser des termes de moment distincts, par exemple et : - le moment de pas - moment de gradientm mgrad
+ m (yt−yt−1)
+ mgrad h (gt−gt−1)
Puis donne l’élan clair, Nesterov. amplifie le bruit (les gradients peuvent être très bruyants), est un filtre de lissage IIR.mgrad=0 mgrad=m
mgrad>0
mgrad∼−.1
Soit dit en passant, la quantité de mouvement et le pas peuvent varier avec le temps, et , ou par composant (descente de coordonnées ada *), ou les deux, davantage de méthodes que de cas de test.mt ht
Un complot comparant l’élan clair avec l’impulsion Nesterov sur un cas de test 2d simple, :
la source