批归一化《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》读后总结
前言
这是一些对于论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》的简单的读后总结,首先先奉上该文章的下载超链接:Batch Normalization, BN
这篇文章是由谷歌公司(Google Inc.)的人员合作完成的,作者分别是Sergey Ioffe和Christian Szegedy,于2015年发表于arXiv。批归一化(Batch Normalization, BN)是一个在深度学习中非常有用的技术,在其被提出后,非常多的神经网络都运用了BN技术来改善自己的性能。BN通过减少内部协变量的变化,能加速神经网络的收敛速度,能降低最终的测试误差,能代替Dropout的作用;通过减少L2损失的权重、加速学习速率的衰减、增加学习率、删除局部响应规范化、随机打乱样本和减少光度畸变的操作,能使得加入BN的网络的性能更好。
文章主要内容与贡献
该文章的贡献为:
- 提出了批归一化(Batch Normalization, BN)。
提出了批归一化(Batch Normalization, BN)
简单来说,在网络正向传播时,应用于小批量算法中的
x
x
x的BN如下所示(BN被应用于激活函数前):
其中,BN只增加了一个
γ
\gamma
γ和一个
β
\beta
β即完成了BN的操作,且它们的计算也并不复杂,这保持了网络的表示能力。
训练带有BN的神经网络的步骤如下所示(上表即Alg.1):
其中,
E
[
x
]
=
1
N
∑
i
=
1
N
x
i
E[x]=\dfrac 1N\sum\limits^N_{i=1}x_i
E[x]=N1i=1∑Nxi。
在批归一化卷积网络(Batch-Normalized Convolutional Networks),学习每个特征的 γ ( k ) \gamma^{(k)} γ(k)和 β ( k ) \beta^{(k)} β(k),而不是学习每个激活的。因此,在推理过程中,BN变换将相同的线性变换应用于给定特征映射中的每个激活。
数值实验
下图是在MNIST数据集上的对比实验:
其中,图(a)是带和不带批归一化的MNIST网络的测试精度,横轴是训练步数,由该图可知,带BN的网络起点更高终点也更高,且一直领先于不带BN的网络。BN有助于网络训练速度更快,达到更高的精度。
图(b)和图©是输入分布向典型sigmoid的演化,在训练过程中,显示为{15,50,85}百分位数。批归一化使得分布更加稳定,减少了内部协变量转移。
下图是不同网络的对比图:
其中,Inception是Inception Network的简称;BN-Baseline是简单的BN嵌入Inception中;BN-x5是将BN-Baseline的学习率提高5倍;BN-x30是将BN-Baseline的学习率提高30倍;BN-x5-Sigmoid是将BN-x5中的ReLU替换为Sigmoid。
下表是和上图配套来看的:
即各网络达到Inception的最大精度所需要的步数。
从上图和上表可知,BN-x30的性能最优,虽然一开始速度不及BN-x5,但是最终的精度更高,就算不加大学习率,BN-Baseline所需的迭代次数也仅为Inception的一半不到。加入了BN后,使得Sigmoid在Inception网络的训练变为了可能,不然使用Sigmoid的Inception网络从来都没有超过0.1%的精度。
下图为BN-Inception与此前的最先进的网络提供的验证集,包括50000张图像。
其中,BN-Inception集成在测试服务器报告的ImageNet测试集的100000张图像上达到了4.82%的前5错误,这刷新了当时的纪录。