Comprensión de los optimizadores de aprendizaje profundo: Momentum, AdaGrad, RMSProp y Adam

Obtenga intuición detrás de las técnicas de entrenamiento de aceleración en redes neuronales

Introducción

Aprendizaje profundo dio un paso de gigante en el mundo de la inteligencia artificial. En la actualidad, las redes neuronales superan a otros tipos de algoritmos en datos no tabulares: imágenes, vídeos, audio, etc. Los modelos de aprendizaje profundo suelen tener una gran complejidad y generan millones o incluso miles de millones de parámetros entrenables. Por eso es fundamental en la era moderna utilizar técnicas de aceleración para reducir el tiempo de entrenamiento.

Uno de los algoritmos más comunes realizados durante el entrenamiento es propagación hacia atrás que consiste en cambiar los pesos de una red neuronal con respecto a una función de pérdida determinada. La retropropagación generalmente se realiza mediante descenso de gradiente que intenta hacer converger la función de pérdida a un mínimo local paso a paso.

Resulta que el descenso de gradiente ingenuo no suele ser una opción preferible para entrenar una red profunda debido a su lenta tasa de convergencia. Esto se convirtió en una motivación para que los investigadores desarrollaran algoritmos de optimización que aceleraran el descenso del gradiente.

Antes de leer este artículo, es muy recomendable que esté familiarizado con el media móvil exponencial concepto que se utiliza en algoritmos de optimización. De lo contrario, puede consultar el artículo siguiente.

Explicación intuitiva de la media móvil exponencial

Descenso de gradiente

El descenso de gradiente es el algoritmo de optimización más simple que calcula los gradientes de la función de pérdida con respecto a los pesos del modelo y los actualiza mediante la siguiente fórmula:

Ecuación de descenso de gradiente. w es el vector de peso, dw es el gradiente de w, α es la tasa de aprendizaje, t es el número de iteración

Para comprender por qué el descenso del gradiente converge lentamente, veamos el siguiente ejemplo de un barranco donde se debe minimizar una función dada de dos variables.

Ejemplo de un problema de optimización con descenso de pendiente en una zona de barranco. El punto de partida se muestra en azul y el mínimo local se muestra en negro.

un barranco es un área donde la superficie es mucho más empinada en una dimensión que en otra

En la imagen, podemos ver que el punto de partida y los mínimos locales tienen coordenadas horizontales diferentes y son coordenadas verticales casi iguales. El uso del descenso de gradiente para encontrar los mínimos locales probablemente hará que la función de pérdida oscile lentamente hacia los ejes verticales. Estos rebotes ocurren porque el descenso del gradiente no almacena ningún historial sobre sus gradientes anteriores, lo que hace que los pasos del gradiente sean más indeterministas en cada iteración. Este ejemplo se puede generalizar a un mayor número de dimensiones.

En consecuencia, sería arriesgado utilizar una tasa de aprendizaje elevada, ya que podría generar desconvergencia.

Impulso

Con base en el ejemplo anterior, sería deseable crear una función de pérdida que realizara pasos más grandes en la dirección horizontal y pasos más pequeños en la vertical. De esta forma, la convergencia sería mucho más rápida. Este efecto lo logra exactamente Momentum.

Momentum utiliza un par de ecuaciones en cada iteración:

Ecuaciones de momento

La primera fórmula utiliza un promedio móvil exponencial para los valores de gradiente. dw. Básicamente, se hace para almacenar información de tendencias sobre un conjunto de valores de gradiente anteriores. La segunda ecuación realiza la actualización normal del descenso del gradiente utilizando el valor promedio móvil calculado en la iteración actual. α es la tasa de aprendizaje del algoritmo.

El impulso puede resultar particularmente útil en casos como el anterior. Imagine que hemos calculado gradientes en cada iteración como en la imagen de arriba. En lugar de simplemente usarlos para actualizar los pesos, tomamos varios valores pasados ​​y realizamos literalmente la actualización en la dirección promediada.

Sebastian Ruder describe de manera concisa el efecto de Momentum en su papel: “El término de impulso aumenta para las dimensiones cuyos gradientes apuntan en las mismas direcciones y reduce las actualizaciones para las dimensiones cuyos gradientes cambian de dirección. Como resultado, obtenemos una convergencia más rápida y una oscilación reducida”.

Como resultado, las actualizaciones realizadas por Momentum podrían verse como en la siguiente figura.

Optimización con impulso

En la práctica, Momentum suele converger mucho más rápido que el descenso de gradiente. Con Momentum, también existen menos riesgos al utilizar tasas de aprendizaje más altas, lo que acelera el proceso de capacitación.

En Momentum, se recomienda elegir β cercano a 0,9.

AdaGrad (algoritmo de gradiente adaptativo)

AdaGrad es otro optimizador cuyo objetivo es adaptar la tasa de aprendizaje a los valores de gradiente calculados. Pueden ocurrir situaciones en las que durante el entrenamiento, un componente del vector de peso tenga valores de gradiente muy grandes mientras que otro tenga valores de gradiente extremadamente pequeños. Esto sucede especialmente en los casos en que un parámetro del modelo poco frecuente parece tener poca influencia en las predicciones.. Vale la pena señalar que con parámetros frecuentes estos problemas no suelen ocurrir, ya que para su actualización el modelo utiliza muchas señales de predicción. Dado que se tiene en cuenta mucha información de las señales para el cálculo del gradiente, los gradientes suelen ser adecuados y representan una dirección correcta hacia el mínimo local. Sin embargo, este no es el caso de parámetros raros que pueden dar lugar a gradientes extremadamente grandes e inestables. El mismo problema puede ocurrir con datos escasos donde hay muy poca información sobre ciertas características.

