Линейная регрессия: градиентный спуск

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

Модель начинает обучение со случайными весами и смещениями, близкими к нулю, а затем повторяет следующие шаги:

  1. Рассчитайте потерю с учетом текущего веса и смещения.

  2. Определите направление перемещения весов и смещений, которые уменьшат потери.

  3. Слегка сместите значения веса и смещения в направлении, уменьшающем потери.

  4. Вернитесь к шагу один и повторяйте процесс до тех пор, пока модель не сможет дальше сокращать потери.

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

Рисунок 11. Иллюстрация процесса градиентного спуска.

Рисунок 11. Градиентный спуск — это итеративный процесс, который находит веса и смещения, позволяющие создать модель с минимальными потерями.

Нажмите на значок «плюс», чтобы узнать больше о математике градиентного спуска.

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

Фунты в тысячах (репортаж) Миль на галлон (маркировка)
3.5 18
3.69 15
3.44 18
3.43 16
4.34 15
4.42 14
2.37 24
  1. Модель начинает обучение, устанавливая вес и смещение на ноль:
  2. $$ \small{Weight:\ 0} $$$$ \small{Bias:\ 0} $$$$ \small{y = 0 + 0(x_1)} $$
  3. Рассчитайте потерю MSE с использованием текущих параметров модели:
  4. $$ \small{Loss = \frac{(18-0)^2 + (15-0)^2 + (18-0)^2 + (16-0)^2 + (15-0)^2 + (14-0)^2 + (24-0)^2}{7}} $$$$ \small{Loss= 303.71} $$
  5. Рассчитайте наклон касательной к функции потерь при каждом весе и смещении:
  6. $$ \small{Weight\ slope: -119.7} $$$$ \small{Bias\ slope: -34.3} $$

    Нажмите на значок «плюс», чтобы узнать о расчете уклона.

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

    Запишем уравнение для прогнозирования следующим образом:
    $ f_{w,b}(x) = (w*x)+b $.

    Фактическое значение запишем как: $ y $.

    Мы рассчитаем MSE, используя:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
    где $i$ представляет собой $ith$-ый обучающий пример, а $M$ представляет собой количество примеров.

    Производная веса

    Производная функции потерь по весу записывается как:
    $ \frac{\partial }{\partial w} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $

    и оценивается как:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2x_{(i)} $

    Сначала мы суммируем каждое предсказанное значение за вычетом фактического значения, а затем умножаем результат на удвоенное значение признака. Затем делим сумму на количество примеров. Результат — наклон касательной к значению веса.

    Если мы решим это уравнение с весом и смещением, равными нулю, то получим -119,7 для наклона линии.

    Производная смещения

    Производная функции потерь по смещению записывается как:
    $ \frac{\partial }{\partial b} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $

    и оценивается как:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2 $

    Сначала мы суммируем каждое предсказанное значение за вычетом фактического значения, а затем умножаем результат на два. Затем делим сумму на количество примеров. Результат — наклон касательной к значению смещения.

    Если мы решим это уравнение с весом и смещением, равными нулю, то получим -34,3 для наклона линии.

  7. Сдвиньте небольшое значение в сторону отрицательного наклона, чтобы получить следующий вес и смещение. На данный момент мы условно определим «небольшое значение» как 0,01:
  8. $$ \small{New\ weight = old\ weight - (small\ amount * weight\ slope)} $$$$ \small{New\ bias = old\ bias - (small\ amount * bias\ slope)} $$$$ \small{New\ weight = 0 - (0.01)*(-119.7)} $$$$ \small{New\ bias = 0 - (0.01)*(-34.3)} $$$$ \small{New\ weight = 1.2} $$$$ \small{New\ bias = 0.34} $$

Используйте новые вес и смещение для расчета потерь и повторите процесс. Выполнив процесс шесть раз, мы получим следующие веса, смещения и потери:

Итерация Масса Предвзятость Убыток (MSE)
1 0 0 303.71
2 1.20 0,34 170,84
3 2.05 0,59 103.17
4 2.66 0,78 68.70
5 3.09 0,91 51.13
6 3.40 1.01 42.17

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

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

Кривые сходимости и потерь модели

При обучении модели часто используется кривая потерь , чтобы определить, сошлась ли модель. Кривая потерь показывает, как меняются потери по мере обучения модели. Типичная кривая потерь выглядит следующим образом. Потери откладываются по оси Y, а итерации — по оси X.

Рисунок 12. График кривой потерь, показывающий резкое падение, а затем плавное падение.

Рисунок 12. Кривая потерь, показывающая сходимость модели около отметки 1000-й итерации.

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

На следующих рисунках мы изобразили модель в трёх точках процесса обучения: в начале, середине и в конце. Визуализация состояния модели в моментальных снимках в процессе обучения подтверждает связь между обновлением весов и смещением, уменьшением потерь и сходимостью модели.

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

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

Рисунок 13. Кривая потерь и соответствующий график модели, отклоняющийся от точек данных.

Рисунок 13. Кривая потерь и моментальный снимок модели в начале процесса обучения.

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

Рисунок 14. Кривая потерь и соответствующий график модели, которая пересекает точки данных, но не под оптимальным углом.

Рисунок 14. Кривая потерь и моментальный снимок модели примерно в середине обучения.

И где-то на 1000-й итерации мы видим, что модель сошлась, создав модель с минимально возможными потерями.

Рисунок 15. Кривая потерь и соответствующий график модели, которая хорошо соответствует данным.

Рисунок 15. Кривая потерь и моментальный снимок модели вблизи конца процесса обучения.

Упражнение: проверьте свое понимание

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

Сходимость и выпуклые функции

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

Если построить график поверхности потерь для модели с одним признаком, можно увидеть её выпуклую форму. Ниже представлена поверхность потерь для гипотетического набора данных «миль на галлон». Вес отложен по оси X, смещение — по оси Y, а потери — по оси Z:

Рисунок 16. Трехмерный график поверхности потерь.

Рисунок 16. Поверхность потерь, демонстрирующая свою выпуклую форму.

В этом примере вес -5,44 и смещение 35,94 дают наименьшую потерю при 5,54:

Рисунок 17. Трехмерный график поверхности потерь с (-5,44, 35,94, 5,54) внизу.

Рисунок 17. Поверхность потерь, показывающая значения веса и смещения, которые приводят к минимальным потерям.

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

Рисунок 18. Выпуклая трехмерная поверхность потерь с точками градиентного спуска, движущимися к самой низкой точке.

Рисунок 18. График потерь, показывающий точки градиентного спуска, останавливающиеся в самой нижней точке графика.

Обратите внимание, что черные точки потерь создают точную форму кривой потерь: резкий спад, а затем плавный спад, пока они не достигнут самой низкой точки на поверхности потерь.

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

Используя значения веса и смещения, которые обеспечивают наименьшие потери (в данном случае вес -5,44 и смещение 35,94), мы можем построить график модели и увидеть, насколько хорошо она соответствует данным:

Рисунок 19. График зависимости фунтов в тысячах от миль на галлон, модель соответствует данным.

Рисунок 19. Модель, построенная с использованием значений веса и смещения, которые приводят к минимальным потерям.

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