Математика глубокого обучения
Нормализация в сети
LayerNorm против RMSNorm, по какой оси и почему pre-norm вытеснил post-norm
Повтор: одна арифметика, разные оси
В блоке 5 (урок 100) нормализация разбиралась как предобусловливание — средство против плохой обусловленности. Здесь тот же объект нужен с другой стороны: как элемент архитектуры, у которого есть выбор оси и выбор места.
Почему трансформеры выбрали LayerNorm
Решающий признак — зависимость от батча, а не качество нормировки.
| BatchNorm | LayerNorm | |
|---|---|---|
| статистика по | батчу | признакам примера |
| примеры связаны | да | нет |
| нужны running statistics | да | нет |
| train ≠ eval | да | нет |
| переменная длина | проблема | не проблема |
| батч из одного примера | ломается | работает |
Последние две строки решают дело для текста. Последовательности разной длины и батчи размера один при генерации — обычное дело, а у BatchNorm в этих условиях нет осмысленной оси для усреднения.
Плюс model.eval(): у BatchNorm обучение и вывод — разные функции, и забытый вызов
даёт тихую деградацию. У LayerNorm такого различия нет вовсе, потому что ей нечего
запоминать.
RMSNorm: что даёт отказ от центрирования
Отличие от LayerNorm в одном вычитании. Экономия — один проход по тензору вперёд и один назад, плюс отсутствие .
Из блока 5 известен точный ответ на вопрос, когда это безопасно: на центрированных данных два слоя дают побитово одинаковый результат, потому что при дисперсия равна среднему квадрату. Активации в обученной сети обычно близки к центрированным, поэтому замена проходит почти бесплатно — и современные модели (LLaMA, Mistral, Gemma) используют RMSNorm.
На нецентрированных данных разница реальна: для строки LayerNorm даёт среднее нуль, RMSNorm оставляет . Но последующий подстраивается под то представление, которое ему дали, и качество от этого не страдает.
Pre-norm против post-norm
Второй архитектурный выбор, и он важнее первого.
Разница в том, проходит ли residual-путь через нормировку.
| pre-norm | post-norm | |
|---|---|---|
| чистый путь от входа к выходу | есть | нет |
| нужен warmup | обычно нет | почти всегда |
| устойчивость на большой глубине | высокая | падает |
| качество при удачной настройке | чуть ниже | чуть выше |
У pre-norm градиент может дойти от выхода до входа, ни разу не пройдя через нормировку, — поэтому глубокие стеки обучаются без тщательного подбора расписания. У post-norm каждый residual-путь проходит через LN, и на большой глубине это накапливается.
Практический итог: почти все современные модели — pre-norm, и цена этого выбора известна (немного худшее качество при идеальной настройке), но настройка при глубине сто слоёв идеальной не бывает.
Что нормализация делает с масштабом весов
Свойство, из которого растёт неожиданное следствие. Если слой предшествует нормировке, то умножение его весов на не меняет выход — нормировка поделит на то же .
Значит:
- выразительность слоя не зависит от нормы его весов, только от направления;
- weight decay в такой сети не уменьшает «сложность» — он управляет эффективным learning rate, потому что меньшая норма означает больший относительный шаг;
- learning rate и weight decay перестают быть независимыми гиперпараметрами.
Это тот же вывод, что в блоке 5, урок 100, и он остаётся одним из самых недооценённых следствий нормализации.
Источники
- Ba, Kiros, Hinton — Layer Normalization — LayerNorm и мотивация
- Xiong и др. — On Layer Normalization in the Transformer Architecture — Pre-norm против post-norm, почему первый обучается без warmup
Проверки
0 из 2Оси, места и следствия
Отметьте все верные утверждения о нормализации в сети.
Что остаётся после нормировки
Реализуйте
norm_stats(row, c). Сначала умножьте все элементыrowнаc, затем примените к получившейся строке два слоя (возьмите , , ):где , и считаются по этой же строке (дисперсия — с делителем , не ). Верните
[ln_mean, ln_var, rms_mean, rms_second_moment, rms_var]— среднее и дисперсию выхода LayerNorm, затем среднее, средний квадрат и дисперсию выхода RMSNorm.Два первых числа известны заранее, они и есть определение LayerNorm. Интересны остальные три, и проверить их можно тождеством:
rms_varобязана равняться , потому что средний квадрат выхода RMSNorm равен единице по построению.Множитель
cв задаче для того, чтобы вы убедились: он не влияет ни на одно из пяти чисел.Загрузка редактора…
Ctrl/⌘ + Enter