|
|
| Строка 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]
| + | |
| - | | + | |
| - | [[Категория:Машинное обучение]]
| + | |
| - | [[Категория:Глубокое обучение]]
| + | |
| - | [[Категория:Нейронные сети]]
| + | |
| - | [[Категория:Нормализация]]
| + | |
| - | [[Категория:Регуляризация]]
| + | |