Оптимизатор (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
Как использовать этот пример на практике:
- Берите одну и ту же модель и один и тот же датасет.
- Сначала сравните официальные значения по умолчанию, а уже потом меняйте
learning_rate,momentumи другие параметры. - Если переносите эксперимент между фреймворками, перепроверьте документацию: одинаковые названия не гарантируют идентичные детали реализации.
Практический вердикт редакции: не пытайтесь заранее угадать «лучший» 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 не изолированно, а как часть обучающего пайплайна, полезно держать рядом еще несколько терминов:
- Transfer learning (перенос обучения) — типичный сценарий, где optimizer выбирают осознанно для дообучения.
- Prompt tuning (мягкий промпт) — соседний вариант обучения небольшого числа параметров.
- Few-shot / zero-shot обучение — полезное соседнее понятие, чтобы не смешивать обучение и использование уже готовой модели.
Вопросы и ответы
Что выбрать для первого запуска: 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, а не новый математический метод.