Je connais bien les algorithmes de base de descente de gradient pour la formation de réseaux de neurones. J'ai lu le document proposant Adam: ADAM: UNE MÉTHODE D'OPTIMISATION STOCHASTIQUE .
Bien que j'ai certainement quelques idées (du moins), le papier semble être trop élevé pour moi en général. Par exemple, une fonction de coût est souvent la somme de nombreuses fonctions différentes. Par conséquent, de nombreux calculs doivent être effectués pour optimiser sa valeur; les descentes de gradient stochastiques - pour autant que je comprenne le sujet - calculent l'optimisation uniquement pour un sous-ensemble de ces fonctions. Pour moi, il est difficile de savoir comment Adam agit ainsi et pourquoi cela se traduit par une erreur d’entraînement réduite pour l’ensemble de J ( θ ) .
Je pense qu'Adam met à jour son gradient en prenant en compte le gradient précédent. Ils appellent cela quelque chose comme utiliser la dynamique? Quel est exactement cet élan? Selon l'algorithme de la page deux du document, il s'agit d'une sorte de moyenne mobile, comme certaines estimations des premier et deuxième moments du gradient "normal"?
Pratiquement, je soupçonnerais qu'Adam permet d'utiliser des tailles de pas efficaces plus grandes pour réduire le gradient et donc l'erreur d'apprentissage en combinaison avec l'approximation stochastique. Ainsi, le vecteur de mise à jour résultant devrait "sauter" davantage dans les dimensions spatiales, décrivant plutôt une courbe comme le feraient des algorithmes de descente de gradient normaux.
Quelqu'un peut-il démystifier le fonctionnement d'Adam? Surtout comment cela converge, en particulier pourquoi la méthode d'Adam fonctionne et quel en est exactement le bénéfice?
la source
Réponses:
Dans l'article d'Adam, "... de nombreuses fonctions objectives sont composées d'une somme de sous-fonctions évaluées sur différents sous-échantillons de données; dans ce cas, l'optimisation peut être rendue plus efficace en prenant des gradients graduels vers des sous-fonctions individuelles ...". Cela signifie que la fonction objectif est une somme d'erreurs par rapport aux exemples d'apprentissage et que l'entraînement peut être effectué sur des exemples individuels ou des minibatches. Il en va de même que dans la descente de gradient stochastique (SGD), ce qui est plus efficace pour les problèmes à grande échelle que la formation par lots, car les mises à jour des paramètres sont plus fréquentes.
Quant à pourquoi Adam fonctionne, il utilise quelques astuces.
L'une de ces astuces est l'élan, qui peut accélérer la convergence. Imaginez une fonction objective en forme de canyon long et étroit qui descend progressivement vers un minimum. Disons que nous voulons minimiser cette fonction en utilisant la descente de gradient. Si nous partons d'un point situé sur la paroi du canyon, la pente négative indiquera la direction de la descente la plus raide, c'est-à-dire principalement le sol du canyon. Ceci est dû au fait que les parois du canyon sont beaucoup plus raides que la pente progressive du canyon vers le minimum. Si le taux d’apprentissage (c’est-à-dire la taille des étapes) est faible, nous pourrions descendre au fond du canyon, puis le suivre au minimum. Mais les progrès seraient lents. Nous pourrions augmenter le taux d'apprentissage, mais cela ne changerait pas le sens des étapes. Dans ce cas, nous dépassions le fond du canyon et nous retrouvions sur le mur opposé. Nous répéterions ensuite ce modèle, oscillant de mur en mur tout en progressant lentement vers le minimum. L'élan peut aider dans cette situation.
Momentum signifie simplement qu'une fraction de la mise à jour précédente est ajoutée à la mise à jour actuelle, de sorte que des mises à jour répétées dans une direction donnée soient composées; nous prenons de la vitesse, allant de plus en plus vite dans cette direction. Dans le cas du canyon, nous créerions une dynamique dans la direction du minimum, car toutes les mises à jour ont une composante dans cette direction. En revanche, aller et venir à travers les parois du canyon implique une inversion constante de la direction, de sorte qu'une impulsion aiderait à amortir les oscillations dans cette direction.
Adam utilise une autre astuce consiste à sélectionner de manière adaptative un taux d’apprentissage distinct pour chaque paramètre. Les paramètres qui recevraient normalement des mises à jour plus petites ou moins fréquentes reçoivent des mises à jour plus importantes avec Adam (l'inverse est également vrai). Cela accélère l'apprentissage dans les cas où les taux d'apprentissage appropriés varient selon les paramètres. Par exemple, dans les réseaux profonds, les gradients peuvent devenir petits aux premières couches et il est logique d'augmenter les vitesses d'apprentissage pour les paramètres correspondants. Un autre avantage de cette approche est que, comme les vitesses d’apprentissage sont ajustées automatiquement, le réglage manuel devient moins important. SGD standard nécessite un ajustement soigneux (et éventuellement un ajustement en ligne) des taux d’apprentissage, ce qui est moins vrai avec Adam et les méthodes associées. Il faut encore sélectionner des hyperparamètres,
Méthodes apparentées :
Momentum est souvent utilisé avec SGD standard. Une version améliorée est appelée Nesterov Momentum ou accélération accélérée de Nesterov. Parmi les autres méthodes qui utilisent des taux d'apprentissage réglés automatiquement pour chaque paramètre, citons: Adagrad, RMSprop et Adadelta. RMSprop et Adadelta résolvent un problème avec Adagrad qui pourrait entraîner l’arrêt de l’apprentissage. Adam est similaire à RMSprop avec élan. Nadam modifie Adam pour utiliser la dynamique de Nesterov au lieu de la dynamique classique.
Références :
Kingma et Ba (2014) . Adam: une méthode d'optimisation stochastique.
Goodfellow et al. (2016) . Apprendre en profondeur, chapitre 8.
Diapositives du cours de Geoff Hinton
Dozat (2016) . Incorporer Nesterov Momentum à Adam.
la source