Оптимизация
Адаптивные методы оптимизации
Почему одна и та же нейросеть обучается за 10 эпох с Adam и за 100 эпох с vanilla SGD? Почему в рекомендательных системах редкие айтемы обучаются плохо при фиксированном learning rate? Адаптивные оптимизаторы решают фундаментальную проблему: **разные параметры требуют разных шагов**.
- **Трансформеры**: GPT и BERT обучаются с AdamW - без него сходимость нестабильна из-за неоднородности градиентов в attention layers
- **Рекомендательные системы**: эмбеддинги редких айтемов обновляются только при их появлении - AdaGrad/Adam дают им большой шаг, не «сжигая» его на частых
- **Fine-tuning LLM**: AdamW с правильным weight decay предотвращает catastrophic forgetting при дообучении на малых датасетах
Предварительные знания
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?