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?
global_step
paramètre deminimize
. Voir éditer.1e-4
=0.0001
pas0.0004
.Réponses:
De manière empirique: essayez-le, vous trouverez peut-être des heuristiques d’entraînement très utiles, auquel cas, partagez-les!
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.
la source
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:
où
t0
est le pas initial etlr_t
le nouveau taux d’apprentissage utilisé.la source
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.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
Dernier point mais non le moindre, le document suggère que nous utilisions de toute façon SGD.
la source
Je suis d'accord avec l'opinion de @Indie AI, je fournis ici d'autres informations:
De CS231n :
Et aussi du papier Repenser l'architecture initiale pour Computer Vision Section 8:
la source
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.
la source
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 .
la source