Алгоритм оптимизации Адама от определения до реализации

В 1940-х математическое программирование было синонимом оптимизации. Проблема оптимизации включала целевую функцию, которая должна быть максимизирована или минимизирована путем выбора входных значений из разрешенного набора значений [1].

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

Отказ от ответственности: базовое понимание оптимизации нейронной сети. Перед чтением рекомендуется использовать такие как "Градиентный спуск" и "Стохастический градиентный спуск".

В этом посте я выделю следующие моменты:

  1. Определение оптимизации Адама
  2. Дорога к Адаму
  3. Алгоритм Адама для стохастической оптимизации
  4. Визуальное сравнение Адама с другими оптимизаторами
  5. Реализация
  6. Преимущества и недостатки Адама
  7. Заключение и дальнейшее чтение
  8. использованная литература

1. Определение оптимизации Адама

Алгоритм Адама был впервые представлен в статье Адам: метод стохастической оптимизации [2] Дидерика П. Кингмы и Джимми Ба. Адам определяется как «метод эффективной стохастической оптимизации, который требует только градиентов первого порядка с небольшими требованиями к памяти» [2]. Хорошо, давайте разберем это определение на две части.

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

Во-вторых, Адаму нужны только градиенты первого порядка. Это означает, что Адаму требуется только первая производная параметров.

Теперь название алгоритма Адам происходит от оценки адаптивного момента. Это станет очевидным по мере прохождения алгоритма.

2. Дорога к Адаму

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

I. SGD с Momentum

Импульс в физике - это движущийся объект, например, мяч, ускоряющийся по склону. Итак, SGD с Momentum [3] включает градиенты из предыдущих шагов обновления, чтобы ускорить градиентный спуск. Это делается небольшими, но простыми шагами в нужном направлении.

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

  • Термин бета (𝛽) управляет скользящей средней. Значение Beta равно [0,1), обычное значение 𝛽 = 0,9, что означает, что мы усредняем градиенты по последним 10 итерациям, а более старые градиенты отбрасываются или забываются. Таким образом, большое значение бета (скажем, 𝛽 = 0,98) означает, что мы усредняем по большему количеству градиентов.
  • Альфа (α) - это скорость обучения, которая определяет размер шага на каждой итерации.

II. Связанные работы (AdaGrad и RMSProp)

Хорошо, есть два алгоритма, о которых нужно знать, прежде чем мы перейдем к Адаму. AdaGrad (алгоритм адаптивного градиента) [4] и RMSProp (среднеквадратичное распространение) [5] являются расширениями SGD. Эти два алгоритма имеют некоторое сходство с Адамом. Фактически, Адам сочетает в себе преимущества двух алгоритмов.

III. Адаптивная скорость обучения

И AdaGrad, и RMSProp также являются адаптивными алгоритмами градиентного спуска. Это означает, что для каждого из параметров (w, b), скорость обучения (α) адаптирована. Короче говоря, скорость обучения поддерживается для каждого параметра.

Чтобы лучше проиллюстрировать это, вот объяснение AdaGrad и RMSProp:

  • AdaGrad

Скорость обучения по параметрам в AdaGrad помогает увеличить скорость обучения для более разреженных параметров. Таким образом, AdaGrad хорошо работает для разреженных градиентов, например, в приложениях для обработки естественного языка и распознавания изображений [4].

  • RMSProp

RMSProp был введен Тилеменом и Хинтоном для ускорения мини-пакетного обучения. В RMSProp скорость обучения адаптируется на основе скользящего среднего значений последних градиентов.

Это означает, что RMSProp поддерживает скользящее среднее квадратов недавних градиентов, обозначенных (v). Таким образом, придавая больший вес недавним градиентам.

Здесь термин «бета» (𝛽) вводится как фактор забвения (как в SGD с Momentum).

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

Кроме того, RMSProp хорошо работает с большими и избыточными наборами данных (например, зашумленные данные) [5].

* Термин ( 𝜖) используется для числовой стабильности (избегайте деления на ноль).

Вот визуальное сравнение того, что мы узнали на данный момент:

На гифке выше вы можете увидеть, как Momentum исследует окрестности, прежде чем найти исправленный путь. Что касается SGD, AdaGrad и RMSProp, все они идут по схожему пути, но AdaGrad и RMSProp явно быстрее.

3. Алгоритм Адама для стохастической оптимизации.

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

Как объяснил Эндрю Нг, Адам: оценка адаптивного момента - это просто комбинация Momentum и RMSProp.

