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

datascience.stackexchange https://datascience.stackexchange.com/questions/15190

Вопрос

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

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-СА на основе потеря лучше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с datascience.stackexchange
scroll top