Батч-нормализация

Материал из MachineLearning.

Версия от 14:48, 28 июля 2026; Daria Makeeva (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья объединена из версий, написанных с использованием LLM GPT-4 Turbo (проверена участником Amir Baidanov) и Claude Sonnet 5 (проверена участником Daria Makeeva)


Содержание

Батч-нормализация (англ. batch normalization, BatchNorm; также встречается название пакетная нормализация) — метод регуляризации и ускорения обучения глубоких нейронных сетей, основанный на нормализации активаций промежуточных слоёв по статистикам (среднему и дисперсии), вычисленным внутри мини-батча обучающих примеров, с последующим обучаемым сдвигом и масштабированием. Метод предложен Сергеем Иоффе и Кристианом Сегеди в 2015 году[1] и стал одним из наиболее широко применяемых приёмов стабилизации обучения глубоких сетей, позволившим использовать высокие скорости обучения и снизившим чувствительность к инициализации весов.

Интуитивное объяснение проблемы

По мере обучения глубокой сети параметры каждого слоя постоянно меняются, а значит, меняется и распределение значений, поступающих на вход следующего слоя, — даже если распределение исходных обучающих данных остаётся неизменным. Авторы метода назвали это явление внутренним ковариационным сдвигом (internal covariate shift): каждый слой должен непрерывно «подстраиваться» под меняющееся распределение своих входов, что замедляет и усложняет обучение, особенно при использовании насыщающихся функций активации и высоких скоростей обучения[1].

Ситуацию можно сравнить с попыткой попасть в постоянно перемещающуюся цель: если распределение входов слоя непрерывно «дрейфует» из-за обновления весов предыдущих слоёв, оптимизатору приходится не только находить хорошие веса для текущего слоя, но и без конца компенсировать этот дрейф. Другая полезная аналогия — настройка микроскопа: если изображение постоянно дрожит, сфокусироваться трудно, но стоит его стабилизировать — и настройка становится намного проще и быстрее. Батч-нормализация решает проблему напрямую: активации каждого слоя явно приводятся к фиксированному распределению (нулевое среднее, единичная дисперсия) на каждом шаге обучения, независимо от того, как изменились веса предыдущих слоёв. Как следствие, сглаживается и ландшафт функции потерь, что делает поведение градиента более предсказуемым.

Историческая справка

До появления BatchNorm глубокие сети было трудно обучать из-за проблем с затухающими и взрывающимися градиентами; требовались тщательная инициализация весов[1] и заведомо низкие скорости обучения.

Иоффе и Сегеди представили батч-нормализацию на конференции ICML 2015, объяснив её эффективность именно уменьшением внутреннего ковариационного сдвига: по их гипотезе, стабилизация распределения входов каждого слоя позволяет использовать значительно более высокие скорости обучения, снижает зависимость результата от точной схемы инициализации и даже оказывает регуляризующий эффект, в ряде случаев позволяя отказаться от дропаута[1]. Метод быстро стал стандартом при обучении свёрточных нейронных сетей и был использован в архитектурах, установивших новые рекорды на ImageNet (Inception, ResNet).

Пересмотр объяснения эффективности

Спустя три года объяснение через ковариационный сдвиг подверглось существенному пересмотру. Сантуркар, Циприс, Ильяс и Мадри (2018) экспериментально показали, что степень внутреннего ковариационного сдвига в сетях с батч-нормализацией и без неё практически не различается, то есть уменьшение ковариационного сдвига не может служить основной причиной успеха метода. Авторы предложили альтернативное объяснение: батч-нормализация делает ландшафт функции потерь значительно более гладким — уменьшает константу Липшица функции потерь и её градиента по направлению обучения, — что делает поведение градиента более предсказуемым и позволяет использовать бо́льшие шаги обучения без потери устойчивости[1]. Таким образом, современное понимание механизма действия батч-нормализации основано в первую очередь на сглаживании оптимизационного ландшафта, а не на устранении ковариационного сдвига, как предполагалось изначально.

Формальное определение

Пусть \mathcal{B} = \{x_1, \dots, x_m\} — мини-батч значений некоторой активации (одного нейрона или одного канала свёрточного слоя) размера m.

1. Статистики по мини-батчу

\mu_{\mathcal{B}} = \frac{1}{m}\sum_{i=1}^{m} x_i, \qquad \sigma^2_{\mathcal{B}} = \frac{1}{m}\sum_{i=1}^{m} (x_i - \mu_{\mathcal{B}})^2

2. Нормализация

\hat{x}_i = \frac{x_i - \mu_{\mathcal{B}}}{\sqrt{\sigma^2_{\mathcal{B}} + \varepsilon}}

где \varepsilon > 0 — малая константа (например, 10^{-5}), предотвращающая деление на ноль.

3. Сдвиг и масштабирование

y_i = \gamma \hat{x}_i + \beta

где \gamma (масштаб) и \beta (сдвиг) — параметры, обучаемые совместно с остальными весами сети методом обратного распространения ошибки[1]. Роль этих параметров принципиальна: без них слой был бы вынужден всегда выдавать активации с нулевым средним и единичной дисперсией, что ограничивало бы выразительность сети. Параметры \gamma и \beta позволяют сети самой выучить, нужна ли строгая нормализация, — если оптимальным решением является исходное распределение активаций, сеть может настроить \gamma \approx \sigma_{\mathcal{B}} и \beta \approx \mu_{\mathcal{B}}, фактически отменив нормализацию[1].

Обучение и инференс

На этапе обучения статистики \mu_{\mathcal{B}} и \sigma^2_{\mathcal{B}} пересчитываются заново для каждого мини-батча, что делает выход слоя зависящим не только от текущего примера, но и от остальных примеров в батче; этот эффект также действует как форма регуляризации, слегка зашумляя активации на каждом шаге обучения. Шум, вносимый случайностью выбора мини-батча, аналогичен по действию дропауту, и на практике использование BatchNorm может снижать потребность в дропауте или позволять уменьшать коэффициенты регуляризации[1]. Важно, однако, понимать, что этот эффект является побочным: при увеличении размера мини-батча шум уменьшается, и регуляризация ослабевает.

На этапе инференса (применения обученной модели) такой подход неприменим: модель должна давать детерминированный результат для одного примера, а состав «батча» может быть произвольным или отсутствовать вовсе. Поэтому во время обучения параллельно накапливаются скользящие средние (running statistics) по всем виденным батчам:

\mu_{\text{run}} \leftarrow (1-\alpha)\,\mu_{\text{run}} + \alpha\, \mu_{\mathcal{B}}, \qquad \sigma^2_{\text{run}} \leftarrow (1-\alpha)\,\sigma^2_{\text{run}} + \alpha\, \sigma^2_{\mathcal{B}}

где \alpha — коэффициент экспоненциального сглаживания (обычно 0.9 или 0.99). На этапе инференса нормализация выполняется по этим накопленным статистикам, а не по статистикам текущего батча:

y = \gamma \frac{x - \mu_{\text{run}}}{\sqrt{\sigma^2_{\text{run}} + \varepsilon}} + \beta

что делает преобразование детерминированным и не зависящим от других примеров. При этом параметры \gamma и \beta, как и \mu_{\text{run}}, \sigma^2_{\text{run}}, на инференсе остаются фиксированными.

Связь с затуханием и взрывом градиента

Батч-нормализация тесно связана с проблемой затухающего градиента (vanishing gradient problem). Насыщающиеся функции активации, такие как сигмоида и гиперболический тангенс, имеют производную, близкую к нулю при больших по модулю значениях входа; если активации слоя дрейфуют в область насыщения, производные становятся исчезающе малыми, и градиент, умножаясь на них при обратном распространении ошибки, затухает по мере прохождения через слои. Явно удерживая распределение активаций центрированным около нуля с единичной дисперсией, батч-нормализация удерживает бо́льшую часть значений в области, где производная функции активации далека от нуля, что ослабляет как затухание, так и потенциальный неконтролируемый рост градиента[1]. Кроме того, батч-нормализация делает сеть более устойчивой к масштабу весов: при масштабировании весов слоя на константу выход нормализующего преобразования не меняется, что стабилизирует величину градиента по параметрам и позволяет использовать более высокие скорости обучения без риска расходимости[1].

Практические рекомендации

Расположение в архитектуре

Традиционно BatchNorm применяется перед функцией активации:

y = \text{BN}(Wx + b) \;\to\; \text{ReLU}(y)

Некоторые исследователи рекомендуют применять нормализацию после активации; на практике оба варианта работают, но стандартом остаётся применение перед активацией.

Взаимодействие с другими методами

  • С дропаутом: поскольку BatchNorm уже оказывает регуляризующий эффект, коэффициент дропаута обычно можно уменьшить;
  • С L2-регуляризацией: методы работают совместно, но может потребоваться перенастройка коэффициента регуляризации;
  • С инициализацией весов: BatchNorm снижает чувствительность сети к выбору схемы инициализации.

Совместимость с архитектурами

  • В CNN — нормализация выполняется по batch-измерению отдельно для каждого канала (фильтра);
  • В MLP — нормализация выполняется отдельно для каждого нейрона;
  • В RNN — применение затруднительно (см. раздел «Ограничения»).

Зависимость от размера мини-батча

Поскольку статистики \mu_{\mathcal{B}} и \sigma^2_{\mathcal{B}} — это выборочные оценки по конечному мини-батчу, их качество напрямую зависит от размера батча m. При малых значениях m (например, 2–8 примеров) оценки среднего и дисперсии становятся шумными и нестабильными от шага к шагу, что ухудшает качество обучения и итоговую точность модели. Этот эффект особенно заметен в задачах, где большой батч невозможен по памяти, — например, при обучении на изображениях высокого разрешения, трёхмерных данных или в медицинской диагностике с ограниченным числом объектов. На практике рекомендуется использовать мини-батчи размером не менее 16–32 объектов.

Ограничения

Малый размер батча

Как отмечено выше, BatchNorm плохо работает с маленькими мини-батчами: шумные оценки статистик ухудшают качество обучения.

Проблемы с рекуррентными сетями

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

Расхождение статистик обучения и инференса

При инференсе используются фиксированные скользящие среднее и дисперсия, накопленные на обучающей выборке. Если распределение данных на инференсе отличается от обучающего (сдвиг распределения, distribution shift), это может привести к заметному ухудшению качества.

Отсутствие гарантированного улучшения

BatchNorm не всегда даёт выигрыш в качестве: при обучении очень больших моделей или на очень больших наборах данных эффект может быть менее заметным, а иногда даже отрицательным.

Альтернативные виды нормализации

Для случаев, где батч-нормализация работает плохо (малый размер батча, рекуррентные архитектуры, потребность в независимости статистик от батча), были предложены альтернативные схемы, различающиеся тем, по каким измерениям тензора активаций вычисляются статистики нормализации.

Сравнение методов нормализации активаций
Метод По каким осям усредняются статистики Типичная область применения
Batch normalization По batch-измерению, отдельно для каждого канала Свёрточные сети с достаточно большим батчем[1]
Layer normalization По всем каналам/признакам одного примера, независимо от батча Рекуррентные сети, трансформеры — не зависит от размера батча[1]
Instance normalization По пространственным измерениям (высота, ширина) отдельно для каждого канала и каждого примера Перенос стиля изображений (style transfer), генеративные модели[1]
Group normalization По пространственным измерениям и подгруппе каналов, независимо от батча Сети с малым размером батча (детекция, сегментация, видео)[1]
Weight normalization Нормализуются веса слоя, а не активации Ускорение сходимости без зависимости от статистики батча[1]

Layer normalization нормализует активации по всем признакам одного примера (а не по батчу), что делает её результат не зависящим от размера батча и позволяет применять один и тот же расчёт как на этапе обучения, так и на этапе инференса без накопления скользящих статистик[1]. Instance normalization была предложена для задач переноса стиля и нормализует каждый канал каждого отдельного изображения независимо, что убирает информацию о контрасте конкретного изображения, мешающую переносу стиля[1]. Group normalization занимает промежуточное положение: каналы разбиваются на группы, и статистики вычисляются внутри каждой группы для каждого отдельного примера, — group normalization переходит в layer normalization при числе групп, равном 1, и в instance normalization, если число групп равно числу каналов; авторы показали, что этот метод даёт заметно лучшую точность, чем batch normalization, при очень малых размерах батча (например, при батче из двух примеров ошибка ResNet-50 на ImageNet снижается на 10,6 процентных пункта)[1]. Weight normalization идёт другим путём и нормализует не активации, а веса слоя, используя параметризацию w = g \cdot v / \|v\|, где g и v — обучаемые параметры[1].

Пример: влияние на распределения активаций

Рассмотрим простую сеть из 5 полносвязных слоёв по 100 нейронов в каждом, обучаемую на данных с нормальным распределением.

Без BatchNorm:

  • активации первых слоёв имеют распределение с небольшим разбросом;
  • активации последних слоёв сильно растягиваются, их значения могут достигать сотен;
  • градиенты в последних слоях становятся очень маленькими или очень большими;
  • обучение требует низкой скорости обучения (10^{-3}).

С BatchNorm:

  • активации всех слоёв имеют распределение, близкое к \mathcal{N}(0,1);
  • градиенты остаются стабильными;
  • можно использовать высокую скорость обучения (10^{-1});
  • сеть сходится за в 2–3 раза меньшее число эпох.

Пример иллюстрирует ключевое практическое преимущество BatchNorm: стабилизация распределений активаций позволяет обучать сети значительно быстрее.

Краткий вывод

Батч-нормализация — метод, значительно ускоривший обучение глубоких нейронных сетей за счёт стабилизации распределений активаций по мини-батчу и последующего обучаемого сдвига и масштабирования. Она снижает зависимость от инициализации весов, позволяет использовать высокие скорости обучения и оказывает побочный регуляризующий эффект. Изначально эффективность метода объяснялась снижением внутреннего ковариационного сдвига, однако более поздние исследования показали, что определяющую роль играет сглаживание ландшафта функции потерь. Метод требует достаточно большого размера мини-батча и плохо подходит для задач с переменной длиной последовательностей (RNN) или при малых батчах; для этих случаев были предложены альтернативы — Layer, Instance, Group и Weight normalization, каждая со своей областью применения.

См. также

Примечания

Литература

  • Ioffe S., Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift // Proceedings of the 32nd International Conference on Machine Learning (ICML). — 2015. — Т. 37. — С. 448–456.
  • Santurkar S., Tsipras D., Ilyas A., Madry A. How Does Batch Normalization Help Optimization? // Advances in Neural Information Processing Systems (NeurIPS). — 2018. — Т. 31. — № arXiv:1805.11604. — С. 2488–2498.
  • Ba J.L., Kiros J.R., Hinton G.E. Layer Normalization // arXiv preprint. — 2016. — № arXiv:1607.06450.
  • Ulyanov D., Vedaldi A., Lempitsky V. Instance Normalization: The Missing Ingredient for Fast Stylization // arXiv preprint. — 2016. — № arXiv:1607.08022.
  • Wu Y., He K. Group Normalization // Proceedings of the European Conference on Computer Vision (ECCV). — 2018. — С. 3–19.
  • Salimans T., Kingma D.P. Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks // Advances in Neural Information Processing Systems (NeurIPS). — 2016. — Т. 29. — С. 901–909.
  • Glorot X., Bengio Y. Understanding the difficulty of training deep feedforward neural networks // Proceedings of the 13th International Conference on Artificial Intelligence and Statistics. — 2010. — С. 249–256.

Ссылки

Личные инструменты