Вот алгоритм оптимизации целевой функции f (θ) с параметрами θ (веса и смещения).

Adam включает гиперпараметры: α, 𝛽 1 (из Momentum), 𝛽 2 (из RMSProp).

Инициализировать:

  • m = 0, это вектор первого момента, обрабатываемый как в Momentum
  • v = 0, это второй вектор момента, обрабатываемый как в RMSProp.
  • t = 0

На итерации t:

  • Обновить t, t: = t + 1
  • Получить градиенты / производные (g) относительно t, здесь g эквивалентно ( dw и db соответственно)

  • Обновить первый момент mt
  • Обновите второй момент vt

  • Вычислить mt с поправкой на смещение (коррекция смещения дает лучшую оценку скользящих средних)
  • Вычислить v t с поправкой на смещение

  • Обновите параметры θ

Вот и все! Цикл будет продолжаться до тех пор, пока Адам не найдет решение.

4. Визуальное сравнение оптимизаторов

Лучший способ распознать различия между ранее упомянутыми алгоритмами оптимизации - это визуальное сравнение их производительности.

Рисунок выше взят из бумаги Адама. Он демонстрирует стоимость обучения за 45 эпох, и вы можете видеть, что Адам сходится быстрее, чем AdaGrad для CNN. Возможно, стоит упомянуть, что AdaGrad соответствует версии Adam с гиперпараметрами (α, 𝛽1, 𝛽2) при определенных значениях [2]. Я решил удалить математическое объяснение AdaGrad из этого поста, чтобы избежать путаницы, но вот простое объяснение от mxnet, если вы хотите узнать больше об этом.

На гифке выше вы можете увидеть, как Adam и RMSProp сходятся с одинаковой скоростью, в то время как AdaGrad, похоже, изо всех сил пытается сойтись.

Между тем, на этой гифке вы можете увидеть, как Адам и SGD с Momentum сходятся к решению. В то время как SGD, AdaGrad и RMSProp, похоже, застряли в локальном минимуме.

5. Осуществление

Здесь я покажу три различных способа включения Адама в вашу модель с помощью реализаций TensorFlow, PyTorch и NumPy.

  • Реализация только с помощью NumPy:

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

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

6. Преимущества и недостатки Адама.

Адам - ​​один из лучших оптимизаторов по сравнению с другими алгоритмами, но он тоже не идеален. Итак, вот некоторые достоинства и недостатки Адама.

Преимущества:

  1. Может обрабатывать разреженные градиенты на зашумленных наборах данных.
  2. Значения гиперпараметров по умолчанию подходят для большинства задач.
  3. Вычислительная эффективность.
  4. Требуется мало памяти, поэтому память эффективна.
  5. Хорошо работает с большими наборами данных.

Недостатки:

  1. Адам не подходит к оптимальному решению в некоторых областях (это мотивация для AMSGrad).
  2. Адам может страдать от потери веса (о которой говорится в AdamW).
  3. Последние алгоритмы оптимизации оказались быстрее и лучше [6].

7. Заключение и дальнейшее чтение

Это все для Адама: оценка адаптивного момента!

Adam является расширением SGD и сочетает в себе преимущества AdaGrad и RMSProp. Adam также является адаптивным алгоритмом градиентного спуска, так что он поддерживает скорость обучения для каждого параметра. И он отслеживает скользящее среднее первого и второго момента градиента. Таким образом, используя первый и второй момент, Адам может дать немасштабированную прямую оценку обновлений параметра. Наконец, хотя появились новые алгоритмы оптимизации, Адам (и SGD) по-прежнему является стабильным оптимизатором для использования.

Отличные ресурсы для дальнейшего чтения (и просмотра):

8. Ссылки

  1. Стивен Дж. Райт, Оптимизация (2016), Британская энциклопедия
  2. Дидерик П. Кингма, Джимми Ба, Адам: метод стохастической оптимизации (2015), arxiv
  3. Изучение внутренних представлений путем распространения ошибок (1986), Rumelhart, Hinton and Williams, ACM
  4. Дучи и др., Адаптивные субградиентные методы для онлайн-обучения и стохастической оптимизации (2011 г.), Стэнфорд.
  5. Джеффри Хинтон и Нитиш Шривастава Кевин Сверски, Нейронные сети для машинного обучения (лекция 6) (2012 г.), UToronto и Coursera
  6. Джон Чен, Обновленный обзор последних алгоритмов градиентного спуска (2020 г.), GitHub
  7. куроиту С., Сравнение методов оптимизации (2020), Qiita