2015-11-20 3 views
2

В линейной регрессии с 1 переменной я могу четко видеть линию предсказания сюжета, и я вижу, правильно ли она соответствует данным тренировки. Я просто создать сюжет с 1 переменными и выводом и построить линию прогнозирования на основе найденных значений Theta 0 и Theta 1. Таким образом, это выглядит следующим образом:
enter image description hereКак проверить, правильно ли сходится градиентный спуск с несколькими переменными?


Но как я могу проверить достоверность градиента результаты спуска выполняются по нескольким переменным/функциям. Например, если число функций равно 4 или 5. Как проверить правильность работы и найдены ли значения всех тэтов? Должен ли я полагаться только на функцию стоимости, построенную по количеству выполненных итераций?

ответ

3

Градиентный спуск сходится к локальному минимуму, что означает, что первая производная должна быть равна нулю, а вторая - неположительной. Проверка этих двух матриц подскажет, сходился ли алгоритм.

+2

Стоит отметить, что на практике производная редко бывает нулевой на практике (как и любое другое значение - достижение какого-либо определенного значения имеет почти нулевую вероятность в непрерывных функциях), кроме того, в арифметике точности «нуля» довольно странный термин. Обычно используются аппроксимации, такие как предположение, что 10е-20 равно нулю, что ** не означает, что оно сходится **, это означает только, что «поверхность ошибки настолько плоская, наша арифметика не проходит дальше» – lejlot

0

Мы можем думать о градиентном спуске как о чем-то решении проблемы f'(x) = 0 где f' обозначает градиент f. Для проверки этой проблемы конвергенции, насколько я знаю, стандартный подход для вычисления расхождения на каждой итерации и посмотреть, если он стремится к 0.
То есть, проверьте ||f'(x)|| (или квадрат) сходится к 0.

+0

этот ответ является подмножество ответа Дона Ребы – lejlot

+0

@lejlot, не согласен. Я понял ответ Дона Ребы (и ваш комментарий) в качестве совета по строгому сопоставлению производного с нолем – alexeykuzmin0

+1

, нет такой вещи, как «проверить, не сходится ли к нулю», нет способа проверить это иначе: сравнение, если значение равно малый (см. его ответ) или проверка, если он «не сильно меняется», что эквивалентно проверке градиента градиента, таким образом - вторая производная (опять же - именно то, что он предлагает во второй части). – lejlot

0

Есть некоторые вещи, которые вы можете попробовать.

1) Проверьте, не улучшается ли ваша функция затрат/энергии по мере продвижения вашей итерации. Используйте что-то вроде «abs (E_after - E_before) < 0,00001 * E_before», то есть проверьте, является ли относительная разница очень низкой.

2) Проверьте, не изменились ли ваши переменные. Вы можете выбрать очень похожую стратегию, как показано выше, чтобы проверить это.

На самом деле нет идеального способа полностью убедиться, что ваша функция сходится, но некоторые из вещей, упомянутых выше, - это то, что обычно пробуют люди.

Удачи вам!