Оптимизатор Adam: формула и параметры
Оптимизатор Adam (Adaptive Moment Estimation) появился в 2014 году в статье Дидерика Кингма и Джимми Бы и быстро стал стандартом обучения нейросетей. Его ключевое преимущество перед обычным SGD состоит в том, что шаг обновления каждого параметра подстраивается автоматически: параметры с маленькими градиентами получают больший шаг, а параметры с большими - меньший. Ниже разберём формулы, смысл каждого гиперпараметра и то, где Adam выигрывает у конкурентов. Чтобы сразу увидеть, как меняется траектория при разных значениях, покрутите слайдеры в калькуляторе:
Формула Adam: четыре строки
Adam на каждом шаге делает четыре вычисления. Пусть - градиент функции потерь по параметру в момент :
Здесь - первый момент (скользящее среднее градиента), - второй момент (скользящее среднее квадрата градиента). Деление нормирует обновление: там, где градиент стабильно большой, знаменатель тоже большой, и шаг уменьшается автоматически. Параметр защищает от деления на нуль.
Что такое bias correction
В начале обучения и . Если не корректировать, первые несколько шагов дадут сильно заниженные значения моментов, потому что накопленная «история» ещё слишком короткая. Bias correction делит на : при и делитель равен , то есть - момент «раздувается» до реального масштаба. С ростом делитель стремится к единице, и коррекция становится незаметной. На практике без bias correction первые эпохи могут давать неадекватно маленькие обновления и медленный старт.

Гиперпараметры: что и как настраивать
Скорость обучения управляет общим масштабом шагов. Авторы предложили дефолт ; он работает для большинства задач без ручной настройки. Если обучение расходится - уменьшайте на порядок; если сходится слишком медленно - пробуйте или .
контролирует «инерцию» направления: насколько прошлые градиенты влияют на текущий шаг. При момент медленно реагирует на смену направления; при Adam ведёт себя почти как RMSProp без первого момента.
управляет «памятью» масштаба: насколько быстро забывает старые квадраты градиентов. Большое делает нормировку консервативной - эффективный шаг меняется плавно. Маленькое (например, ) заставляет шаг быстро адаптироваться к текущему масштабу, что полезно при сильно нестационарных потерях.
- числовая стабильность, обычно не трогают. Иногда увеличивают до или , если встречается численная нестабильность на разреженных данных.
Сравнение с SGD и RMSProp
SGD обновляет все параметры с одним и тем же шагом : . В «оврагах» (функциях с сильно различающейся кривизной по разным направлениям) это приводит к осцилляциям: шаг вдоль крутого склона слишком большой, а вдоль пологого - слишком маленький. Adam решает эту проблему через : крутые направления получают большой знаменатель и, значит, маленький эффективный шаг.
RMSProp делает только второй момент и не содержит bias correction. Adam добавляет к нему ещё первый момент (аналог импульса в momentum-SGD), что дало более устойчивую сходимость на практике. В большинстве задач глубокого обучения Adam сходится быстрее SGD и сравнимо с AdaGrad, но не «замораживает» шаг к нулю на длинных обучениях, как AdaGrad.
Полезно сравнить формально. AdaGrad накапливает сумму квадратов градиентов с самого начала:
Чем дольше обучение, тем больше - и шаг неизбежно стремится к нулю. RMSProp и Adam заменили сумму экспоненциально убывающим средним, чтобы шаг оставался конечным:
При «половина жизни» памяти составляет около 700 шагов: что было раньше, практически забывается. Это и делает Adam применимым на очень длинных обучениях.
Moment SGD (momentum-SGD) добавляет инерцию направления, но не адаптирует масштаб:
Первый момент Adam - это то же самое, только нормированное. Таким образом, Adam = RMSProp + momentum + bias correction.
Когда Adam хуже SGD
Несмотря на популярность, Adam не всегда лучше. На задачах классификации изображений (ImageNet, CIFAR) правильно настроенный SGD с momentum и warmup-расписанием нередко даёт более высокую финальную точность, хотя Adam сходится быстрее в начале. Причина - адаптивные методы могут переобучаться на некоторых конфигурациях из-за различной эффективной скорости обучения для разных параметров. В последние годы появились гибриды: AdamW, NAdam, RAdam - каждый из них устраняет отдельные слабости оригинального Adam.
Теоретический анализ Редди, Кейла и Кумара (2018) показал, что Adam в принципе не сходится к оптимуму на некоторых простых задачах выпуклой оптимизации. Проблема - в том, что обновление может пересматривать давние большие градиенты «слишком быстро», и алгоритм колеблется вблизи оптимума вместо монотонного убывания потерь. RAdam (Rectified Adam) исправляет это адаптивным ректификатором, который в начале обучения отключает адаптивность, пока ещё не набрал достаточно статистики.
AdamW добавляет правильный weight decay: вместо -регуляризации через градиент (которая взаимодействует с адаптивным шагом) он применяет убывание весов напрямую: . Это особенно важно для больших языковых моделей и трансформеров. При обычном Adam с -регуляризацией штраф за большие веса масштабируется адаптивным шагом и оказывается фактически меньше, чем задумано дизайнером. AdamW разделяет эти два механизма, что в экспериментах с BERT и GPT давало заметное улучшение качества при одинаковом числе шагов.
Частые ошибки
- Не меняют при переходе на новую задачу. Дефолт - хорошая отправная точка, но не универсальная; для трансформеров часто нужен warmup + cosine decay.
- Путают и . - для первого момента (направления), - для второго (масштаба). Перепутать их означает дать «инерцию» масштабу и «адаптивность» направлению - это ломает логику алгоритма.
- Используют Adam там, где нужен SGD. Если финальная точность критична и есть ресурсы на долгое обучение (например, ImageNet с расписанием LR), SGD + momentum может дать лучший результат.
- Забывают bias correction при самостоятельной реализации. Пропуск деления на даёт медленный старт и может имитировать переобучение на первых эпохах.
- Слишком большой . фактически убирает адаптивность: знаменатель при малых градиентах, и Adam деградирует до обычного momentum.
FAQ
Почему Adam называется adaptive? Потому что эффективный шаг разный для каждого параметра и меняется в ходе обучения. Параметры с исторически большими градиентами получают меньший шаг, с малыми - больший. В отличие от SGD, где один для всех.
Нужно ли тюнить beta1 и beta2? В большинстве случаев нет: дефолты и работают хорошо. Эксперименты с ними нужны при нестабильной сходимости или при работе с разреженными данными (NLP), где иногда помогает .
Чем AdamW отличается от Adam? AdamW применяет weight decay (-штраф) напрямую к весам, не через градиент. В Adam с -регуляризацией штраф масштабируется адаптивным шагом и оказывается меньше, чем задумано. AdamW исправляет это и является рекомендуемой заменой Adam для большинства задач.
Коротко
Adam объединяет идею импульса (первый момент ) и адаптивного масштабирования шага (второй момент ) с bias correction для корректного старта. Дефолтные параметры , , работают для большинства нейросетей без ручной настройки. В «оврагах» потерь Adam сходится намного быстрее SGD за счёт разного эффективного шага по разным направлениям. Для финального качества на крупных задачах компьютерного зрения стоит сравнить с SGD+momentum; для трансформеров и LLM используйте AdamW.
Читайте также

Оптимизатор RMSprop: формула и параметры
Как работает RMSprop: формула скользящего среднего квадратов градиента, роль rho и learning rate, отличия от AdaGrad и Adam. Разбор с интерактивным калькулятором траектории.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.