Warum kann TensorFlow nicht einfaches lineares Modell passen, wenn ich den absoluten mittleren Fehler anstelle des mittleren quadratischen Fehlers minimiere?
-
16-10-2019 - |
Frage
Im Einführung Ich habe mich gerade verändert
loss = tf.reduce_mean(tf.square(y - y_data))
zu
loss = tf.reduce_mean(tf.abs(y - y_data))
Und das Modell kann nicht lernen, dass der Verlust mit der Zeit nur größer wurde. Wieso den?
Lösung
Ich habe es versucht und das gleiche Ergebnis erzielt.
Es ist, weil der Gradient von .abs
Es ist schwieriger, dass ein einfacher Optimierer dem Minima folgt, im Gegensatz zu quadratischer Differenz, bei dem sich der Gradienten langsam nähert, der Gradient der absoluten Differenz hat eine feste Größe, die sich abrupt umkehrt, was dazu neigt, den Optimierer um den Mindestpunkt zu schwingen. Grundlegende Gradientenabfälle sind sehr empfindlich gegenüber der Größe des Gradienten und der Lernrate, die im Wesentlichen nur ein Multiplikator des Gradienten für Schrittgrößen ist.
Die einfachste Lösung besteht darin, die Lernrate z. B. Änderungslinie zu reduzieren
optimizer = tf.train.GradientDescentOptimizer(0.5)
zu
optimizer = tf.train.GradientDescentOptimizer(0.05)
Machen Sie auch ein Spiel mit verschiedenen Optimierern. Einige werden in der Lage sein, mit damit fertig zu werden .abs
-Besserer Verlust besser.