天天看点

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Background

Covariance shift

——when the input distribution to a learning system changes, it is said to experience covariance shift.

当这种现象发生在多层神经网络之间时,即前面层参数的改变,使得后面层的输入分布发生改变时,就叫Internal covariance shift。

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

前面层的参数变化会影响当前层的输入分布,缺点有二:

1.大大减慢当前层的参数学习速度(当前层也是一个learning system,一旦其输入的分布改变,就要调整参数来适应这种分布);

2.若使用sigmoid激活函数,当前层的输入可能会处于sigmoid函数的非线性饱和区域,进而导致梯度消失现象。在BN出现以前,通常采用ReLU(x)=max(0,x)激活函数或使用较小的learning rate来解决这个问题。

因此我们想到,如果前面层的输出activation(即当前层的输入input)的分布是一定的呢?那样就会减少下一层输入陷入sigmoid饱和非线性区域的可能,梯度不再容易消失,从而加快训练速度。

Whitening

对某一层的输出activations进行白化操作(零均值、单位方差、去相关),可以使得这些activations的分布保持恒定,从而减小internal covariance shift对下一层的影响。

其缺点在于:

1.expensive computation

2.not everywhere differentiable

为了解决这个问题,作者在Batch_normalization中提出了两个简化做法。

Normalization via Mini-batch statistics

BN包括两个重要的操作:

1.normalization:零均值化、单位方差

2.scale and shift:引入两个参数,从而使得BN操作可以代表一个恒等变换(相当于BN transform的输入和输出是一样的,也就是不改变输入分布)

表示如下:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

对某一layer,其输入x的维度(即前一层的activations个数)为d,则需要对每一维(即每一个activation)分别进行normalization:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

然而,仅仅对每个输入进行normalization会改变输入的分布,例如,若使用的是sigmoid激活函数,则对输入的normalization会将其限制在sigmoid函数的线性区域,为了解决这个问题,我们在normalization操作后面加上一个如下所示的线性变换(linear transform),使得整个Batch normalization具有表达恒等变换的能力。

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

对每一个前一层的输出activation,都要学习自己的gama、beta。

当每个activation的gama和beta都按如下当时取值时,输入的activations经过BN操作后分布不变,此时,BN就相当于一个恒等变换了。

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

整个BN算法框架如下:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

反向传播

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

推导过程如下:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Testing

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Batch-Normalized Convolutional Networks

正如卷积神经网络里,同一个feature map里面的多个units是由同一个kernel在input image的不同区域滑动得到的,当在卷积神经网络里加入BN操作时,同一个feature map的activations也用同样的normalization方式,也就是说,对一个具有n个feature maps的activation layer,只需要学习n个gama-beta参数对。

加入BN后

加入BN操作的神经网络,可以设置更大的learning rate、去掉dropout层、减少L2正则化。

实验

某一层的输出activations的分布随着训练时间的增长而变化的曲线:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

可以看出,加入BN后,分布更加稳定,减弱了internal covariance shift。

继续阅读