Урок по треку Математика для ML 7 мин

SGD, momentum и Adam за 7 минут

Мини-батчи, эпохи, momentum, RMSProp, Adam, AdamW и расписания learning rate.

Полный градиент по всему датасету дорог. Поэтому модели учат на мини-батчах и с умными оптимизаторами. На собесе просят объяснить разницу между SGD, momentum и Adam, записать формулы и рассказать про расписания learning rate.

Батч, итерация, эпоха

  • Батч: порция объектов для одного вычисления градиента.
  • Итерация (шаг): одно обновление весов.
  • Эпоха: проход по всем данным, N / B итераций.

10 000 объектов и батч 100 дают 100 шагов в эпохе.

SGD

Градиент по случайному мини-батчу это несмещённая, но шумная оценка полного градиента. Шаг стоит в N/B раз дешевле, за то же время делается много шагов, а шум помогает выходить из седел.

w ← w - η · g

Momentum

v ← β v + g
w ← w - η v

v копит экспоненциальное среднее градиентов (β обычно 0.9). Если градиент стабильно указывает в одну сторону, скорость растёт до ~1/(1 - β) от одного шага. Если знак скачет (зигзаг в овраге), вклады гасятся.

Пример с β = 0.9, η = 0.1 и градиентом 1 на двух шагах: v = 1, w = -0.1; затем v = 1.9, w = -0.29.

RMSProp и Adam

RMSProp делит шаг каждого параметра на корень из скользящего среднего квадратов его градиента. Параметры с большими градиентами получают меньший шаг.

Adam объединяет momentum и RMSProp:

m ← β₁ m + (1 - β₁) g
v ← β₂ v + (1 - β₂) g²
m̂ = m / (1 - β₁ᵗ),  v̂ = v / (1 - β₂ᵗ)
w ← w - η · m̂ / (√v̂ + ε)

По умолчанию β₁ = 0.9, β₂ = 0.999, ε = 1e-8.

Поправка смещения нужна, потому что m и v стартуют с нуля и в первые шаги занижены. С поправкой первый шаг Adam по модулю равен η, какой бы ни была величина градиента.

AdamW

Если добавить L2 в loss, слагаемое λw пройдёт через деление на √v, и у параметров с большими градиентами регуляризация почти исчезнет. AdamW применяет weight decay к весам напрямую: w ← w - ηλw. Это стандарт для трансформеров.

Память

Adam хранит два дополнительных тензора на каждый параметр (m и v), SGD с momentum один. Для больших моделей состояние оптимизатора весит больше самих весов, отсюда 8-битные оптимизаторы и шардирование состояния.

Что выбрать

  • По умолчанию AdamW: быстро сходится без тонкой настройки, хорошо работает с разреженными градиентами.
  • SGD с momentum часто выбирают для свёрточных сетей с BatchNorm: при хорошем расписании он обобщает не хуже, а иногда лучше.

Расписания learning rate

Adam адаптирует шаг между параметрами, но общий масштаб всё равно задаёт η.

  • Warmup: первые сотни или тысячи шагов линейно растим lr. На старте статистики оптимизатора ненадёжны, а градиенты у случайной модели бывают большими.
  • Затухание: ступенчатое, косинусное, линейное до нуля. Большой шаг быстро приводит в хорошую область, маленький позволяет осесть.
  • One-cycle и косинус с перезапусками.

Расписание привязано к запланированному числу шагов: если обучение удлинили, его пересчитывают.

Батч и learning rate

При увеличении батча в k раз шагов за эпоху в k раз меньше. Для SGD работает линейное правило: lr умножают на k и добавляют warmup. Для Adam растят мягче. Это эвристика, её проверяют.

Частые ошибки

  • Путать эпоху и итерацию.
  • Считать, что Adam не нуждается в подборе lr и расписании.
  • Добавлять L2 в loss при Adam и думать, что это то же самое, что weight decay.

Что спросят на собесе

  • Почему мини-батчи, а не полный градиент.
  • Формулы momentum и Adam, зачем поправка смещения.
  • Чем AdamW отличается от Adam с L2.
  • Зачем warmup и какие бывают расписания.
  • Когда SGD с momentum лучше Adam.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.