Что такое нормализация слоя в нейросети? Объясняем простыми словами с примерами

От NP_Article

ИИ-технолог

Обучение управлению ИИ с 0 до мастерского уровня

250+ уроков Начато наполнение Без инфоцыган и воды

В процессе обучения нейросети значения активаций на разных слоях могут сильно меняться: числа становятся слишком большими или слишком маленькими. Это приводит к затуханию или взрыву градиентов, из-за чего сеть перестает учиться. Нормализация слоя (Layer Normalization, LayerNorm) – это технический прием, который принудительно приводит значения внутри слоя к единому масштабу. Это делает обучение стабильным, позволяет использовать высокую скорость обучения (learning rate) и является стандартом для современных архитектур, таких как Трансформеры.

Что разберем Что это даст на практике
Как физически работает LayerNorm Поймете, как масштабируются данные и почему это спасает градиенты
LayerNorm или BatchNorm: что выбрать Сможете подобрать правильный тип нормализации под свою архитектуру
Куда ставить слой нормализации Избежите ошибок с затуханием сигнала в глубоких сетях (Pre-norm vs Post-norm)

Как работает нормализация слоя

Суть любой нормализации – вычесть среднее значение и поделить на стандартное отклонение. Главный вопрос в том, по каким данным мы считаем это среднее.

В Layer Normalization расчет идет по всем признакам (нейронам/каналам) одного конкретного примера независимого от остальных данных.

Алгоритм работы внутри нейросети выглядит так:

  • На вход слоя поступает вектор признаков для одного объекта (например, представление одного слова в тексте).
  • Слой вычисляет среднее значение и дисперсию только для этих признаков конкретного вектора.
  • Каждое значение в векторе сдвигается так, чтобы среднее стало равно нулю, а дисперсия – единице.
  • К результату применяются два обучаемых параметра: gamma (масштаб) и beta (сдвиг). Они нужны, чтобы нейросеть могла при необходимости отменить нормализацию или сместить распределение, если это выгодно для решения задачи.

Пример для понимания:
Представьте, что три студента сдали три разных экзамена.
Если мы используем Batch Normalization, мы берем оценки всех студентов по математике и выводим средний балл по предмету.
Если мы используем Layer Normalization, мы берем оценки одного студента по всем трем предметам и смотрим, как он сдал конкретный экзамен относительно своего же среднего уровня. Нам не важно, сколько всего студентов пришло на сессию (размер батча).

Развилка: LayerNorm или BatchNorm

Это самый частый практический выбор при проектировании архитектуры. Выбор зависит от типа данных и размера батча.

Критерий Layer Normalization Batch Normalization
Зависимость от размера батча Не зависит. Отлично работает даже при батче = 1. Критически зависит. При маленьком батче (меньше 8-16) статистика ломается, сеть не учится.
Тип сети/данных Тексты (NLP), временные ряды, Трансформеры, рекуррентные сети (RNN/LSTM). Сверточные сети (CNN), работа с изображениями (ResNet, YOLO).
Длина последовательности Справляется с динамической длиной (предложения разной длины). Плохо работает с динамической длиной, требует сложных обходных путей.

Когда использовать Layer Normalization

1. В архитектурах Трансформеров (LLM, BERT, GPT)

В NLP-задачах длина предложений постоянно меняется. BatchNorm в таких условиях высчитывает некорректную статистику для “хвостов” длинных предложений. LayerNorm считает среднее по признакам каждого отдельного токена, поэтому длина последовательности на него не влияет. Это стандарт де-факто для всех современных языковых моделей.

2. В рекуррентных нейросетях (RNN, LSTM, GRU)

В RNN одни и те же веса применяются на каждом шаге времени. Если использовать BatchNorm, для каждого временного шага придется хранить свою статистику, что сложно реализуемо и нестабильно. LayerNorm нормализует скрытое состояние на каждом шаге независимо, предотвращая взрыв градиентов при обработке длинных цепочек.

3. В обучении с подкреплением (Reinforcement Learning) и онлайн-обучении

Когда агент взаимодействует со средой, данные часто поступают по одному кадру или состоянию (размер батча = 1). В таких условиях BatchNorm технически не может работать, а LayerNorm стабилизирует обучение без проблем.

Где можно ошибиться: Pre-norm против Post-norm

В архитектурах типа Трансформера есть два способа поставить слой Layer Normalization относительно блока внимания (Self-Attention) и полносвязной сети (Feed Forward). От этого выбора зависит, запустится ли обучение вообще.

Вариант 1: Post-norm (как в оригинальной статье Attention Is All You Need)

Порядок: Вход -> Внимание -> Сложение с остаточной связью (Add) -> LayerNorm.

  • К чему приводит: В глубоких сетях градиенты на нижних слоях начинают затухать.
  • Ограничение: Чтобы такая сеть сошлась, требуется сложная настройка “разогрева” скорости обучения (learning rate warmup). Без этого параметры улетят в бесконечность на первых же шагах.

Вариант 2: Pre-norm (современный стандарт, используется в GPT, LLaMA)

Порядок: Вход -> LayerNorm -> Внимание -> Сложение с остаточной связью (Add).

  • К чему приводит: Остаточные связи (Skip Connections) остаются чистыми, по ним беспрепятственно течет градиент от самого конца сети к началу.
  • Результат: Обучение стабильно с первой эпохи даже в сетях на сотни слоев. Не требует агрессивного warmup.

Практический вывод: Если вы собираете свой Трансформер или модифицируете существующий, всегда используйте архитектуру Pre-norm.

Частые ошибки и ограничения

Отказ от LayerNorm в пользу BatchNorm в сверточных сетях

Если вы строите классификатор картинок на базе CNN (сверток) и решите заменить BatchNorm на LayerNorm просто “потому что он новее”, качество работы сети упадет. В сверточных сетях пространственная структура признаков (соседние пиксели) имеет огромное значение. LayerNorm смешивает все каналы и пиксели одной картинки при расчете среднего, уничтожая часть полезной пространственной информации. Оставьте LayerNorm для последовательностей, а для картинок используйте BatchNorm или GroupNorm.

Замораживание параметров Gamma и Beta

Иногда при реализации кастомного слоя нормализации забывают добавить обучаемые параметры масштаба (gamma) и сдвига (beta), оставляя только чистую математическую нормализацию (вычитание среднего и деление на отклонение).
Почему это ошибка: Строгая нормализация может уничтожить способность слоя передавать определенные паттерны. Например, если слою важно выдать значения строго больше нуля для активации ReLU, жесткая нормализация сдвинет половину значений в минус. Параметры gamma и beta позволяют сети самой решить, нужно ли восстановить исходный масштаб данных после нормализации.

Игнорирование эпсилона

При делении на стандартное отклонение в формуле всегда прибавляется маленькое число epsilon (обычно 1e-5). Если при написании собственного слоя с нуля забыть его добавить, при нулевой дисперсии признаков вы получите деление на ноль, и все веса сети превратятся в NaN (Not a Number), что мгновенно убьет обучение.

Коротко о главном

  • LayerNorm нормализует вектор признаков одного примера. Ему не важен размер батча.
  • Если работаете с текстами, звуком, временными рядами или собираете Трансформер – ставьте LayerNorm.
  • Если работаете с классическими свертками (CNN) и картинками – используйте BatchNorm.
  • В Трансформерах всегда применяйте нормализацию до слоя внимания (Pre-norm), чтобы избежать затухания градиентов и сложной настройки гиперпараметров.
Бесплатно с ИИ Claude · ChatGPT
Баланс запросов: —