Верьте в AdaBelief
Введение
Все типы нейронных сетей и многие алгоритмы машинного обучения оптимизируют свои функции потерь с помощью алгоритмов оптимизации на основе градиентов. Существует несколько таких алгоритмов оптимизации или оптимизаторов, которые используются для обучения моделей - RMSprop, Stochastic Gradient Descent (SGD), Adaptive Moment Estimation (Adam) и многие другие.
При определении эффективности оптимизатора необходимо учитывать два основных показателя:
- Скорость сходимости, то есть насколько быстро достигается минимум функции потерь.
- Обобщение модели, то есть того, насколько хорошо модель работает с новыми невидимыми данными.
Адаптивные алгоритмы, подобные Адаму, имеют хорошую скорость сходимости, тогда как алгоритмы вроде SGD лучше обобщают.
Но недавно исследователи из Йельского университета представили новый оптимизатор AdaBelief (Оптимизатор AdaBelief: адаптация размеров с помощью веры в наблюдаемые градиенты), который сочетает в себе многие преимущества существующих методов оптимизации:
Мы предлагаем AdaBelief для одновременного достижения трех целей: быстрая сходимость, как в адаптивных методах, хорошее обобщение, как в SGD, и стабильность обучения. Интуиция AdaBelief заключается в том, чтобы адаптировать размер шага в соответствии с «верой» в текущее направление градиента. Рассматривая экспоненциальную скользящую среднюю (EMA) зашумленного градиента как предсказание градиента на следующем временном шаге, если наблюдаемый градиент сильно отклоняется от предсказания, мы не доверяем текущему наблюдению и делаем небольшой шаг; если наблюдаемый градиент близок к предсказанию, мы доверяем ему и делаем большой шаг.
Чтобы понять, что это означает и как работает AdaBelief, нам сначала нужно взглянуть на Адама (Адам: метод стохастической оптимизации), от которого произошел оптимизатор AdaBelief.
Адам
Adam Optimizer - один из наиболее широко используемых оптимизаторов для обучения всех видов нейронных сетей. Он в основном сочетает в себе методы оптимизации импульса и RMS prop. Позвольте мне вкратце объяснить, как это работает:
Обозначения, используемые здесь:
- f (θ): f - функция потерь, которая должна быть оптимизирована с учетом параметра (весов) θ.
- g-t: g - градиент на шаге t.
- m-t: m - экспоненциальная скользящая средняя (EMA) g-t.
- v-t: v - экспоненциальная скользящая средняя (EMA) для (g-t) ².
- β1, β2: это гиперпараметры, используемые в скользящих средних для gt и (gt) ², чаще всего равных 0,9 и 0,999 соответственно. .
- α: Скорость обучения.
- ε: очень маленькое число, используемое, чтобы избежать сценария знаменатель = 0.
Итак, вот что происходит: у нас есть функция потерь f (θ), которую нужно минимизировать, найдя оптимальные значения θ, так чтобы функция потерь достигла своего минимума. Для этого мы используем градиентный спуск, при котором мы в основном вычисляем градиенты функции и продолжаем вычитать их из весов, пока не достигнем минимума.
Чтобы сделать этот спуск быстрее, мы комбинируем два метода оптимизации:
- Мы вычисляем EMA градиента m-t и используем его в числителе направления обновления. Итак, если m-t имеет высокое значение, это означает, что спуск идет в правильном направлении, поэтому мы делаем большие шаги. Точно так же, если значение m-t низкое, это означает, что спуск, вероятно, не приближается к минимуму, и мы делаем меньшие шаги. Это импульс оптимизатора.
- Мы вычисляем 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: Кривая очень плоская с градиентом, почти равным 0, в идеале мы хотели бы иметь здесь большие шаги. Если мы используем импульс или SGD, где мы умножаем размер шага на скользящее среднее, это приведет к маленьким шагам, тогда как в AdaBelief и Adam большие шаги будут предприняты, поскольку мы будем делить на скользящие средние.
- Область 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, представленные авторами оригинальной статьи:
- Классификация изображений:
2. Моделирование временных рядов.
3. Генеративная состязательная сеть:
Заключение
- AdaBelief - это оптимизатор, производный от Адама и не имеющий дополнительных параметров, только изменение одного из параметров.
- Это оптимизатор, обеспечивающий как высокую скорость сходимости, так и хорошее обобщение.
- Он адаптирует размер шага в соответствии со своей «верой» в текущее направление градиента.
- Он хорошо работает в сценариях «Большой градиент, малая кривизна», поскольку учитывает как амплитуду, так и знак градиентов.
Надеюсь, вы поняли и вам понравились все концепции, описанные в этом посте. Не стесняйтесь обращаться с любыми вопросами или сомнениями.
Спасибо за прочтение!