Elegir una tasa de aprendizaje


85

Actualmente estoy trabajando en implementar el Descenso de gradiente estocástico SGD, para redes neuronales que usan propagación hacia atrás, y aunque entiendo su propósito, tengo algunas preguntas sobre cómo elegir valores para la tasa de aprendizaje.

  • ¿La tasa de aprendizaje está relacionada con la forma del gradiente de error, ya que dicta la tasa de descenso?
  • Si es así, ¿cómo utiliza esta información para informar su decisión sobre un valor?
  • Si no es qué tipo de valores debo elegir, y ¿cómo debo elegirlos?
  • Parece que desearía valores pequeños para evitar rebasar, pero ¿cómo elige uno para no quedarse atascado en los mínimos locales o tardar demasiado en descender?
  • ¿Tiene sentido tener una tasa de aprendizaje constante, o debería usar alguna métrica para alterar su valor a medida que me acerco al mínimo en el gradiente?

En resumen: ¿Cómo elijo la tasa de aprendizaje para SGD?

Respuestas:


69
  • ¿La tasa de aprendizaje está relacionada con la forma del gradiente de error, ya que dicta la tasa de descenso?

    • En simple SGD, la respuesta es no. Se utiliza una tasa de aprendizaje global que es indiferente al gradiente de error. Sin embargo, la intuición a la que está llegando ha inspirado varias modificaciones de la regla de actualización de SGD.
  • Si es así, ¿cómo utiliza esta información para informar su decisión sobre un valor?

    • Adagrad es el más conocido de estos y escala una tasa de aprendizaje global η en cada dimensión basada en la norma l2 de la historia del gradiente de error gt en cada dimensión:

      ingrese la descripción de la imagen aquí

    • Adadelta es otro algoritmo de entrenamiento de este tipo que utiliza tanto el historial de gradiente de error como adagrad como el historial de actualización de peso y tiene la ventaja de no tener que establecer una tasa de aprendizaje .

  • Si no es qué tipo de valores debo elegir, y ¿cómo debo elegirlos?

    • Establecer tasas de aprendizaje para SGD simple en redes neuronales suele ser un proceso de comenzar con un valor sensato como 0.01 y luego realizar una validación cruzada para encontrar un valor óptimo. Los valores típicos varían en unos pocos órdenes de magnitud desde 0.0001 hasta 1.
  • Parece que querría valores pequeños para evitar sobrepasar, pero ¿cómo elige uno para no quedarse atascado en los mínimos locales o tomar demasiado tiempo para descender? ¿Tiene sentido tener una tasa de aprendizaje constante, o debería usar alguna métrica para alterar su valor a medida que me acerco al mínimo en el gradiente?

    • Por lo general, el mejor valor está cerca de la tasa de aprendizaje estable más alta y el decaimiento / recocido de la tasa de aprendizaje (ya sea lineal o exponencial) se utiliza en el transcurso del entrenamiento. La razón detrás de esto es que al principio hay una señal clara de aprendizaje, por lo que las actualizaciones agresivas fomentan la exploración, mientras que más tarde, las tasas de aprendizaje más pequeñas permiten una explotación más delicada de la superficie de error local.

1
En la práctica, utilizará una tasa de aprendizaje con adadelta. En algunos problemas no funciona sin él.
bayer

Cabe señalar que el optimizador Adam es más habitual que Adagrad o Adadelta en estos días.
E_net4 sigue en huelga el

22

A continuación hay una muy buena nota (página 12) sobre la tasa de aprendizaje en redes neuronales (propagación posterior) por Andrew Ng. Encontrará detalles relacionados con la tasa de aprendizaje.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Para su 4º punto, tiene razón en que normalmente uno tiene que elegir una tasa de aprendizaje "equilibrada", que no debe exceder ni converger demasiado lentamente. Se puede trazar la tasa de aprendizaje con el descenso de la función de costo para diagnosticar / afinar. En la práctica, Andrew normalmente usa el algoritmo L-BFGS (mencionado en la página 12) para obtener una tasa de aprendizaje "suficientemente buena".


9

Seleccionar una tasa de aprendizaje es un ejemplo de un "metaproblema" conocido como optimización de hiperparámetro . La mejor tasa de aprendizaje depende del problema en cuestión, así como de la arquitectura del modelo que se está optimizando, ¡e incluso del estado del modelo en el proceso de optimización actual! Incluso hay paquetes de software dedicados a la optimización de hiperparámetros como la hierbabuena y el hiperopt (¡solo un par de ejemplos, hay muchos otros!).

Además de la optimización de hiperparámetros a gran escala, quería mencionar una técnica que es bastante común para seleccionar las tasas de aprendizaje que no se ha mencionado hasta ahora. El recocido simulado es una técnica para optimizar un modelo mediante el cual uno comienza con una gran tasa de aprendizaje y reduce gradualmente la tasa de aprendizaje a medida que avanza la optimización. En general, optimiza su modelo con una gran tasa de aprendizaje (0.1 más o menos), y luego reduce progresivamente esta tasa, a menudo en un orden de magnitud (hasta 0.01, luego 0.001, 0.0001, etc.).

