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?
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".
fuente
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.
fuente
Copiado-pegado de mi tesis de maestría :
fuente
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:
mientras t demuestra el número de iteración actual, alfa es hiperparámetro
mientras alfa y beta son hiperparámetros, g muestra gradiente
o
Espero que esto te ayude, buena suerte -)
fuente
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.
fuente
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.
fuente
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:
fuente