Обычный SGD не может обучить ANDREA
Стохастический градиентный спуск, отправная точка
Backprop вычисляет градиент g для каждого параметра. Обычный стохастический градиентный спуск (SGD) обновляет каждый параметр как p -= lr * g. Одна скорость обучения, одно направление на шаг, без памяти прошлых градиентов.
Обычный SGD ломается при масштабировании по двум причинам:
1. Градиенты имеют сильно различающиеся величины среди параметров. Встраивание для редкого токена получает крошечный градиент большинство шагов; масштаб layernorm получает большой. Одна скорость обучения не подходит для обоих.
2. Градиенты колеблются. Шумный мини-батч из корпуса из 16 источников толкает параметр влево, затем вправо, затем влево. Обычный SGD тратит шаги, борясь сам с собой.
Adam (Kingma & Ba, 2015) исправляет оба проблемы с помощью двух скользящих средних на параметр.
Первое Скользящее Среднее & Второе Скользящее Среднее
m: Сглаженное Направление
Первое скользящее среднее m экспоненциально усредняет недавние градиенты:
m = beta1 m + (1 - beta1) g
с beta1 = 0.9. После нескольких шагов m несёт усредненное направление; один плохой батч едва сдвигает его.
v: Усредненная величина
Второй момент v усредняет недавние квадраты градиентов:
v = beta2 v + (1 - beta2) g^2
с beta2 = 0.999. v отслеживает, насколько большим обычно бывает градиент каждого параметра. Параметры с большими градиентами получают большой v; параметры с крошечными градиентами получают малый v.
Адаптивная скорость обучения для каждого параметра
Деление сглаженного направления на квадратный корень из сглаженной величины приводит все параметры к сопоставимому масштабу:
adam_step = m / sqrt(v + eps)
Маленькие градиентные эмбеддинги масштабируются вверх; большие градиентные layernorm'ы масштабируются вниз. Теперь один глобальный lr подходит для каждого параметра.
Чтение моментов
Почему ранние шаги требуют коррекции смещения
Смещение холодного старта
m и v начинаются с нуля. После шага 1: m = 0.1 g_1 и v = 0.001 g_1^2. Обе оценки сильно недооценивают долгосрочное среднее. Без коррекции оптимизатор начинает осторожно и медленно разгоняется, тратя драгоценные ранние шаги, когда формируются представления.
Коррекция
Adam масштабирует каждую оценку на 1 / (1 - beta^t), где t — номер шага:
m_hat = m / (1 - beta1^t)
v_hat = v / (1 - beta2^t)
На шаге 1 при beta1 = 0.9 делитель (1 - 0.9) = 0.1, поэтому m_hat = m / 0.1 = 10 * m. Исправленная оценка соответствует тому, что предсказывает долгосрочное среднее. По мере роста t beta^t приближается к 0, исправление приближается к 1, и исправленные и неисправленные значения сходятся.
Раздельное затухание весов (инновация AdamW)
L2-регуляризация против затухания весов
Классическая L2-регуляризация добавляет штраф к функции потерь: L_total = L_data + (lambda / 2) sum(p^2). Обратное распространение видит этот штраф как часть градиента: g_total = g_data + lambda p. Член L2 проходит через обновления m и v в Adam, сглаживаясь и перемасштабируясь в зависимости от величин параметров.
Loshchilov & Hutter (2019) доказали, что сглаживание регуляризатора через Adam искажает оба. Адаптивное масштабирование Adam уменьшает затухание весов для параметров с большими градиентами (где затухание должно наиболее сильно бороться с переобучением) и усиливает его для параметров с малыми градиентами.
AdamW: Применение затухания напрямую
AdamW отделяет затухание весов от градиента. Затухание применяется напрямую к каждому параметру во время обновления параметра, не затрагивая m или v:
p -= lr (m_hat / (sqrt(v_hat) + eps) + weight_decay p)
Теперь два члена управляют каждым шагом:
1. Член Адама: m_hat / (sqrt(v_hat) + eps) перенормирует направление градиента с учетом истории масштабов по параметрам.
2. Член затухания: weight_decay * p уменьшает каждый параметр к нулю равномерно, без сглаживания Адама.
ANDREA-120M v2 устанавливает weight_decay = 0.01. На каждом шаге каждый параметр уменьшается на 1% к нулю, в дополнение к тому, что делает член Адама.
Почему разделение важно
Эмпирические доказательства
Коллапс v1 (без weight decay)
ANDREA-120M v1 обучалась 165K шагов с vanilla Adam. Примеры выходов:
- Шаг 80K: region region region region region region region
- Шаг 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
- Шаг 140K: games, games, games, games, games, games, games
- Шаг 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy
Значения потерь оставались разумными (минимум EMA 3.23 на шаге 110K, против случайного шанса 9.04). Потери сами по себе скрывают коллапс повторений: модель, которая навсегда запоминает один токен, достигает низкой кросс-энтропии на каждом шаге, где появляется этот токен.
Стабильность v2 (weight_decay = 0.01)
v2 добавила AdamW (плюс обрезку градиента, разогрев LR, мониторинг сэмплов). На шаге ~112K сэмплы, произведённые:
- Кариолинский попугай был объявлен вымершим в 1939 году (фактически верно)
- Преобразование Фурье разлагает сигналы на частотные компоненты (учебное определение)
- Ритмичный рефрен дождя, Ручьи на окне, Передышка от боли жизни (ограничения хайку соблюдены)
Внешняя оценка поставила сэмплам v2 9.5/10, назвав их "впечатляющей связностью и сохранением знаний на этом масштабе."
12M выжили без AdamW. Почему?
ANDREA-12M обучалась на vanilla Adam без коллапса. При 12M параметров матрицы весов остаются достаточно маленькими, чтобы адаптивное масштабирование Adam не могло толкнуть отдельные веса в runaway magnitudes, вызывающие повторение. При масштабе 120M magnitudes весов дрейфуют дальше за шаг и накапливаются; uniform decay применяет постоянную восстанавливающую силу к нулю. Decoupled weight decay имеет большее значение по мере масштабирования модели.
Выбор weight_decay = 0.01
Смежные активности
AdamW пересекается с тремя сестринскими активностями в этом курсе:
- Активность 11: Разогрев LR + косинусное затухание. AdamW сам по себе не может спасти модель от мгновенной пиковой скорости обучения на свежесинициализированных весах. Разогрев постепенно повышает lr за 2000 шагов, чтобы коррекция смещения AdamW и затухание весов успели стабилизировать представления.
- Активность 12: Обрезка градиентов. AdamW предполагает, что градиенты имеют ограниченную величину. Переходы источника каждые 7–42 шага в бандите ANDREA вызывают редкие всплески градиентов; обрезка ограничивает их L2-нормой 1.0 ДО того, как AdamW коснется m, v или p.
- Активность 13: Точность FP32 / FP16 / FP8. AdamW хранит m и v для каждого параметра, удваивая объем памяти только для весов. FP16 сокращает этот объем вдвое; FP8 сокращает его еще раз. Выбор точности взаимодействует со стабильностью оптимизатора.
AdamW, warmup, clipping и precision образуют четырёхлистный клевер. Уберите один листок — и ANDREA рухнет.