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

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

2. Все функции не имеют одинаковой частоты, поэтому одинаковая скорость обучения не может применяться ко всем весам.

3. Нельзя использовать большие скорости обучения из-за перерегулирования или отклонения от пути.

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

  1. SGD с импульсом
  2. НАГ
  3. АдаГрад
  4. RMSProp
  5. АдаДельта
  6. Адам

1. SGD с Momentum

Мы знаем, что SGD или мини-пакетный SGD не использует полные данные для сходимости. Из-за отсутствия данных он пытается приблизиться к фактическому пути, чтобы достичь оптимальной точки. Направление достижения пункта назначения ясно, но путь к нему проходит через множество взлетов и падений. 🙁

Импульс позволяет нам гасить колебания, используя экспоненциально взвешенное усреднение градиента,

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

Мы только меняем функцию обновления, чтобы реализовать импульс

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

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

Где γ — известный фактор импульса, а η — скорость обучения. (0‹γ‹1)

Обе эти системы уравнений дают один и тот же результат, но с разными значениями γ, η. Но я предпочитаю второй набор уравнений (т. е. уравнение (3) и уравнение (4)) на данный момент.

Подставляя уравнение (3) в уравнение (4), получаем:

В приведенном выше уравнении, т.е. в уравнении (5)

γV(t-1) — шаг импульса (зеленая линия), а ηdL/dW(t-1) — шаг градиента (красная линия). Фактический шаг (синяя линия) представляет собой сумму импульса и шага градиента. Мы знаем, что импульс — это усреднение градиента по опыту. По мере увеличения числа итераций увеличивается шаг импульса (длина зеленой линии), а также фактический шаг (синяя линия). Так он сходится быстрее для каждой итерации.

Давайте посмотрим, как веса обновляются с импульсом за несколько итераций.

Вот как работает SGD с импульсом и обновляются веса.

2. Ускоренный градиент Нестерова (NAG)

Nesterov Accelerated Gradient похож на SGD + импульс с небольшими отличиями. В SGD с импульсом мы вычисляем член градиента (ηdL/dW(t-1)) и член импульса (γV(t-1)) и суммируем их для перехода к следующей точке. Но в ускоренном градиенте Нестерова сначала мы вычисляем импульс и движемся в его направлении, а затем вычисляем градиент в этой точке (dL/dw') (который не совпадает с фактическим градусом (dL/wt-1)) и затем двигаемся в том направлении, где мы в конечном итоге достигаем фактической точки, т.е. вес.

Проще говоря, мы сначала переходим от Wt-1 к W’, а затем к Wt.

Из SGD с импульсом мы знаем, что:

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

Таким образом, без градиентного члена мы не будем двигаться к Wt, вместо этого мы перейдем к W’.

Теперь вычислите градиент в W’, чтобы достичь Wt

Итак, окончательное уравнение выглядит так:

У вас может возникнуть сомнение, что мы в конечном итоге достигаем одной и той же точки (Wt), так какой смысл использовать ускоренный градиент Нестерова вместо SGD с импульсом?

Градиент, который мы вычисляем в точке W’, известен как «упреждающий» градиент, который помогает нам заглянуть вперед, куда мы движемся.

На рис. (а) для каждого обновления потери уменьшаются и перемещаются на большее расстояние, чем предыдущие шаги для сходимости, и это здорово. Но на 4-м обновлении он зашкаливает, а позже, с обновлениями 5 и 6, возвращается к точке минимальных потерь. До первых трех обновлений в SGD с импульсом и NAG все то же самое. Но в обновлении 4 вы можете увидеть важность NAG. Мы знаем, что мы вычисляем два частичных шага в NAG, чтобы достичь следующей точки. В 4-м обновлении первым частичным шагом является 4a, то есть движение в направлении импульса, а в 4b мы вычисляем упреждающий градиент, чтобы увидеть, куда мы движемся, и двигаться к этой точке. Итак, в конце обновления 4 перерегулирование в NAG уменьшается по сравнению с SGD с импульсом, а всего лишь с еще одним обновлением, т.е. 5-м обновлением, достигает минимума. Таким образом, для достижения одного и того же пункта назначения требуется 5 обновлений для NAG и 6 обновлений для SGD. Вот чем NAG отличается от SGD импульсом.

3. Адаптивный градиент (AdaGrad)

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

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

Функция обновления SGD:

Здесь η — скорость обучения, одинаковая для всех весов на всех итерациях.

Функция обновления с помощью Adagrad:

Здесь η’ — скорость обучения, которая разная для всех весов на каждой итерации.

ε — небольшое положительное число, чтобы избежать деления на ноль ошибки.

α(t-1) — это сумма квадрата предыдущего градиента.

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

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

Рассмотрим нейронную сеть с двумя входными узлами и выходным узлом.

Здесь α неодинаково для каждого веса, и его значение меняется для каждой итерации, поэтому они имеют разные скорости обучения для каждого веса на каждой итерации. Но когда мы решаем тот же пример с помощью SGD, это выглядит так:

η — постоянная скорость обучения, одинаковая для всех весов до последней итерации.

Пока с адаградом все выглядит отлично, но есть один существенный недостаток, который нельзя игнорировать, т.е.

По мере увеличения количества итераций (t) значение α увеличивается, затем η’ уменьшается.

Скорость обучения η’ уменьшается для каждой итерации, затем сходимость замедляется и в какой-то момент η’ становится почти нулевой. Эта проблема известна как исчезающий градиент. Adadelta и RMSprop — другие методы оптимизации, которые пытаются эффективно решить эту проблему исчезающего градиента.

4. RMSProp

В адаграде для расчета α мы взяли суммирование квадрата градиента. Но в RMSProp мы берем экспоненциальное среднее значение квадрата градиента.

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

5. АдаДельта

Adadelta делает то же самое, что и rmsprop в знаменателе η’. Кроме того, в ададельте мы заменяем скорость обучения по умолчанию η экспоненциальным средним значением дельты.

Дельта (D)

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

6. Оценка адаптивного момента (Адам)

Momentum и ускоренный градиент Нестерова имеют постоянную скорость обучения и ориентированы только на изменение части градиента. Adagrad, adadelta и RMSProp предназначены для изменения скорости обучения. Adam представляет собой комбинацию импульса и RMSProp, которая фокусируется на изменении как скорости обучения, так и градиента для получения лучших результатов.

В статистике среднее часто называют моментом 1-го порядка, а дисперсию - моментом 2-го порядка.

В RMSProp мы сделали экспоненциально взвешенное среднее (EWA) gₜ², чтобы получить скорость обучения η’, а в SGD с импульсом мы сделали экспоненциально взвешенное среднее (EWA) gₜ, чтобы получить импульс.

EWA gₜ и gₜ² является оценкой среднего значения (первый момент) и дисперсии (второй момент) и будет представлять их как mₜ и >vₜ

Но когда мы инициализируем mₜ и vₜ нулями, они смещаются в сторону нуля. Итак, мы вычисляем поправку смещения в эти первый и второй моменты. (Настоятельно рекомендую вам посмотреть Видео о коррекции предвзятости Эндрю Нг, чтобы лучше понять этот момент).

И функция обновления похожа на RMSProp.

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

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

Использованная литература:

  1. Блог Себастьяна Рудера
  2. Конспекты лекций cs231
  3. Ссылка на Адаград