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, la pérdida se hizo más grande con el tiempo. ¿Por qué?
fuente
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, la pérdida se hizo más grande con el tiempo. ¿Por qué?
Intenté esto y obtuve el mismo resultado.
Es porque el gradiente de .abs
es más difícil para un optimizador simple de seguir a los mínimos, a diferencia de la diferencia al cuadrado donde el gradiente se aproxima lentamente a cero, 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 tasa de aprendizaje, que es esencialmente solo un multiplicador del gradiente para los tamaños de paso.
La solución más simple es reducir la tasa de aprendizaje, por ejemplo, cambiar la línea
optimizer = tf.train.GradientDescentOptimizer(0.5)
a
optimizer = tf.train.GradientDescentOptimizer(0.05)
Además, juega con diferentes optimizadores. Algunos podrán hacer .abs
frente mejor a la pérdida basada en.