论文笔记:Batch Normalization

论文原文链接:https://arxiv.org/abs/1502.03167

Abstract

深度神经网络训练过程中前面层参数的变化会导致每一层输入分布发生改变,这使得网络训练变得复杂。这个问题还使得网络需要以较低的学习率和仔细的参数初始化,从而降低了训练速度,同时当采用饱和非线性激活函数时网络训练变得异常复杂。我们将这种现象叫做internal convariate shift,并且通过标准化每一层输入来解决这个问题。该方法从以下两点展现了自身的优势:(1)将标准化过程变成网络模型的一部分;(2)针对每一个mini-batch训练样本进行标准化。Batch Normalization让我们可以使用比原来更大的初始学习率并且不用太在意初始化,有的时候甚至可以忽略掉Dropout。通过应用于一个最好的图像分类模型,Batch Normalization用原来1/14的训练次数达到了和原来一样的准确率,并且以明显的优势击败了传统的模型。我们用加了Batch Normalization网络刷新了当前最好的ImageNet分类记录,top-5错误率为4.82%,超过了人类的识别率。

Introduction

该部分先介绍了深度学习在众多领域取得的巨大成功。然后指出用mini-batch相比于单个样本训练的优势:(1)用一个batch的样本对所有训练样本梯度的估计比单个样本估计结果更好更稳定;(2)用一个包含m个训练样本的batch训练在主流计算平台上比单个样本训练效率更高。接着文章又指出,虽然用随机梯度下降法更简单更高效,但是它需要对模型的超参数进行仔细地调整,尤其是学习率和初始化。进一步分析了网络训练过程中网络每一层输入分布的变化会降低训练的速度,增加训练的复杂度。最后文章中提出一个观点:固定分布的网络输入可以有效处理internal convariate shift现象,对模型训练有积极的影响。进而引出了文章的核心内容——Batch Normalization。

Towards Reducing Internal Covariate Shift

该部分首先指出文章的目的是降低网络的Internal Covariate Shift,并以此引出解决思路是固定每一层输入的分布。接着文章又谈到前人做的一些工作,在每一次次训练中加入白化(关于白化的好处,我觉得博客http://blog.csdn.net/elaine_bao/article/details/50890491中分析得很直观),改进网络结构或改变优化算法,但这会影响梯度算法的性能(文中也举例说明了为什么性能会下降,但这边我自己也没太能理解,有看懂的还望赐教)。最后文中指出,对每一层进行白化操作是不可取的,因为白化需要计算协方差、求逆等运算,计算量太大,而且在反向传播阶段白化不一定可导,于是文章做了权衡,引出了针对mini-batch的标准化过程。

Normalization via Mini-Batch Statistics

针对网络中的某一层,Batch Normalization先将该层输入按每一个输入维度标准化成零均值和单位方差,即:


BN_1

上式中, x(k) 表示某一层输入的第 k 个维度,它对应的期望和方差是根据整个训练集计算出来的。但这种标准化存在两个问题,第一个是该标准化弱化了原有网络的表达能力,文中也举了 sigmoid 激活函数的例子来说明问题(标准化使得网络只用了 sigmoid 函数0附近的近似线性部分),第二个问题是求每一次计算运用整个训练集计算量太大,这一点很不实际 。

针对第一个问题,文中在每一层的第 k 个维度上引入两个可训练参数 γ(k) β(k) 分别用于对标准化后的输入做尺度变换和平移变换来近似增强模型的表达能力,即:


BN_2

针对第二个问题,文中在随机梯度训练中用一个mini-batch的样本来代替全部训练样本。这样原来的标准化可以用改进的算法1来表示:


BN_algorithm

但上面只是正向传播过程,文中紧接着也给出了反向传播的推导(链式法则):


BN_BP

可以看出,该过程也是可导的,因此可进行正常的反向传播过程。

到这里Batch Normalization 还没有结束。想想看,在训练过程中用一个batch的数据来标准化没有问题,但是在测试过程中,我们为了保证测试结果仅取决于模型的输入(相当于同一个测试集每次的测试结果要要保证一致性),所以一旦模型训练完成,我们在网络的每一层将用整个数据集输入的期望和方差来代替mini-batch。即:


这里写图片描述
这里写图片描述

需要说明的是,用样本估计整体的期望和方差都要是无偏估计,因此估计方差前面需要乘 mm1

最后完整的Batch Normalization算法表示如下:


这里写图片描述

在该章的第2部分,文中给出了将Batch Normalization应用于卷积神经网络的方法,通过在激活函数前加入Batch Normalization过程,并且同一个特征图的所有神经元采用相同的标准化方法(和权值共享有点像),batch size由原来的 m 变成 mpq ,其中 (p,q) 是特征图的大小。而参数 γ(k) β(k) 也是一个特征图对应一个(而不是一个神经元对应一个)。其他地方基本不变。

在这一章的最后一部分,文中简单分析了Batch Normalization能够允许网络采用更大的学习率,进而加快网络训练的收敛速度,这一点在实验部分有对比。

Experiments and Conclusion

在实验部分,文中主要针对前面提到的各种关于Batch Normalization的优势做对比实验,如网络训练过程中输入分布变化对比(相对于原始网络)、采用Batch Normalization前后和增大学习率前后的收敛速度和准确率对比以及最后的在ImageNet数据集上的性能对比(最好的结果是BN-Inception ensemble,Top-5 error = 4.82%),这一块可以看论文原文,分析得很详细,这里就不再赘述了。

猜你喜欢

转载自blog.csdn.net/sinat_34474705/article/details/77848264
今日推荐