пятница, 17 августа 2018 г.

Градиентный спуск

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

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

Задачи регрессии выводят дугообразные графики отношения потери к весу

Задачи с дугообразным графиком имеют только один минимум. Таким образом, в данном случае существует единственное место, где уклон (slope) равен нулю. Этот минимум там, где функция потери сходится (приближается к нулю).

Вычисление функции потери для каждого возможного значения w1 по всему набору данных будет неэффективным путем нахождения точки схождения. Рассмотрим более эффективный механизм - очень популярный в машинном обучении - называемый градиентный спуск.

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

Стартовая точка для градиентного спуска

Затем алгоритм градиентного спуска вычисляет градиент кривой потери в стартовой точке. На графике градиент потери равен производной (уклон) кривой и сообщает что путь "теплее" или "холоднее". Когда есть несколько весов градиент это вектор парциальных производных с учетом весов.

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

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

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

Градиентный спуск основывается на отрицательном градиенте

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

Градиентный шаг перемещает нас к следующей точке на кривой потери

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

Резюме

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