Внедрение пакетной нормализации (Batch Normalization, BN) в архитектуру глубоких нейронных сетей кардинально меняет процесс обучения, делая его более стабильным и быстрым. В данном материале на основе туториала от DeepLearning.AI разбирается механика интеграции BN между вычислительными этапами внутри слоя, а также объясняется, почему классический параметр смещения (bias) становится избыточным при использовании этой техники.
🏗️ Анатомия слоя: куда вставить Batch Norm 0:00
Обычно работа скрытого узла нейронной сети представляется как двухэтапный процесс: сначала вычисляется линейное значение $Z$, а затем к нему применяется функция активации для получения значения $A$ . В глубоких сетях эта последовательность повторяется от слоя к слою.
При внедрении Batch Normalization алгоритм претерпевает изменения:
- Линейный расчет: Сначала вычисляется значение $Z$ на основе весов $W$ и входных данных $X$ .
- Этап нормализации: Полученное значение $Z$ не передается сразу в функцию активации. Вместо этого применяется операция Batch Norm, регулируемая новыми параметрами — $\beta$ (бета) и $\gamma$ (гамма) .
- Результат: На выходе получается нормализованное значение $\tilde{Z}$ (Z-тильда).
- Активация: Именно $\tilde{Z}$, а не исходное $Z$, подается на вход функции активации (например, ReLU или сигмоиду) для получения $A$ .
Таким образом, пакетная нормализация происходит «между» вычислением линейной части и применением нелинейности . Вместо ненормированных значений сеть оперирует средним и дисперсией, которые жестко контролируются алгоритмом.
⚙️ Параметры и путаница в терминологии 2:52
Внедрение BN добавляет в нейронную сеть новые обучаемые параметры для каждого слоя: $\beta^{[l]}$ и $\gamma^{[l]}$. Важно не путать параметр $\beta$ из Batch Norm с гиперпараметром $\beta$, который используется в алгоритмах Momentum или Adam для расчета экспоненциально взвешенного среднего .
Эндрю Ын отмечает, что авторы оригинальных статей использовали одни и те же греческие буквы для разных сущностей:
- Авторы Adam использовали $\beta$ для моментов.
- Авторы Batch Norm использовали $\beta$ для обозначения сдвига (shift).
Несмотря на одинаковое название, это абсолютно разные величины, и в контексте пакетной нормализации $\beta$ — это обучаемый параметр, который обновляется с помощью градиентного спуска .
❌ Почему параметр b (bias) больше не нужен 7:34
Одним из самых интересных последствий внедрения Batch Norm является исключение традиционного параметра смещения $b^{[l]}$ из расчетов. В классическом слое уравнение выглядит как $Z = WA + b$. Однако Batch Norm на первом этапе нормализации вычитает среднее значение из всех примеров в мини-батче .
Любая константа (которой и является $b$), добавленная к вектору $Z$, будет просто аннулирована при вычитании среднего . Если вы добавите 100 к каждому значению, среднее тоже увеличится на 100, и после вычитания результат останется прежним.
Следовательно:
- Параметр $b$ можно исключить или навсегда зафиксировать на нуле .
- Роль управления «сдвигом» (bias) полностью переходит к параметру $\beta^{[l]}$.
- Размерность параметров $\beta^{[l]}$ и $\gamma^{[l]}$ соответствует количеству скрытых юнитов в слое ($n^{[l]} \times 1$) .
📦 Работа с мини-батчами и программная реализация 5:47
В реальных задачах Batch Norm применяется не ко всему тренировочному набору сразу, а к отдельным мини-батчам. Для каждого мини-батча $X^{{t}}$ вычисляются собственные среднее и дисперсия, на основе которых происходит масштабирование .
С точки зрения программирования, современные фреймворки значительно упрощают жизнь разработчикам:
- В TensorFlow реализация пакетной нормализации может занимать всего одну строку кода (например, через функцию
tf.nn.batch_normalization) . - Хотя понимать внутреннюю математику полезно для отладки, вручную реализовывать вычисление средних и дисперсий в современных средах разработки обычно не требуется .
🔄 Обновленный алгоритм обучения 10:23
Полный цикл итерации mini-batch gradient descent с использованием Batch Norm выглядит следующим образом:
- Forward Prop: Для каждого слоя вычисляется $Z$, затем применяется Batch Norm для получения $\tilde{Z}$, и только потом — функция активации .
- Backprop: Вычисляются градиенты для весов $dW$, а также для новых параметров $d\beta$ и $d\gamma$. Градиент $db$ больше не вычисляется, так как $b$ исключен .
- Параметры: Обновление происходит привычным образом:
Этот процесс отлично сочетается не только с обычным градиентным спуском, но и с более продвинутыми оптимизаторами, такими как Momentum, RMSprop или Adam .