BatchNorm批量归一化的简单介绍
批量归一化(BatchNorm: BN)在搭建深度网络模型中是必不可少的一层,刚开始学习的时候还对其有所了解,后面渐渐的只会使用,已经忘记BN的真正作用和起作用的原理了。现在查找资料进行一个简单的梳理。
1、Batch Norm再模型中起什么作用?
- 减少模型在训练过程中梯度消失或梯度爆炸等现象的发生,让训练过程更加稳定。
- 加快模型的收敛速度。
2、Batch Norm在模型中是怎样做的计算?
在卷积网络中,BN一般用在卷积层和非线性激活层之间。假设输入经过卷积计算后输出为(M, C, H, W),其中M为batch大小,C为每个样本的通道维度,H* W张量的长宽。
BN要做的就是在每个通道上例如C1(灰色层)上将所有批量中的样本H* W个值拿出来,计算均值和方差:
- 计算均值:

- 计算方差:

从形式上来说,小批量中的一个样本x输入到批量规范化BN后,根据以下表达式对x进行转换:
拉伸参数和_偏移参数,它们的形状与x相同,是需要与其他模型参数一起学习的参数。
3、批量归一化为什么会起作用?
为什么这项技术如此有效?批量规范化论文的作者还解释了其原理:通过减少_内部协变量偏移_(internal covariate shift)。不论是沿着从输入到输出的层,跨同一层中的单元,或是随着时间的推移,模型参数的随着训练更新变幻莫测,这些变量分布中的这种偏移可能会阻碍网络的收敛。但也有很多对这种解释的质疑,现在不进行讨论了:
- 经过网络中前置层的变换,当前层输入的分布改变,影响了训练;Batch Norm方法所以有效,是由于在非线性层之前,通过控制各层输入分布的均值和方差,来稳定各层输入的分布,损失和梯度都减少了抖动,优化损失的解空间更平滑,从而促进了训练效果。
- 更深层的网络很复杂,容易过拟合,正则化对于模型更加重要,BN层起到了部分正则化的作用。
4、批量归一化为什么会起作用?
- 只有使用足够大的batch,批量归一化中方法才是有效且稳定的,通常来说BN适合50到100范围的中等批量大小应用;
- 批量规范化层在”train“和“val”中的功能不同。 在训练过程中,我们无法得知使用整个数据集来估计平均值和方差,所以只能根据每个小批次的平均值和方差不断训练模型。 而在预测模式下,可以根据整个数据集精确计算批量规范化所需的平均值和方差。