AdaGrad aborda el problema antes mencionado. adaptando de forma independiente la tasa de aprendizaje para cada componente de peso. Si los gradientes correspondientes a un determinado componente del vector de peso son grandes, entonces la tasa de aprendizaje respectiva será pequeña. A la inversa, para gradientes más pequeños, la tasa de aprendizaje será mayor. De esta manera, Adagrad se ocupa de los problemas de gradiente que desaparecen y explotan.

Debajo del capó, Adagrad acumula cuadrados de elementos dw² de gradientes de todas las iteraciones anteriores. Durante la actualización del peso, en lugar de utilizar la tasa de aprendizaje normal α, AdaGrad la escala dividiendo α por la raíz cuadrada de los gradientes acumulados. √vₜ. Además, se agrega un pequeño término positivo ε al denominador para evitar una posible división por cero.

Ecuaciones de AdaGrad

La mayor ventaja de AdaGrad es que ya no es necesario ajustar manualmente la tasa de aprendizaje, ya que se adapta durante el entrenamiento. Sin embargo, hay un lado negativo de AdaGrad: la tasa de aprendizaje disminuye constantemente con el aumento de iteraciones (la tasa de aprendizaje siempre se divide por un número acumulativo positivo). Por lo tanto, el algoritmo tiende a converger lentamente durante las últimas iteraciones, donde llega a ser muy bajo.

Optimización con AdaGrad

RMSProp (propagación cuadrática media)

RMSProp se elaboró ​​como una mejora con respecto a AdaGrad que aborda el problema de la caída de la tasa de aprendizaje. De manera similar a AdaGrad, RMSProp utiliza un par de ecuaciones para las cuales la actualización del peso es absolutamente la misma.

Ecuaciones RMSProp

Sin embargo, en lugar de almacenar una suma acumulada de gradientes cuadrados dw² para vₜ, la media móvil exponencial se calcula para gradientes al cuadrado dw². Los experimentos muestran que RMSProp generalmente converge más rápido que AdaGrad porque, con el promedio móvil exponencial, pone más énfasis en los valores de gradiente recientes en lugar de distribuir equitativamente la importancia entre todos los gradientes simplemente acumulándolos desde la primera iteración. Además, en comparación con AdaGrad, la tasa de aprendizaje en RMSProp no siempre disminuye con el aumento de iteraciones, lo que permite adaptarse mejor en situaciones particulares.

Optimización con RMSProp

En RMSProp, se recomienda elegir β cercano a 1.

¿Por qué no utilizar simplemente un gradiente cuadrado para v? en lugar de la media móvil exponencial?

Se sabe que la media móvil exponencial distribuye ponderaciones más altas a los valores de gradiente recientes. Ésta es una de las razones por las que RMSProp se adapta rápidamente. Pero, ¿no sería mejor si en lugar de la media móvil sólo tuviéramos en cuenta el gradiente del último cuadrado en cada iteración (vₜ = dw²)? Resulta que la ecuación de actualización se transformaría de la siguiente manera:

Transformación de ecuaciones de RMSProp cuando se utiliza un gradiente al cuadrado en lugar de la media móvil exponencial

Como podemos ver, la fórmula resultante es muy similar a la utilizada en el descenso de gradiente. Sin embargo, en lugar de usar un valor de gradiente normal para la actualización, ahora usamos el signo del gradiente:

  • Si dw > 0luego un peso w se reduce en α.
  • Si dw < 0luego un peso w se incrementa en α.

En resumen, si vₜ = dw², entonces los pesos del modelo solo se pueden cambiar en ±α. Aunque este enfoque funciona a veces, todavía no es flexible, el algoritmo se vuelve extremadamente sensible a la elección de α y se ignoran las magnitudes absolutas del gradiente, lo que puede hacer que el método sea tremendamente lento para converger. Un aspecto positivo de este algoritmo es el hecho de que solo se requiere un bit para almacenar signos de gradientes, lo que puede resultar útil en cálculos distribuidos con requisitos estrictos de memoria.

Adam (estimación del momento adaptativo)

Por el momento, Adam es el algoritmo de optimización más famoso en aprendizaje profundo. A alto nivel, Adam combina los algoritmos Momentum y RMSProp. Para lograrlo, simplemente realiza un seguimiento de los promedios móviles exponenciales de los gradientes calculados y los gradientes cuadrados, respectivamente.

ecuaciones de adán

Además, es posible utilizar la corrección de sesgo para los promedios móviles para una aproximación más precisa de la tendencia del gradiente durante las primeras iteraciones. Los experimentos muestran que Adam se adapta bien a casi cualquier tipo de arquitectura de red neuronal aprovechando las ventajas tanto de Momentum como de RMSProp.

Optimización con Adam

De acuerdo con la papel adánlos buenos valores predeterminados para los hiperparámetros son β₁ = 0,9, β₂ = 0,999, ε = 1e-8.

Conclusión

Hemos analizado diferentes algoritmos de optimización en redes neuronales. Considerado como una combinación de Momentum y RMSProp, Adam es el más superior de ellos y se adapta sólidamente a grandes conjuntos de datos y redes profundas. Además, tiene una implementación sencilla y pocos requisitos de memoria, lo que la convierte en una opción preferible en la mayoría de situaciones.

Recursos

Todas las imágenes, a menos que se indique lo contrario, son del autor.


Comprensión de los optimizadores de aprendizaje profundo: Momentum, AdaGrad, RMSProp y Adam fue publicado originalmente en Hacia la ciencia de datos en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.