Adam optimizer con decadencia exponencial

53

En la mayoría de los códigos de Tensorflow, he visto que Adam Optimizer se usa con una tasa de aprendizaje constante de 1e-4(es decir, 0,0001). El código generalmente tiene el siguiente aspecto:

...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)

Me pregunto si es útil usar la disminución exponencial cuando se usa el optimizador Adam, es decir, usar el siguiente código:

...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)

Por lo general, las personas usan algún tipo de disminución de la tasa de aprendizaje, para Adam parece poco común. ¿Hay alguna razón teórica para esto? ¿Puede ser útil combinar el optimizador Adam con la descomposición?

MarvMind
fuente
¿Cómo se obtiene la variable de paso para actualizar con cada iteración?
perrohunter
@perrohunter: use el global_stepparámetro de minimize. Ver editar.
Charles Staats
99
Nota: 1e-4= 0.0001no 0.0004.
Cliff AB
Veo que asignas "global_step = step" pero no veo cómo se actualiza la variable "step" ... ¿puedes aclarar por favor?
Diego
@Diego: respuesta tardía pero: pasar la variable de paso para minimizar ya que es el parámetro global_step hace que la función minimizar aumente el parámetro global_step cada vez que se llama a minimizar. Consulte la documentación para minimizar. Tenga en cuenta que esto significa que al hacer mini lotes, la variable de paso se actualiza para cada mini lote, no solo para cada época.
dimpol

Respuestas:

37

Hablando empíricamente: definitivamente pruébelo, puede encontrar algunas heurísticas de entrenamiento muy útiles, en cuyo caso, ¡comparta!

Por lo general, las personas usan algún tipo de descomposición, para Adam parece poco común. ¿Hay alguna razón teórica para esto? ¿Puede ser útil combinar el optimizador Adam con la descomposición?

No he visto suficiente código de personas usando el optimizador ADAM para decir si esto es cierto o no. Si es cierto, quizás sea porque ADAM es relativamente nuevo y las "mejores prácticas" de disminución de la tasa de aprendizaje aún no se han establecido.

αt=α/ /t

En pocas palabras: no creo que nada en la teoría desaliente el uso de reglas de disminución de la tasa de aprendizaje con ADAM. He visto a personas informar algunos buenos resultados con ADAM y encontrar algunas buenas heurísticas de entrenamiento sería increíblemente valioso.

AI independiente
fuente
12

La razón por la cual la mayoría de las personas no usa la disminución de la tasa de aprendizaje con Adam es que el algoritmo sí lo hace de la siguiente manera:

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

donde t0es el paso de tiempo inicial, y lr_tes la nueva tasa de aprendizaje utilizada.

Almanzt
fuente
44
No estoy seguro si este es el caso. El factor sqrt(1 - beta2^t) / (1 - beta1^t)no decae. Parece compensar la inicialización de las estimaciones de primer y segundo momento.
Jueves
25
Esta respuesta es incorrecta. Ese factor se acerca a 1.0 cuando t va al infinito. Nota al margen: learning_rate aquí es fijo . No es la tasa de aprendizaje en el tiempo t-1.
rd11
8

Adam usa la tasa de aprendizaje inicial, o el tamaño del paso de acuerdo con la terminología del documento original, mientras calcula adaptativamente las actualizaciones. El tamaño del paso también ofrece un límite aproximado para las actualizaciones. En este sentido, creo que es una buena idea reducir el tamaño del paso hacia el final del entrenamiento. Esto también está respaldado por un trabajo reciente de NIPS 2017: El valor marginal de los métodos de gradiente adaptativo en el aprendizaje automático .

La última línea en la Sección 4: Experimentos de aprendizaje profundo dice

Aunque la sabiduría convencional sugiere que Adam no requiere ajuste, encontramos que ajustar el índice de aprendizaje inicial y el esquema de decaimiento para Adam produce mejoras significativas sobre su configuración predeterminada en todos los casos.

Por último, pero no menos importante, el documento sugiere que usemos SGD de todos modos.

Murat Seckin Ayhan
fuente
2

Estoy de acuerdo con la opinión de @Indie AI, aquí proporciono otra información:

De CS231n :

... Muchos de estos métodos aún pueden requerir otras configuraciones de hiperparámetros, pero el argumento es que se comportan bien para un rango más amplio de valores de hiperparámetros que la tasa de aprendizaje sin procesar. ...

Y también del artículo Rethinking the Inception Architecture for Computer Vision Sección 8:

... mientras que nuestros mejores modelos se lograron usando RMSProp [21] con una disminución de 0.9 y ε = 1.0. Utilizamos una tasa de aprendizaje de 0.045, decaída cada dos épocas usando una tasa exponencial de 0.94. ...

llj098
fuente
2

Entrené un conjunto de datos con datos realmente fáciles, si una persona se considera gorda o no, altura y peso, creando datos que calculan el IMC, y si es mayor de 27 años, la persona está gorda. Datos básicos muy fáciles. Cuando uso a Adam como optimizador, y una tasa de aprendizaje de 0.001, la precisión solo me dará alrededor del 85% durante 5 epocs, superando al máximo el 90% con más de 100 epocs probados.

Pero cuando se carga de nuevo al 85%, y con una tasa de aprendizaje de 0.0001, la precisión superará las 3 épocas hasta el 95%, y 10 épocas más es alrededor del 98-99%. No estoy seguro de si la tasa de aprendizaje puede ser inferior a 4 dígitos 0.0001, pero al cargar el modelo nuevamente y usar 0.00001, el valor oscilará entre 99.20 y 100% y no bajará. Una vez más, no estoy seguro de si la tasa de aprendizaje se consideraría 0, pero de todos modos, eso es lo que tengo ...

Todo esto usando categorical_crossentropy, pero mean_square lo lleva al 99-100% también haciendo este método. AdaDelta, AdaGrad, Nesterov no pudieron obtener una precisión superior al 65%, solo por una nota.

WoodyDRN
fuente
0

La disminución de la tasa de aprendizaje en Adam es la misma que en RSMProp (como puede ver en esta respuesta ), y eso se basa principalmente en la magnitud de los gradientes anteriores para eliminar las oscilaciones . Por lo tanto, la disminución exponencial (para una tasa de aprendizaje decreciente a lo largo del proceso de entrenamiento) se puede adoptar al mismo tiempo. Todos disminuyen la tasa de aprendizaje, pero con diferentes propósitos .

Lerner Zhang
fuente