¿Por qué TensorFlow no puede ajustar el modelo lineal simple si estoy minimizando el error medio absoluto en lugar del error cuadrático medio?

datascience.stackexchange https://datascience.stackexchange.com/questions/15190

Pregunta

En Introducción Acabo de cambiar

loss = tf.reduce_mean(tf.square(y - y_data))

a

loss = tf.reduce_mean(tf.abs(y - y_data)) 

Y el modelo no puede aprender que la pérdida se hizo más grande con el tiempo. ¿Por qué?

¿Fue útil?

Solución

Intenté esto y obtuve el mismo resultado.

Es porque el gradiente de .abs es más difícil para un optimizador simple seguir a los mínimos, a diferencia de la diferencia al cuadrado donde el gradiente se acerca lentamente, el gradiente de la diferencia absoluta tiene una magnitud fija que se invierte abruptamente, lo que tiende a hacer que el optimizador oscile alrededor del punto mínimo. El descenso de gradiente básico es muy sensible a la magnitud del gradiente, y a la velocidad de aprendizaje, que es esencialmente solo un multiplicador del gradiente para los tamaños de pasos.

La solución más simple es reducir la línea de cambio de tasa de aprendizaje, por ejemplo,

optimizer = tf.train.GradientDescentOptimizer(0.5)

a

optimizer = tf.train.GradientDescentOptimizer(0.05)

Además, tenga una jugada con diferentes optimizadores. Algunos podrán hacer frente a .abs-La pérdida basada mejor.

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