Начиная с 19-го дня, пакетная норма является еще одним важным элементом полной архитектуры CNN.
Пакетная нормализация
- Чтобы сжать значения из разных диапазонов примерно до N ~ (0, 1), что является средним значением 0 и стандартным отклонением 1.
- В случае сигмовидной активации, если значения слишком велики, градиент близок к 0 и существует риск исчезновения градиента.

Преимущества пакетной нормы
- Сделайте конвергенцию быстрее
- Более стабильный в градиенте достойный
- Может использовать большую скорость обучения
- Можно получить лучшие минимумы в функции потерь
Детали в пакетной норме для партии изображений или функционального блока
- Он находит среднее значение μ и стандартное значение σ для каждого канала
- Например. пакет (N изображений) изображений RGB с формой [N, 3, 28, 28], нормирование пакета выполняется на 3 каналах.
- Таким образом, пакетный слой будет иметь μ, σ shape=[3] каждый.
- Есть еще два обучаемых параметра: γ и β, которые используются для точной настройки среднего значения и стандартного значения (γ для масштабирования и β для сдвига N~(0, 1))
- Это означает, что окончательный результат не будет точно попадать в N ~ (0, 1), а в N ~ (β, γ)

Норма партии в Pytorch
nn.BatchNorm1d()
- Используется для плоской сети.
- Например. полносвязный nn в конце CNN, где x.shape=[100, 16, 784]
import torch
import torch.nn as nn
# nn.BatchNorm1d
x = torch.rand(100, 16, 784) # here imgs are flattened from 28x28
layer = nn.BatchNorm1d(16) # batch norm is done on channels
out = layer(x)
print(layer.running_mean)
print(layer.running_var)
nn.BatchNorm2d()
- Используйте для сверточных слоев с элементами 4-х измерений.
- Например. х.форма = [1, 16, 7, 7]
- Вес в слое нормы партии равен γ, его можно узнать во время задней опоры.
- Смещение в слое норм партии равно β, его можно узнать во время обратного упора.
- Поскольку γ и β можно изучить, из результата vars(layer) вы можете увидеть
requires_grad=True
- Используйте layer.train() и layer.eval(), чтобы изменить режим, чтобы определить, нужно ли рассчитывать градиенты, μ и σ или нет.
# nn.BatchNorm2d
x = torch.rand(1, 16, 7, 7) # here image or features are not flattened
print(x.shape)
layer = nn.BatchNorm2d(16) # batch norm is done on channels
out = layer(x)
print(layer.weight) # weight here is gamma, was learned to adjust the batch norm to N(beta, gamma) from N(0, 1)
print(layer.bias) # bias here is beta, was learned to adjust the batch norm to N(beta, gamma)
print(vars(layer))
print(layer.eval())
print(layer.train())
Ссылка
ссылка1