Comprendre Adam : comment minimiser les fonctions de perte ?
- Literature & Cie

- 12 févr. 2021
- 4 min de lecture
Adam : une méthode d’optimisation stochastique
Introduction
En utilisant la librairie fast.ai construite sur PyTorch, j’ai réalisé que je n’avais jamais eu à interagir avec un optimiseur jusqu’à présent. Comme fast.ai s’en occupe déjà lors de l’appel de la méthode fit_one_cycle, je n’ai pas besoin de paramétrer l’optimiseur ni de comprendre comment il fonctionne.
Adam est probablement l’optimiseur le plus utilisé dans l’apprentissage automatique en raison de sa simplicité et de sa vitesse. Il a été développé en 2015 par Diederik Kingma et Jimmy Lei Ba puis introduit dans un article intitulé Adam : une méthode d’optimisation stochastique.
Comme toujours, cet article de blog est un aide-mémoire que j’écris pour vérifier ma compréhension d’une notion. Si vous trouvez quelque chose de flou ou d’incorrect, n’hésitez pas à l’écrire dans la section commentaire.

Algorithme
D’abord et avant tout, Adam signifie Estimation de Moment Adaptative. Le raisonnement derrière Adam est de trouver un algorithme efficace pour optimiser une fonction objective. Le document de recherche porte sur l’optimisation des objectifs stochastiques dans les espaces de paramètres de grande dimension.
Adam est une version modifiée de Stochastic Gradient Descent, que je n’expliquerai pas ici. Pour mémoire, la règle de mise à jour de Stochastic Gradient Descent est :

Le pseudo-code de l’algorithme Adam est le suivant :

Je vais expliquer clairement chaque étape, mais d’abord je dois introduire quelques quantités.
Comme Adam est un processus itératif, nous avons besoin d’un indice t qui est incrémenté de 1 à chaque étape.
α est la taille des pas, un équivalent du taux d’apprentissage pour la descente de gradient stochastique.
G(t) est le gradient de la fonction objective f à l’étape t par rapport au vecteur paramètre θ.
M(t) est la moyenne mobile exponentielle (EMA) du premier moment du gradient G(t). Ainsi β1 le taux de décroissance exponentielle de l’EMA.
V(t) est la moyenne mobile exponentielle du deuxième moment du gradient G(t). Ainsi β2 le taux de décroissance exponentielle de l’EMA.
Enfin, ε est un très petit hyper-paramètre qui empêche l’algorithme de diviser par zéro.
Pourquoi Adam utilise-t-il l’EMA de gradient et non le gradient ?
Lorsque le gradient est calculé, certains mini-lots peuvent avoir des valeurs aberrantes qui peuvent produire de grands gradients informatifs, donc en calculant l’EMA des gradients pour chaque mini-lot, l’effet des gradients non formatifs est minimisé. De plus, l’EMA est une moyenne pondérée des gradients nouveaux et anciens. Si Adam avait utilisé une moyenne arithmétique, tous les gradients (entre la 1 et la t-ème étape) auraient eu le même poids.
Notons que l’EMA agit comme une estimation du gradient comme nous le verrons plus loin.
Règle de mise à jour d’Adam
Comme indiqué ci-dessus, la règle de mise à jour d’Adam n’est qu’une version modifiée de la règle de mise à jour de Gradient descent. Chez Adam, l’EMA du premier moment du gradient échelonné par la racine carrée du deuxième moment du moment est substractée au vecteur paramètre θ.

Dans l’article, les auteurs définissent cela comme le RSB (le rapport signal-bruit). Le RSB est une mesure qui compare le niveau d’un signal désiré (ici le gradient c.-à-d. la direction de la courbe de fonction objective) au niveau de bruit de fond(le gradient du deuxième ordre c.-à-d. le bruit autour de cette direction).
La mise à l’échelle des racines carrées est tirée de l’algorithme RMSProp (RMS signifie Root Mean Square). L’idée est que puisque les gradients sont accumulés sur plusieurs mini-lots, nous avons besoin du gradient à chaque étape pour rester stables. Comme un mini-lot peut avoir un échantillon de données radicalement différent d’un autre mini-lot, pour limiter la variation du gradient, l’EMA du premier moment du gradient est mise à l’échelle par le RMS du second moment. On pourrait penser à cette technique comme une sorte de normalisation par laquelle le gradient est divisé par une sorte d’écart-type.
Recuit automatique
Avec un RSB plus petit, la taille effective du pas sera plus proche de zéro, ce qui signifie qu’il existe beaucoup de bruit par rapport au signal réel, d’où une plus grande incertitude quant à savoir si la direction du gradient de premier ordre correspond à la direction de l’optimum. C’est une propriété souhaitable puisque les marches sont plus petites, limitant ainsi la divergence par rapport à un optimum local.
Le RSB se rapproche généralement de 0 vers un optimum, ce qui entraîne de petites étapes efficaces dans l’espace des paramètres. Cela permet une convergence plus robuste et plus rapide vers l’optimum.
Correction du biais d’initialisation
Étant donné que les vecteurs EMA sont initialisés comme vecteurs 0, les estimations de moment sont biaisées vers zéro, en particulier pendant les étapes initiales du temps, et surtout lorsque les taux de désintégration sont faibles (les βssont proches de 1).
Pour contrer cela, les estimations du moment sont corrigées par biais.
En utilisant la relation récurrente entre v(t) et v(t-1), il s’ensuit que :

Après avoir utilisé cette équation en la composant avec l’attente, il s’ensuit rapidement que, E[v(t)] égale

C’est pourquoi pour initialiser les poids à chaque étape, E[v(t)] est divisé par (1-β2 ^t).
Le même raisonnement suit pour le premier moment de gradient.
Adamax : une extension Adam
Adamax est une extension d’Adam. Il remplace le deuxième moment du gradient par une norme d’infini pondérée.

Cette variante est utilisée puisque les auteurs ont trouvé une solution étonnamment stable lorsque la matrice de fonctionnalités est clairsemée (comme dans les embeddings, pensez à un encodage à chaud). En effet, la solution est robuste puisque la règle de mise à jour pour u(t) ne repose pas exclusivement sur le gradient.

Lorsque g(t) devient vraiment petit, la règle de mise à jour choisit β2*u(t-1) grâce à la fonction max.
Résultats

Figure 2 : Formation de réseaux neuronaux multicouches sur les images MNIST. (a) Réseaux neuronaux utilisant la régularisation stochastique par décrochage. (b) Réseaux neuronaux avec fonction de coût déterministe. Nous comparons avec l’optimiseur de somme de fonctions (SFO) (Sohl-Dickstein et coll., 2014)
En comparant les résultats de l’ensemble de données MNIST, nous observons qu’Adam converge beaucoup plus vite et plus près de l’optimum qu’Adagrad, RMSProp ou AdaDelta.
Source (article d’origine) : https://towardsdatascience.com/understanding-adam-how-loss-functions-are-minimized-3a75d36ebdfc


Commentaires