Pregunta

Actualmente estoy trabajando en la implementación estocástico pendiente de descenso, SGD, para las redes neuronales utilizando propagación hacia atrás, y si bien entiendo su propósito tengo algunas preguntas acerca de cómo elegir los valores de la tasa de aprendizaje.

  • ¿Es la tasa de aprendizaje relacionados con la forma del gradiente de error, ya que determina la velocidad de descenso?
  • Si es así, ¿cómo se utiliza esta información para informar su decisión acerca de un valor?
  • Si no es qué tipo de valores debería elegir, y cómo debería elegir ellos?
  • Parece que le gustaría que los valores pequeños para evitar traspasar, pero ¿cómo elegir uno de esos que no se tiene que quedar en mínimos locales o tomar a tiempo para descender?
  • ¿tiene sentido tener una tasa de aprendizaje constante, o debería usar alguna métrica para alterar su valor como llegue más cerca de un mínimo en el gradiente?

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

¿Fue útil?

Solución

  • es la tasa de aprendizaje relacionado con la forma del gradiente de error, como se dicta la velocidad de descenso?

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

    • Adagrad es el más ampliamente conocido de estos y las escalas de una tasa de aprendizaje global ? en cada dimensión basado en la norma L2 de la historia de la gradiente de error gt en cada dimensión:

      introducir descripción de la imagen aquí

    • Adadelta es otro de estos algoritmo de entrenamiento que utiliza tanto la historia gradiente de error como adagrad y la actualización de peso historia y tiene la ventaja de no tener que establecer una tasa de aprendizaje en todos los .

  • Si no es qué tipo de valores debería elegir, y cómo debería elegir ellos?

    • Configuración de las tasas de aprendizaje para SGD normal en redes neuronales es por lo general una proceso de iniciar con un valor de cuerdo como 0,01 y luego hacer la validación cruzada para encontrar un valor óptimo. Los valores típicos oscilan sobre unos pocos órdenes de magnitud de 0,0001 hasta 1.
  • Parece que le gustaría que los valores pequeños para evitar traspasar, pero ¿Cómo se elige uno de esos que no se tiene que quedar en mínimos locales o tomar demasiado tiempo para descender? ¿Tiene sentido para tener una tasa de aprendizaje constante, o debería usar alguna métrica para alterar su valor como llegue más cerca de un mínimo en el gradiente?

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

Otros consejos

A continuación se muestra una muy buena nota (página 12) en la tasa de aprendizaje en Redes Neuronales (Volver Propagación) por Andrew Ng. Encontrará los detalles relativos a la tasa de aprendizaje.

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

Para su cuarto punto, usted correcto que normalmente uno tiene que elegir una tasa de aprendizaje "equilibrado", que no deberían ni exceso ni convergen con demasiada lentitud. Se puede trazar la tasa de aprendizaje w.r.t. el descenso de la función de costo para diagnosticar / afinar. En la práctica, Andrew normalmente utiliza el algoritmo de L-BFGS (mencionado en la página 12) para obtener una "suficientemente bueno" tasa de aprendizaje.

Selección de la tasa de aprendizaje es un ejemplo de un "meta-problema", conocido como hiperparámetro optimización . La mejor tasa de aprendizaje depende del problema en cuestión, así como en la arquitectura del modelo que se está optimizado, e incluso sobre el estado del modelo en el proceso de optimización actual! Hay incluso paquetes de software dedicados a la optimización hiperparámetro como menta verde y hyperopt (sólo un par de ejemplos, hay muchos otros!).

Además de la optimización hiperparámetro a gran escala, que quería mencionar una técnica que es bastante común para la selección de los tipos de aprendizaje que no se ha mencionado hasta ahora. de recocido simulado es una técnica para la optimización de un modelo en el que se parte de una gran velocidad de aprendizaje y reduce gradualmente la tasa de aprendizaje a medida que avanza de optimización . Generalmente a optimizar su modelo con una tasa de aprendizaje de gran tamaño (0,1 o menos), y luego reducir progresivamente este tipo, a menudo por un orden de magnitud (por así 0,01, a continuación, 0,001, 0,0001, etc.).

