¿Por qué TensorFlow no puede ajustar el modelo lineal simple si estoy minimizando el error medio absoluto en lugar del error cuadrático medio?
-
16-10-2019 - |
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é?
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.