Почему TensorFlow не может соответствовать простой линейной модели, если я минимизирую абсолютную среднюю ошибку вместо среднеквадратичной ошибки?

10

Во введении я только что изменился

loss = tf.reduce_mean(tf.square(y - y_data))

в

loss = tf.reduce_mean(tf.abs(y - y_data)) 

и модель не в состоянии узнать, потеря только стала больше со временем. Почему?

Бранс Дс
источник

Ответы:

17

Я попробовал это и получил тот же результат.

Именно потому, что .absпростому оптимизатору сложнее проследить до минимума градиент, в отличие от квадрата разности, когда градиент медленно приближается к нулю, градиент абсолютной разности имеет фиксированную величину, которая резко меняется на противоположную, что приводит к колебаниям оптимизатора вокруг минимальная точка. Базовый градиентный спуск очень чувствителен к величине градиента и скорости обучения, которая, по сути, является просто множителем градиента для размеров шагов.

Самое простое решение - снизить скорость обучения, например, изменить строку

optimizer = tf.train.GradientDescentOptimizer(0.5)

в

optimizer = tf.train.GradientDescentOptimizer(0.05)

Также поиграйте с разными оптимизаторами. Некоторые смогут .absлучше справиться с потерей.

Нил Слэйтер
источник