Pourquoi tensorflow ne peut pas s'adapter modèle linéaire simple si je minimise l'erreur moyenne absolue au lieu de l'erreur quadratique moyenne?
-
16-10-2019 - |
Question
Présentation 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 la perte tout est devenu plus grand avec le temps. Pourquoi?
La solution
J'ai essayé et a même résultat.
Il est parce que le gradient de .abs
est plus difficile pour un simple Optimiseur de suivre aux minima, à la différence de différence au carré où les approches de gradient zéro lentement, le gradient de la différence absolue a une valeur fixe qui brusquement de revers, ce qui tend à rendre la oscillent Optimiseur autour du point minimum. descente de gradient de base est très sensible à l'amplitude du gradient, et le taux d'apprentissage, qui est essentiellement juste un multiplicateur du gradient de tailles de pas.
La solution la plus simple est de réduire le taux d'apprentissage par exemple ligne de changement
optimizer = tf.train.GradientDescentOptimizer(0.5)
à
optimizer = tf.train.GradientDescentOptimizer(0.05)
En outre, ont un jeu avec différents optimiseurs. Certains seront en mesure de faire face à la perte en fonction .abs
-mieux.