Esto se puede combinar con una detención temprana para optimizar el modelo con una tasa de aprendizaje siempre que se esté progresando, luego cambie a una tasa de aprendizaje más pequeña una vez que el progreso parezca disminuir. Las tasas de aprendizaje más grandes parecen ayudar al modelo a localizar regiones de óptimas generales a gran escala, mientras que las tasas más pequeñas ayudan al modelo a enfocarse en un óptimo local particular.


6

Copiado-pegado de mi tesis de maestría :

  • Si la pérdida no disminuye durante varias épocas, la tasa de aprendizaje podría ser demasiado baja. El proceso de optimización también podría estar atascado en un mínimo local.
  • La pérdida de NAN podría deberse a tasas de aprendizaje demasiado altas. Otra razón es la división por cero o tomar el logaritmo de cero.
  • Seguimiento de la actualización de peso: Andrej Karpathy propuso en la quinta conferencia de CS231n para realizar un seguimiento de las actualizaciones de peso para verificar si la tasa de aprendizaje está bien elegida. Sugiere que la actualización de peso debe ser del orden de 10-3. Si la actualización de peso es demasiado alta, entonces la tasa de aprendizaje debe reducirse. Si la actualización de peso es demasiado baja, entonces se debe aumentar la tasa de aprendizaje.
  • Las tasas de aprendizaje típicas están en [0.1, 0.00001]

4

La tasa de aprendizaje, transformada como "tamaño de paso" durante nuestro proceso de iteración, ha sido un tema candente durante años, y continuará.

Hay tres opciones para el tamaño del paso en mi preocupación:

  • Uno está relacionado con el " tiempo ", y cada dimensión debe compartir el mismo tamaño de paso. Es posible que hayas notado algo como

αt

mientras t demuestra el número de iteración actual, alfa es hiperparámetro

  • el siguiente está conectado con gradiente , y cada dimensión tiene su propio tamaño de paso. Es posible que hayas notado algo como

1αβ+s=1t1gs2αβ+s=1tgs2

mientras alfa y beta son hiperparámetros, g muestra gradiente

  • la última es la combinación de tiempo y gradiente , y debería ser como

1αβ+s=1t1gs2αβ+s=1tgs2+γt

o

1αβ+s=1t1gs2αβ+s=1tgs2γt

Espero que esto te ayude, buena suerte -)


¿Tiene una referencia para esto?
Jon

Puede consultar la parte de tasa de aprendizaje de FTRL, podemos formularla con TIME y GRADIENT.
Joe

3

Las redes neuronales a menudo se entrenan por el descenso de gradiente en los pesos. Esto significa que en cada iteración usamos la propagación hacia atrás para calcular la derivada de la función de pérdida con respecto a cada peso y restarlo de ese peso. Sin embargo, si realmente intenta eso, los pesos cambiarán demasiado en cada iteración, lo que los hará "sobrecorregidos" y la pérdida aumentará / divergerá. Entonces, en la práctica, las personas generalmente multiplican cada derivada por un pequeño valor llamado "tasa de aprendizaje" antes de restarlo de su peso correspondiente.

También puede pensar en una función de pérdida de redes neuronales como una superficie, donde cada dirección en la que puede moverse representa el valor de un peso. El descenso de gradiente es como dar saltos en la dirección actual de la pendiente, y la velocidad de aprendizaje es como la longitud del salto que das.


3

Además de la respuesta de David, en fastai es donde encontré el concepto de encontrar la mejor tasa de aprendizaje para esos datos, utilizando una arquitectura particular.

Pero esa cosa existe solo en fastai / pytorch. Recientemente alguien hizo una implementación de Keras .

que a su vez se basan en estos documentos:

Espero que esto ayude.


2

Permítanme dar una breve introducción a otro enfoque para elegir la tasa de aprendizaje, basado en el curso 1. Aprendizaje profundo de Jeremy Howard . Si desea profundizar más, vea esta publicación de blog .

La tasa de aprendizaje propuesta en el curso de Jeremy Howard se basa en una forma sistemática de probar diferentes tasas de aprendizaje y elegir la que hace que la función de pérdida disminuya más. Esto se realiza alimentando muchos lotes al método de descenso de gradiente de mini lotes y aumentando la tasa de aprendizaje de cada nuevo lote que alimente al método. Cuando la tasa de aprendizaje es muy pequeña, la función de pérdida disminuirá muy lentamente. Cuando la tasa de aprendizaje es muy grande, la función de pérdida aumentará. Entre estos dos regímenes, hay una tasa de aprendizaje óptima para la cual la función de pérdida disminuye más rápidamente. Esto se puede ver en la siguiente figura:

ingrese la descripción de la imagen aquí

103