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?

Brans Ds
la source

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.

Neil Slater
la source