Градиентный спуск — это математический метод, который итеративно находит веса и смещения, обеспечивающие модель с минимальными потерями. Градиентный спуск находит наилучшие веса и смещения, повторяя следующий процесс для заданного пользователем количества итераций.
Модель начинает обучение со случайными весами и смещениями, близкими к нулю, а затем повторяет следующие шаги:
Рассчитайте потерю с учетом текущего веса и смещения.
Определите направление перемещения весов и смещений, которые уменьшат потери.
Слегка сместите значения веса и смещения в направлении, уменьшающем потери.
Вернитесь к шагу один и повторяйте процесс до тех пор, пока модель не сможет дальше сокращать потери.
На диаграмме ниже показаны итерационные шаги градиентного спуска, которые он выполняет для нахождения весов и смещений, позволяющих создать модель с минимальными потерями.
Рисунок 11. Градиентный спуск — это итеративный процесс, который находит веса и смещения, позволяющие создать модель с минимальными потерями.
Нажмите на значок «плюс», чтобы узнать больше о математике градиентного спуска.
На конкретном уровне мы можем пройтись по этапам градиентного спуска, используя небольшой набор данных с семью примерами для веса автомобиля в фунтах и его показателя пробега в милях на галлон:
Фунты в тысячах (репортаж) | Миль на галлон (маркировка) |
---|---|
3.5 | 18 |
3.69 | 15 |
3.44 | 18 |
3.43 | 16 |
4.34 | 15 |
4.42 | 14 |
2.37 | 24 |
- Модель начинает обучение, устанавливая вес и смещение на ноль:
- Рассчитайте потерю MSE с использованием текущих параметров модели:
- Рассчитайте наклон касательной к функции потерь при каждом весе и смещении:
- Сдвиньте небольшое значение в сторону отрицательного наклона, чтобы получить следующий вес и смещение. На данный момент мы условно определим «небольшое значение» как 0,01:
Нажмите на значок «плюс», чтобы узнать о расчете уклона.
Чтобы получить наклон линий, касательных к весу и смещению, мы берем производную функции потерь по весу и смещению, а затем решаем уравнения.
Запишем уравнение для прогнозирования следующим образом:
$ 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 для наклона линии.
Используйте новые вес и смещение для расчета потерь и повторите процесс. Выполнив процесс шесть раз, мы получим следующие веса, смещения и потери:
Итерация | Масса | Предвзятость | Убыток (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. Кривая потерь, показывающая сходимость модели около отметки 1000-й итерации.
Видно, что потери резко снижаются в течение первых нескольких итераций, затем постепенно уменьшаются и стабилизируются примерно к 1000-й итерации. После 1000 итераций мы можем быть практически уверены, что модель сошлась.
На следующих рисунках мы изобразили модель в трёх точках процесса обучения: в начале, середине и в конце. Визуализация состояния модели в моментальных снимках в процессе обучения подтверждает связь между обновлением весов и смещением, уменьшением потерь и сходимостью модели.
На рисунках мы используем полученные веса и смещение на конкретной итерации для представления модели. На графике с точками данных и снимком модели синие линии потерь, идущие от модели к точкам данных, показывают величину потерь. Чем длиннее линии, тем больше потери.
На следующем рисунке мы видим, что на второй итерации модель уже не может делать хороших прогнозов из-за большого размера потерь.
Рисунок 13. Кривая потерь и моментальный снимок модели в начале процесса обучения.
Приблизительно на 400-й итерации мы видим, что градиентный спуск нашел вес и смещение, которые позволяют получить лучшую модель.
Рисунок 14. Кривая потерь и моментальный снимок модели примерно в середине обучения.
И где-то на 1000-й итерации мы видим, что модель сошлась, создав модель с минимально возможными потерями.
Рисунок 15. Кривая потерь и моментальный снимок модели вблизи конца процесса обучения.
Упражнение: проверьте свое понимание
Сходимость и выпуклые функции
Функции потерь для линейных моделей всегда образуют выпуклую поверхность. Благодаря этому свойству, когда модель линейной регрессии сходится, мы знаем, что она нашла веса и смещение, обеспечивающие минимальные потери.
Если построить график поверхности потерь для модели с одним признаком, можно увидеть её выпуклую форму. Ниже представлена поверхность потерь для гипотетического набора данных «миль на галлон». Вес отложен по оси X, смещение — по оси Y, а потери — по оси Z:
Рисунок 16. Поверхность потерь, демонстрирующая свою выпуклую форму.
В этом примере вес -5,44 и смещение 35,94 дают наименьшую потерю при 5,54:
Рисунок 17. Поверхность потерь, показывающая значения веса и смещения, которые приводят к минимальным потерям.
Линейная модель сходится, когда находит минимальное значение потерь. Следовательно, дополнительные итерации градиентного спуска лишь незначительно смещают значения веса и смещения относительно минимума. Если бы мы изобразили точки веса и смещения в графическом виде в процессе градиентного спуска, эти точки выглядели бы как мяч, катящийся с холма, который в конечном итоге останавливается в точке, где спуск прекращается.
Рисунок 18. График потерь, показывающий точки градиентного спуска, останавливающиеся в самой нижней точке графика.
Обратите внимание, что черные точки потерь создают точную форму кривой потерь: резкий спад, а затем плавный спад, пока они не достигнут самой низкой точки на поверхности потерь.
Важно отметить, что модель почти никогда не находит точный минимум для каждого веса и смещения, а находит значение, очень близкое к нему. Также важно отметить, что минимум для весов и смещения не соответствует нулевым потерям, а лишь значению, обеспечивающему минимальные потери для данного параметра.
Используя значения веса и смещения, которые обеспечивают наименьшие потери (в данном случае вес -5,44 и смещение 35,94), мы можем построить график модели и увидеть, насколько хорошо она соответствует данным:
Рисунок 19. Модель, построенная с использованием значений веса и смещения, которые приводят к минимальным потерям.
Это будет лучшая модель для этого набора данных, поскольку никакие другие значения веса и смещения не дадут модель с меньшими потерями.