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的主要目的是加快训练同时防止梯度消失。
博主会持续更新一些深度学习相关的基础知识以及工作中遇到的问题和感悟,喜欢请关注、点赞、收藏。