Оптимизация
Стохастическая оптимизация
GPT-4 не обучался точным градиентным спуском - это было бы в миллион раз дороже. Вся современная deep learning стоит на SGD и его вариантах. Понимание того, почему шум в градиентах помогает, а не мешает - ключ к интуиции за Adam, warmup и gradient accumulation.
- **GPT/BERT обучение:** AdamW с cosine LR schedule + warmup - стандарт для всех LLM (OpenAI, Google, Meta)
- **Gradient accumulation:** обучение на GPU с 24 GB памяти при effective batch 4096 через 128 шагов накопления
- **Learning rate scaling:** при увеличении batch_size в k раз увеличивают lr в k раз (linear scaling rule, Facebook Research)
Предварительные знания
SGD: теория и сходимость
**SGD (Stochastic Gradient Descent)** заменяет точный градиент ∇f(x) = (1/n)Σ∇fᵢ(x) несмещённой оценкой по mini-batch: gₖ = (1/|B|)Σᵢ∈B ∇fᵢ(xₖ). Обновление: xₖ₊₁ = xₖ - αₖgₖ. Ключевой результат: при убывающих шагах Σαₖ=∞, Σαₖ²<∞ - SGD сходится к глобальному минимуму для выпуклых функций.
| Свойство | GD | SGD |
|---|---|---|
| Сходимость (выпуклая) | O(1/k) для фикс. шага | O(1/√k) с убыв. шагом |
| Сходимость (невыпуклая) | К стационарной точке | К стационарной точке |
| Стоимость итерации | O(n) - весь датасет | O(b) - mini-batch |
| Обобщение (generalization) | Хуже (sharp minima) | Лучше (flat minima) |
SGD с batch_size=1 сходится медленнее GD по числу эпох, но быстрее на практике. Почему?
Variance Reduction: SVRG и SAGA
SGD платит за скорость шумными градиентами: дисперсия Var[gₖ] не убывает с итерациями - нужен убывающий шаг, что замедляет сходимость. **SVRG и SAGA** устраняют дисперсию, сохраняя скорость SGD. Ключевая идея: вычитаем «корректирующий» член, аннулирующий шум.
**SVRG vs SAGA:** SVRG вычисляет полный градиент каждые m шагов (дополнительный O(n) проход). SAGA хранит все n индивидуальных градиентов - O(n·d) памяти. Для малых d - SAGA удобнее. Для больших d (нейросети) - оба непрактичны, поэтому Adam доминирует в deep learning.
SVRG вычитает корректирующий член grad_i(x_tilde) из стохастического градиента. Как это снижает дисперсию?
Адаптивные методы: Adam, AdaGrad, RMSProp
**Адаптивные методы** масштабируют шаг отдельно для каждого параметра, используя историю градиентов. Это устраняет необходимость тюнить learning rate для каждого параметра.
| Метод | Адаптация шага | Память | Когда лучше |
|---|---|---|---|
| SGD | Нет (фикс. lr) | O(n) | Простые выпуклые задачи, большие батчи |
| AdaGrad | Аккумул. G_t | O(d) | Разреженные градиенты (NLP embedding) |
| RMSProp | EMA v_t | O(d) | Non-stationary, RNN |
| Adam | EMA m_t + EMA v_t | O(2d) | Deep learning (стандарт де-факто) |
| AdamW | Adam + weight decay decoupled | O(2d) | Transformer, LLM fine-tuning |
Зачем Adam использует bias correction: m̂ = m/(1-β₁ᵗ)?
Шум как регуляризация
Эмпирически: модели, обученные SGD с малым batch_size, **обобщаются лучше**, чем обученные GD или large batch SGD. Объяснение: стохастический шум предпочитает **flat minima** - широкие плоские минимумы с малой кривизной, которые лучше обобщаются на новых данных.
**SAM (Sharpness-Aware Minimization):** явно оптимизирует flat minima, добавляя inner maximization step. Улучшает generalization на 1-3% без дополнительных данных. Используется в Google для обучения трансформеров.
Adam всегда лучше SGD для нейросетей
Adam сходится быстрее, но SGD с тюнингом often даёт лучшее обобщение. Для трансформеров (BERT, GPT) AdamW - стандарт, но для ResNet/ViT SGD с momentum иногда лучше финально.
Adam адаптирует шаг покоординатно, что ускоряет обучение на разреженных данных и адаптируется к гетерогенным градиентам. Но для dense задач SGD с правильным lr schedule (cosine decay) находит более плоские минимумы благодаря изотропному шуму. Практически: стартуем с Adam, если результат важен - тюним SGD+momentum.
Обучение с batch_size=32 дало лучшую accuracy на тесте, чем batch_size=4096 при том же числе эпох. Почему?
Ключевые идеи
- **SGD** - несмещённая оценка градиента по mini-batch; сходимость O(1/√k) для выпуклых; n/b раз больше обновлений за эпоху чем GD
- **SVRG/SAGA** - variance reduction через корректирующий член; линейная сходимость как GD, но стоимость O(b) как SGD
- **Adam** = momentum + adaptive step per coordinate; bias correction; стандарт де-факто для deep learning
- **Шум как регуляризация:** малые батчи → flat minima → лучшее обобщение; SAM явно оптимизирует шароту
Связанные темы
Стохастическая оптимизация - основа современного ML:
- Нелинейная оптимизация — L-BFGS - детерминированный аналог SGD для малых моделей; Adam - first-order SGD вариант
- Bayesian Optimization — BO для HPO включает lr, batch_size; оптимальные гиперпараметры SGD/Adam найти через BO
- Optimization в Production — SAM, quantization-aware training, inference optimization - продвинутые методы на базе SGD
Вопросы для размышления
- SGD с малым batch сходится медленнее (больше шума), но обобщается лучше. Это противоречие или два разных свойства? Как их примирить при выборе batch_size на практике?
- SVRG и SAGA снижают дисперсию, приближая сходимость к GD. Почему они тогда не вытеснили Adam в deep learning?
- Что такое gradient accumulation и в каких ситуациях он необходим? Как он влияет на effective noise scale?