SGD с оптимизатором Momentum и Adam

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

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

Нам нужно найти способ как-то перейти на дно «долины». Для этого мы запускаем несколько итераций с разными весами. Это помогает найти минимальную стоимость. Это градиентный спуск. Одним из популярных методов градиентного спуска является стохастический градиентный спуск (SGD).

SGD — это то же самое, что и градиентный спуск, за исключением того, что он используется для обучения каждый раз только частичных данных. Параметр называется размером мини-пакета.

SGD с моментумом:

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

Импульс или SGD с импульсом — это метод, который помогает ускорить векторы градиентов в правильном направлении, что приводит к более быстрой сходимости.

Импульс накапливает градиент прошлых шагов, чтобы определить направление движения. Уравнения градиентного спуска пересматриваются следующим образом:

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

На практике коэффициент импульса изначально равен 0,5 и постепенно отжигается до 0,9 в течение нескольких эпох.

Адам Оптимизатор

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

Адам был представлен Диедериком Кингмой из OpenAI и Джимми Ба из Университета Торонто в их статье (постере) ICLR 2015 года под названием Адам: метод стохастической оптимизации.

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

Гиперпараметр beta1 обычно поддерживается на уровне 0,9, а beta_2 — на уровне 0,99. Эпсилон обычно выбирается равным 1e-10.

Ссылка и дальнейшее чтение:

Адам: метод стохастической оптимизации, 2015 г.



Алгоритм оптимизации Адама от проф. А. Нг (видео на ютубе)

Пример Pytorch (Факел.optim)