web-dev-qa-db-fra.com

Devrions-nous apprendre le taux de dégradation pour adam optimizer

J'entraîne un réseau pour la localisation d'images avec Adam optimizer et quelqu'un me propose d'utiliser la décroissance exponentielle. Je ne veux pas essayer cela, car Adam Optimizer lui-même diminue le taux d'apprentissage. Mais ce gars insiste et il a dit qu'il l'avait déjà fait. Donc, devrais-je le faire et y a-t-il une théorie derrière votre suggestion?

32
meng lin

Ça dépend. ADAM met à jour tous les paramètres avec un taux d’apprentissage individuel. Cela signifie que chaque paramètre du réseau est associé à un taux d’apprentissage spécifique.

Mais le taux d'apprentissage unique du paramètre est calculé en utilisant lambda (le taux d'apprentissage initial) comme limite supérieure. Cela signifie que chaque cadence d'apprentissage peut varier de 0 (pas de mise à jour) à lambda (mise à jour maximale).

Il est vrai que les vitesses d’apprentissage s’adaptent pendant les étapes du train, mais si vous voulez être sûr que chaque étape de la mise à jour ne dépasse pas lambda, vous pouvez réduire la valeur de lambda en utilisant une décroissance exponentielle ou autre .. étape d’entraînement, lorsque la perte calculée avec le paramètre lambda précédemment associé a cessé de diminuer.

41
nessuno

Selon mon expérience, il n’a pas de sens (et ne fonctionne pas bien) de réduire le taux d’apprentissage avec Adam optimizer.

La théorie est qu'Adam gère déjà l'optimisation du taux d'apprentissage ( vérifier la référence ):

"Nous proposons Adam, une méthode d'optimisation stochastique efficace qui Ne nécessite que des gradients de premier ordre avec peu de mémoire requise La méthode calcule les vitesses d'apprentissage adaptatives individuelles pour différents paramètres de. et les seconds moments des gradients Le nom Adam est dérivé de l’estimation adaptative des moments. "

Comme pour tout problème d’apprentissage en profondeur YMMV, la taille unique ne convient pas à tous, vous devez essayer différentes approches et voir ce qui fonctionne pour vous, etc.

22
j314erre

Oui absolument. De par ma propre expérience, il est très utile pour Adam d’affaiblir son taux d’apprentissage. Sans décroissance, vous devez définir un très petit taux d’apprentissage afin que la perte ne commence pas à diverger après une diminution jusqu’à un point. Ici, je poste le code pour utiliser Adam avec une décélération du taux d’apprentissage à l’aide de TensorFlow. J'espère que c'est utile pour quelqu'un.

decayed_lr = tf.train.exponential_decay(learning_rate,
                                        global_step, 10000,
                                        0.95, staircase=True)
opt = tf.train.AdamOptimizer(decayed_lr, epsilon=adam_epsilon)
1
Wenmin-Wu

Adam a un taux d’apprentissage unique, mais c’est un taux maximum qui est adaptatif. Par conséquent, je ne pense pas que beaucoup de personnes utilisent la planification du taux d’apprentissage avec ce taux. 

En raison de la nature adaptative, le taux de défaut est relativement robuste, mais vous souhaiterez peut-être l’optimiser à certains moments. Ce que vous pouvez faire est de trouver au préalable un taux de défaut optimal en commençant par un taux très faible et en l’augmentant jusqu’à ce que la perte cesse de diminuer, puis examinez la pente de la courbe de perte et choisissez le taux d’apprentissage associé à la diminution la plus rapide de la perte ( pas le point où la perte est réellement la plus basse). Jeremy Howard le mentionne dans le cours d’apprentissage en profondeur fast.ai et dans le document Cyclical Learning Rates.

0
Austin