zoukankan      html  css  js  c++  java
  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift全文

    Inception v2

    Sergey Ioffe,Christian Szegedy

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

    论文解读

    0 Abstract

    由于训练过程中各层输入的分布随前一层参数的变化而变化,使得训练深度神经网络变得复杂。这导致了训练速度的降低,因为需要更低的学习率和更仔细的参数初始化,并且使得利用饱和非线性来训练模型变得非常困难。我们将这种现象称为内部协变量转移,并通过归一化层输入来解决这个问题。我们的方法力图使归一化成为模型体系架构的一部分,并为每个训练小批量数据执行归一化。批归一化使我们能够使用更高的学习率,并且不用在初始化时那么小心了。它也作为一个正则化项,在某些情况下不需要进行Dropout操作。将批归一化应用到最先进的图像分类模型上,那么在取得相同的精度的情况下,它减少了14倍的训练步骤,并以巨大的差距击败了原始模型。使用批归一化网络的组合,我们改进了在ImageNet分类上公布的最佳结果:达到了4.9% top-5的验证错误率(和4.8%测试错误率),超过了人类评估者的准确性。

    1 Introduction

    深度学习在视觉、语音和其他诸多领域,显著提高了现有技术的水平。随机梯度下降(SGD)已经被证明是一种训练深度网络的有效方式,并且已经使用诸如动量Sutskever(2013)和Adagrad(2011)等SGD变种去取得了当前最佳的性能。SGD对网络参数Θ进行优化,为了最小化损失。

    Θ=argminΘ1Ni=1N(xi,Θ)Theta=arg min _{Theta} frac{1}{N} sum_{i=1}^{N} ellleft(mathrm{x}_{i}, Theta ight)

    x1…N是训练数据集。使用SGD方法进行的训练将分几步进行,在每一步中,我们考虑一个大小为m的小批量数据x1…m。通过计算
    1m(xi,Θ)Θ frac{1}{m} frac{partial ellleft(mathrm{x}_{i}, Theta ight)}{partial Theta}
    使用小批量数据来近似计算损失函数相对于参数的梯度。使用小批量样本,而不是一次一个样本,在很多方面都是有帮助的。首先,小批量数据上的梯度损失是训练集上的梯度估计,其质量随着批量大小的增加而提高。第二,由于现代计算平台提供的并行性,对一个批次的计算可能比单个样本进行m次计算的效率要更高。

    虽然随机梯度是简单有效的,但它需要对模型超参数进行仔细地调整,特别是优化中使用的学习率以及模型参数的初始值。由于每个层的输入都受到前面所有层的参数的影响,因此,当网络变得更深时,网络参数的微小变化也会被放大,这使得训练变得更加复杂。

    层输入的分布变化带来一个问题,因为这些层需要不断地适应新的分布。当学习系统的输入分布发生变化时,据说会经历协变量转移Shimodaira(2000)。这通常是通过域适应Jiang(2008)来处理的。然而,协变量漂移的概念可以扩展到整个学习系统之外,应用到学习系统的各个部分,例如子网络或一层。考虑网络计算。
    =F2(F1(u,Θ1),Θ2) ell=F_{2}left(F_{1}left(mathrm{u}, Theta_{1} ight), Theta_{2} ight)
    其中F1和F2是任意变换,和学习参数Θ1,Θ2以便最小化损失ℓ。学习Θ2可以看作输入,x=F1(u,Θ1)mathrm{x}=F_{1}left(mathrm{u}, Theta_{1} ight)送入到子网络=F2(x,Θ2)ell=F_{2}left(mathrm{x}, Theta_{2} ight)

    例如,梯度下降步骤Θ2Θ2αmi=1mF2(xi,Θ2)Θ2Theta_{2} leftarrow Theta_{2}-frac{alpha}{m} sum_{i=1}^{m} frac{partial F_{2}left(mathrm{x}_{i}, Theta_{2} ight)}{partial Theta_{2}}(对于批量大小m和学习率α)与输入为x的单独网络F2完全等价。因此,输入分布特性使训练更加有效——例如训练数据和测试数据之间具有相同的分布——也适用于训练子网络。因此,随着时间的推移,x的分布保持不变是有利的。然后,Θ2不必重新调整来补偿x分布的变化。

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

    我们把训练过程中深度网络内部结点的分布变化称为内部协变量转移。消除它可以保证更快的训练。我们提出了一种新的机制,我们称为Batch Normalization,它是减少内部协变量转移的一个步骤,这样做可以显著加速深度神经网络的训练。它通过归一化步骤来实现,归一化步骤修正了层输入的均值和方差。批归一化减少了梯度对参数或它们的初始值尺度上的依赖关系,对通过网络的梯度流动产生有益的影响。这允许我们使用更高的学习率而不存在发散的风险。此外,批归一化正则化了模型并且减少了对Dropout Srivastava(2014)的需求。最后,批归一化通过阻止网络陷入饱和模式而让使用饱和非线性成为可能。

    在4.2小节,我们将批归一化应用到性能最好的ImageNet分类网络上,并且表明我们仅仅使用7%的训练步骤就可以达到与之匹配的性能,并且可以大幅度超过其准确性。通过使用一组经过批归一化训练的网络的集合,我们取得了top-5的错误率,其改进了ImageNet分类上已知的最佳结果。

    2 Towards Reducing Internal Covariate Shift

    由于训练过程中网络参数的变化,我们将内部协变量转移定义为在网络激活分布中的变化。为了改善训练,我们寻求方法去减少内部协变量转移。随着训练的进行,通过固定层输入x的分布,我们期望提高训练速度。众所周知LeCun(1998b); Wiesler & Ney(2011)如果对网络的输入进行白化,网络训练将会收敛的更快——即输入线性变换为具有零均值和单位方差,并去相关。当每一层观察下面的层产生的输入时,对每一层输入进行相同的白化将是有利的。通过白化每一层的输入,我们将采取措施实现输入的固定分布,消除内部协变量转移的不良影响。

    我们考虑在每个训练步骤或在某些间隔来白化激活值,通过直接修改网络或根据网络激活值来更改优化方法的参数Wiesler(2014); Raiko(2012); Povey(2014); Desjardins & Kavukcuoglu。然而,如果这些修改分散在优化步骤中,那么梯度下降步骤可能会试图以需要归一化进行更新的方式来更新参数,这会降低梯度下降步骤的影响。例如,考虑一个层,其输入u加上学习到的偏置b,通过减去在训练集上计算的激活值的均值来对结果进行归一化:x^=xE[x]widehat{x}=x-E[x]x=u+bx=u+b

    X={x1N}mathcal{X}=left{x_{1 ldots N} ight}是训练集上x值的集合,E[x]=1Ni=1Nximathrm{E}[x]=frac{1}{N} sum_{i=1}^{N} x_{i},如果梯度下降步骤忽略了E[x]对b的依赖,那它将更新bb+Δbb leftarrow b+Delta b,其中Δb/x^Delta b propto-partial ell / partial widehat{x},然后u+(b+Δb)E[u+(b+Δb)]=u+bE[u+b]u+(b+Delta b)-mathrm{E}[u+(b+Delta b)]=u+b-mathrm{E}[u+b],因此,结合b的更新和接下来归一化中的改变会导致层的输出没有变化,从而导致损失没有变化。随着训练的继续,b将无限增长而损失保持不变。如果归一化不仅中心化而且缩放了激活值,问题会变得更糟糕。在最初的实验中,我们已经观察到了这一点,通过经验的总结,当归一化参数在梯度下降步骤之外计算时,模型会爆炸。

    上述方法的问题是梯度下降优化没有考虑到归一化中发生的事实。为了解决这个问题,我们希望确保对于任何参数值,网络总是产生具有所需分布的激活值。这样做将允许关于模型参数损失的梯度来解释归一化,以及它对模型参数Θ的依赖。设x为层的输入,将其看作向量,X是这些输入在训练集上的集合。归一化可以写为变换x^=Norm(x,X)widehat{mathrm{x}}=operatorname{Norm}(mathrm{x}, mathcal{X}),它不仅依赖于给定的训练样本x而且依赖于所有样本X——它们中的每一个都依赖于Θ,如果x是由另一层生成的。对于反向传播,我们将需要计算Jacobians——Norm(x,X)xfrac{partial mathrm{Norm}(mathrm{x}, mathcal{X})}{partial mathrm{x}} and Norm(x,X)Xfrac{partial mathrm{Norm}(mathrm{x}, mathcal{X})}{partial mathcal{X}}

    忽略后一项会导致上面描述的爆炸。在这个框架中,白化层输入是昂贵的,因为它要求计算协方差矩阵Cov[x]=ExX[xxT]E[x]E[x]Toperatorname{Cov}[mathrm{x}]=mathrm{E}_{mathrm{x} in mathcal{X}}left[mathrm{xx}^{T} ight]-mathrm{E}[mathrm{x}] mathrm{E}[mathrm{x}]^{T}和它的平方根倒数,从而生成白化的激活值Cov[x]1/2(xE[x])operatorname{Cov}[mathrm{x}]^{-1 / 2}(mathrm{x}-mathrm{E}[mathrm{x}])和这些变换进行反向传播的偏导数。这促使我们寻求一种替代方案,以可微分的方式执行输入归一化,并且在每次参数更新后不需要对整个训练集进行分析。

    以前的一些方法(例如Lyu & Simoncelli(2008))使用通过单个训练样本计算的统计信息,或者在图像网络的情况下,使用一个给定位置处使用不同特征图上的统计。然而,通过丢弃激活值的绝对尺度,这改变了网络的表示能力。我们希望通过对相对于整个训练数据统计信息的单个训练样本的激活值进行归一化,来保留网络中的信息。

    3 Normalization via Mini-Batch Statistics

    由于每一层输入的整个白化是代价昂贵的并且不是到处可微分的,因此我们做了两个必要的简化。首先是我们将单独归一化每个标量特征,从而代替在层输入输出对特征进行共同白化,使其具有零均值和单位方差。对于具有d维输入x=(x(1)…x(d))的层,我们将归一化每一维,x^(k)=x(k)E[x(k)]Var[x(k)]widehat{x}^{(k)}=frac{x^{(k)}-mathrm{E}left[x^{(k)} ight]}{sqrt{operatorname{Var}[x(k)]}},其中期望和方差在整个训练数据集上计算。如LeCun(1998b)中所示,这种归一化加速了收敛,即使特征没有去相关。

    注意简单地归一化一个层的每一个输入可能会改变这个层可以表示什么。例如,归一化sigmoid的输入会将它们约束到非线性的线性状态。为了解决这个问题,我们要确保插入到网络中的变换可以表示恒等变换。为了实现这个,对于每一个激活值x(k),我们引入成对的参数γ(k),β(k),它们会缩放归一化和移动归一化值:

    y(k)=γ(k)x^(k)+β(k)y^{(k)}=gamma^{(k)} widehat{x}^{(k)}+eta^{(k)}

    这些参数与原始的模型参数一起被学习,并恢复网络的表示能力。实际上,通过设置γ(k)=Var[x(k)]gamma^{(k)}=sqrt{operatorname{Var}left[x^{(k)} ight]}β(k)=E[x(k)]eta^{(k)}=mathrm{E}left[x^{(k)} ight],我们可以重新获得原始的激活值,如果这是最理想的方法的话。

    每个训练步骤的批处理设置是基于整个训练集的,我们将使用整个训练集来归一化激活值。然而,当使用随机优化时,这是不切实际的。因此,我们做了第二个简化:由于我们在随机梯度训练中使用小批量,每个小批量产生每次激活平均值和方差的估计。这样,用于归一化的统计信息可以完全参与梯度反向传播。注意,通过计算每一维的方差而不是联合协方差,可以实现小批量的使用;在联合情况下,将需要正则化,因为小批量大小可能小于白化的激活值的数量,从而导致单个协方差矩阵。

    考虑一个大小为m的小批量数据B。由于归一化被单独地应用于每一个激活值上,所以让我们集中在一个特定的激活值x(k),为了清晰我们忽略了k。在小批量数据里我们有这个激活的m个值,B={x1m}mathcal{B}=left{x_{1 ldots m} ight},设归一化值为x帽1…m,它们的线性变换为y1…m。我们把变换BNγ,β:x1my1mmathrm{BN}_{gamma, eta} : x_{1 ldots m} ightarrow y_{1 ldots m},看作批归一化变换。我们在算法1中提出了BN变换。在算法中,为了数值稳定,ϵ是一个加到小批量数据方差上的常量。
    在这里插入图片描述
    Algorithm 1:
    批归一化变换,被应用到小批量数据上的激活值x。

    BN变换可以添加到网络上来操纵任何激活。在公式y=BNγ,β(x)y=mathrm{BN}_{gamma, eta}(x)中,我们指出参数γ和β需要进行学习,但应该注意到在每一个训练样本中BN变换不单独处理激活值。相反,y=BNγ,β(x)y=mathrm{BN}_{gamma, eta}(x)取决于训练样本和小批量数据中的其它样本。缩放和移动的值y被传递到其它的网络层。归一化的激活值x帽在我们的变换内部,但它们的存在至关重要。只要每个小批量的元素从相同的分布中进行采样,如果我们忽略ϵ,那么任何x帽值的分布都具有期望为0,方差为1。这可以通过观察i=1mx^i=0sum_{i=1}^{m} widehat{x}_{i}=0 and 1mi=1mx^i2=1frac{1}{m} sum_{i=1}^{m} widehat{x}_{i}^{2}=1看到,并取得期望。每一个归一化的激活值x帽(k)可以看作由线性变换y(k)=γ(k)x^(k)+β(k)y^{(k)}=gamma^{(k)} widehat{x}^{(k)}+eta^{(k)}组成的子网络的输入,接下来是原始网络的其它处理。所有的这些子网络的输入都有固定的均值和方差,尽管这些归一化的x帽(k)的联合分布可能在训练过程中改变,但我们预计归一化输入的引入会加速子网络的训练,从而加速整个网络的训练。

    在训练过程中我们需要通过这个变换反向传播损失 ℓ 的梯度,以及计算关于BN变换参数的梯度。我们使用的链式法则如下(简化之前):
    在这里插入图片描述
    因此,BN变换是将归一化激活引入到网络中的可微变换。这确保了在模型训练时,层可以继续学习输入分布,表现出更少的内部协变量转移,从而加快训练。此外,应用于这些归一化的激活上的学习到的仿射变换允许BN变换表示恒等变换并保留网络容量。

    3.1 Training and Inference with Batch-Normalized Networks

    为了批归一化一个网络,根据算法1,我们指定一个激活的子集,然后在每一个激活中插入BN变换。任何以前接收x作为输入的层现在接收BN(x)作为输入。采用批归一化的模型可以使用批梯度下降,或者用小批量数据大小为m>1的随机梯度下降,或使用它的任何变种例如Adagrad Duchi(2011)进行训练。依赖小批量数据的激活值的归一化可以有效地训练,但在推断过程中是不必要的也是不需要的;我们希望输出只确定性地取决于输入。为此,一旦网络训练完成,我们使用总体统计来进行归一化x^=xE[x]Var[x]+ϵwidehat{x}=frac{x-mathrm{E}[x]}{sqrt{operatorname{Var}[x]+epsilon}},而不是小批量数据统计。跟训练过程中一样,如果忽略ϵ,这些归一化的激活具有相同的均值0和方差1。我们使用无偏方差估计Var[x]=mm1EB[σB2]operatorname{Var}[x]=frac{m}{m-1} cdot mathrm{E}_{mathcal{B}}left[sigma_{mathcal{B}}^{2} ight],其中期望是在大小为m的小批量训练数据上得到的,σ2B是其样本方差。相反,使用移动平均线,我们可以跟踪模型训练时的准确性。由于均值和方差在推断时是固定的,因此归一化只是应用到每一个激活上的简单线性变换。它可以进一步由缩放γ和转移β组成,以产生代替BN(x)的单线性变换。算法2总结了训练批归一化网络的过程。
    在这里插入图片描述
    **Algorithm 2:**训练一个批归一化的网络

    3.2 Batch-Normalized Convolutional Net-works

    批归一化可以应用于网络的任何激活集合。这里我们专注于仿射变换和元素级非线性组成的变换:
    z=g(Wu+b) mathrm{z}=g(W mathrm{u}+mathrm{b})
    其中W和b是模型的学习参数,g(⋅)是非线性特征,例如sigmoid或ReLU。这个公式涵盖了全连接层和卷积层。我们在非线性之前通过归一化x=Wu+bmathrm{x}=W mathrm{u}+mathrm{b},加入BN变换。我们也可以归一化层输入u,但由于u可能是另一个非线性的输出,它的分布形状可能在训练过程中改变,并且限制其一阶矩或二阶矩不能去除协变量漂移。相比之下,Wu+b更可能具有对称,非稀疏分布,即“更高斯”Hyvärinen & Oja(2000);对其归一化可能产生具有稳定分布的激活。

    注意,由于我们对Wu+b进行归一化,偏置b可以忽略,因为它的效应将会被后面的减去均值处理取消(偏置的作用会归入到算法1的β)。因此,z=g(Wu+b)mathrm{z}=g(W mathrm{u}+mathrm{b})z=g(BN(Wu))mathrm{z}=g(mathrm{BN}(W mathrm{u}))替代,其中BN变换独立地应用到x=Wumathrm{x}=W mathrm{u}的每一维,每一维具有单独的存在着一对的学习参数γ(k),β(k)。

    另外,对于卷积层我们希望归一化遵循卷积特性——为的是同一特征图的不同元素,在不同的位置,以相同的方式进行归一化。为了实现这个,我们在所有位置上,联合归一化了小批量数据中的所有激活。在算法1中,我们让B是跨越小批量数据的所有元素和空间位置的特征映射中所有值的集合——因此对于大小为m的小批量数据和大小为p×q的特征映射,我们使用有效的大小为m=B=mpqm^{prime}=|mathcal{B}|=m cdot p q的小批量数据。我们学习每个特征映射的一对参数γ(k)和β(k),而不是每个激活。算法2进行类似的修改,以便在推断期间BN变换对在给定的特征映射上的每一个激活应用同样的线性变换。

    3.3 Batch Normalization enables higher learning rates

    在传统的深度网络中,学习率过高可能会导致梯度爆炸或梯度消失,以及陷入局部最小值(poor local minima)。批归一化有助于解决这些问题。通过归一化整个网络的激活值,它可以防止在数据通过深度网络传播时,层参数的微小变化被放大为更大的、次优的激活变化。例如,它可以防止训练陷入非线性的饱和状态。

    批归一化也使训练对参数的缩放更有弹性。通常,大的学习率可能会增加层参数的缩放,这会在反向传播中放大梯度并导致模型爆炸。然而,通过批归一化,通过层的反向传播不受其参数规模的影响。实际上,对于标量a,BN(Wu)=BN((aW)u)mathrm{BN}(W mathrm{u})=mathrm{BN}((a W) mathrm{u})。我们可以证明:

    BN((aW)u)u=BN(Wu)uBN((aW)u)(aW)=1aBN(Wu)Wegin{aligned} frac{partial mathrm{BN}((a W) mathbf{u})}{partial mathbf{u}} &=frac{partial mathrm{BN}(W mathbf{u})}{partial mathbf{u}} \ frac{partial mathrm{BN}((a W) mathbf{u})}{partial(a W)} &=frac{1}{a} cdot frac{partial mathrm{BN}(W mathbf{u})}{partial W} end{aligned}

    因此标量不影响层的雅可比行列式,从而不影响梯度传播。此外,更大的权重会导致更小的梯度,并且批归一化会稳定参数的增长。

    我们进一步推测,批归一化可能会导致雅可比行列式的奇异值接近于1,这被认为对训练是有利的Saxe(2013)。考虑具有归一化输入的两个连续的层,并且位于这些归一化向量之间的变换:Z^=F(x^)widehat{mathrm{Z}}=F(widehat{mathrm{x}})

    如果我们假设x帽和z帽是高斯分布且不相关的,那么F(x^)Jx^F(widehat{mathrm{x}}) approx J widehat{mathrm{x}}是对给定模型参数的一个线性变换,x帽和z帽有单位方差,并且I=Cov[z^]=JCov[x^]JT=JJTI=operatorname{Cov}[widehat{mathrm{z}}]=J operatorname{Cov}[widehat{mathrm{x}}] J^{T}=J J^{T},因此,JJT=IJ J^{T}=I。所以J的所有奇异值都等于1,这就保留了反向传播时的梯度大小。在现实中,变换不是线性的,归一化的值不能保证是高斯的或独立的,但我们仍然期望批处理归一化有助于更好地实现梯度传播。批归一化对梯度传播的精确影响仍是一个有待进一步研究的领域。

    3.4 Batch Normalization regularizes the model

    当使用批归一化进行训练时,看到一个训练样本与小批量处理中的其他样本可以结合使用,训练网络不再为给定的训练样本生成确定值。在实验中,我们发现这种效应有利于网络的泛化。而Dropout Srivastava(2014)通常用于减少过拟合,在一个批归一化的网络中,我们发现它可以被移除或降低强度。

    4 Experiments

    4.1 Activations over time

    为了验证内部协变量转移对训练的影响,以及批归一化对抗它的能力,我们考虑了在MNIST数据集上预测数字类别的问题LeCun(1998a)。我们使用非常简单的网络,28x28的二值图像作为输入,以及三个全连接层,每层100个激活。每一个隐藏层用sigmoid非线性计算y=g(Wu+b)mathrm{y}=g(W mathrm{u}+mathrm{b}),权重W初始化为小的随机高斯值。最后的隐藏层之后是具有10个激活(每类1个)和交叉熵损失的全连接层。我们训练网络50000次迭代,每份小批量数据中有60个样本。如第3.1节所述,我们在网络的每一个隐藏层后添加批归一化。我们对基准线和批归一化网络之间的比较感兴趣,而不是实现在MNIST上的最佳性能(所描述的架构没有)。

    4.2 ImageNet classification

    我们将批归一化应用于在ImageNet分类任务Russakovsky(2014)上训练的Inception网络的新变种Szegedy(2014)。网络具有大量的卷积和池化层,和一个softmax层用来在1000个可能之中预测图像的类别。卷积层使用ReLU作为非线性特征。与Szegedy(2014)中描述的网络的主要区别是5×5卷积层被两个连续的3x3卷积层替换,最多可以有128个滤波器。该网络包含13.6 ⋅ 106个参数,除了顶部的softmax层之外,没有全连接层。更多的细节会在Appendix中给出。在其余的文本中我们将这个模型称为Inception。该模型使用动量随机梯度下降Sutskever(2013),使用32的最小批量大小。训练在大规模分布式架构Dean(2012)上进行。通过计算验证集的精度@1来评估所有网络的训练进展情况,即,每张图像使用单个裁剪量,在一组已给出的图像上,从1000种可能性中预测正确标签的概率。

    在我们的实验中,我们评估了几个带有批归一化的Inception修改版本。在所有情况下,如第3.2节所述,批归一化以卷积方式应用于每个非线性的输入,同时保持架构的其余部分不变。

    4.2.1 Accelerating BN Networks

    将批归一化简单添加到网络中不能充分利用我们方法的优势。为此,我们进一步改变了网络及其训练参数如下:

    提高学习率。在一个批归一化模型中,我们已经能够从高学习率中实现训练加速,没有不良的副作用(3.3节)。

    移除Dropout。正如3.4节描述的,批归一化实现了与Dropout相同的一些目标。从改进的BN-Inception中移除Dropout没有提升过拟合,但是加速了训练过程。

    减少L2权重的正则化。在Inception中模型参数的一个L2损失控制过拟合,而在改进的BN-Inception中,该损失的权重减少了5倍。我们发现,这提高了给出的验证集数据的准确性。

    加速学习率衰减。在训练Inception时,学习率呈指数衰减。因为我们的网络训练速度比Inception更快,所以我们将学习率衰减加快6倍。

    删除局部响应归一化。虽然Inception和其它网络Srivastava(2014)从中受益,但是我们发现对于使用批归一化的网络,它是不必要的。

    更彻底地搅乱训练样本。我们在训练数据上启用了分布内部搅乱,这样可以防止同一个例子总是出现在小批量数据中。这导致验证准确率提高了约1%,这与批归一化作为正则化项(3.4节)的观点是一致的:它每次被看到时都会影响一个不同的样本,在我们的方法中内在的随机化应该是最有益的。

    减少光照扭曲。由于批归一化网络训练速度更快,而且每个训练示例的观察次数更少,所以我们让训练者更专注于“真实”图像,减少他们的失真。

    4.2.2 Single-Network Classification

    我们评估了下面的网络,所有的网络都在LSVRC2012训练数据上训练,并在验证数据上测试:

    Inception:在4.2小节开头描述的网络,以0.0015的初始学习率进行训练。

    BN-Baseline:每个非线性之前加上批归一化,其它的与Inception一样。

    BN-x5:带有批归一化的Inception,修改在4.2.1小节中。初始学习率增加5倍到了0.0075。原始Inception增加同样的学习率会使模型参数达到机器无限大。

    BN-x30:类似于BN-x5,但初始学习率为0.045(Inception学习率的30倍)。

    BN-x5-Sigmoid:类似于BN-x5,但使用sigmoud非线性g(t)=11+exp(x)g(t)=frac{1}{1+exp (-x)}来代替ReLU。我们也尝试训练带有sigmoid的原始Inception,但该模型仍保持着与概率相当的准确性。

    在图2中,我们显示了网络的验证集准确率,作为训练步骤次数的函数。Inception网络在31⋅10^6次训练步骤后达到了72.2%的准确率。图3显示,对于每个网络,达到同样的72.2%准确率需要的训练步骤数量,以及网络达到的最大验证集准确率和达到该准确率的训练步骤数量。

    通过仅仅使用批归一化(BN-Baseline),我们在不到Inception一半的训练步骤数量内将准确度与其相匹配。通过应用4.2.1小节中的修改,我们显著提高了网络的训练速度。BN-x5需要比Inception少14倍的步骤就达到了72.2%的准确率。有趣的是,进一步提高学习率(BN-x30)使得该模型最初训练有点慢,但可以使其达到更高的最终准确率。在6⋅10^6步骤之后,BN-x30达到74.8%的准确率,即比Inception达到72.2%的准确率所需的步骤减少了5倍。

    我们也证实了尽管训练这样的网络是众所周知的困难,但是当使用sigmoid作为非线性时,内部协变量转移的减少允许具有批归一化的深层网络被训练。的确,BN-x5-Sigmoid取得了69.8%的准确率达。没有批归一化,使用sigmoid的Inception从未达到比1/1000准确率更好的结果。

    4.2.3 Ensemble Classification

    目前在ImageNet大型视觉识别竞赛中报道的最佳结果是传统模型Wu(2015)的Deep Image组合和He(2015)的组合模型。后者报告了ILSVRC测试服务器评估的4.94%的top-5错误率。这里我们报告一个top-5验证集错误率4.9%,和top-5测试集错误率4.82%(根据ILSVRC测试服务器)。这提高了以前的最佳结果,并且根据Russakovsky(2014),这超过了人类评估者的评估准确率。

    对于我们的组合,我们使用了6个网络。每个都是基于BN-x30的,进行了以下一些修改:增加卷积层中的初始权重;使用Dropout(丢弃概率为5%或10%,而原始Inception为40%);模型最后的隐藏层使用非卷积每激活批归一化。每个网络在大约6⋅10^6个训练步骤之后达到了最大的准确率。组合预测是基于组成网络的预测类概率的算术平均。组合和多裁剪图像推断的细节与Szegedy(2014)类似。

    我们在图4中证实了,批归一化使我们能够在ImageNet分类挑战基准上以健康的幅度设置新的最佳结果。

    5 Conclusion

    我们提出了一个新奇的机制,大大加快了深度网络的训练。它是基于协变量转移的前提,已知其会使机器学习系统的训练复杂化,也适用于子网络和层,并且从网络的内部激活中去除它可能有助于训练。我们提出的方法从其归一化激活中获取其功能,并将这种归一化合并到网络架构本身。这确保了归一化可以被用来训练网络的任何优化方法进行恰当的处理。为了让深度网络训练中常用的随机优化方法可用,我们对每个小批量数据执行归一化,并通过归一化参数来反向传播梯度。批归一化每个激活只增加了两个额外的参数,这样做可以保持网络的表示能力。我们提出了一个算法,其用于构建,训练和执行推断批归一化网络。所得到的网络可以用饱和非线性进行训练,能更容忍增加的训练率,并且通常不需要Dropout来进行正则化。

    仅仅将批归一化添加到了当前最先进的图像分类模型中,便在训练中取得了实质的加速。通过进一步提高学习率,删除Dropout和应用批归一化所提供的其它修改,我们只用了少部分的训练步骤就达到了以前的技术水平——然后在单网络图像分类中击败了最先进的技术。此外,通过组合多个使用批归一化训练的模型,我们在ImageNet上的表现显著优于最好的已知系统。

    有趣的是,我们的方法与Gülçehre & Bengio(2013)的归一化层相似,尽管这两个方法解决的目标不同,执行的任务也不同。批归一化的目标是在整个训练过程中实现激活值的一个稳定的分布,在实验中,我们把它应用在非线性之前,因为匹配了一阶矩和二阶矩更可能实现一个稳定的分布。相反,G¨ulc¸ehre & Bengio(2013)应用归一化层到非线性的输出,这导致了更稀疏的激活。在大规模图像分类实验中,我们没有观察到非线性输入是稀疏的,无论是有批归一化还是没有批归一化。批归一化的其它显著差异包括学习到的缩放和转移,允许BN变换表示恒等,(归一化层不需要这样做,因为它后面是学习到的线性变换,从概念上来说,它吸收了必要的缩放和转移),卷积层处理以及不依赖于小批量数据的确定性推断,以及对网络中的每一个卷积层进行批归一化处理。

    在这项工作中,我们没有探索批归一化能够实现的全部可能性。我们的未来工作包括将我们的方法应用于循环神经网络Pascanu(2013),其中内部协变量转移和梯度消失或爆炸可能特别严重,这将使我们能够更彻底地检验这个假设,归一化提升梯度传播的表现(第3.3节)。我们计划调查批归一化是否有助于传统意义上的域自适应——即网络执行归一化是否能够更容易泛化到新的数据分布,也许仅仅是对总体均值和方差的重新计算(Alg.2)。最后,我们相信该算法的进一步研究理论分析将允许更多的改进和应用。

  • 相关阅读:
    LC.225. Implement Stack using Queues(using two queues)
    LC.232. Implement Queue using Stacks(use two stacks)
    sort numbers with two stacks(many duplicates)
    LC.154. Find Minimum in Rotated Sorted Array II
    LC.81. Search in Rotated Sorted Array II
    LC.35.Search Insert Position
    前后端分离:(一)
    Redis基本使用(一)
    GIT篇章(二)
    GIT篇章(一)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302855.html
Copyright © 2011-2022 走看看