¿Cómo sintonizar (sistemáticamente) la tasa de aprendizaje teniendo Gradient Descent como Optimizer?


12

Un extraño al campo ML / DL; comenzó el curso Udacity Deep Learning que se basa en Tensorflow; haciendo la tarea 3 problema 4; tratando de ajustar la velocidad de aprendizaje con la siguiente configuración:

  • Tamaño de lote 128
  • Número de pasos: suficiente para llenar 2 épocas
  • Tamaños de capas ocultas: 1024, 305, 75
  • Inicialización de peso: truncada normal con estándar. desviación de sqrt (2 / n) donde n es el tamaño de la capa anterior
  • Probabilidad de abandono: 0.75
  • Regularización: no aplicada
  • Algoritmo de velocidad de aprendizaje: decaimiento exponencial

jugado con parámetros de velocidad de aprendizaje; no parecen tener efecto en la mayoría de los casos; código aquí ; resultados:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • ¿Cómo debo ajustar sistemáticamente la tasa de aprendizaje?
  • ¿Cómo se relaciona la tasa de aprendizaje con la cantidad de pasos?

1
tpot proporciona tuberías de sintonización automática ML
denfromufa

Respuestas:


4

Use un optimizador de descenso de gradiente. Este es un muy buen resumen.

Con respecto al código, eche un vistazo a este tutorial . Esto y esto son algunos ejemplos.

Personalmente, sugiero usar ADAM o RMSprop. Todavía hay algunos hiperparámetros para configurar, pero hay algunos "estándar" que funcionan el 99% del tiempo. Para ADAM puede ver su documento y para RMSprop en estas diapositivas .

EDITAR

Ok, ya usas un optimizador de gradiente. Luego puede realizar una optimización de hiperparámetros para seleccionar la mejor tasa de aprendizaje. Recientemente, se ha propuesto un enfoque automatizado . Además, Frank Hutter ha realizado muchos trabajos prometedores con respecto al ajuste automático de hiperparámetros.

Más en general, eche un vistazo al AutoML Challenge , donde también puede encontrar el código fuente de los equipos. En este desafío, el objetivo es automatizar el aprendizaje automático, incluido el ajuste de hiperparámetros.

Finalmente, este documento de LeCun y este tutorial muy reciente de DeepMin (consulte el Capítulo 8) brindan algunas ideas que podrían ser útiles para su pregunta.

De todos modos, tenga en cuenta que (especialmente para problemas fáciles), es normal que la tasa de aprendizaje no afecte mucho el aprendizaje cuando se usa un optimizador de descenso de gradiente. Por lo general, estos optimizadores son muy confiables y funcionan con diferentes parámetros.


Ya estoy usando Gradient Descent Optimizer en el código. Gracias por los enlaces!
Thoran

@Thoran Ok, no leí el código: D (y la pregunta no menciona un optimizador). He editado mi respuesta para darte más ayuda :)
Simon

Desarrollos agradables, hacen el trabajo más fácil para personas externas como <. ¿Sabe de alguna manera cómo se relacionan el número de pasos y la tasa de aprendizaje? Mi instinto me dice que si hay más pasos, el proceso de aprendizaje debería ser más lento.
Thoran

@Thoran Normalmente, sí, cuanto mayor sea el número de pasos, más lento será el proceso (pero también más estable). Además, edité mi respuesta agregando algunas referencias para algunos "trucos" que pueden ser útiles para ajustar manualmente los hiperparámetros.
Simon

cosas muy interesantes, me llevará un tiempo digerirlo: D
Thoran

1

Puede automatizar el ajuste de hiperparámetros en muchos algoritmos de aprendizaje automático, o solo los hiperparámetros para el optimizador de Descenso de gradiente, es decir, la tasa de aprendizaje.

Una biblioteca que ha sido popular por hacer esto es la menta verde.

https://github.com/JasperSnoek/spearmint


1

Se proporciona un sintonizador automático de tasa de aprendizaje muy reciente en Adaptación de la tasa de aprendizaje en línea con descenso de hipergrado

Este método es muy sencillo de implementar, el resultado central para SGD se da como:

αt=αt1+βf(θt1)Tf(θt2)

donde es un (hiper) hiperparámetro. El método también se aplica a otras actualizaciones basadas en gradiente ( métodos basados ​​en el momento). No se necesita un conjunto de validación: solo requiere almacenar el gradiente anterior, . La idea es utilizar la derivada parcial de la función objetivo wrt la tasa de aprendizaje ( ), para derivar una regla de actualización para alfa.p. f ( θ t - 2 ) αβe.g.f(θt2)α

Como anécdota, implementé esto además de mi problema existente y observé resultados mucho mejores. No o , pero elegí de los rangos sugeridos del documento.α 0βα0


0

Para ajustar los hiperparámetros (ya sea tasa de aprendizaje, tasa de disminución, regularización o cualquier otra cosa), debe establecer un conjunto de datos retenido; este conjunto de datos es disjunto de su conjunto de datos de entrenamiento. Después de ajustar varios modelos con diferentes configuraciones (donde una configuración = una elección particular de cada hiperparámetro), usted elige la configuración seleccionando la que maximice la precisión de retención.


¿En qué se diferencia el conjunto de datos retenido del conjunto de datos de prueba o validación?
Thoran

holdout es otro nombre para la validación. Básicamente tiene tres conjuntos de datos disjuntos: entrenar, aguantar y probar. El tren solo se usa para aprender pesos de modelos (p. Ej., Usando el descenso de gradiente). Heldout se usa para ajustar los parámetros del modelo. La prueba solo se usa para medir el rendimiento de generalización (es decir, ¿cómo puedo esperar que mi modelo funcione en datos no vistos?)
Alireza

Gracias @Alireza por tomarte tu tiempo para explicar. Ya estoy usando el conjunto de datos de validación. ¡Y sin prueba, no es posible medir la precisión!
Thoran

Bueno, su pregunta original era sobre la determinación de la tasa de aprendizaje: si la primera columna de su publicación original tenía precisión (no entrenamiento), entonces puede decir que 0.5 es mejor que 0.1 (aunque debe continuar probando valores> 0.5). [nota: si vuelve a hacer sus experimentos, simplemente particione algunos datos para que sirvan como prueba]
Alireza
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.