Во введении я только что изменился
loss = tf.reduce_mean(tf.square(y - y_data))
в
loss = tf.reduce_mean(tf.abs(y - y_data))
и модель не в состоянии узнать, потеря только стала больше со временем. Почему?
источник
Во введении я только что изменился
loss = tf.reduce_mean(tf.square(y - y_data))
в
loss = tf.reduce_mean(tf.abs(y - y_data))
и модель не в состоянии узнать, потеря только стала больше со временем. Почему?
Я попробовал это и получил тот же результат.
Именно потому, что .abs
простому оптимизатору сложнее проследить до минимума градиент, в отличие от квадрата разности, когда градиент медленно приближается к нулю, градиент абсолютной разности имеет фиксированную величину, которая резко меняется на противоположную, что приводит к колебаниям оптимизатора вокруг минимальная точка. Базовый градиентный спуск очень чувствителен к величине градиента и скорости обучения, которая, по сути, является просто множителем градиента для размеров шагов.
Самое простое решение - снизить скорость обучения, например, изменить строку
optimizer = tf.train.GradientDescentOptimizer(0.5)
в
optimizer = tf.train.GradientDescentOptimizer(0.05)
Также поиграйте с разными оптимизаторами. Некоторые смогут .abs
лучше справиться с потерей.