Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
作者: Sergey Ioffe
发表日期: 2015
引用量: 38954
星级 : ★★★★★
模型简写: BN-Inception
精读: No
Introduction
Motivation:
深度神经网络训练的复杂性在于:在训练过程,每一层输入的数据分布随着前一层网络参数的改变而改变。这会降低训练速度,并需要更小的learning rate和仔细的网络参数初始化,并使得训练具有饱和非线性的模型异常困难。
论文指出这种每层输入数据分布改变的现象叫做internal covariate shift,提出可以用normalization解决。
小的扰动就会引起后续大的变化,使得网络训练较难,BN就是解决在训练过程中,中间层数据分布发生变化的问题。
Batch Normalization思考起源(Towards Reducing Internal Covariate Shift)
Whitened (LeCun et al., 1998b)(白化),对输入进行白化,即对输入进行线性变化为具有0均值和单位方差,并去相关。使用白化(Whitened )进行标准化(Normalization)以此来消除Internal covariate shift的不良影响。由于Whitened需要计算协方差矩阵和平方根倒数,而且在每次更新后需要对整个训练集进行分析,代价昂贵。
因此本文寻找一种对上述可替代的normalization方法,需要其是可导的,并且在每次参数更新后不用对整个训练集进行分析。本文提出的这种方法就是Batch Normalizaiton
Method
在Whitened的基础上做简化
使得输入均值为0,方差为1.
值得注意的是:简单的标准化会改变该层的表达能力,以sigmoid激活层例,会把输入约束到线性状态。因此我们需要添加新的恒等变换抵消这个操作:
事实上,当 γ ( k ) = V a r [ x ( k ) ] \gamma^{(k)}=\sqrt{Var[x^{(k)}]} γ(k)=Var[x(k)], β ( k ) = E [ x ( k ) ] \beta^{(k)}=E[x^{(k)}] β(k)=E[x(k)]时,上式可以完全恢复原始分布。
因此最终的Normalization方法见如下:
Batch Normalization (over mini-batch)
Batch Normalization Transformer,在上述算法中, ϵ \epsilon ϵ 为一个常数,添加到方差中以保持数值稳定性。
InceptionV2
InceptionV2相比于GooLeNet(InceptionV1)的改变如下:
- Batch Normalization(批归一化),目前BN已成为几乎所有卷积神经网络的标配技巧。
- 将5x5卷积用两个连续的3x3卷积核替代(感受野相同),参数量提升了25%,计算量提升了30%。
- The number 28x28的inception module从2个增加至3个(inception stage3)
- 在模型内部,有时候使用max pooling,有时候使用average pooling
- 没有across board pooling layers在任意两个inception modules。只在3c,4e里会有stride-2的卷积和pooling