Solución:
Eso depende. ADAM actualiza cualquier parámetro con una tasa de aprendizaje individual. Esto significa que cada parámetro de la red tiene asociada una tasa de aprendizaje específica.
Pero la tasa de aprendizaje única para el parámetro se calcula utilizando lambda (la tasa de aprendizaje inicial) como límite superior. Esto significa que cada tasa de aprendizaje puede variar de 0 (sin actualización) a lambda (actualización máxima).
Las tasas de aprendizaje se adaptan durante los pasos del tren, es cierto, pero si quieres estar seguro de que cada paso de actualización no exceda la lambda, puedes hacerlo con una lambda más baja usando un decaimiento exponencial o lo que sea. Puede ayudar a reducir la pérdida durante el último paso del entrenamiento, cuando la pérdida calculada con el parámetro lambda previamente asociado ha dejado de disminuir.
En mi experiencia, por lo general no es necesario reducir la tasa de aprendizaje con el optimizador de Adam.
La teoría es que Adam ya maneja la optimización de la tasa de aprendizaje (consulte la referencia):
“Proponemos Adam, un método para una optimización estocástica eficiente que solo requiere gradientes de primer orden con poca memoria. El método calcula las tasas de aprendizaje adaptativo individual para diferentes parámetros de estimaciones del primer y segundo momento de los gradientes; el nombre Adam se deriva de la estimación del momento adaptativo “.
Al igual que con cualquier problema de aprendizaje profundo YMMV, una talla no sirve para todos, debe probar diferentes enfoques y ver qué funciona para usted, etc., etc.
Si, absolutamente. Desde mi propia experiencia, es muy útil para Adam con la disminución de la tasa de aprendizaje. Sin deterioro, debe establecer una tasa de aprendizaje muy pequeña para que la pérdida no comience a divergir después de disminuir hasta un punto. Aquí, publico el código para usar Adam con disminución de la tasa de aprendizaje usando TensorFlow. Espero que sea de ayuda para alguien.
decayed_lr = tf.train.exponential_decay(learning_rate,
global_step, 10000,
0.95, staircase=True)
opt = tf.train.AdamOptimizer(decayed_lr, epsilon=adam_epsilon)