Оптимизация

Адаптивные методы оптимизации

Почему одна и та же нейросеть обучается за 10 эпох с Adam и за 100 эпох с vanilla SGD? Почему в рекомендательных системах редкие айтемы обучаются плохо при фиксированном learning rate? Адаптивные оптимизаторы решают фундаментальную проблему: **разные параметры требуют разных шагов**.

  • **Трансформеры**: GPT и BERT обучаются с AdamW - без него сходимость нестабильна из-за неоднородности градиентов в attention layers
  • **Рекомендательные системы**: эмбеддинги редких айтемов обновляются только при их появлении - AdaGrad/Adam дают им большой шаг, не «сжигая» его на частых
  • **Fine-tuning LLM**: AdamW с правильным weight decay предотвращает catastrophic forgetting при дообучении на малых датасетах

Предварительные знания

  • Distributed Optimization
  • Optimization in ML and Production

AdaGrad: накопление истории градиентов

**AdaGrad** (Adaptive Gradient Algorithm, Duchi et al., 2011) - первый популярный адаптивный оптимизатор. Идея проста: параметры, которые обновлялись редко (редкие признаки), должны получать большой шаг; параметры с частыми обновлениями - малый шаг.

Gₜ только растёт и никогда не уменьшается. К концу обучения Gₜ становится огромным → αₜ → 0 → обучение останавливается. AdaGrad хорошо работает для **разреженных данных** (NLP, рекомендательные системы), где каждый параметр редко обновляется. Для плотных данных и глубоких сетей - плохо: все параметры быстро «выгорают».

AdaGrad стал первым шагом к пониманию того, что **один learning rate для всех параметров - плохая идея**. Разные параметры имеют разную геометрию градиентного ландшафта, и их нужно обновлять с разной скоростью.

Почему AdaGrad плохо работает для обучения глубоких нейронных сетей долгое время?

RMSProp: скользящее среднее вместо накопления

**RMSProp** (Root Mean Square Propagation, Hinton, 2012) решает главную проблему AdaGrad: вместо монотонного накопления квадратов градиентов используется **экспоненциальное скользящее среднее** (EMA). Это позволяет «забывать» старые градиенты.

RMSProp делает масштабирование градиента по **локальной кривизне**. Если в последних шагах градиент был большим (крутой склон), шаг уменьшается. Если маленьким (пологий склон) - шаг остаётся большим. Это приближает RMSProp к **методу Ньютона** (который делит на вторую производную), но без дорогостоящего вычисления Hessian. E[g²]ₜ - дёшевое приближение кривизны.

RMSProp стал стандартом для обучения RNN, где градиенты могут резко меняться (vanishing/exploding gradients). Экспоненциальное забывание позволяет адаптироваться к меняющемуся ландшафту потерь.

Чем RMSProp принципиально отличается от AdaGrad в обработке истории градиентов?

Adam: первый и второй моменты с коррекцией смещения

**Adam** (Adaptive Moment Estimation, Kingma & Ba, 2015) - самый популярный оптимизатор в глубоком обучении. Он объединяет идеи **импульса** (первый момент mₜ, как в momentum SGD) и **адаптивного learning rate** (второй момент vₜ, как в RMSProp), плюс добавляет **коррекцию смещения** для корректной работы в начале обучения.

Adam делает **нормализованный шаг по направлению скользящего среднего градиента**. - m̂ₜ - «куда мы усреднённо двигались» (направление с памятью) - √v̂ₜ - «насколько изменчив этот параметр» (стандартное отклонение) - m̂ₜ/√v̂ₜ - нормализованный шаг, примерно ±1 по каждому параметру - α - единый «масштаб шага» (≈ максимальный шаг за один обновление) При правильном α=0.001 шаг каждого параметра за один раз ≈ ±0.001. Это делает Adam **намного проще в настройке**, чем SGD.

Зачем Adam использует bias correction (деление на 1-βᵗ)?

Вариации Adam: AdamW, LAMB, Lion

Несмотря на популярность, Adam имеет известные проблемы: **плохая генерализация** по сравнению с SGD (Loshchilov & Hutter, 2019) и **нестабильность** при больших батчах. Это привело к появлению улучшенных вариантов.

**AdamW**: стандарт для fine-tuning трансформеров (HuggingFace по умолчанию). Лучше Adam при weight decay. **LAMB**: предобучение больших моделей с очень большими батчами (BERT, GPT-style pretraining на тысячах GPU). **Lion**: многообещающий конкурент AdamW для vision transformers и LLM. Требует меньший learning rate (≈3-10x меньше, чем AdamW). **SGD + momentum**: всё ещё лучший по генерализации для задач vision при правильной настройке learning rate schedule.

В чём ключевое улучшение AdamW по сравнению с Adam при использовании weight decay?

Ключевые идеи

  • **AdaGrad**: накапливает квадраты градиентов Gₜ = ΣGᵢ², адаптирует шаг к частоте параметра, но LR монотонно убывает к нулю
  • **RMSProp**: заменяет накопление на EMA E[g²]ₜ = β·E[g²]ₜ₋₁ + (1-β)·gₜ² - LR стабилизируется, «забывает» старые градиенты
  • **Adam**: добавляет первый момент (импульс) + bias correction, даёт ~±α шаг на каждый параметр, прост в настройке (lr≈0.001)
  • **AdamW**: фиксирует weight decay - применяет его напрямую к параметрам, а не через градиент, лучшая генерализация

Связанные темы

Адаптивные оптимизаторы строятся на фундаментальных идеях градиентной оптимизации:

  • Стохастический градиентный спуск — AdaGrad, RMSProp и Adam - улучшения SGD; понимание SGD необходимо для понимания адаптивности
  • Оптимизация в машинном обучении — Адаптивные оптимизаторы - практическое ядро ML оптимизации, применяемое для обучения всех современных моделей
  • Ландшафты потерь нейронных сетей — Почему адаптивность важна - понять через геометрию ландшафта потерь и роль кривизны

Вопросы для размышления

  • Почему Adam не всегда лучше SGD с momentum по метрике обобщающей способности (test accuracy)?
  • Если ваша модель сходится быстро на train, но плохо обобщается на val, как выбор оптимизатора может помочь?
  • Как bias correction в Adam влияет на первые шаги обучения - и почему это важно для warmup scheduling?

Связанные уроки

  • ml-09-gradient-descent
Адаптивные методы оптимизации

0

1

Войти