Глубокое обучение

Оптимизация: SGD -> AdamW

Цели урока

  • Понять как момент ускоряет SGD и сглаживает колебания
  • Объяснить принцип адаптивного lr в Adam
  • Различать Adam и AdamW и знать когда что использовать
  • Применять schedulers для управления lr в процессе обучения

Нейросеть не обучается - loss стоит на месте. Меняем optimizer с SGD на Adam - loss начинает падать. Через 50 эпох plateau. Добавляем cosine scheduler - loss снова падает до нового минимума. Выбор оптимизатора и scheduler часто важнее архитектуры.

  • **GPT-3/4:** обучались на AdamW с warmup + cosine decay - стандарт для LLM
  • **ResNet на ImageNet:** SGD с momentum=0.9 и StepLR даёт лучшую точность чем Adam
  • **Fine-tuning:** маленький lr (1e-5) + warmup чтобы не сломать pretrained веса
  • **Быстрый прототип:** Adam с lr=3e-4 работает «из коробки» без тюнинга

От Robbins-Monro к AdamW

Стохастическая оптимизация началась с работы Herbert Robbins и Sutton Monro в 1951 году, чей метод стохастической аппроксимации лежит в основе SGD. Boris Polyak добавил момент в 1964 году, чтобы гасить колебания. В 2011 году John Duchi, Elad Hazan и Yoram Singer предложили AdaGrad с адаптивным learning rate для каждого параметра. Diederik Kingma и Jimmy Ba объединили адаптивные шаги с моментом в Adam (2014), который стал оптимизатором по умолчанию. В 2017 году Ilya Loshchilov и Frank Hutter показали, что L2-регуляризация в Adam некорректно связана с адаптивным шагом, и предложили AdamW с decoupled weight decay - сейчас это стандарт для обучения трансформеров.

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

  • Градиенты и chain rule из backpropagation
  • Как функция потерь минимизируется градиентным спуском
  • Векторы и частные производные
  • Нейронные сети: от биологии к математике
  • Backpropagation: как нейронные сети учатся

SGD с моментом

Шарик катится с горы. Обычный SGD - это шарик без инерции: остановился, посмотрел вниз, сделал шаг. Медленно и дёргано. **SGD с моментом** добавляет инерцию: шарик набирает скорость в стабильных направлениях и тормозит при смене направления.

Математически: накапливаем **вектор скорости** `v` как экспоненциальное скользящее среднее градиентов. Параметр `momentum` (обычно 0.9) определяет насколько важна история - 90% от предыдущей скорости и 10% от текущего градиента.

**Nesterov Momentum** (NAG) - улучшенная версия: сначала делаем шаг по накопленной скорости, потом корректируем. Даёт более точное направление. В PyTorch: `SGD(nesterov=True)`.

SGD с momentum=0.9 на шаге t имеет v_{t-1}=0.5. Текущий градиент grad_t=0.2. Чему равно v_t?

Adam: адаптивный learning rate

SGD с моментом использует одинаковый learning rate для всех параметров. Проблема: редкие признаки получают маленькие градиенты и обновляются медленно, частые - большие и нестабильны. **Adam (Adaptive Moment Estimation)** даёт каждому параметру свой эффективный learning rate, автоматически адаптируясь.

Adam отслеживает два момента: **m** (среднее градиентов, как в momentum) и **v** (среднее квадратов градиентов). Параметры с большой историей градиентов получают меньший шаг, параметры с малой историей - больший.

Adam обновляет параметр с большой историей больших градиентов (v велик). Шаг обновления будет:

Weight Decay и L2 регуляризация

Модель обучилась идеально на train set, но провалилась на test - переобучение. Один из способов борьбы: **L2 регуляризация** добавляет штраф за большие веса к функции потерь. Большие веса означают что модель слишком чувствительна к конкретным признакам.

**Weight Decay** - другое название того же понятия, но с важным нюансом для Adam. В SGD L2 и weight decay математически эквивалентны. В Adam - нет: L2 добавляет градиент в числитель, где Adam его адаптирует. **AdamW** (Adam + decoupled weight decay) применяет decay напрямую к весам, минуя адаптацию.

**AdamW vs Adam:** GPT, BERT, и все современные LLM тренируются на AdamW. Разница: в Adam weight decay «размывается» адаптивным learning rate. AdamW держит decay постоянным - более предсказуемая регуляризация.

Почему AdamW предпочтительнее Adam с weight_decay при обучении трансформеров?

Learning Rate Scheduler

Фиксированный learning rate - компромисс: большой lr быстро находит область минимума, но не может в него войти; маленький lr точен, но начинает медленно. **Scheduler** меняет lr по расписанию: начинаем большим, постепенно уменьшаем по мере обучения.

**Практика:** для большинства задач - CosineAnnealingLR. Для трансформеров и LLM - warmup + cosine decay. OneCycleLR хорош для CV с коротким обучением. Главное правило: в конце обучения lr должен быть в 10-100 раз меньше начального.

Маленький learning rate всегда лучше - точнее обновления

Слишком маленький lr застревает в плохих локальных минимумах и учится бесконечно долго

Функция потерь не выпуклая. Умеренный lr позволяет «перепрыгнуть» плохие минимумы. Scheduler даёт лучшее из двух миров: начальный исследовательский lr и финальный уточняющий

Зачем трансформерам нужен warmup в начале обучения?

Оптимизаторы SGD -> AdamW

  • SGD + momentum: инерция сглаживает колебания, ускоряет движение вдоль долины
  • Adam: адаптивный lr через два момента (m, v) - параметры с большими grad получают меньший шаг
  • AdamW: weight decay отдельно от адаптации - стандарт для трансформеров и LLM
  • Scheduler: lr schedule (warmup + cosine) критичен для сходимости больших моделей
  • Выбор: Adam/AdamW для NLP, SGD+momentum для CV с тщательным тюнингом

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

Оптимизаторы работают в связке с регуляризацией и инициализацией весов.

  • Регуляризация: Dropout, BatchNorm — Другие методы борьбы с переобучением
  • Backpropagation — Откуда берутся градиенты для оптимизатора
  • Трансформеры — AdamW + warmup - стандарт для обучения трансформеров

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

  • Почему для NLP часто лучше Adam, а для CV - SGD с моментом?
  • Как warmup взаимодействует с механизмом bias correction в Adam?
  • При fine-tuning pretrained модели - какой lr и scheduler выбрать и почему?

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

  • dl-10 — Регуляризация и оптимизаторы настраивают обучение вместе
  • dl-02 — Backprop даёт градиенты, которые потребляет оптимизатор
  • ml-09-gradient-descent — SGD и AdamW развивают обычный градиентный спуск
  • ml-28-optimizers — То же семейство оптимизаторов из курса ML
  • calc-19-gradient — Градиент задаёт направление наискорейшего спуска
  • calc-20-extrema-multi — Оптимизация ищет минимумы поверхности потерь
Оптимизация: SGD -> AdamW

0

1

Войти