batch normalization论文

通过减少internal Covariate shift加速深度网络的训练。

什么是internal Covariate shift?

由于前一层参数的变化导致了后一层输入分布的变化。这需要减少学习率并且需要小心地初始化网络,并且由于非线性**层饱和很难进行继续训练。

因此作者提出了BN。经过batch normazation我们可以使用更高的学习率进行训练,并不需要特意关注初始化,并且在一些情况下可以减少Dropout层的使用。

问题从何而来:

目前训练网络通常采用sgd with mini-batch,首先我们从这里出发。

 

mini-batch的优势?

1、mini-batch 的loss是对整个数据集loss的估计,一定程度上反映了数据集的质量。

2、由于计算的并行型,计算多个梯度比计算单独一个梯度效率更高。

sgd随机梯度下降法:

随机梯度下降法非常简单并且有效,但是需要非常小心地调整模型的超参数,特备是学习率和模型初始化的值。训练的过程非常复杂,每一层的输入都受到之前参数的影响,所以网络参数即使变化很小,在很深的网络中也非常大。

 

举个例子:

对于z = g(Wu+b),其中z为某层的输出,g为sigmod函数,W为该层的权重,b为该层的偏置。当|x|增加时,g'也就是sigmod函数的梯度趋向于0,这意味着z相对于u的梯度消失了,因此训练速度也就减慢了。

通常解决方法是将sigmod函数换成relu(x) = max(0,x)线性修正函数,并且小心地初始化,采用较小的学习率。

从目前来看所有问题的根源都来自于|x|增加了。但是如果保持|x|稳定在一定范围内,那就不会进入sigmod的饱和区了。

也就是说我们需要固定输入x的分布。Lecun老先生早就说过如果输入是白化(0均值,单位方差,去相关)的,那整个网络训练起来就更快了。而通过白化操作可以获得固定分布的输入,减少了上文所提到的internal Covariate shift的影响。

 

Normalization via Mini-Batch Statistics

其中x为d维度的输入,k为第k维度,也就是说对于每一维度都进行BN操作,

batch normalization论文

batch normalization论文

反向传播计算:

batch normalization论文

这注意从第二行开始所有的均值方差都是关于mini batch,所以是m个样本的总和。

训练时计算:

batch normalization论文

 

在卷积网络中的应用:

其中Wu+b都可能是对称的,非稀疏分布,b可以忽略。

batch normalization论文

为了保持卷积的特性,同一个特征图中的不同元素应该采用相同的BN过程。假设特征图大小为pxq,我们使用mini batch大小m = |B| = m*p*q,每个特征图学习到一组γ和β。

 

BN优势:

1、加速深度网络的训练

2、减少了参数的规模和对参数初始化值的依赖程度

3、对模型正则化,减少dropout的使用

4、使得模型能够使用非线性**函数而不会因为梯度消失而卡住。