52 votos

¿Cómo funciona el método Adam de descenso de gradiente estocástico?

Estoy familiarizado con los algoritmos básicos de descenso de gradiente para el entrenamiento de redes neuronales. He leído el documento que propone Adam: ADAM: UN MÉTODO DE OPTIMIZACIÓN ESTOCÁSTICA .

Aunque definitivamente tengo algunos En cuanto a las ideas (al menos), el documento me parece de un nivel demasiado alto en general. Por ejemplo, una función de costes $J(\theta)$ suele ser una suma de muchas funciones diferentes, por lo que hay que hacer una gran cantidad de cálculos para optimizar su valor; los descensos de gradiente estocásticos -por lo que estoy entendiendo del tema- calculan la optimización sólo para un subconjunto de estas funciones. Para mí no está claro, cómo Adam hace esto y por qué esto se traduce en una disminución del error de entrenamiento para el conjunto de $J(\theta)$ .

Creo que Adam actualiza su gradiente teniendo en cuenta el gradiente anterior. ¿Lo llaman algo así como utilizar el impulso? ¿Qué es exactamente este impulso? De acuerdo con el algoritmo en la página dos en el papel, es una especie de media móvil, como algunas estimaciones de los primeros y segundos momentos del gradiente "regular"?

En la práctica, sospecho que Adam permite utilizar tamaños de paso efectivos más grandes para disminuir el gradiente y, por tanto, el error de entrenamiento en combinación con la aproximación estocástica. Así, el vector de actualización resultante debería "saltar" más en las dimensiones espaciales, en lugar de describir alguna curva como harían los algoritmos normales de descenso de gradiente.

¿Puede alguien desmitificar cómo funciona Adán? Especialmente cómo converge, específicamente por qué el método de Adán trabajo y cuál es exactamente el beneficio?

50voto

throwaway Puntos 18

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.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X