Уменьшение потерь: градиентный спуск

Диаграмма итерационного подхода ( рис. 1 ) содержала зеленый волнистый прямоугольник, озаглавленный «Вычисление обновлений параметров». Теперь мы заменим эту алгоритмическую волшебную пыль чем-то более существенным.

Предположим, у нас было время и вычислительные ресурсы, чтобы вычислить потери для всех возможных значений \(w_1\). Для тех задач регрессии, которые мы рассматривали, результирующий график потерь в зависимости от \(w_1\) всегда будет выпуклым. Другими словами, сюжет всегда будет иметь форму чаши, примерно так:

График U-образной кривой, где вертикальная ось обозначена как «потеря», а горизонтальная ось — как значение веса w i.

Рисунок 2. Задачи регрессии дают выпуклые графики зависимости потерь от веса.

Выпуклые задачи имеют только один минимум; то есть только одно место, где наклон равен ровно 0. Этот минимум — это место, где сходится функция потерь.

Вычисление функции потерь для каждого мыслимого значения \(w_1\)по всему набору данных было бы неэффективным способом поиска точки сходимости. Давайте рассмотрим более совершенный механизм, очень популярный в машинном обучении, называемый градиентным спуском .

Первым этапом градиентного спуска является выбор начального значения (начальной точки) для \(w_1\). Отправная точка не имеет большого значения; поэтому многие алгоритмы просто устанавливают \(w_1\) в 0 или выбирают случайное значение. На следующем рисунке показано, что мы выбрали начальную точку немного больше 0:

График U-образной кривой. Точка примерно на полпути вверх по левой стороне кривой помечена как «Начальная точка».

Рисунок 3. Отправная точка градиентного спуска.

Затем алгоритм градиентного спуска вычисляет градиент кривой потерь в начальной точке. Здесь, на рисунке 3, градиент потерь равен производной (наклону) кривой и показывает, какой путь «теплее» или «холоднее». При наличии нескольких весов градиент представляет собой вектор частных производных по весам.

Обратите внимание, что градиент — это вектор, поэтому он обладает обеими следующими характеристиками:

  • направление
  • величина

Градиент всегда указывает в направлении наибольшего увеличения функции потерь. Алгоритм градиентного спуска делает шаг в сторону отрицательного градиента, чтобы как можно быстрее уменьшить потери.

График U-образной кривой. Точка на левой стороне кривой помечена как «Начальная точка». Стрелка с надписью «отрицательный градиент» указывает от этой точки вправо.

Рисунок 4. Градиентный спуск основан на отрицательных градиентах.

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

График U-образной кривой. Точка на левой стороне кривой помечена как «Начальная точка». Стрелка с надписью «отрицательный градиент» указывает от этой точки вправо. Другая стрелка указывает от кончика первой стрелки вниз ко второй точке кривой. Вторая точка помечена как «следующая точка».

Рисунок 5. Шаг градиента перемещает нас к следующей точке кривой потерь.

Затем градиентный спуск повторяет этот процесс, приближаясь все ближе к минимуму.