El documento de Adam dice: "...muchas funciones objetivo se componen de una suma de subfunciones evaluadas en diferentes submuestras de datos; en este caso la optimización puede hacerse más eficiente tomando pasos de gradiente con respecto a subfunciones individuales..." En este caso, lo que quieren decir es que la función objetivo es una suma de errores sobre los ejemplos de entrenamiento, y el entrenamiento puede hacerse sobre ejemplos individuales o sobre minilotes. Esto es lo mismo que en el descenso de gradiente estocástico (SGD), que es más eficiente para los problemas a gran escala que el entrenamiento por lotes porque las actualizaciones de los parámetros son más frecuentes.
En cuanto a por qué funciona Adam, utiliza algunos trucos.
Uno de estos trucos es el impulso, que puede dar una convergencia más rápida. Imagina una función objetivo que tiene la forma de un cañón largo y estrecho que se inclina gradualmente hacia un mínimo. Digamos que queremos minimizar esta función utilizando el descenso de gradiente. Si partimos de algún punto de la pared del cañón, el gradiente negativo apuntará en la dirección del descenso más pronunciado, es decir, principalmente hacia el fondo del cañón. Esto se debe a que las paredes del cañón son mucho más empinadas que la pendiente gradual del cañón hacia el mínimo. Si el ritmo de aprendizaje (es decir, el tamaño del paso) es pequeño, podríamos descender hasta el fondo del cañón y luego seguirlo hacia el mínimo. Pero el progreso sería lento. Podríamos aumentar la tasa de aprendizaje, pero esto no cambiaría la dirección de los pasos. En este caso, sobrepasaríamos el suelo del cañón y acabaríamos en la pared opuesta. Entonces repetiríamos este patrón, oscilando de pared en pared mientras avanzamos lentamente hacia el mínimo. El impulso puede ayudar en esta situación.
El impulso significa simplemente que alguna fracción de la actualización anterior se añade a la actualización actual, de modo que las actualizaciones repetidas en una dirección concreta se componen; acumulamos impulso, moviéndonos cada vez más rápido en esa dirección. En el caso del cañón, se acumula impulso en la dirección del mínimo, ya que todas las actualizaciones tienen un componente en esa dirección. Por el contrario, el movimiento de ida y vuelta a través de las paredes del cañón implica invertir constantemente la dirección, por lo que el impulso ayudaría a amortiguar las oscilaciones en esas direcciones.
Otro truco que utiliza Adam es seleccionar de forma adaptativa una tasa de aprendizaje distinta para cada parámetro. Los parámetros que normalmente recibirían actualizaciones más pequeñas o menos frecuentes reciben actualizaciones más grandes con Adam (lo contrario también es cierto). Esto acelera el aprendizaje en los casos en los que las tasas de aprendizaje adecuadas varían según los parámetros. Por ejemplo, en las redes profundas, los gradientes pueden ser pequeños en las primeras capas, y tiene sentido aumentar las tasas de aprendizaje para los parámetros correspondientes. Otra ventaja de este enfoque es que, como las tasas de aprendizaje se ajustan automáticamente, el ajuste manual es menos importante. El SGD estándar requiere un ajuste cuidadoso (y posiblemente en línea) de las tasas de aprendizaje, pero esto es menos cierto con Adam y los métodos relacionados. Sigue siendo necesario seleccionar los hiperparámetros, pero el rendimiento es menos sensible a ellos que a las tasas de aprendizaje de SGD.
Métodos relacionados :
El impulso se utiliza a menudo con la SGD estándar. Una versión mejorada se denomina impulso de Nesterov o gradiente acelerado de Nesterov. Otros métodos que utilizan tasas de aprendizaje ajustadas automáticamente para cada parámetro son Adagrad, RMSprop y Adadelta. RMSprop y Adadelta solucionan un problema de Adagrad que podía hacer que el aprendizaje se detuviera. Adam es similar a RMSprop con impulso. Nadam modifica a Adam para que utilice el impulso Nesterov en lugar del impulso clásico.
Referencias :
Kingma y Ba (2014) . Adam: Un método de optimización estocástica.
Goodfellow et al. (2016) . Aprendizaje profundo, capítulo 8.
Diapositivas del curso de Geoff Hinton
Dozat (2016) . Incorporación del impulso de Nesterov a Adam.