Математический вывод правила обновления в Gradient Descent - самом популярном алгоритме оптимизации в машинном обучении и глубоком обучении.

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

Вступление

Если вы когда-либо видели или слышали термин «градиентный спуск» в своей жизни, вы наверняка сталкивались со следующим уравнением:

И следующий график:

В приведенном выше уравнении L - это функция потерь (или функция стоимости), а θ - любой параметр, от которого зависит функция стоимости. Это веса (W) и смещения (b) в случае нейронных сетей (или глубокого обучения).

Цель состоит в том, чтобы найти глобальные минимумы функции потерь.
Эти параметры обновляются во время каждой итерации алгоритма обучения, пока мы не достигнем минимального значения функции потерь.

В контексте глубокого обучения (или нейронных сетей) мы записываем приведенные выше уравнения в терминах весов и смещений, как:

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

Общий алгоритм обучения

Давайте сначала быстро рассмотрим общий алгоритм обучения:

Здесь «до удовлетворения» является субъективным условием и может быть одним из многих критериев остановки, таких как достижение порогового значения потерь или повторение определенного фиксированного числа раз и т. Д.

Шаг обновления параметра

Обратите внимание, что этап обновления включает добавление некоторых изменений Δ w, Δ b в w, b. Вскоре мы обнаружим, что это действительно отрицательные частные производные убытков по w, b соответственно, т.е. - 𝛿L / 𝛿 w и - 𝛿L / 𝛿 b, где L = f (w , б).

Сформулируем их математически:

Обратите внимание, что мы еще не ввели скорость обучения α. Давайте сначала разберемся с необходимостью обучения.

Потребность в обучении

Мы знаем, что θ является вектором, как и Δ θ.
Давайте рассмотрим сумму этих двух векторов:

Очевидно, что результирующая сумма двух векторов довольно велика по сравнению с отдельными векторами. Это потому, что мы делаем большой шаг Δ θ. Нам нужно делать небольшие шаги в этом направлении, чтобы векторная сумма была небольшой. Это также важно, потому что, если мы сделаем такие большие обновления (Δ θ) в параметрах θ, мы можем упустить глобальный минимум функции потерь L. Следовательно, мы вводим скорость обучения что ограничивает размер обновлений, которые мы производим для параметров θ.

Обратите внимание, как с помощью скорости обучения α ‹1 мы ограничиваем количество выполняемых обновлений до θ.

Давайте теперь выясним правильное значение Δ θ, которое уменьшит величину потерь.

Прежде чем мы продолжим, позвольте мне представить (не) знаменитую серию Тейлора, которую мы будем использовать для нахождения Δw, Δb и, следовательно, Δ θ

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

Ряд Тейлора используется для нахождения значения функции на расстоянии Δx от точки x, учитывая производные функции в этой точке.

Давайте найдем значение Δw, используя ряд Тейлора.
В этом случае функция f будет функцией потерь L, и мы расширим ряд для L (w + α * Δ w).
Нам нужно найти такое значение Δ w, чтобы L (w + α * Δ w ) ‹L (w).

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

Но Loss L (θ) - многомерная функция. Это функция не только веса w, но и смещения b. Мы представили их в виде вектора θ = [w, b].
Итак, нам нужно записать векторную форму Ряд Тейлора для нахождения Δ θ.

Здесь ∇ L (θ) представляет градиент потерь первого порядка по θ.
Градиент - это не что иное, как вектор частных производных функции по каждому из ее параметры.
Аналогично ∇² будет вектором частных производных второго порядка и так далее.

На практике скорость обучения α очень мала (0,001, 0,00001 и т. Д.), Поэтому α², α³,… будут очень малы, и их вклад в потерю L будет незначительным.
Таким образом, их можно не учитывать из уравнения .
Окончательное уравнение станет

Нахождение наилучшего значения Δθ

Поскольку мы хотим, чтобы обновленные потери L (θ + α Δ θ) были меньше, чем предыдущие потери L (θ), и поскольку потери является положительной величиной, второй член в приведенном выше уравнении должен быть отрицательным.
Итак, нам нужно такое значение Δ θ, чтобы скалярное произведение во втором члене становится отрицательным, т.е. нам нужно

Мы знаем это

Мы также знаем, что cos β лежит между -1 и 1, т.е. -1 ⩽ cos β ⩽ +1.
Следовательно,

Теперь мы хотим, чтобы скалярное произведение было как можно более отрицательным (чтобы потери были минимальными).
Но, как мы видим из приведенного выше неравенства, самое отрицательное значение, которое оно может получить, - это -k.

Теперь, чтобы скалярное произведение было -k, cos β должен быть равен -1.
cos β = -1 соответствует β = 180 °

Поскольку два вектора находятся в противоположном направлении, из свойств вектора мы знаем

Заключительный этап обновления параметров

Теперь, если мы заменим эти значения на шаге обновления параметра в общем алгоритме обучения, он станет

Теперь это уравнение, мой друг, в точности похоже на то, что мы намеревались получить.
Каждый раз, когда вы обновляете свои параметры (w и b) с помощью этого правила, потери в вашем обучающем наборе будут уменьшаться, пока не может уменьшаться дальше, т.е. когда наклоны (или частные производные) становятся равными 0.

Правило градиентного спуска для множественных весов и смещений (векторизованная нотация)

Мы вывели правило обновления для одного веса и смещения.
На самом деле глубокая нейронная сеть имеет множество весов и смещений, которые представлены в виде матриц (или тензоров), поэтому наше правило обновления также следует изменить. для одновременного обновления всех весов и смещений сети.

Обратите внимание, что в большинстве текстов по глубокому обучению используется обозначение Δ вместо ∇ для представления градиента в уравнениях.

Outro

На этом все. Надеюсь, прочитав это, вы стали более интуитивно понимать алгоритм градиентного спуска.