Esto se puede combinar con temprana detener para optimizar el modelo con una tasa de aprendizaje, siempre y cuando se están haciendo progresos, luego cambiar a un ritmo de aprendizaje más pequeña una vez que el progreso parece lento. Los ritmos de aprendizaje más grandes parecen ayudar a localizar el modelo de las regiones en general, optima a gran escala, mientras que las tasas más pequeñas ayudan al modelo de foco en una óptima local en particular.

Copiar-pegar desde 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 atrapado en un mínimo local.
  • Pérdida siendo NAN podría deberse a muy altas tasas de aprendizaje. Otra razón es la división por cero o tomar el logaritmo de cero.
  • Peso actualización de seguimiento: Andrej Karpathy propone en la quinta conferencia del CS231n para rastrear cambios de peso para comprobar si la tasa de aprendizaje es bien elegido. Sugiere que la actualización de peso debe estar en el orden de 10-3. Si la actualización de peso es demasiado alto, entonces la tasa de aprendizaje tiene que ser disminuido. Si el actualización de peso es demasiado bajo, entonces la tasa de aprendizaje que se ha incrementado.
  • tasas de aprendizaje típicas están en [0,1, 0,00001]

tasa de aprendizaje, transformado como "tamaño de paso" durante el proceso de iteración, ha sido un tema candente durante años, y que va a continuar.

Hay tres opciones para el tamaño de paso en mi relación con:

  • Una está relacionada con " Tiempo ", y cada dimensión deberá compartir el mismo tamaño de paso. Es posible que tenga algo llamativo como

$ \ que \ enorme \ bf \ frac {\ alpha} {\ sqrt {t}} $

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

  • el próximo está conectado con gradiente , y cada dimensión tiene su tamaño de paso propio. Es posible que tenga algo llamativo como

$ \ que \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ Frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} $

mientras alfa y beta son parámetros hiper, g demuestra gradiente

  • la última es la combinación de tiempo y el gradiente , y se debe como

$ \ que \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} + \ frac {\ gamma} {\ sqrt {t}} $

o

$ \ que \ enorme \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} * \ frac {\ gamma} {\ sqrt {t}} $

Las esperanzas de que esto le ayudará, buena suerte -)

Las redes neuronales son a menudo entrenados por el descenso de gradiente en los pesos. Este medio en cada iteración que utilizan backpropagation para calcular la derivada de la función de pérdida con respecto a cada peso y restarlo de ese peso. Sin embargo, si en realidad se intenta que los pesos cambiarán demasiado cada iteración, lo que hará que “corregir en exceso” y la pérdida de hecho aumentará / divergen. Así, en la práctica, las personas tienden a multiplicarse cada derivado por un pequeño valor llamado la “tasa de aprendizaje” antes de restarlo de su peso correspondiente.

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

Añadir a la respuesta de David, en fastai es donde encontré el concepto de encontrar la mejor tasa de aprendizaje para que los datos, utilizando una arquitectura particular.

Pero eso sólo existe en fastai / pytorch. Recientemente, alguien hizo una Keras aplicación .

que a su vez se basa en estos documentos:

Espero que esto ayude.

Permítanme dar una breve introducción a otro enfoque sobre la elección de la tasa de aprendizaje, basado en profundo aprendizaje de Jeremy Howard curso 1. Si desea profundizar, ver esta entrada de blog .

La tasa de aprendizaje propuesto en el curso de Jeremy Howard se basa en una forma sistemática para probar diferentes ritmos de aprendizaje y elegir el que hace la función de pérdida bajar más. Esto se hace mediante la alimentación de muchos lotes con el método de descenso de gradiente mini-lotes, y el aumento de la tasa de aprendizaje de cada nuevo lote que alimenta al método. Cuando la tasa de aprendizaje es muy pequeño, la función de pérdida disminuirá muy lentamente. Cuando la tasa de aprendizaje es muy grande, la función de pérdida incrementará. Entre medio de estos dos regímenes, hay una tasa de aprendizaje óptimo para los que la función de pérdida disminuye el más rápido. Esto se puede ver en la figura siguiente:

introducir descripción de la imagen aquí

Vemos que la pérdida disminuye muy rápidamente cuando la tasa de aprendizaje es de alrededor de $ 10 ^ {- 3} $. Con este enfoque, tenemos una manera general, para elegir una aproximación para la mejor tasa de aprendizaje constante para nuestra netowork.

Licenciado bajo: CC-BY-SA con atribución
scroll top