Le problème de NE PAS corriger le biais
Selon l'article
En cas de gradients clairsemés, pour une estimation fiable du deuxième moment, il faut faire la moyenne sur de nombreux gradients en choisissant une petite valeur de β2; cependant, c'est exactement ce cas de petit β2 où un manque de correction du biais d'initialisation conduirait à des étapes initiales beaucoup plus importantes.
Normalement, dans la pratique, est défini beaucoup plus près de 1 que (comme suggéré par l'auteur , ), donc les coefficients de mise à jour sont beaucoup plus petits que .β2β1β2=0.999β1=0.91−β2=0.0011−β1=0.1
Dans la première étape de la formation , , le terme dans la mise à jour des paramètres peut être très important si nous utilisons directement l'estimation biaisée.m1=0.1gtv1=0.001g2tm1/(v1−−√+ϵ)
D'un autre côté, lorsque vous utilisez l'estimation corrigée du biais, et , le terme devient moins sensible à et .m1^=g1v1^=g21mt^/(vt^−−√+ϵ)β1β2
Comment le biais est corrigé
L'algorithme utilise la moyenne mobile pour estimer les premier et deuxième moments. L'estimation biaisée serait, nous partons d'une estimation arbitraire , et mettons à jour l'estimation progressivement par . Il est donc évident que dans les premières étapes, notre moyenne mobile est fortement biaisée vers le initial .m0mt=βmt−1+(1−β)gtm0
Pour corriger cela, nous pouvons supprimer l'effet de la supposition initiale (biais) de la moyenne mobile. Par exemple, au temps 1, , nous le terme de et le divisons par , ce qui donne . Lorsque , . La preuve complète est donnée dans la section 3 du document.m1=βm0+(1−β)gtβm0m1(1−β)m1^=(m1−βm0)/(1−β)m0=0mt^=mt/(1−βt)
Comme l'a bien dit Mark L. Stone
C'est comme multiplier par 2 (oh mon Dieu, le résultat est biaisé), puis diviser par 2 pour le "corriger".
D'une certaine manière, ce n'est pas exactement équivalent à
le gradient au point initial est utilisé pour les valeurs initiales de ces choses, puis la première mise à jour des paramètres
(bien sûr, il peut être transformé en la même forme en changeant la règle de mise à jour (voir la mise à jour de la réponse), et je pense que cette ligne vise principalement à montrer l'inutilité d'introduire le biais, mais peut-être vaut-il la peine de remarquer la différence)
Par exemple, le premier instant corrigé à l'instant 2
m2^=β(1−β)g1+(1−β)g21−β2=βg1+g2β+1
Si vous utilisez tant que valeur initiale avec la même règle de mise à jour,
qui plutôt au cours des premières étapes.g1m2=βg1+(1−β)g2
g1
La correction du biais est-elle vraiment un gros problème
Comme elle n'affecte réellement que les premières étapes de la formation, cela ne semble pas être un gros problème, dans de nombreux cadres populaires (par exemple keras , caffe ), seule l'estimation biaisée est mise en œuvre.
D'après mon expérience, l'estimation biaisée conduit parfois à des situations indésirables où la perte ne diminuera pas (je ne l'ai pas testé à fond, donc je ne suis pas exactement sûr si cela est dû à l'estimation biaisée ou à autre chose), et une astuce que j'utilise utilise un plus grand pour modérer les tailles de pas initiales.ϵ
Mise à jour
Si vous dépliez les règles de mise à jour récursive, est une moyenne pondérée des dégradés,
Le dénominateur peut être calculé par la formule de somme géométrique, il est donc équivalent à la mise à jour suivante règle (qui n'implique pas de terme biaisé) m^t
m^t=βt−1g1+βt−2g2+...+gtβt−1+βt−2+...+1
m1←g1
sans converger do (somme pondérée) (moyenne pondérée)
mt←βmt+gt
m^t←(1−β)mt1−βt
Par conséquent, cela peut être possible sans introduire un terme de biais et sans le corriger. Je pense que le papier l'a mis dans la forme de correction de biais pour la commodité de la comparaison avec d'autres algorithmes (par exemple RmsProp).