Пакетная нормализация

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''GPT-4 Turbo''' и проверена участником ~~~~}} '''Пакетная нормализация...)
(Перенаправление на Батч-нормализация)
 
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''GPT-4 Turbo''' и проверена участником [[Участник:Amir Baidanov|Amir Baidanov]] 02:46, 19 июля 2026 (MSD)}}
+
#REDIRECT [[Батч-нормализация]]
-
 
+
-
'''Пакетная нормализация''' (Batch Normalization, BatchNorm) — метод [[нормализация данных|нормализации]] активаций в [[нейронная сеть|нейронных сетях]], предложенный Сергеем Иоффе и Кристианом Сегеди в 2015 году <ref name="ioffe2015">Ioffe S., Szegedy C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ''Proceedings of the 32nd International Conference on Machine Learning'', 448–456.</ref>. BatchNorm выполняет нормализацию выходов каждого слоя по мини-пакету, после чего применяет обучаемые сдвиг и масштабирование. Метод позволил значительно ускорить обучение глубоких сетей, сделав возможным использование высоких [[скорость обучения|скоростей обучения]] и снизив чувствительность к инициализации весов.
+
-
 
+
-
== Интуитивная картина ==
+
-
При обучении глубоких нейронных сетей распределения активаций на каждом слое постоянно меняются, поскольку веса предыдущих слоёв обновляются. Это явление, называемое [[внутренний ковариатный сдвиг|внутренним ковариатным сдвигом]], вынуждает следующие слои постоянно адаптироваться к изменяющимся входным распределениям, что замедляет обучение.
+
-
 
+
-
Пакетная нормализация решает эту проблему, фиксируя для каждого слоя среднее и дисперсию активаций. Представьте, что вы настраиваете микроскоп: если изображение постоянно дрожит, вам трудно сфокусироваться. Но если вы стабилизируете изображение, настройка становится гораздо проще и быстрее. Аналогично BatchNorm стабилизирует распределения активаций, позволяя сети учиться быстрее.
+
-
 
+
-
Кроме того, нормализация сглаживает [[ландшафт функции потерь]], делая его более предсказуемым и позволяя использовать большие шаги градиентного спуска.
+
-
 
+
-
== Историческая справка ==
+
-
До появления BatchNorm глубокие сети было трудно обучать из-за проблем с [[проблема затухающего градиента|затухающими]] и [[проблема взрыва градиента|взрывающимися градиентами]]. Требовались тщательная инициализация весов <ref name="glorot2010">Glorot X., Bengio Y. (2010). Understanding the difficulty of training deep feedforward neural networks. ''Proceedings of the 13th International Conference on Artificial Intelligence and Statistics'', 249–256.</ref> и медленные скорости обучения.
+
-
 
+
-
В 2015 году Иоффе и Сегеди предложили BatchNorm как решение проблемы внутреннего ковариатного сдвига. Они показали, что нормализация активаций по мини-пакету значительно ускоряет сходимость, позволяет использовать более высокие скорости обучения и даже оказывает регуляризующий эффект, позволяя в некоторых случаях отказаться от [[дропаут|дропаута]].
+
-
 
+
-
Метод быстро стал стандартом в обучении [[свёрточная нейронная сеть|свёрточных нейронных сетей]] и был использован в архитектурах, установивших новые рекорды в [[ImageNet]] (Inception, ResNet).
+
-
 
+
-
== Математическая постановка ==
+
-
Для каждого мини-пакета размера <tex>m</tex> и для каждого нейрона (или канала) с активациями <tex>x_i</tex> алгоритм выполняет следующие шаги:
+
-
 
+
-
=== 1. Вычисление статистик по мини-пакету ===
+
-
Среднее:
+
-
<tex>\mu_B = \frac{1}{m} \sum_{i=1}^m x_i</tex>
+
-
 
+
-
Дисперсия:
+
-
<tex>\sigma_B^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_B)^2</tex>
+
-
 
+
-
=== 2. Нормализация ===
+
-
<tex>\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}</tex>
+
-
 
+
-
где <tex>\epsilon</tex> — малая константа (например, <tex>10^{-5}</tex>) для численной стабильности.
+
-
 
+
-
=== 3. Сдвиг и масштабирование ===
+
-
<tex>y_i = \gamma \hat{x}_i + \beta</tex>
+
-
 
+
-
где <tex>\gamma</tex> и <tex>\beta</tex> — обучаемые параметры сдвига и масштабирования, которые позволяют сети восстанавливать исходное распределение, если это необходимо.
+
-
 
+
-
Параметры <tex>\gamma</tex> и <tex>\beta</tex> обучаются вместе с остальными весами сети с помощью [[обратное распространение ошибки|обратного распространения ошибки]].
+
-
 
+
-
== Влияние на процесс обучения ==
+
-
=== Ускорение сходимости ===
+
-
BatchNorm значительно ускоряет обучение по нескольким причинам:
+
-
 
+
-
1. '''Стабилизация распределений''': уменьшается внутренний ковариатный сдвиг, и каждый слой видит более стабильные входные данные.
+
-
2. '''Сглаживание ландшафта''': нормализация делает поверхность функции потерь более гладкой, что позволяет использовать большие скорости обучения <ref name="santurkar2018">Santurkar S., Tsipras D., Ilyas A., Madry A. (2018). How Does Batch Normalization Help Optimization? ''Advances in Neural Information Processing Systems'', 31: 2488–2498.</ref>.
+
-
3. '''Уменьшение зависимости от инициализации''': сеть становится менее чувствительной к начальным значениям весов.
+
-
 
+
-
=== Регуляризующий эффект ===
+
-
Шум, вносимый случайностью выбора мини-пакета, действует как регуляризатор, аналогичный дропауту. Исследования показывают, что использование BatchNorm может снизить потребность в дропауте или позволить использовать меньшие коэффициенты регуляризации <ref name="ioffe2015"/>.
+
-
 
+
-
Однако важно понимать, что регуляризующий эффект является побочным: при увеличении размера мини-пакета шум уменьшается, и регуляризация ослабевает.
+
-
 
+
-
== Использование в инференсе ==
+
-
Во время [[инференс|инференса]] (применения обученной модели) нет мини-пакета для вычисления статистик. Вместо этого используются [[скользящее среднее|скользящие средние]] <tex>\mu</tex> и <tex>\sigma^2</tex>, вычисленные во время обучения:
+
-
 
+
-
<tex>\mu = \alpha \mu + (1 - \alpha) \mu_B</tex>
+
-
<tex>\sigma^2 = \alpha \sigma^2 + (1 - \alpha) \sigma_B^2</tex>
+
-
 
+
-
где <tex>\alpha</tex> — коэффициент затухания (обычно 0.9 или 0.99).
+
-
 
+
-
Во время инференса нормализация выполняется с использованием фиксированных статистик:
+
-
 
+
-
<tex>y = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta</tex>
+
-
 
+
-
Важно: во время инференса параметры <tex>\gamma</tex> и <tex>\beta</tex> остаются фиксированными.
+
-
 
+
-
== Практические рекомендации ==
+
-
=== Расположение в архитектуре ===
+
-
Традиционно BatchNorm применяется перед [[функция активации|функцией активации]]:
+
-
 
+
-
<tex>y = \text{BN}(W x + b)</tex> → <tex>\text{ReLU}(y)</tex>
+
-
 
+
-
Однако некоторые исследователи рекомендуют применять нормализацию после активации. На практике оба варианта работают, но стандартом стало применение перед активацией.
+
-
 
+
-
=== Взаимодействие с другими методами ===
+
-
* '''С дропаутом''': поскольку BatchNorm уже оказывает регуляризующий эффект, коэффициент дропаута можно уменьшить;
+
-
* '''С [[L2-регуляризация|L2-регуляризацией]]''': работает совместно, но может потребовать перенастройки коэффициента регуляризации;
+
-
* '''С [[инициализация весов|инициализацией]]''': снижает чувствительность к выбору метода инициализации.
+
-
 
+
-
=== Выбор размера мини-пакета ===
+
-
BatchNorm чувствителен к размеру мини-пакета: при маленьких размерах (например, 2–8) статистики становятся слишком шумными, что может ухудшить качество. Рекомендуется использовать мини-пакеты размером не менее 16–32 объектов.
+
-
 
+
-
=== Совместимость с архитектурами ===
+
-
* '''В [[свёрточная нейронная сеть|CNN]]''': нормализация выполняется для каждого канала (независимо для каждого фильтра);
+
-
* '''В [[многослойный персептрон|MLP]]''': нормализация для каждого нейрона;
+
-
* '''В [[рекуррентная нейронная сеть|RNN]]''': применение затруднительно (см. раздел «Ограничения»).
+
-
 
+
-
== Альтернативные методы нормализации ==
+
-
=== Layer Normalization ===
+
-
LayerNorm вычисляет статистики для всех активаций в слое для каждого объекта независимо <ref name="ba2016">Ba J. L., Kiros J. R., Hinton G. E. (2016). Layer Normalization. ''arXiv:1607.06450''.</ref>. Не зависит от размера мини-пакета, что делает его предпочтительным для [[рекуррентная нейронная сеть|RNN]] и [[трансформер|трансформеров]].
+
-
 
+
-
<tex>\mu = \frac{1}{d} \sum_{j=1}^d x_j, \quad \sigma^2 = \frac{1}{d} \sum_{j=1}^d (x_j - \mu)^2</tex>
+
-
 
+
-
=== Instance Normalization ===
+
-
InstanceNorm применяется для каждого объекта и каждого канала независимо <ref name="ulyanov2016">Ulyanov D., Vedaldi A., Lempitsky V. (2016). Instance Normalization: The Missing Ingredient for Fast Stylization. ''arXiv:1607.08022''.</ref>. Широко используется в задачах [[генерация изображений|генерации изображений]] и [[перенос стиля|переноса стиля]].
+
-
 
+
-
=== Group Normalization ===
+
-
GroupNorm — компромисс между LayerNorm и InstanceNorm <ref name="wu2018">Wu Y., He K. (2018). Group Normalization. ''Proceedings of the European Conference on Computer Vision'', 3–19.</ref>. Каналы делятся на группы, и нормализация выполняется внутри каждой группы. Эффективен при малых размерах мини-пакетов.
+
-
 
+
-
=== Weight Normalization ===
+
-
WeightNorm нормализует веса, а не активации <ref name="salimans2016">Salimans T., Kingma D. P. (2016). Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks. ''Advances in Neural Information Processing Systems'', 29: 901–909.</ref>. Использует параметризацию <tex>w = g \cdot v / \|v\|</tex>, где <tex>g</tex> и <tex>v</tex> — обучаемые параметры.
+
-
 
+
-
=== Сравнение методов ===
+
-
| Метод | Зависимость от размера пакета | Область нормализации | Основное применение |
+
-
|-------|------------------------------|---------------------|-------------------|
+
-
| BatchNorm | Сильная (нужен большой пакет) | По пакету и каналу | CNN |
+
-
| LayerNorm | Нет | По слою и объекту | RNN, трансформеры |
+
-
| InstanceNorm | Нет | По объекту и каналу | Стилизация, генерация |
+
-
| GroupNorm | Слабая | По группе каналов | CNN, малые пакеты |
+
-
 
+
-
== Ограничения ==
+
-
=== Зависимость от размера мини-пакета ===
+
-
BatchNorm плохо работает с маленькими мини-пакетами. В задачах с ограниченным числом объектов (медицинская диагностика) или при обучении с очень высоким разрешением (3D-изображения) это становится серьёзной проблемой.
+
-
 
+
-
=== Проблемы с рекуррентными сетями ===
+
-
В RNN длины последовательностей варьируются, и применение BatchNorm затруднено. Хотя существуют модификации для RNN, LayerNorm обычно даёт лучшие результаты.
+
-
 
+
-
=== Поведение при инференсе ===
+
-
При инференсе используется фиксированное среднее и дисперсия, вычисленные на обучающей выборке. Если распределение данных на инференсе отличается от обучающего (сдвиг распределения), это может привести к ухудшению качества.
+
-
 
+
-
=== Отсутствие гарантированного улучшения ===
+
-
BatchNorm не всегда даёт выигрыш в качестве. При обучении очень больших моделей или на очень больших наборах данных эффект может быть менее заметным, а иногда даже отрицательным.
+
-
 
+
-
== Пример: влияние на распределения активаций ==
+
-
Рассмотрим простую сеть из 5 полносвязных слоёв по 100 нейронов в каждом, обучаемую на данных с нормальным распределением.
+
-
 
+
-
'''Без BatchNorm:'''
+
-
- Активации первых слоёв имеют распределение с небольшим разбросом;
+
-
- Активации последних слоёв сильно растягиваются, их значения могут достигать сотен;
+
-
- Градиенты в последних слоях становятся очень маленькими или очень большими;
+
-
- Обучение требует низкой скорости обучения (<tex>10^{-3}</tex>).
+
-
 
+
-
'''С BatchNorm:'''
+
-
- Активации всех слоёв имеют распределение близкое к <tex>\mathcal{N}(0,1)</tex>;
+
-
- Градиенты остаются стабильными;
+
-
- Можно использовать высокую скорость обучения (<tex>10^{-1}</tex>);
+
-
- Сеть сходится за 2–3 раза меньше эпох.
+
-
 
+
-
Этот пример иллюстрирует ключевое преимущество BatchNorm: стабилизация распределений позволяет обучать сети значительно быстрее.
+
-
 
+
-
== Краткий вывод ==
+
-
Пакетная нормализация — важный метод, позволивший значительно ускорить обучение глубоких нейронных сетей. Стабилизируя распределения активаций, она снижает зависимость от инициализации, позволяет использовать высокие скорости обучения и оказывает регуляризующий эффект. Однако BatchNorm требует достаточно большого размера мини-пакета и менее эффективна в задачах с переменной длиной последовательностей (RNN) или при маленьких мини-пакетах. Альтернативные методы (LayerNorm, InstanceNorm, GroupNorm) предлагают решения для этих случаев, каждый со своей областью применения.
+
-
 
+
-
== См. также ==
+
-
* [[Нормализация данных]]
+
-
* [[Дропаут]]
+
-
* [[Регуляризация]]
+
-
* [[Layer Normalization]]
+
-
* [[Group Normalization]]
+
-
* [[Instance Normalization]]
+
-
* [[Weight Normalization]]
+
-
 
+
-
== Примечания ==
+
-
<references/>
+
-
 
+
-
== Литература ==
+
-
# Ioffe S., Szegedy C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ''Proceedings of the 32nd International Conference on Machine Learning'', 448–456.
+
-
# Santurkar S., Tsipras D., Ilyas A., Madry A. (2018). How Does Batch Normalization Help Optimization? ''Advances in Neural Information Processing Systems'', 31: 2488–2498.
+
-
# Ba J. L., Kiros J. R., Hinton G. E. (2016). Layer Normalization. ''arXiv:1607.06450''.
+
-
# Ulyanov D., Vedaldi A., Lempitsky V. (2016). Instance Normalization: The Missing Ingredient for Fast Stylization. ''arXiv:1607.08022''.
+
-
# Wu Y., He K. (2018). Group Normalization. ''Proceedings of the European Conference on Computer Vision'', 3–19.
+
-
# Salimans T., Kingma D. P. (2016). Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks. ''Advances in Neural Information Processing Systems'', 29: 901–909.
+
-
# Glorot X., Bengio Y. (2010). Understanding the difficulty of training deep feedforward neural networks. ''Proceedings of the 13th International Conference on Artificial Intelligence and Statistics'', 249–256.
+
-
 
+
-
== Ссылки ==
+
-
* [https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm1d.html BatchNorm в PyTorch]
+
-
* [https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization BatchNormalization в TensorFlow/Keras]
+
-
* [https://arxiv.org/abs/1502.03167 Оригинальная статья Batch Normalization]
+
-
 
+
-
[[Категория:Машинное обучение]]
+
-
[[Категория:Глубокое обучение]]
+
-
[[Категория:Нейронные сети]]
+
-
[[Категория:Нормализация]]
+
-
[[Категория:Регуляризация]]
+

Текущая версия

  1. REDIRECT Батч-нормализация
Личные инструменты