Pourquoi TensorFlow ne peut pas s'adapter à un modèle linéaire simple si je minimise l'erreur moyenne absolue au lieu de l'erreur quadratique moyenne?


10

En introduction, je viens de changer

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

à

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

et le modèle est incapable d'apprendre que la perte est devenue plus importante avec le temps. Pourquoi?

Réponses:


17

J'ai essayé cela et j'ai obtenu le même résultat.

C'est parce que le gradient de .absest plus difficile pour un simple optimiseur à suivre les minima, contrairement à la différence au carré où le gradient s'approche lentement de zéro, le gradient de la différence absolue a une amplitude fixe qui s'inverse brusquement, ce qui a tendance à faire osciller l'optimiseur autour du point minimum. La descente de gradient de base est très sensible à l'amplitude du gradient et au taux d'apprentissage, qui n'est essentiellement qu'un multiplicateur du gradient pour les tailles de pas.

La solution la plus simple consiste à réduire le taux d'apprentissage, par exemple changer de ligne

optimizer = tf.train.GradientDescentOptimizer(0.5)

à

optimizer = tf.train.GradientDescentOptimizer(0.05)

Jouez également avec différents optimiseurs. Certains seront mieux en mesure de faire face .absà une perte fondée sur des données.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.