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?
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:
J'ai essayé cela et j'ai obtenu le même résultat.
C'est parce que le gradient de .abs
est 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.