Pourquoi est-il important d'inclure un terme de correction de biais pour l'optimiseur Adam pour l'apprentissage en profondeur?

15

Je lisais sur l' optimiseur Adam pour le Deep Learning et suis tombé sur la phrase suivante dans le nouveau livre Deep Learning de Begnio, Goodfellow et Courtville:

Adam inclut des corrections de biais dans les estimations des moments du premier ordre (le terme de momentum) et des moments du second ordre (non centrés) pour tenir compte de leur initialisation à l'origine.

il semble que la principale raison d'inclure ces termes de correction de biais est qu'il supprime en quelque sorte le biais de l'initialisation de et .mt=0vt=0

  • Je ne suis pas sûr à 100% de ce que cela signifie, mais il me semble que cela signifie probablement que le premier et le deuxième moment commencent à zéro et que le démarrage à zéro incline les valeurs plus près de zéro d'une manière injuste (ou utile) pour la formation ?
  • Bien que j'aimerais savoir ce que cela signifie un peu plus précisément et comment cela nuit à l'apprentissage. En particulier, quels sont les avantages de la non-polarisation de l'optimiseur en termes d'optimisation?
  • Comment cela aide-t-il à former des modèles d'apprentissage en profondeur?
  • Aussi, qu'est-ce que cela signifie quand il est impartial? Je sais ce que signifie l'écart-type non biaisé, mais je ne comprends pas bien ce que cela signifie dans ce contexte.
  • La correction du biais est-elle vraiment un gros problème ou est-ce quelque chose de sur-typé dans le papier d'optimisation Adam?

Juste pour que les gens sachent que j'ai vraiment essayé de comprendre le papier original, mais j'ai très peu retiré de la lecture et de la relecture du papier original. Je suppose que certaines de ces questions pourraient y trouver une réponse, mais je n'arrive pas à analyser les réponses.

Charlie Parker
la source
2
Lien: arxiv.org/pdf/1412.6980v8.pdf Les estimations du gradient du premier et du deuxième moment sont mises à jour via la moyenne mobile et ont commencé avec les deux estimations étant nulles, d'où les valeurs initiales pour lesquelles la vraie valeur n'est pas nulle, fausseraient les résultats , car les estimations initiales de zéro ne s'éteignent que progressivement. Ce que je ne comprends pas, c'est pourquoi le gradient au point initial n'est pas utilisé pour les valeurs initiales de ces choses, puis la première mise à jour des paramètres. Il n'y aurait alors pas de contamination par les valeurs zéro initiales, qui doivent être annulées, il n'y aurait donc pas besoin de correction de biais.
Mark L. Stone
1
Il apparaît donc que plutôt que d'avoir un code spécial pour l'itération initiale, les auteurs ont décidé de faire une chose mathématiquement équivalente en introduisant ce qui serait un biais, puis en l'annulant. Cela ajoute des calculs inutiles, bien que rapides, sur toutes les itérations. Bt faisant cela, ils ont maintenu une pureté de code qui ressemble à toutes les itérations. J'aurais juste commencé avec la première évaluation du gradient à la place, et la formule de mise à jour du moment du gradient ne commencerait qu'à la 2e itération.
Mark L. Stone
@ MarkL.Stone, les auteurs mettent tellement l'accent sur la correction du biais qu'il me semblait que c'était ce qui était nouveau ou important dans leur article. Donc, ils n'auraient tout simplement pas "corrigé le biais" et avoir le même algorithme? Si cela est vrai, je ne vois pas pourquoi Adam est un optimiseur si important ou quel est le problème. J'ai toujours pensé que c'était la correction du biais.
Charlie Parker
4
Ils introduisent un biais puis le corrigent, sans aucune bonne raison qui m'apparaisse. C'est comme multiplier par 2 (oh mon Dieu, le résultat est biaisé), puis diviser par 2 pour le "corriger". Le tout avec l'introduction et la suppression du biais semble être un spectacle secondaire inutile. Peut-être que le papier n'était pas assez long sans le faire, alors ils ont ajouté ce spiel pour le rendre plus long :) Adam a peut-être ses mérites, mais ils auraient été les mêmes en le faisant comme je l'ai proposé. J'aimerais que les auteurs viennent ici et l'expliquent cependant. Peut-être que je manque un point subtil ou un malentendu.
Mark L. Stone

Réponses:

16

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.

entrez la description de l'image ici

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.001gt2m1/(v1+ϵ)

D'un autre côté, lorsque vous utilisez l'estimation corrigée du biais, et , le terme devient moins sensible à et .m1^=g1v1^=g12mt^/(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=βmt1+(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.g1

m2=β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=βt1g1+βt2g2+...+gtβt1+βt2+...+1

m1g1
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).

dontloo
la source
1
Êtes-vous d'accord avec mon deuxième commentaire sur la question? Pour moi, c'est l'essentiel. La chose au sujet de la multiplication et de la division par 2 était juste censée être une analogie "plus facile à comprendre", pas les mathématiques utilisées dans le cas présent. s'il y avait d'autres articles, que je n'ai pas examinés, qui introduisaient un biais par le même mécanisme, ce qui dans le cas d'ADAM semble entièrement évitable, mais ne le corrigeait pas, alors c'est tout à fait STUPIDE (à moins que le biais ne soit en quelque sorte aidé la performance de l'algorithme).
Mark L. Stone
@ MarkL.Stone oui! en fait je l'ai voté, désolé pour mon anglais. et je pense que l'algorithme qui n'a pas corrigé le biais est le rmsprop, mais contrairement à adam rmsprop fonctionne très bien avec le biais.
dontloo
@dontloo votre réponse répond-elle au commentaire de Mark L. Stone sur les raisons pour lesquelles la correction du biais semble superflue? (Je pense que c'est assez important, peut-être même plus que de paraphraser ce que dit l'article original).
Charlie Parker
@CharlieParker vous voulez dire pourquoi la correction du biais est superflue ou pourquoi l'auteur la rend superflue?
dontloo
@dontloo Je ne pense pas que les auteurs le rendent superflu. Je pensais qu'ils en avaient effectivement besoin (compte tenu de leurs conditions spécifiques). Cependant, j'ai pensé que ce n'était pas nécessaire compte tenu de la suggestion de Mark. Je suppose que ma question dans la section des commentaires est de savoir s'ils avaient vraiment besoin du terme de correction.
Charlie Parker