Почему параметр перехвата увеличивается в неожиданном направлении? - PullRequest
0 голосов
/ 15 февраля 2019

Я делаю 2 итерации градиентного спуска (начальное условие: learning_rate = 0,1 и [w0, w1] = [0,0]), чтобы найти 2 параметра (y_hat = w0 + w1 * x) для линейной модели, котораясоответствует простому набору данных, x = [0,1,2,3,4] и y = [0,2,3,8,17].Используя формулу замкнутой формы, я обнаружил, что w0 = -2 и w1 = 4. Для первых двух итераций градиентного спуска я обнаружил, что w0 = 0,6, w0 = 0,74.Однако я подумал, что если при градиентном спуске не происходит перерегулирования, я должен ожидать, что w0 будет уменьшаться для каждой отдельной итерации, учитывая начальное условие градиентного спуска и ответ, который я получил из решения в закрытой форме.Почему это происходит, если функция ошибок является выпуклой функцией?

1 Ответ

0 голосов
/ 15 февраля 2019

вы на самом деле неверно истолковали градиентный спуск.Градиентный спуск не говорит о том, что на каждой итерации все веса будут двигаться к своим соответствующим оптимальным значениям, но вместо этого все, что вам нужно, это то, что вы всегда будете двигаться к минимальной стоимости, если указаны точные гиперпараметры.В вашем случае, когда вы инициализируете веса с помощью [0,0], не существует значения альфа, которое будет отрицать упомянутый эффект, потому что, когда w0 изменяется от 0,6 до 0,74 (рассмотрим этот вектор), а w1 перемещается от 2 до 2,68 (учитывайте этодругой вектор), тогда результирующий вектор таков, что он движется вниз по склону с самым крутым спуском, и это то, что учитывает GD, это общее направление весов, движущихся вниз по склону функции стоимости.

И выВы можете убедиться в этом, построив график затрат, а также после второй итерации значение b переместится в сторону -2, потому что после второй итерации в этом направлении w0 является самым крутым.

нижеприведенный график является значением w0 на разных итерациях, x_axis = w0 и y_axis = iteration_no

this the of w0 at different iteration, x_axis=w0 and y_axis=iteration_no

Теперь мы можем ясносм. небольшую метку вверх в начале, которая также упоминается вами.

ниже приведен график затрат на разных итерациях

this is the graph of cost at different iterations

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

Теперьесли это все еще вас раздражает, то единственный способ решить это - изменить начальные значения весов, потому что настройка learning_Rate не решит это с помощью инициализации [0,0].

Так что инициализируйте с помощью [-0.1,3.1] с той же обучающей скоростью

w0 at each iteration

Как сейчас, вы можете ясно видеть, что в начале не было такой восходящей отметки, потому что теперь значения стоимости уменьшаются внаправление, в котором веса также перемещаются в направлении их оптимальных значений, т. е. [-2,4]

cost vs iteration

теперь вы также можете видеть, что стоимостьи w0 приближаются к требуемым значениям за меньшее число итераций, как и раньше, потому что теперь мы инициализировали очень близко к требуемым значениям.

Вот такие инициализации, которые дают вам этот результат.

Вывод - GD всегда движутся по самому крутому пути вниз по склону

Счастливое машинное обучение ...

...