Диаграмма итерационного подхода ( рис. 1 ) содержала зеленый волнистый прямоугольник, озаглавленный «Вычисление обновлений параметров». Теперь мы заменим эту алгоритмическую волшебную пыль чем-то более существенным.
Предположим, у нас было время и вычислительные ресурсы, чтобы вычислить потери для всех возможных значений \(w_1\). Для тех задач регрессии, которые мы рассматривали, результирующий график потерь в зависимости от \(w_1\) всегда будет выпуклым. Другими словами, сюжет всегда будет иметь форму чаши, примерно так:
Рисунок 2. Задачи регрессии дают выпуклые графики зависимости потерь от веса.
Выпуклые задачи имеют только один минимум; то есть только одно место, где наклон равен ровно 0. Этот минимум — это место, где сходится функция потерь.
Вычисление функции потерь для каждого мыслимого значения \(w_1\)по всему набору данных было бы неэффективным способом поиска точки сходимости. Давайте рассмотрим более совершенный механизм, очень популярный в машинном обучении, называемый градиентным спуском .
Первым этапом градиентного спуска является выбор начального значения (начальной точки) для \(w_1\). Отправная точка не имеет большого значения; поэтому многие алгоритмы просто устанавливают \(w_1\) в 0 или выбирают случайное значение. На следующем рисунке показано, что мы выбрали начальную точку немного больше 0:
Рисунок 3. Отправная точка градиентного спуска.
Затем алгоритм градиентного спуска вычисляет градиент кривой потерь в начальной точке. Здесь, на рисунке 3, градиент потерь равен производной (наклону) кривой и показывает, какой путь «теплее» или «холоднее». При наличии нескольких весов градиент представляет собой вектор частных производных по весам.
Обратите внимание, что градиент — это вектор, поэтому он обладает обеими следующими характеристиками:
- направление
- величина
Градиент всегда указывает в направлении наибольшего увеличения функции потерь. Алгоритм градиентного спуска делает шаг в сторону отрицательного градиента, чтобы как можно быстрее уменьшить потери.
Рисунок 4. Градиентный спуск основан на отрицательных градиентах.
Чтобы определить следующую точку на кривой функции потерь, алгоритм градиентного спуска добавляет некоторую часть величины градиента к начальной точке, как показано на следующем рисунке:
Рисунок 5. Шаг градиента перемещает нас к следующей точке кривой потерь.
Затем градиентный спуск повторяет этот процесс, приближаясь все ближе к минимуму.