Собесов

khangich: SGD, Adam, learning rate schedule

ML / Data ScienceОптимизацияСредняяMiddle

Условие

Чем отличается SGD от Adam? Когда что использовать? Зачем нужны learning rate schedules?

Решение

Подход

SGD.

w ← w − η · ∇L(w) (на батче). Простой, надёжный. С импульсом (momentum) работает заметно лучше: эффективно усредняет градиент по нескольким шагам, помогая преодолевать локальные «ущелья».

Adam.

Поддерживает индивидуальные адаптивные learning rate для каждого параметра. Использует первое (m_t) и второе (v_t) моменты градиентов:

  • m_t = β₁ m_{t-1} + (1 − β₁) g_t
  • v_t = β₂ v_{t-1} + (1 − β₂) g_t²
  • w ← w − η · m̂_t / (sqrt(v̂_t) + ε)

Когда что.

  • SGD with momentum часто даёт лучший финальный качество на CV/классификации изображений. Стандарт в больших моделях типа ResNet.
  • Adam быстро сходится, надёжно работает «из коробки», особенно на трансформерах и небольших датасетах. AdamW (отдельный weight decay) — стандарт для трансформеров.
  • SGD vs Adam: Adam генерализуется хуже на больших сверточных сетях. SGD с momentum + правильный schedule часто бьёт Adam по final accuracy.

Learning rate schedules.

  • Step decay: умножаем lr на 0.1 каждые N эпох.
  • Cosine annealing: lr плавно убывает по косинусу до нуля.
  • Warmup: первые k шагов lr растёт от 0 до базового — критично для трансформеров.
  • One-cycle: lr сначала растёт, потом падает; популярен в fastai.
import torch.optim as optim
 
opt = optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.01)
sched = optim.lr_scheduler.CosineAnnealingLR(opt, T_max=epochs)
 
for epoch in range(epochs):
    train_one_epoch()
    sched.step()

Подводные камни

  1. Adam с большим lr на трансформерах без warmup — рецепт NaN. Всегда warmup в первые ~1k шагов.
  2. Weight decay в Adam работает не как L2 в SGD (через градиент). Используйте AdamW, в котором decay добавлен корректно.
  3. Learning rate vs batch size. При увеличении батча в k раз — увеличивайте lr примерно в sqrt(k) (или k для linear scaling rule).
  4. SGD без momentum обычно не нужен — momentum 0.9 берётся по умолчанию почти всегда.
  5. Lr слишком маленький → долгая сходимость; слишком большой → расходимость или осцилляции. Прогон learning rate finder (Smith) экономит часы.

Эталонный ответ

SGD with momentum — надёжно, генерализуется лучше на CV; Adam/AdamW — быстро сходится и хорошо работает на NLP/трансформерах. Lr-schedule с warmup + cosine/step decay почти всегда улучшает результат. AdamW (отдельный weight decay) — выбор по умолчанию для трансформеров.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти