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

Abstract

训练深度神经网络的复杂性在于,因为前面层的参数发生变化会导致每层输入的分布在训练过程中发生变化。以为这个问题在训练模型时通常会要求较低的学习率和仔细的参数初始化,但这减慢了训练速度,并且使具有饱和非线性的模型训练起来非常困难。我们将这种每层输入的分布发生变化的现象称为内部协变量转移,并通过标准化层输入来解决这个问题。我们的方法力图使标准化成为模型架构的一部分,并为每个训练的小批量数据执行标准化。批标准化使我们能够使用更高的学习率,并且不用太注意初始化。他也可以起到正则化的作用,在某些情况下不需要Dropout。将批量标准化应用到最先进的图像分类模型上,批标准化在取得相同的精度的情况下,减少了14倍的训练步骤,并以显著的差距击败了原始模型。

1.Introduction

当网络变得很深时,每层的输入会受到前面所有层的影响,因此网络参数的微小变化会被放大,每层的输入分布也会发生变化,就会产生所谓的协变量转移。输入分布在时间上保持固定是对于训练网络是有十分有利的,例如考虑到网络计算:

 

                                                                                 l=F_{2}(F_{1}(u,\Theta _{1}),\Theta _{2})

F1和F2是任意变换,\Theta _{1},\Theta _{2}是学习参数。学习\Theta _{2}可以看作输入x=F1(u,Θ1)送入到子网络ℓ=F2(x,Θ2)

梯度下降步骤:

\Theta _{2}\leftarrow \Theta _{2}-\frac{\alpha }{m}\sum_{i=1}^{m}\frac{\partial F_{2}(x_{i},\Theta _{2})}{\partial \Theta _{2}}

若x的分布是固定的,当训练输入为x的单独网络F2时,\Theta _{2}不必重新调整。当训练集和测试集的x分布相同时,参数也不必重新调整,对于模型训练是十分有利的。

输入的固定分布对于子网络外的层也有积极的影响。考虑一个激活函数为g(x)=\frac{1}{1+exp(-x)}的层,u是层输入,权重矩阵W和偏置向量b是要学习的层参数。随着|x|的增加,g′(x)趋向于0。除非x的绝对值特别小,否则模型对于u的梯度将会消失,模型将缓慢的进行训练。然而,由于x受W,b和前面所有层的参数的影响,训练期间那些参数的改变可能会将x移动到非线性的饱和状态并减慢收敛。这个影响随着网络深度的增加而放大。(在实践中,饱和问题和由此产生的梯度消失通常通过使用修正线性单元 ReLU(x)=max(x,0),仔细的初始化和小的学习率来解决。)如果我们能保证非线性输入的分布在网络训练时保持更稳定,那么优化器将不太可能陷入饱和状态,训练将加速。

作者把训练过程中深度网络内部每层的输入的分布变化称为内部协变量转移。为了消除内部斜变量转移作者提出来了批标准化的方法。

2.Normalization via Mini-Batch Statistics

单独标准化每个特征,对于具有d维输入x=(x^{1}..x^{d})的层,标准化每一维\hat{x}^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}},需要注意的地方在于这个是在一个mini-batch上的操作,其中的统计特征的计算(均值和方差)也都是基于mini-batch的。但是注意正则化layer的输入可能会改变这个层的功能,例如在激活函数sigmoid上,标准化输入之后,其均值为0方差为1,标准化的操作可能将输入移动到了sigmoid非线性函数的的线性部分,这样并不利于模型的构建。因此论文在标准化的操作后面加上一个变换:y^{(k)}=\gamma ^{k}\hat{x}^{(k)}+\beta ^{(k)}。因此BN处理的算法如下:(每层的输入的每个维度都要进行单独的标准化,算法中没有标明维度k)

这里的\alpha\beta参数也是需要另外学习的。在反向传播过程中,这个变换的梯度可以通过链导法则导出来,文章给出了如下公式:

在inference阶段与training不同在于,这个transform在全部的数据(populations)上进行。文章用algorithm2表示: 

algorithm2

当BN技术应用到卷积网络中时注意以下两点:

(1)卷积网络每层的变换一般可以看成一个仿射然后加上一个非线性映射,公式表示如下:z=g(Wu+b)  。我们在非线性之前通过标准化x=Wu+b加入BN变换。我们也可以标准化层的输入u,但相比之下,Wu+b更可能具有对称,非稀疏分布,即“更高斯”,因此文章在x=Wu+b上使用BN技术。在使用BN技术中,由于会对输入做零均值的normalization,所以可以将x中的常数项b忽略掉,也就是将原来的网络变形为下面的式子: z=g(BN(Wu))。另外一点是这里的变换都是在一个维度(activation)上面讨论的,每个维度是相互独立的。

(2)对于卷积网络而言,我们希望BN在对每个feature map进行normalization时使用同样的映射,所以在卷积层使用的normalization参数都是从一个mini-batch上所有样本学习。因此对于大小为m的小批量数据和大小为p×q的特征映射,我们使用有效的大小为m′=m⋅pq的小批量数据。每个特征映射学习一对参数γ(k)和β(k),而不是每个激活(每层的所有激活学习一样的参数\gamma, \beta,BN变换对在给定的特征映射上的每一个激活应用同样的线性变换)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值