Adam optimiseur avec décroissance exponentielle

53

Dans la plupart des codes Tensorflow, j'ai constaté qu'Adam Optimizer est utilisé avec un taux d'apprentissage constant 1e-4(0,0001). Le code a généralement l'aspect suivant:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Je me demande s'il est utile d'utiliser la décroissance exponentielle lors de l'utilisation d'Adam Optimizer, c'est-à-dire d'utiliser le code suivant:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Habituellement, les gens utilisent une sorte de décroissance du taux d’apprentissage; pour Adam, cela semble rare. Y a-t-il une raison théorique à cela? Peut-il être utile de combiner Adam Optimizer avec Decay?

MarvMind
la source
Comment obtenez-vous l'étape Variable à mettre à jour à chaque itération?
Perrohunter
@perrohunter: utilisez le global_stepparamètre de minimize. Voir éditer.
Charles Staats
9
Note: 1e-4= 0.0001pas 0.0004.
Cliff AB
Je vois que vous assignez "global_step = step" mais je ne vois pas comment la variable "step" est mise à jour ... pouvez-vous préciser, s'il vous plaît?
Diego
@Diego: réponse tardive mais: passer la variable d'étape à réduire car son paramètre global_step oblige la fonction minimiser à augmenter le paramètre global_step à chaque appel de minimisation. Voir la documentation pour minimiser. Notez que cela signifie que lors de la création de mini-lots, la variable d'étape est mise à jour pour chaque mini-lot, pas seulement pour chaque époque.
Dimpol

Réponses:

37

De manière empirique: essayez-le, vous trouverez peut-être des heuristiques d’entraînement très utiles, auquel cas, partagez-les!

Habituellement, les gens utilisent une sorte de décomposition, pour Adam, cela semble rare. Y a-t-il une raison théorique à cela? Peut-il être utile de combiner Adam Optimizer avec Decay?

Je n'ai pas vu suffisamment de code utilisant ADAM optimizer pour dire si cela est vrai ou non. Si c’est vrai, c’est peut-être parce qu’ADAM est relativement nouveau et que les «meilleures pratiques» de décroissance du taux d’apprentissage n’ont pas encore été établies.

Je tiens toutefois à souligner que la décélération du taux d’apprentissage fait partie de la garantie théorique d’ADAM. Plus précisément dans le théorème 4.1 de leur article sur l'ICLR , une de leurs hypothèses est que le taux d'apprentissage a une décroissance de la racine carrée, . En outre, pour leurs expériences de régression logistique, ils utilisent également la décroissance de la racine carrée.αt=α/t

Autrement dit: rien dans la théorie ne décourage l’utilisation de règles de décroissance du taux d’apprentissage avec ADAM. J'ai vu des gens rapporter de bons résultats en utilisant ADAM et trouver de bonnes heuristiques de formation serait extrêmement précieux.

Indie AI
la source
12

La plupart des gens n'utilisent pas la décroissance du taux d'apprentissage avec Adam parce que l'algorithme lui-même effectue une décroissance du taux d'apprentissage de la manière suivante:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

t0est le pas initial et lr_tle nouveau taux d’apprentissage utilisé.

Almanzt
la source
4
Je ne sais pas si c'est le cas. Le facteur sqrt(1 - beta2^t) / (1 - beta1^t)ne se décompose pas. Cela semble compenser l'initialisation des estimations des premier et deuxième moments.
Thijs
25
Cette réponse est incorrecte. Ce facteur approche 1,0 quand t va à l'infini. Note latérale: learning_rate ici est corrigé . Ce n'est pas le taux d'apprentissage au temps t-1.
rd11
8

Adam utilise le taux d'apprentissage initial, ou la taille des pas, conformément à la terminologie du document d'origine, tout en calculant les mises à jour de manière adaptative. La taille de l'étape donne également une limite approximative pour les mises à jour. À cet égard, j'estime qu'il est judicieux de réduire la taille des étapes vers la fin de la formation. Cela est également corroboré par un travail récent de NIPS 2017: La valeur marginale des méthodes de gradients adaptatifs dans l'apprentissage automatique .

La dernière ligne de la section 4: Expériences d'apprentissage en profondeur dit

Bien que la sagesse conventionnelle suggère qu'Adam ne nécessite pas de réglage, nous constatons que le réglage du taux d'apprentissage initial et du schéma de décroissance d'Adam apporte des améliorations significatives par rapport aux paramètres par défaut dans tous les cas.

Dernier point mais non le moindre, le document suggère que nous utilisions de toute façon SGD.

Murat Seckin Ayhan
la source
2

Je suis d'accord avec l'opinion de @Indie AI, je fournis ici d'autres informations:

De CS231n :

... Beaucoup de ces méthodes peuvent encore nécessiter d'autres paramètres d'hyperparamètre, mais l'argument est qu'elles se comportent bien pour une plage de valeurs d'hyperparamètre plus étendue que le taux d'apprentissage brut. ...

Et aussi du papier Repenser l'architecture initiale pour Computer Vision Section 8:

... alors que nos meilleurs modèles ont été obtenus avec RMSProp [21] avec un retard de 0,9 et ε = 1,0. Nous avons utilisé un taux d’apprentissage de 0,045 décroissant toutes les deux périodes en utilisant un taux exponentiel de 0,94. ...

llj098
la source
2

J'ai formé un ensemble de données avec de vraies données faciles, si une personne est considérée grosse ou non, sa taille et son poids - créant des données calculant le bmi, et si plus de 27 ans, la personne est grosse. Données de base très faciles. Lorsque Adam est utilisé comme optimiseur et que le taux d’apprentissage est de 0,001, la précision ne me permettra d’atteindre que 85% environ pour 5 epocs, avec un maximum de 90% avec plus de 100 epocs testés.

Mais si vous chargez à nouveau à environ 85% et que vous obtenez un taux d’apprentissage de 0,0001, la précision dépassera 3 epocs et atteindra 95%, tandis que 10 autres epocs représenteront environ 98 à 99%. Vous ne savez pas si le taux d’apprentissage peut descendre au-dessous de 4 chiffres 0,0001, mais lors du chargement du modèle à nouveau et de l’utilisation de 0,00001, l’accumulateur oscillera autour de 99,20 - 100% et ne passera pas en dessous. Encore une fois, je ne sais pas si le taux d’apprentissage serait considéré comme égal à 0, mais enfin, c’est ce que j’ai ...

Tout cela en utilisant categorical_crossentropy, mais mean_square le fait à 99-100% aussi en faisant cette méthode. AdaDelta, AdaGrad, Nesterov ne pouvaient obtenir une précision supérieure à 65%, juste pour une note.

WoodyDRN
la source
0

La décélération de la vitesse d'apprentissage dans l'Adam est la même que celle dans RSMProp (comme vous pouvez le voir dans cette réponse ), et cela est principalement basé sur la magnitude des gradients précédents pour éliminer les oscillations . Ainsi, la décroissance exponentielle (pour un taux d'apprentissage décroissant tout au long du processus de formation) peut être adoptée en même temps. Ils réduisent tous le taux d'apprentissage, mais à des fins différentes .

Lerner Zhang
la source