Batch Normalization也是深度学习中的一个高频词汇,这篇文章将会对其做一个简单介绍。
1. BN的原理
- BN就是在激活函数接收输入之前对数据分布进行规范化,具体计算就是去均值归一化,将数据的分布都规范到标准正态分布中,使得激活函数的输入值落在函数较为敏感的区域,也即梯度较大的区域,从而避免梯度消失、减少训练时间。因此,BN也通常需要放在激活函数之前。
2. BN的作用
- 对数据进行规范化,降低样本之间的差异。
- 使激活函数的输入落在梯度较大的区域,一个很小的输入差异也会带来较大的梯度差异,可以有效的避免梯度消失,加快网络的收敛。
- 降低了层与层之间的依赖关系,不加BN的时候当前层会直接接收上一层的输出,而加了BN之后当前层接收的是一些规范化的数据,因此使得模型参数更容易训练,同时降低了层与层之间的依赖关系。
3. BN层的可学习参数
- scale(γ),即缩放尺度,用于乘以输入进行缩放。
- offset(β),即偏移量,用于和输入相加进行偏移。
- BN的对象是特征图,因此会以每个特征图为单元取一堆γ和β。
4. infer时BN的处理
- 在infer(预测)的时候,γ和β作为一个可学习参数有自己的数值,而计算BN所需要的均值和方差则是训练时统计的平均值。
5. BN的具体计算步骤以及公式
- 求均值。
- 求方差。
- 对数据进行标准化(将数据规范到标准正态分布)。
- 训练参数γ和β。
- 通过线性变换输出。
(图片来源于网络)
6. BN和L2参数权重正则化的区别
- BN是拉平不同特征图(也可以说是特征)之间的差异,进行去均值归一化。而L2参数权重正则化则没有改变同一层参数的相对大小,而是对当前参数自身进行正则化。
- 本身每个参数的模长是不同的,而L2参数权重正则化会拉平参数之间的差异,让他们都往0靠近。而BN则不对此产生影响。
- 对于一个特征图,它们量级、方差可能都不同,而BN就让方差为1,均值为0,从而导致特征图之间的差异减小了。L2参数权重正则化不以此层面为目标产生影响。
- L2参数权重正则化是对各个参数权重本身的,而BN是对特征图全局的。
- L2参数权重正则化让网络的权重不会过大,而BN的主要目的是加快训练同时防止梯度消失。
|