BatchNormalization

1、批量归一化

BN实际上是先对每一层的输出做一个标准正态分布话,试图将输出转换成均值为0,方差为1的正态分布,然后对输出做一个纺射变换(Affine)。

BN的过程可以简单用该公式表示:

BN过程

1.1对输入的标准化(浅层模型)

处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。

标准化处理输入数据使各个特征的分布相近

1.2 批量归一化(深度模型)

利用小批量上的均值和标准差,不断调整神经网络中间输出,从而使整个神经网络在各层的中间输出的数值更稳定。


全连接层



批量归一化

这⾥ϵ > 0是个很小的常数,保证分母大于0。

引入可学习参数:拉伸参数γ和偏移参数β。


2.对卷积层做批量归⼀化

位置:卷积计算之后、应⽤激活函数之前。

如果卷积计算输出多个通道,我们需要对这些通道的输出分别做批量归一化,且每个通道都拥有独立的拉伸和偏移参数。 计算:对单通道,batchsize=m,卷积计算输出=pxq 对该通道中m×p×q个元素同时做批量归一化,使用相同的均值和方差。

3.预测时的批量归⼀化

训练:以batch为单位,对每个batch计算均值和方差。

预测:用移动平均估算整个训练数据集的样本均值和方差。

4、Pytorch样例

net=nn.Sequential(

nn.Conv2d(1,6,5),# in_channels, out_channels, kernel_size

nn.BatchNorm2d(6),

nn.Sigmoid(),

nn.MaxPool2d(2,2),# kernel_size, stride

nn.Conv2d(6,16,5),

nn.BatchNorm2d(16),

nn.Sigmoid(),

nn.MaxPool2d(2,2),

d2l.FlattenLayer(),

nn.Linear(16*4*4,120),

nn.BatchNorm1d(120),

nn.Sigmoid(),

nn.Linear(120,84),

nn.BatchNorm1d(84),

nn.Sigmoid(),

nn.Linear(84,10)

)


Batch Normalizing Transform, applied to activation x over a mini-batch.


参考链接:https://zhuanlan.zhihu.com/p/68863894

                  https://www.boyuai.com

你可能感兴趣的:(BatchNormalization)