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?
Respuestas:
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.
fuente
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
fuente
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:
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 ) αβ p.ej ∇ f( θt - 2) α
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
fuente
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.
fuente