← Назад к вопросам

BatchNorm vs LayerNorm: как работают, преимущества и недостатки

2.2 Middle🔥 181 комментариев
#Глубокое обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

BatchNorm vs LayerNorm: Полное сравнение

Что такое нормализация и зачем она нужна

Нормализация в глубоких нейронных сетях решает фундаментальную проблему — внутреннее сдвиг распределения (Internal Covariate Shift). Это явление, при котором распределение входов к каждому слою меняется во время обучения, что замедляет сходимость и требует тщательной настройки learning rate. Нормализация стабилизирует обучение, позволяя использовать более высокие learning rates и получать модели с лучшей обобщающей способностью.

Как работает BatchNorm

BatchNorm нормализует активации по измерению батча.

import torch.nn as nn

# BatchNorm в PyTorch
bn = nn.BatchNorm2d(num_features=64)  # для CNN
# На вход подаётся (N, C, H, W), нормализация по оси N (батч)

# Формула:
# y = gamma * (x - mean_batch) / sqrt(var_batch + eps) + beta
# где mean и var вычисляются по всему батчу

Ключевые характеристики:

  • Нормализует по измерению батча (N в формате NCHW)
  • Использует running statistics (mean, variance) во время инференса
  • Требует батча > 1 для обучения (маленькие батчи → нестабильность)
  • Зависит от размера батча — может давать разные результаты при different batch sizes

Как работает LayerNorm

LayerNorm нормализует активации по признакам (features) внутри каждого примера.

import torch.nn as nn

# LayerNorm в PyTorch
ln = nn.LayerNorm(normalized_shape=512)  # для трансформеров
# На вход подаётся (..., D), нормализация по последнему измерению

# Формула:
# y = gamma * (x - mean_features) / sqrt(var_features + eps) + beta
# где mean и var вычисляются по всем признакам одного примера

Ключевые характеристики:

  • Нормализует по измерению признаков (C в формате NCHW)
  • Использует те же statistics для обучения и инференса
  • Независим от размера батча
  • Детерминированный, воспроизводимый

Практическое сравнение

АспектBatchNormLayerNorm
Нормализует поБатч (N)Признаки (C)
Зависимость от батчаДа, критичнаНет, независим
ИнференсИспользует running statisticsSame as train
Маленькие батчиНестабиленСтабилен
CNN✓ Хорошо△ Редко используется
Трансформеры△ Реже✓ Standard
RNN/LSTM× Проблемы✓ Хорошо
SpeedБыстрееНемного медленнее

Преимущества и недостатки

BatchNorm Преимущества:

  • Ускоряет обучение за счёт «noisy gradient» эффекта
  • Действует как регуляризатор
  • Классический выбор для CNN
  • Хорошая скорость вычисления

BatchNorm Недостатки:

  • Зависит от размера батча (проблема при батче = 1)
  • Разные behaviour на train vs test
  • Плохо работает с RNN (последовательности разной длины)
  • Требует осторожности в распределённом обучении

LayerNorm Преимущества:

  • Независим от батча
  • Идеален для трансформеров и RNN
  • Детерминированный
  • Работает с батчем размером 1

LayerNorm Недостатки:

  • Не даёт регуляризирующий эффект батча
  • Исторически медленнее (хотя сейчас близко)
  • Требует тщательной инициализации gamma/beta

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

Используй BatchNorm:

  • CNN (ResNet, VGG, EfficientNet)
  • Большой батч (32+)
  • Есть достаточно данных

Используй LayerNorm:

  • Трансформеры (BERT, GPT, Vision Transformer)
  • RNN/LSTM/GRU
  • Маленький батч или переменная длина
  • Online learning

Гибридные подходы

# GroupNorm - компромисс между BatchNorm и LayerNorm
import torch.nn as nn
gn = nn.GroupNorm(num_groups=32, num_channels=64)
# Делит каналы на группы и нормализует в каждой группе

GroupNorm использует идею BatchNorm, но нормализует по группам каналов, а не по всему батчу. Это решает проблему маленьких батчей, сохраняя идею группировки.

Заключение

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