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?
global_step
parámetro deminimize
. Ver editar.1e-4
=0.0001
no0.0004
.Respuestas:
Hablando empíricamente: definitivamente pruébelo, puede encontrar algunas heurísticas de entrenamiento muy útiles, en cuyo caso, ¡comparta!
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.
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.
fuente
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:
donde
t0
es el paso de tiempo inicial, ylr_t
es la nueva tasa de aprendizaje utilizada.fuente
sqrt(1 - beta2^t) / (1 - beta1^t)
no decae. Parece compensar la inicialización de las estimaciones de primer y segundo momento.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
Por último, pero no menos importante, el documento sugiere que usemos SGD de todos modos.
fuente
Estoy de acuerdo con la opinión de @Indie AI, aquí proporciono otra información:
De CS231n :
Y también del artículo Rethinking the Inception Architecture for Computer Vision Sección 8:
fuente
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.
fuente
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 .
fuente