Estoy usando tensorflow para escribir redes neuronales simples para un poco de investigación y he tenido muchos problemas con los pesos 'nan' durante el entrenamiento. Probé muchas soluciones diferentes, como cambiar el optimizador, cambiar la pérdida, el tamaño de los datos, etc., pero fue en vano. Finalmente, noté que un cambio en la tasa de aprendizaje hizo una diferencia increíble en mis pesos.
Usando una tasa de aprendizaje de .001 (que pensé que era bastante conservadora), la función minimizar aumentaría la pérdida exponencialmente. Después de una época, la pérdida podría saltar de un número de miles a un billón y luego al infinito ('nan'). Cuando bajé la tasa de aprendizaje a .0001, todo funcionó bien.
1) ¿Por qué un solo orden de magnitud tiene tal efecto?
2) ¿Por qué la función minimizar realiza literalmente lo contrario de su función y maximiza la pérdida? Me parece que eso no debería ocurrir, sin importar la tasa de aprendizaje.
Respuestas:
Puede encontrar útil el Capítulo 8 de Deep Learning . En él, los autores discuten el entrenamiento de modelos de redes neuronales. Es muy complejo, así que no me sorprende que estés teniendo dificultades.
Una posibilidad (además del error del usuario) es que su problema está muy mal condicionado. Los métodos de descenso de gradiente utilizan solo la primera información derivada (gradiente) al calcular una actualización. Esto puede causar problemas cuando la segunda derivada (el hessiano) está mal condicionada.
Cita de los autores:
Los autores proporcionan una derivación simple para mostrar que este puede ser el caso. Usando el descenso de gradiente, la función de costo debería cambiar (a segundo orden) por
fuente
Hay dos razones principales. Primero, no está utilizando los mismos datos en el primer paso que en el segundo. Si en el primer paso el modelo aprende esos valores y cae en un mínimo local, entonces es muy probable que produzca una mayor pérdida para los nuevos valores.
La segunda razón es la forma de la función de costo. Intenta minimizar el valor en pequeños pasos, la longitud de esos pasos viene dada por dos factores: el gradiente y la tasa de aprendizaje. Imagen su función es como x ^ 2. Si sus valores están cerca de 0, el gradiente será más pequeño que si fuera más, pero si su tasa de aprendizaje es grande, entonces, en lugar de acercarse a 0, aumentará el error porque su nuevo punto se basa en la calificación y la tasa de aprendizaje está más allá de 0 que su paso anterior. Y esto puede suceder varias veces.
Eche un vistazo a este enlace: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html
Si ve las cifras con alfa 0.01 y alfa 0.12, verá cómo en la primera figura la tasa de aprendizaje es pequeña y, por lo tanto, el gradiente se acerca al mínimo, pero en el segundo caso la tasa de aprendizaje es tan grande que el gradiente se mueve más allá en cada paso.
fuente