一、概述
BN于2015年被提出,最大的特点是加速模型收敛,目前已经在CNN被广泛应用。
二、BN使用流程
如图所示,BN的过程也比较简单:
- 计算当前mini-batch的均值
- 计算当前mini-batch的方差
- 对每一层的输入特征(一般是上一层的激活函数之前)进行规范化
- 线性变化得到输出,其中线性变换的参数可训练
三、BN有什么用?
- 加速训练,可以使用更大的学习率
- 解决梯度消失和梯度爆炸
- 不需要再使用dropout和L2正则
四、BN为什么有用?原作解释
首先是原作者和大家普遍认同的解释。
在数据(图片)输入神经网络之前,我们一般会做一个标准化或归一化,目的是让每次输入的数据都在同一个分布或尺度。而在神经网络向前传播的过程中,这种分布势必会被打破,也就是Internal Covariate Shift(ICS)。作者认为这会使得训练变得更加困难,所以提出了在每一层进行标准化的方案,也就是Batch Normalization。
五、新的解释
2019年一篇新的论文How Does Batch Normalization Help Optimization?
则对BN有效的原理提出了质疑。作者通过一些实验证明了两件事:
- BN取得好的效果和ICS无关
- 事实上BN也没有解决ICS的问题
而作者认为BN有效的原因是让loss函数更加平滑了。
参考:
BN(Batch Normalization) 原理与使用过程详解
BN算法(Batch Normalization)的原理和作用