COMRAD404 / GLOSSARY

Оптимизатор (Optimizer): Adam и SGD

Optimizer

Оптимизатор — это правило обновления параметров модели во время обучения. В статье простыми словами разобраны SGD и Adam: схема работы, текущие defaults в Keras, отличия и ограничения.

TL;DR

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

Оптимизатор (optimizer) — это алгоритм, который во время обучения обновляет параметры модели по градиентам. Если коротко, SGD делает шаг градиентного спуска, а Adam использует адаптивные оценки первого и второго моментов, чтобы менять шаг обновления по более сложному правилу.

Английский термин: optimizer. Чаще всего в практических обсуждениях рядом встречаются SGD (stochastic gradient descent) и Adam. В этой статье под «оптимизатором» имеется в виду именно правило обновления параметров в официальной документации Keras, TensorFlow и PyTorch по состоянию на 2026-08-14.

Простыми словами

Грубо говоря, оптимизатор решает, как именно менять веса модели после каждой найденной ошибки. Можно представить обучение как спуск с холма в тумане: SGD делает шаг вниз по текущему наклону, а Adam не только смотрит на направление спуска, но и учитывает накопленную статистику недавних шагов.

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

Как это работает

На высоком уровне схема одинакова: модель вычисляет градиенты, а оптимизатор обновляет параметры по своему правилу. В Keras оптимизатор передается в model.compile, после чего становится частью тренировочного контура.

Порция обучающих данных
        ↓
Вычисление потерь и градиентов
        ↓
     Оптимизатор
   ┌───────────────┬────────────────────┐
   │               │                    │
   │ SGD           │ Adam               │
   │ шаг по        │ адаптивные оценки  │
   │ градиенту     │ 1-го и 2-го        │
   │ + optional    │ моментов           │
   │ momentum      │                    │
   │ + Nesterov    │                    │
   └───────────────┴────────────────────┘
        ↓
Новые параметры модели

По текущей документации Keras, Adam — это stochastic gradient descent method based on adaptive estimation of first-order and second-order moments. По документации Keras для SGD, это gradient descent with momentum; отдельно описаны режимы для momentum=0, momentum>0 и nesterov=True.

По состоянию на 2026-08-14 в официальной документации Keras указаны такие значения по умолчанию:

Оптимизатор Смысл метода Параметры по умолчанию Контекст источника
Adam Адаптивные оценки первого и второго моментов learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False Keras 3 API
SGD Градиентный спуск с возможностью momentum learning_rate=0.01, momentum=0.0, nesterov=False Keras 2 compatibility page

TensorFlow документирует тот же интерфейс tf.keras.optimizers.Adam на отдельной официальной странице. В PyTorch и Adam, и SGD входят в коллекцию torch.optim; документация также отмечает, что для части optimizers существуют fused-реализации.

Где применяется

  • В Keras и tf.keras. Оптимизатор передается в model.compile, поэтому выбор Adam или SGD — это прямое решение на этапе настройки обучения.
  • В PyTorch через torch.optim. Официальная документация перечисляет и SGD, и Adam как стандартные оптимизаторы фреймворка.
  • В сценариях дообучения. Если вы работаете с transfer learning или prompt tuning, выбор optimizer относится уже не к архитектуре, а к механике обновления параметров.
  • В больших стохастических задачах. Каноническая статья про Adam определяет его как first-order gradient-based optimization method for stochastic objective functions и отдельно подчеркивает low memory requirements и пригодность для large-scale problems.

Практический пример

Самый чистый практический сценарий — оставить модель и данные неизменными, а менять только оптимизатор. Ниже показан минимальный Keras-пример именно для такого сравнения; остальные аргументы compile специально опущены.

adam = keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=False,
)

sgd = keras.optimizers.SGD(
    learning_rate=0.01,
    momentum=0.0,
    nesterov=False,
)

model.compile(optimizer=adam)
# затем повторите тот же запуск с optimizer=sgd

