中文翻译暂不可用,显示俄语原文。
Что такое Adam optimizer и как работают его параметры (β1, β2, ε, learning rate)?
Краткий тезис
Adam (Adaptive Moment Estimation) — это популярный алгоритм оптимизации для глубокого обучения, сочетающий идеи Momentum (инерция) и RMSProp (адаптивный шаг для каждого параметра). Он хранит скользящие средние градиента (первый момент) и квадрата градиента (второй момент), а затем корректирует их смещение (bias correction) и обновляет веса. Параметры β1, β2, ε и rate|learning rate управляют скоростью затухания моментов, численной стабильностью и величиной шага. Adam стал стандартом для обучения LLM и многих других моделей благодаря устойчивости к зашумлённым градиентам и автоматической адаптации rate|learning rate.
1. Проблема оптимизации в глубоком обучении
При обучении нейронных сетей мы минимизируем функцию потерь L(θ) по параметрам θ. Классический стохастический градиентный спуск (SGD) обновляет θ = θ - lr * g, где g — градиент на мини-батче. Проблемы SGD:
- Медленная сходимость на оврагах (функция сильно изогнута в одном направлении и полога в другом).
- Застревание в локальных минимумах и седловых точках.
- Чувствительность к выбору rate|learning rate — один lr для всех параметров неоптимален.
Для решения этих проблем были разработаны адаптивные методы: Momentum, RMSProp, AdaGrad, Adam.
2. Предшественники Adam
2.1 Momentum (импульс)
Добавляет инерцию: накапливает экспоненциально затухающее среднее градиентов.
v_t = β * v_{t-1} + g_t
θ_t = θ_{t-1} - lr * v_t
Типичное β = 0.9. Ускоряет движение в постоянном направлении и сглаживает колебания.
2.2 RMSProp (Root Mean Square Propagation)
Адаптирует rate|learning rate для каждого параметра, деля его на корень из скользящего среднего квадратов градиентов.
s_t = β * s_{t-1} + (1-β) * g_t²
θ_t = θ_{t-1} - lr * g_t / (√s_t + ε)
Параметр ε (epsilon) — малая константа для избежания деления на ноль.
3. Формулы Adam
Adam объединяет Momentum и RMSProp, добавляя bias correction (коррекцию смещения) для начальных шагов.
Обозначения
- g_t — градиент на шаге t
- β1, β2 — коэффициенты затухания для первого и второго моментов (обычно 0.9 и 0.999)
- ε — малая константа (обычно 1e-8)
- lr — learning rate (шаг обучения)
Шаги алгоритма
-
Вычислить градиент g_t = ∇L(θ_{t-1})
-
Обновить первый момент (среднее градиентов): m_t = β1 * m_{t-1} + (1 - β1) * g_t
-
Обновить второй момент (среднее квадратов градиентов): v_t = β2 * v_{t-1} + (1 - β2) * g_t²
-
Коррекция смещения (bias correction): m̂_t = m_t / (1 - β1^t) v̂_t = v_t / (1 - β2^t)
-
Обновить параметры: θ_t = θ_{t-1} - lr * m̂_t / (√v̂_t + ε)
Почему bias correction На начальных шагах m_t и v_t инициализируются нулями, поэтому они смещены в сторону нуля. Деление на (1 - β^t) исправляет это, особенно важно на первых шагах.
4. Детальный разбор параметров
4.1 β1 (первый момент, momentum)
- Назначение: определяет, как быстро забываются старые градиенты при вычислении среднего.
- Диапазон: [0, 1). Чем ближе к 1, тем больше инерция.
- Типичное значение: 0.9.
- Влияние:
4.2 β2 (второй момент, адаптивный шаг)
- Назначение: управляет скользящим средним квадратов градиентов, определяя адаптивный learning rate для каждого параметра.
- Диапазон: [0, 1). Обычно очень близок к 1.
- Типичное значение: 0.999.
- Влияние:
- β2 = 0.999 → окно ~1000 шагов. Позволяет оценивать дисперсию градиентов на длинной истории.
- Если β2 слишком мал (0.9), оценка дисперсии становится шумной, шаги могут быть нестабильными.
- Если β2 слишком близок к 1 (0.9999), адаптация замедляется, алгоритм хуже подстраивается под изменения ландшафта.
4.3 ε (epsilon)
- Назначение: численная стабильность — предотвращает деление на ноль в знаменателе √v̂_t + ε.
- Типичное значение: 1e-8 (иногда 1e-7).
- Влияние:
4.4 Learning rate (lr)
- Назначение: глобальный масштаб шага обновления.
- Типичные значения:
- Для LLM: 3e-4 (0.0003) — стандарт для fine-tuning.
- Для компьютерного зрения: 1e-3.
- Для трансформеров с предобучением: 1e-4 – 5e-4.
- Влияние:
Сравнение параметров в разных оптимизаторах
| Оптимизатор | β1 | β2 | ε | lr (типичный) |
|---|---|---|---|---|
| SGD | — | — | — | 0.01 – 0.1 |
| Momentum | 0.9 | — | — | 0.01 – 0.1 |
| RMSProp | — | 0.9 | 1e-8 | 0.001 – 0.01 |
| Adam | 0.9 | 0.999 | 1e-8 | 0.0001 – 0.001 |
| AdamW | 0.9 | 0.999 | 1e-8 | 0.0001 – 0.001 |
5. Bias correction — зачем и как работает
На первых шагах (t=1,2,...) m_t и v_t инициализируются нулями. Без коррекции:
- m_1 = β1 * 0 + (1-β1) * g_1 = (1-β1) * g_1 — сильно меньше истинного среднего (которое должно быть ~g_1).
- v_1 = (1-β2) * g_1² — аналогично.
Коррекция делит на (1 - β^t), что при t=1 даёт m̂_1 = m_1 / (1-β1) = g_1, v̂_1 = v_1 / (1-β2) = g_1². По мере роста t знаменатель стремится к 1, и коррекция становится незначительной.
Пример: β1=0.9, t=1 → 1-0.9^1 = 0.1, m̂_1 = m_1 / 0.1 = (0.1*g_1)/0.1 = g_1. Без коррекции шаг был бы в 10 раз меньше.
6. Преимущества и недостатки Adam
Преимущества
- Адаптивный learning rate для каждого параметра — не нужно подбирать вручную.
- Устойчивость к шумным градиентам (большие батчи, разреженные данные).
- Быстрая сходимость на начальных этапах.
- Мало гиперпараметров для настройки (обычно достаточно lr).
- Хорошо работает "из коробки для широкого круга задач.
Недостатки
- Не всегда обобщает лучше SGD — в некоторых задачах (например, ImageNet) SGD с momentum после тюнинга даёт лучшую точность на тесте.
- Забывание второго момента — при резком изменении ландшафта (например, переход к другому датасету) Adam может медленно адаптироваться.
- Чувствительность к β2 — неправильный β2 может привести к нестабильности.
- Проблема с weight decay — классический Adam неправильно обрабатывает L2-регуляризацию (она смешивается с адаптивным шагом). Решение — AdamW.
7. AdamW и другие вариации
AdamW (Loshchilov & Hutter, 2017) исправляет weight decay: вместо добавления L2-штрафа к loss, он применяет weight decay отдельно после обновления Adam.
θ_t = θ_{t-1} - lr * m̂_t / (√v̂_t + ε) - lr * λ * θ_{t-1}
где λ — коэффициент weight decay. AdamW стал стандартом для обучения трансформеров (BERT, GPT).
Другие вариации:
- Nadam — добавляет Nesterov momentum.
- RAdam — исправляет проблему большого learning rate на ранних шагах.
- LAMB — адаптирует lr для больших батчей.
- AdaBelief — использует (g_t - m_t)² вместо g_t².
8. Практические рекомендации
- Для LLM fine-tuning: lr = 3e-5 – 5e-5 (для полного fine-tuning) или 1e-4 – 3e-4 (для LoRA). β1=0.9, β2=0.999, ε=1e-8.
- Для обучения с нуля: lr = 1e-3 – 3e-4, часто с warmup и cosine decay.
- Если loss расходится: уменьшить lr в 10 раз или проверить ε (увеличить до 1e-7).
- Если loss колеблется: увеличить β2 до 0.9999 или уменьшить lr.
- Использовать AdamW вместо Adam для лучшей регуляризации.
- Не забывать про bias correction — встроено в PyTorch/TensorFlow, но при ручной реализации обязательно.
Пример кода на PyTorch
import torch
import torch.nn as nn
model = nn.Linear(10, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-8)
# Или AdamW:
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.01)
9. Пет-проект для закрепления
Задача: Сравнить сходимость SGD, Momentum, RMSProp и Adam на синтетической задаче (регрессия или классификация на простом датасете).
Инструменты: Python, PyTorch или NumPy, Matplotlib.
Шаги:
- Сгенерировать данные: y = 2x1 - 3x2 + 0.5*noise (линейная регрессия).
- Реализовать все четыре оптимизатора с нуля (без готовых функций).
- Обучить линейную модель (один слой) каждым оптимизатором с одинаковым lr=0.01.
- Построить графики loss по эпохам.
- Повторить с разными lr (0.1, 0.001) и разными β1, β2.
- Зафиксировать, какой оптимизатор быстрее сходится и при каких параметрах.
Ожидаемый результат: Adam и RMSProp сходятся быстрее SGD; Momentum ускоряет SGD; при большом lr SGD расходится, а Adam остаётся стабильным. Выводы о роли параметров.
10. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 660 | AdamW и отличие от Adam |
| 661 | SGD with Momentum |
| 662 | Learning rate schedulers (cosine, warmup) |
| 663 | Gradient clipping |
| 664 | Влияние batch size на выбор оптимизатора |
| 665 | Сравнение оптимизаторов для LLM |
11. Навигация
- Предыдущий: 658
- Следующий: 660
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 658
- Следующий: 660
- Индекс: 00. Индекс разборов