Верьте в AdaBelief

Введение

Все типы нейронных сетей и многие алгоритмы машинного обучения оптимизируют свои функции потерь с помощью алгоритмов оптимизации на основе градиентов. Существует несколько таких алгоритмов оптимизации или оптимизаторов, которые используются для обучения моделей - RMSprop, Stochastic Gradient Descent (SGD), Adaptive Moment Estimation (Adam) и многие другие.

При определении эффективности оптимизатора необходимо учитывать два основных показателя:

  1. Скорость сходимости, то есть насколько быстро достигается минимум функции потерь.
  2. Обобщение модели, то есть того, насколько хорошо модель работает с новыми невидимыми данными.

Адаптивные алгоритмы, подобные Адаму, имеют хорошую скорость сходимости, тогда как алгоритмы вроде SGD лучше обобщают.

Но недавно исследователи из Йельского университета представили новый оптимизатор AdaBelief (Оптимизатор AdaBelief: адаптация размеров с помощью веры в наблюдаемые градиенты), который сочетает в себе многие преимущества существующих методов оптимизации:

Мы предлагаем AdaBelief для одновременного достижения трех целей: быстрая сходимость, как в адаптивных методах, хорошее обобщение, как в SGD, и стабильность обучения. Интуиция AdaBelief заключается в том, чтобы адаптировать размер шага в соответствии с «верой» в текущее направление градиента. Рассматривая экспоненциальную скользящую среднюю (EMA) зашумленного градиента как предсказание градиента на следующем временном шаге, если наблюдаемый градиент сильно отклоняется от предсказания, мы не доверяем текущему наблюдению и делаем небольшой шаг; если наблюдаемый градиент близок к предсказанию, мы доверяем ему и делаем большой шаг.

Чтобы понять, что это означает и как работает AdaBelief, нам сначала нужно взглянуть на Адама (Адам: метод стохастической оптимизации), от которого произошел оптимизатор AdaBelief.

Адам

Adam Optimizer - один из наиболее широко используемых оптимизаторов для обучения всех видов нейронных сетей. Он в основном сочетает в себе методы оптимизации импульса и RMS prop. Позвольте мне вкратце объяснить, как это работает:

Обозначения, используемые здесь:

  1. f (θ): f - функция потерь, которая должна быть оптимизирована с учетом параметра (весов) θ.
  2. g-t: g - градиент на шаге t.
  3. m-t: m - экспоненциальная скользящая средняя (EMA) g-t.
  4. v-t: v - экспоненциальная скользящая средняя (EMA) для (g-t) ².
  5. β1, β2: это гиперпараметры, используемые в скользящих средних для gt и (gt) ², чаще всего равных 0,9 и 0,999 соответственно. .
  6. α: Скорость обучения.
  7. ε: очень маленькое число, используемое, чтобы избежать сценария знаменатель = 0.

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

Чтобы сделать этот спуск быстрее, мы комбинируем два метода оптимизации:

  1. Мы вычисляем EMA градиента m-t и используем его в числителе направления обновления. Итак, если m-t имеет высокое значение, это означает, что спуск идет в правильном направлении, поэтому мы делаем большие шаги. Точно так же, если значение m-t низкое, это означает, что спуск, вероятно, не приближается к минимуму, и мы делаем меньшие шаги. Это импульс оптимизатора.
  2. Мы вычисляем EMA квадрата градиента v-t и используем его в знаменателе направления обновления. Поскольку здесь мы берем квадрат градиентов, предположим, что если обновления градиента одинакового размера происходят поочередно в противоположных направлениях, mt будет иметь значение, близкое к 0, так как положительные и отрицательные значения будут нейтрализованы. при суммировании. Но в этом случае v-t будет иметь большое значение. А поскольку здесь мы не идем к минимумам, мы не хотим предпринимать шаги в этом направлении. Следовательно, мы сохраняем vt в знаменателе направления обновления, так как при делении на большее значение шаги обновления будут меньше, и аналогично, когда vt имеет низкое значение, шаги станет больше. Это часть оптимизатора RMSProp.

В Адаме мы просто объединяем эти два, чтобы сформировать оптимизатор, который может улавливать характеристики обоих этих алгоритмов оптимизации, чтобы получить это направление обновления:

Примечание. m-t и v-t здесь используются после коррекции смещения, чтобы лучше соответствовать на ранних этапах обучения.

Добавляем ε, чтобы знаменатель не был равен 0.

Также здесь m-t известен как первый момент, а v-t известен как второй момент, отсюда и название «оценка адаптивного момента».

Теперь, когда вы знаете, как работает Адам, давайте посмотрим на AdaBelief.

AdaBelief