Как использовать этот пример на практике:

  1. Берите одну и ту же модель и один и тот же датасет.
  2. Сначала сравните официальные значения по умолчанию, а уже потом меняйте learning_rate, momentum и другие параметры.
  3. Если переносите эксперимент между фреймворками, перепроверьте документацию: одинаковые названия не гарантируют идентичные детали реализации.

Практический вердикт редакции: не пытайтесь заранее угадать «лучший» optimizer по общим разговорам. Для рабочего старта честнее всего прогнать один и тот же эксперимент минимум с Adam и с SGD в официальных конфигурациях по умолчанию и смотреть на поведение именно вашей задачи.

Чем отличается от…

Термин Что это Чем отличается На что смотреть
Optimizer Зонтичный термин для правил обновления параметров Adam и SGD — частные случаи optimizer Не путайте класс методов с конкретным алгоритмом
SGD Градиентный спуск; в документации Keras — с возможностью momentum Базовое правило обновления; momentum и nesterov — его режимы learning_rate, momentum, nesterov
Adam Метод на основе адаптивных оценок первого и второго моментов Это не «SGD с галочкой», а другой optimizer с собственной статистикой обновлений learning_rate, beta_1, beta_2, epsilon, amsgrad
Momentum / Nesterov Опции поведения внутри SGD Это не отдельный синоним Adam В Keras и PyTorch параметры задаются отдельно внутри SGD

Ограничения и заблуждения

  • Заблуждение: «Adam всегда лучше SGD». В supplied sources нет универсального рейтинга качества. Документация объясняет механику и параметры, но не дает общего победителя для всех задач.
  • Заблуждение: «одинаковое название означает одинаковое поведение во всех фреймворках». PyTorch прямо предупреждает, что его momentum/Nesterov behavior subtly differs from some other frameworks and from Sutskever et al.
  • Ограничение по актуальности defaults. В этой статье значения по умолчанию для Adam взяты из Keras 3 API, а для SGD — из Keras 2 compatibility page, потому что именно эта страница явно фиксирует поведение и defaults для SGD на момент проверки.
  • Fused implementation — не новый алгоритм. В документации PyTorch и release notes fused-реализации упоминаются как деталь исполнения для части optimizers, включая Adam и SGD.
  • Редакционное ограничение. В этом материале нет собственных бенчмарков COMRAD404 и нет советов по универсальным гиперпараметрам для вашей задачи, потому что в source pack таких данных нет.

Связанные термины и сценарии

Если вы изучаете optimizer не изолированно, а как часть обучающего пайплайна, полезно держать рядом еще несколько терминов:

Вопросы и ответы

Что выбрать для первого запуска: Adam или SGD?

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

Momentum — это отдельный optimizer?

Нет. В официальной документации Keras momentum и Nesterov описаны как режимы поведения SGD, а не как отдельный optimizer уровня Adam.

Одинаков ли SGD в Keras и PyTorch?

Не полностью. Документация PyTorch отдельно предупреждает, что поведение momentum/Nesterov у него тонко отличается от некоторых других фреймворков и от формулировки Sutskever et al.

Можно ли считать fused=True новым алгоритмом оптимизации?

Нет. По документации PyTorch и release notes это деталь реализации некоторых optimizers, включая Adam и SGD, а не новый математический метод.

Источники

Источники

SOURCES

Вопросы и ответы

FAQ
Что выбрать для первого запуска: Adam или SGD?

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

Momentum — это отдельный optimizer?

Нет. В официальной документации Keras momentum и Nesterov описаны как режимы поведения SGD, а не как отдельный optimizer уровня Adam.

Одинаков ли SGD в Keras и PyTorch?

Не полностью. Документация PyTorch предупреждает, что поведение momentum/Nesterov у него тонко отличается от некоторых других фреймворков и от формулировки Sutskever et al.

Можно ли считать fused=True новым алгоритмом оптимизации?

Нет. По документации PyTorch и release notes это деталь реализации некоторых optimizers, включая Adam и SGD, а не новый математический метод.

Читайте также

LINKS