Градиентный спуск — это математический метод, который итеративно находит веса и смещения, которые создают модель с наименьшими потерями. Градиентный спуск находит наилучший вес и смещение, повторяя следующий процесс для ряда определяемых пользователем итераций.
Модель начинает обучение со случайными весами и смещениями, близкими к нулю, а затем повторяет следующие шаги:
Рассчитайте потерю с учетом текущего веса и смещения.
Определите направление перемещения весов и смещение, которые уменьшат потери.
Слегка сместите значения веса и смещения в направлении, уменьшающем потери.
Вернитесь к первому шагу и повторяйте процесс до тех пор, пока модель не сможет дальше сокращать потери.
На схеме ниже показаны итерационные шаги, которые выполняет градиентный спуск для нахождения весов и смещений, позволяющих создать модель с наименьшими потерями.
Рисунок 12. Градиентный спуск — это итеративный процесс, который находит веса и смещения, которые создают модель с наименьшими потерями.
Нажмите на значок «плюс», чтобы узнать больше о математике градиентного спуска.
На конкретном уровне мы можем пройтись по этапам градиентного спуска, используя небольшой набор данных с семью примерами веса автомобиля в фунтах и его показателя пробега в милях на галлон:
Фунтов в тысячах (репортаж) | Миль на галлон (этикетка) |
---|---|
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.
Используйте новый вес и смещение для расчета потерь и повторите. Завершив процесс для шести итераций, мы получим следующие веса, смещения и потери:
Итерация | Масса | Предвзятость | Убыток (СКО) |
---|---|---|---|
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:
Рисунок 13. Кривая потерь, показывающая сходимость модели около отметки 1000-й итерации.
Вы можете видеть, что потери резко уменьшаются в течение первых нескольких итераций, затем постепенно уменьшаются, прежде чем стабилизироваться около отметки 1000-й итерации. После 1000 итераций мы можем быть почти уверены, что модель сошлась.
На следующих рисунках мы рисуем модель в трех точках в процессе обучения: в начале, в середине и в конце. Визуализация состояния модели в моментальных снимках в процессе обучения укрепляет связь между обновлением весов и смещением, уменьшением потерь и сходимостью модели.
На рисунках мы используем полученные веса и смещение на конкретной итерации для представления модели. На графике с точками данных и снимком модели синие линии потерь от модели к точкам данных показывают величину потерь. Чем длиннее линии, тем больше потерь.
На следующем рисунке мы видим, что на второй итерации модель не сможет делать хороших прогнозов из-за большого объема потерь.
Рисунок 14. Кривая потерь и снимок модели в начале процесса обучения.
Примерно на 400-й итерации мы видим, что градиентный спуск нашел вес и смещение, которые дают лучшую модель.
Рисунок 15. Кривая потерь и снимок модели примерно на середине обучения.
И примерно на 1000-й итерации мы видим, что модель сошлась, создав модель с минимально возможными потерями.
Рисунок 16. Кривая потерь и снимок модели вблизи конца процесса обучения.
Упражнение: проверьте свое понимание
Сходимость и выпуклые функции
Функции потерь для линейных моделей всегда создают выпуклую поверхность. В результате этого свойства, когда линейная регрессионная модель сходится, мы знаем, что модель нашла веса и смещение, которые производят наименьшие потери.
Если мы построим график поверхности потерь для модели с одной функцией, мы увидим ее выпуклую форму. Ниже представлена поверхность потерь для гипотетического набора данных миль на галлон. Вес находится на оси x, смещение — на оси y, а потери — на оси z:
Рисунок 17. Поверхность потерь, демонстрирующая свою выпуклую форму.
В этом примере вес -5,44 и смещение 35,94 дают наименьшую потерю в 5,54:
Рисунок 18. Поверхность потерь, показывающая значения веса и смещения, которые приводят к наименьшим потерям.
Линейная модель сходится, когда находит минимальную потерю. Поэтому дополнительные итерации заставляют градиентный спуск только перемещать значения веса и смещения в очень малых количествах вокруг минимума. Если бы мы изобразили весовые и смещенные точки во время градиентного спуска, точки выглядели бы как мяч, катящийся с холма, в конце концов останавливаясь в точке, где больше нет наклона вниз.
Рисунок 19. График потерь, показывающий точки градиентного спуска, останавливающиеся в самой нижней точке графика.
Обратите внимание, что черные точки потерь создают точную форму кривой потерь: крутой спад, а затем плавный спад, пока они не достигнут самой низкой точки на поверхности потерь.
Важно отметить, что модель почти никогда не находит точный минимум для каждого веса и смещения, а вместо этого находит значение, очень близкое к нему. Также важно отметить, что минимум для весов и смещения не соответствует нулевой потере, а только значению, которое производит самую низкую потерю для этого параметра.
Используя значения веса и смещения, которые дают наименьшие потери (в данном случае вес -5,44 и смещение 35,94), мы можем построить график модели, чтобы увидеть, насколько хорошо она соответствует данным:
Рисунок 20. Модель, построенная с использованием значений веса и смещения, которые приводят к наименьшим потерям.
Это была бы лучшая модель для этого набора данных, поскольку никакие другие значения веса и смещения не создают модель с меньшими потерями.