Как видите, оптимизатор AdaBelief очень похож на оптимизатор Adam с одним небольшим отличием. Здесь вместо использования v-t, EMA градиента в квадрате, у нас есть новый параметр s-t:

И этот s-t заменяет v-t, чтобы сформировать это направление обновления:

Давайте теперь посмотрим, чем отличается этот единственный параметр и как он влияет на производительность оптимизатора.

st определяется как EMA (gt - mt) ², то есть квадрат разницы между градиентом и EMA градиента (mt ). Это означает, что AdaBelief делает большой шаг, когда значение градиента близко к его EMA, и небольшой шаг, когда два значения различаются.

Давайте посмотрим на этот график, чтобы лучше понять преимущество AdaBelief перед Адамом -

На данном графике посмотрите на область 3:

В области 3 значение g-t будет большим, поскольку кривая в этой области действительно крутая. Значение vt также будет большим, и поэтому, если мы используем здесь Adam, размер шага в этой области будет очень маленьким, поскольку vt находится в знаменатель.

Но в AdaBelief мы вычисляем s-t как скользящее среднее разницы между градиентом и квадратом его скользящего среднего. И поскольку оба эти значения действительно близки, значение st на этот раз будет очень маленьким, поэтому, если мы будем использовать AdaBelief, поскольку st действительно мало и составляет в знаменателе, мы сделаем большие шаги в этой области, как и положено идеальному оптимизатору.

Мы видим, что AdaBelief может обрабатывать области со случаями «Большой градиент, малая кривизна», а Адам - ​​нет.

Также обратите внимание, что области 1 и 2 графика могут использоваться для демонстрации преимущества AdaBelief и Adam над оптимизаторами, такими как импульс или SGD, следующим образом:

  1. Область 1: Кривая очень плоская с градиентом, почти равным 0, в идеале мы хотели бы иметь здесь большие шаги. Если мы используем импульс или SGD, где мы умножаем размер шага на скользящее среднее, это приведет к маленьким шагам, тогда как в AdaBelief и Adam большие шаги будут предприняты, поскольку мы будем делить на скользящие средние.
  2. Область 2: Кривая здесь очень крутая с большим уклоном, в идеале здесь нужны небольшие ступеньки. Если мы используем импульс или SGD, при умножении на большие скользящие средние мы получим большие шаги обновления, в то время как в Adam и AdaBelief мы будем делить на скользящие средние, что приведет к меньшим шагам.

Давайте получим немного больше интуиции, посмотрев на этот двухмерный пример, рассмотрим функцию потерь - f (x, y) = | x | + | y ​​|:

Здесь синие стрелки представляют градиенты, а x справа - оптимальная точка. Как видите, градиент в направлении x всегда равен 1, а в направлении y он продолжает колебаться между 1 и -1.

Таким образом, в Адаме v-t для направлений x и y всегда будет равно 1, поскольку учитывает только амплитуду градиента, а не знак. Следовательно, Адам будет делать шаги одинакового размера по осям x и y.

Но в AdaBelief учитывается как амплитуда, так и знак градиента. Таким образом, в направлении y s-t будет равно 1, в направлении x он станет 0, что делает шаги в направлении x гораздо больше, чем в направлении y.

Вот несколько видео-примеров, созданных авторами оригинальной статьи для демонстрации производительности AdaBelief - AdaBelief Optimizer, Toy examples

Вот некоторые экспериментальные результаты, сравнивающие производительность AdaBelief с другими оптимизаторами в разных нейронных сетях, таких как CNN, LSTM и GAN, представленные авторами оригинальной статьи:

  1. Классификация изображений:

2. Моделирование временных рядов.

3. Генеративная состязательная сеть:

Заключение

  1. AdaBelief - это оптимизатор, производный от Адама и не имеющий дополнительных параметров, только изменение одного из параметров.
  2. Это оптимизатор, обеспечивающий как высокую скорость сходимости, так и хорошее обобщение.
  3. Он адаптирует размер шага в соответствии со своей «верой» в текущее направление градиента.
  4. Он хорошо работает в сценариях «Большой градиент, малая кривизна», поскольку учитывает как амплитуду, так и знак градиентов.

Надеюсь, вы поняли и вам понравились все концепции, описанные в этом посте. Не стесняйтесь обращаться с любыми вопросами или сомнениями.

Спасибо за прочтение!

Источники

  1. Juntang Zhuang, Tommy Tang, Yifan Ding, Sekhar Tatikonda, Nicha Dvornek, Xenophon Papademetris, James S. Duncan, AdaBelief Optimizer: адаптация шагов с верой в наблюдаемые градиенты.
  2. Дидерик Кингма, Джимми Ба, Адам: метод стохастической оптимизации »