译文 | 批量归一化:通过减少内部协变量转移加速深度网络训练

作者:Sergey Ioffe   Christian Szegedy

翻译:七月在线DL翻译组

译者:陈媛媛 管枫 任远航

责编:翟惠良 July

声明:本译文仅供学习交流,有任何翻译不当之处,敬请留言指正。转载请注明出处。

原文:https://arxiv.org/pdf/1502.03167v3.pdf


——前言: 我们将训练过程中深度网络内部节点分布的变化作为内部协变量转移,消除它可以提供一个更快的训练,对此我们提出了一个新的机制——批量归一化,它将减少内部协变量转移,这样做可以大大地加快深度神经网络的训练。


绪论

    在深度神经网络的训练过程中,先前层参数的调整会导致之后每一层输入值的分布发生变化,这种现象使模型的训练变得很复杂。所以在深度神经网络模型的训练中,通常需要仔细选取初始参数并采取较小的学习率,这不但导致模型训练的效率低下,而且使得饱和非线性模型的训练极为困难。我们把这种现象称为内部协变量转移(covariate shift),并通过归一化(normalizing)每层的输入来解决这个问题。我们方法的强大之处在于把归一化的步骤作为模型训练架构的一部分来实现, 并且对每个训练小批量都执行归一化操作。批量归一化允许我们使用很高的学习率并且对初始化不太在意。它在一定情况下也可以起到正则化的作用,并减轻了对Dropout的需求。我们在最先进的图像分类模型中使用批量归一化法,在减少了14倍训练步骤的情况下实现了与原模型相同的精度,并以显著增量击败了原始模型。我们使用批量归一化的网络模型,增强了在ImageNet分类上发布的最佳结果:获得了4.9%前5验证误差(和4.8%测试误差),这超出了人类评估者的准确率。


1 简介

    深度学习极大地提升了视觉,语言和许多其他领域。随机梯度下降(SGD)已经被证明是训练神经网络的一个有效的方法,并且随机梯度下降变种方法如动量和Adagrad已经被用来获得最先进的性能。 


    使用小批量的样本,而不是一次一个样本,在几个方面是有帮助的。首先,小批量上的损失梯度是训练集上梯度的一个估计,其质量随着批量大小的增加而提高。第二,由于现代计算平台提供的并行性,对一个批量的计算比每个样本m次计算更有效。


    虽然随机梯度是简单有效的,但是它需要仔细调整模型超参数,特别是使用在优化中的学习率以及模型参数的初始值。由于每层的输入受所有先前层的参数影响的事实,使训练复杂化,以致于网络参数的小变化随着网络变得更深而放大。


    由于层需要不断地适应新的分布,层输入的分布的变化提出了一个问题。当一个学习系统的输入分布改变时,也就认为经历了协变量移位,这个通常通过领域适应(domainadaptation)来处理。但是,协变量移位的概念可以作为一个整体延伸超出学习系统,适用于他自身的部分,比如子网络或者一个层。设想一个计算如下公式的网络: 


例如,一个梯度下降步骤: 


    因此,输入分布的属性使得训练更有效——比如在训练和测试数据之间有相同的分布——也适用于子网络的训练。因此有利于X的分布随时间保持不变。

固定一个子网络输入的分布将对子网络外的层产生积极的影响。用一个sigmoid激活函数z=g(Wu+b)考虑一个层,其中u是层输入,权重矩阵U和阈值是学习的层参数,因为X是受W,b和下面所有层参数的影响,在训练期间对这些参数的改变将可能将X的许多维度移动到非线性的饱和状态并且收敛减慢。这种效果是随着网络的深度的增加而放大的。在实际应用中,饱和问题(saturationproblem)和导致的消失梯度通常通过使用Rectified Linear Units(ReLU)来解决。ReLU(x)=max(x,0),仔细的初始化和小的学习率。然而,如果我们可以确保非线性输入的分布在网络训练时保持更加稳定,那么优化将不太可能在饱和状态中停滞,并且训练将加速。


    我们将训练过程中深度网络内部节点分布的变化作为内部协变量转移,消除它可以提供一个更快的训练,对此我们提出了一个新的机制——批量归一化,它将减少内部协变量转移,这样做可以大大地加快深度神经网络的训练。它通过一个归一化步骤——固定层输入的平均值和方差不变来实现。通过减少梯度对参数规模或其初始值的依赖性,批量归一化还对网络的梯度流动具有有效的效果,这就允许我们在没有发散的风险下使用更高的学习率。此外,批量归一化正则化模型可以减少对Dropout的需求。最后,通过防止网络陷入饱和模式使得批量归一化可以使用饱和非线性。


    在实验过程中,我们将批量归一化运用到性能最佳的ImageNet分类网络,结果表明我们可以只使用7%的训练步骤去匹配其性能,并且可以进一步大幅度的超过其精确度。使用用批量归一化训练的这种网络集合,我们可以获得前5的误差率,它增强了在ImageNet上已知的最佳结果。


2 减少内部协变量转移

    我们把在训练期间由于网络参数的变化而造成的网络激活函数输出值分布的变化定义为内部协变量转移。为了增强训练,我们要寻求减少内部协变量转移。我们期待通过在训练过程中保持层输入X的分布来提高训练速度。众所周知如果层输入被白化(whitened),也就是说把层输入线性变换为零均值和单位方差并且去相关,则网络训练就会收敛得更快。由于每层的输入是由下面层产生的输出,因此对每层输入进行相同程度的白化将是有利的。通过白化每层输入,我们就可以向实现输入的固定分布,并向消除内部协变量转移的不良影响的目标前进一步。


    我们可以考虑对每个训练步骤或者以一定间隔的激活函数进行白化,也可以通过直接修改网络或者根据网络激活值改变优化算法的参数。但是,如果仅仅将这些修改与优化步骤直接穿插摆放,则梯度下降的步骤对参数的调整可能会改变激活输出的分布并导致重新归一化,而这有可能会使得梯度下降的效果减弱。


    我们在初始试验中观察到,当归一化参数在梯度下降步骤外计算时模型就会因为参数发散而不收敛。


    上述方法的问题是梯度下降优化没有考虑归一化发生的事实。为了解决这个问题,我们要确保对于任何参数值网络都会产生具有期望分布的激活。

可以将归一化写成一个转换:  


    这不仅取决于给定的训练样本,而取决于所有样本x,后面,计算雅克比: 


    忽略后一项导致上述参数发散。在这个框架内,白化层输入代价非常大。

我们需要寻找一种归一化的替代方案,它需要光滑可微,并且不需要在每个参数更新之后对整个训练集进行计算。


    一些以前的方法使用在单个训练样本上计算的统计量,或者在图像网络情况下,在一个给定位置上的不同特征。但是,丢弃激活的绝对标量会改变网络的表示能力。相对于整个训练数据的统计,我们想要通过在一个训练样本里归一化激活来保存网络中的信息。


3 通过小批量统计归一化

    由于每层的输入完全白化代价太大,并且不是处处可微,所以我们做两个必要简化。第一个在白化层的输入的特征向量和输出向量时,我们将归一化每个维度 :


    其中期望值和方差是在训练数据集上计算的。

    但是值得注意的是,简单的归一化层的每一个输入有可能会改变层表达的内容。比如,归一化sigmoid的输入会使得这些非线性函数局限在他们的线性部分上(译者注:这样非线性函数就失去了意义)。为了解决上述问题,我们要确保插入在网络中的(归一化)变换在特定的情况下也可以是单位变换。


    在批量训练模式中(使用全部训练集),训练步骤中的每个步骤都是基于整个训练集,我们可以使用整个集合去归一化激活。但这在随机优化(使用小批量)中是做不到的。因此,我们做第二个简化:由于我们在随机梯度训练中使用小批量,用每个小批量来估计每个激活分布的均值和方差。在这种情况下,用于归一化的统计量可以完全参与梯度反向传播。这里再次注意:使用小批量,只能计算每个维度的方差而不是联合协方差;因为在联合情况中,由于小批量的大小可能小于被白化的激活的数量,导致奇异协方差矩阵的产生,所以可能需要正则化。


    构想一个大小为m的小批量B。归一化被独立的运用到每个激活函数,有下面的算法:


    BN变换可以被添加到网络中任何一个激活上。如上面的算法1:BN变换,应用于小批量上的激活x。


    在训练过程中我们需要计算反向传播损失的梯度,这一过程中也同时计算了BN变换的相关的参数的梯度。我们使用的链式法则如下所示(在简化之前): 


    因此BN变换是将归一化激活引入网络的可微分转换。这确保了当模型在训练时,层可以持续在内部协变量转移较少的输入状态下进行学习,从而加速训练。


3.1训练和拟合批量归一化网络

    对网络进行批量归一化时,我们先确定一个激活函数的子集,然后根据算法1为子集中的每一个激活插入BN变换。任何层由先前的接收x作为输入到现在的接收BN(x)作为输入。在加入了批量归一化的网络上,可以使用批量梯度下降,或小批量m>1的随机梯度下降,或者它的任何一个随机梯度下降法的变体比如Adagrad来做优化。


    在模型训练阶段,依赖小批量的激活的归一化可以有效地加速训练,但是在拟合阶段就没有必要依赖小批量。我们希望在拟合时,输入能够完全确定地决定输出。为此,一旦训练结束,拟合时我们要使用全部样本来计算归一化的统计量: 


    而不是使用小批量。使用这些统计量的移动平均,我们可以追踪模型训练的精确性。而拟合时,均值和方差都是固定不变的(因为使用了全部样本),归一化仅仅是应用于每个激活的线性变换。

如此,算法2总结了训练批量归一化网络的过程。 


算法2:训练一个批量归一化网络


3.2 批量归一化卷积网络

    批量归一化可以应用于网络中激活的任何集合。在这里,我们考虑由一个仿射变换与一个一元非线性函数组成的激活函数: 


    其中W和b是模型的学习参数,这个公式涵盖全连接层和卷积层。我们在非线性函数作用之前对X=Wu+b进行BN归一化变换。我们之所以不直接归一化层输入u,是因为u一般是另一个非线性层的输出,其分布的形状可能在训练期间改变,只约束其第一和第二矩将不会消除协变量转移。相反的,Wu+b更可能具有对称,非稀疏分布,即“更高斯”;归一化它可能产生具有稳定分布的激活。


3.3批量归一化令使用高学习率成为可能

    在传统深度网络中,过高的学习率可能会导致梯度发散或者消失为零,以及使得损失函数陷入不好的局部最小值。批量归一化对解决这个问题有所帮助。通过归一化整个网络中的激活,可以防止参数的微小变化通过深层网络扩大为梯度的次优变化:比如它阻止了训练陷入非线性的饱和状态。


    批量归一化还使模型训练对参数值的大小变化有更强的容忍度。通常,大的学习率可能增加层参数的绝对数值,然后在反向传播期间放大梯度并导致模型发散。但是,在批量归一化下,一个层的反向传播是不受它的参数绝对大小影响。事实上,对于一个标量a

    

    参数的绝对大小不影响层的雅可比矩阵,也不影响梯度传播。此外,较大的权重导致较小的梯度,并且批量归一化将使参数稳定增长。


3.4 批量归一化可以正则化模型

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


4 实验

4.1 随时间的激活

    验证内部协变量转移对训练的影响,以及批量归一化消除内部协变量转移的能力,我们考虑了在MNIST数据集上预测数字类别的问题。我们使用一个非常简单的网络,用一个28*28二进制图像作为输入,3个全连接隐藏层,每层100个激活神经元,每个隐藏层用sigmoid非线性计算y=g(Wu+b),权重W被初始化为小的随机高斯值。最后一个隐藏层后面是一个有10个激活的完全连接层(一个表表一个类)和交叉熵损失,我们设置训练网络为50000步,每个小批量有60个样本。我们向网络的每个隐藏层添加了批量归一化,如3.1节所示。我们对基线和批量归一化的网络之间的对比感兴趣,而不是在MNIST上实现的最先进的性能。 


图1:(a)MNIST分别在有BN和没有BN训练的网络上的测试准确性,对比在不同数量的训练步骤。批量归一化网络帮助网络训练更快并且获得更高的准确性。(b,c)在训练过程中,一个典型的sigmoid输入分布的演变,显示为{15%,50%,85%}。批量归一化使得分布更加稳定并且减少了内部协变量转移。


    图1(a)显示的是随着训练的进展,两个网络对互斥测试数据的正确预测的分数。批量归一化的网络测试准确性比较高。为了研究为什么,在训练过程中,我们在原始网络N和批量归一化网络C中研究了S形的输入(算法2)。在图1中,我们显示,对于来自每个网络的最后一个隐藏层的一个典型激活,其分布如何演变。原始网络中的分布随时间在它们的平均值和方差中改变显著,这使的后续层的训练变得复杂。相比之下,批处理归一化网络中的分布随着训练进展而更加稳定,这是有助于训练的。


4.2 ImageNet 分类

    我们将批量标准化应用于Inception网络的一个新变体,在ImageNet分类任务上进行了训练。这个网络有大量的卷积和池化层,一个预测图像类别超出1000个可能性的softmax层。卷积层使用ReLU作为非线性。

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


4.2.1 加速BN网络

    简单地将Batch Normalization添加到网络并不能充分利用我们的方法。为此,我们进一步改变了网络及其训练参数,如下:

  • 增大学习率。在一个批量归一化模型,我们已经能够在较高的学习率下实现训练加速,而且没有不良的副作用。

  • 去除Dropout。如3.4节所描述,批量归一化满足与Dropout相同的目标。从修改的BN-Inception中去除Dropout可加快训练,而切不会增加过拟合。

  • 加速学习速率衰减。在训练Inception,学习率以指数方式衰减。因为我们的网络训练比Inception快,所以我们将学习速度降低了6倍。

  • 去除本地响应归一化,当Inception和其他网络从中受益时,我们发现使用批量归一化没有必要。

  • 更彻底地改组训练样本。我们启用了训练数据的内部改组,这防止了相同的样本总是出现在一个小批量中。 


图2:Inception的单一作物验证的准确性及它的批量归一化变体,对比,训练步骤的数量。

4.2.2 单个网络分类

    我们评估了以下网络,所有这些网络都训练了LSVRC2012训练数据,并对验证数据进行了测试:

  • Inception:在第4.2节开头描述的网络,训练初始学习率为0.0015。

  • BN-Baseline: Inception与每个非线性之前的批量归一化相同。

  • BN-x5:在4.2.1节批量归一化的Inception和修改,初始学习率被提高了5倍到0.0075。与原始Inception相同的学习速率增加导致模型参数达到机器无限。

  • BN-x30: 像BN-x5,但初始学习率为0.045(是Inception的30倍)。

  • BN-x5-Sigmoid: 像BN-x5,但是用sigmoid代替ReLU。我们也尝试用sigmoid去训练原始Inception,但该模型保持在相当于机会的准确性。

    事实上,BN-x5-Sigmoid获得了69.8%的准确率。没有批量归一化,具有sigmoid的Inception从未达到比1/1000更高的精度。 

图3:对于Inception和批量归一化变体,达到Inception(72.2%)的最大准确率和网络达到的最大准确率需要的训练步骤的数量。


4.2.3集合分类

    由ILSVRC 服务器评估后者显示前5误差率为4.94%。在这,我们报告一个前5验证误差率为4.9%和测试误差率为4.82%(通过ILSVR服务器)。这改善了先前的最佳结果,并且超过根据的人类评估者的估计准确度根据。


    对于我们的集合,我们使用6个网络。每个都基于BN-x30,通过以下一些修改:增加卷积层中的初始权重,使用Dropout(对原始Inception,Dropout为5%或者10%,对比40%);和使用非卷积,每次激活使用模型的最后一个隐藏层进行批量归一化。


    我们在图4中证明,批量归一化允许我们在ImageNet分类挑战基准上设置新的最先进的健康边缘。

5 总结

    我们提出了一个新的机制用来以显着的加速深度网络的训练。协变量转移会使机器学习系统的训练复杂化,我们的方法基于两个前提,

1. 协变量转移关于整个系统的结论,也适用于子网络和层;

2. 从网络的内部激活中去除协变量转移可以辅助训练。 


    我们提出的方法强大之处在于归一化激活,并且将这种归一化结合在网络架构本身中。这确保了归一化可以与任何训练网络的优化方法合理融合。为了实现在深度网络训练中常用的随机优化方法,我们对每个小批量执行归一化,并且通过归一化参数反向传播梯度。批量归一化在每个激活只增加了两个额外参数,而这两个参数是为了保存网络的表述能力。我们提出了一个用于构建,训练和执行推理与批量归一化网络的算法。生成的网络可以用饱和非线性训练,可以容忍更大的学习率,并且可以减少或者减弱对Dropout正则化的使用。


    仅仅将批量归一化添加到最先进图像分类模型中,就在训练中产生了实质的加速。通过进一步提高学习率,去除Dropout,并运用由批量规一化提供的其他修改,我们只用相对很少的训练步骤就达到了以前的最好结果——并且在单个网络图像分类上得到了更好的结果。此外,通过组合使用批量归一化训练的多个模型,我们在ImageNet上执行得比已知最好的系统好得多。


    批量归一化的目标是在整个训练中实现激活值的一个稳定分布。在我们的实验中,我们在激活函数的非线性部分之前归一化一阶矩和二阶矩,这样做更容易导致稳定的激活函数值分布。在我们的大规模图像分类实验中,不管是否进行归一化,我们都没有观察到稀疏的非线性输入。批量归一化的其他显着区别特征包括,BN使用两个学习参数来保持网络的表达能力(标准化层不需要这样做,因为紧随其后就是被训练的线性变换,而这个线性变换可以提供必要的缩放与偏移)。除此之外BN的特性还包括其对卷积层的处理;其不依赖于小批量的确定性推理;以及其批量归一化网络中的每个卷积层。


    在这项工作中,我们还没有探讨批量归一化潜在可能实现的全部可能性。我们未来的工作包括我们的方法到循环神经网络的应用, 其中内部协变量转移和梯度的消失或发散可能特别严重,并且这将允许我们更彻底地测试归一化改善梯度传播的假设。我们也计划研究一下,批量规一化是否可以帮助在传统意义上的域适应—比如,对群体均值和方差的重新计算(算法2)的归一化网络是否更容易适应新的数据分布。最后,我们相信对算法的进一步理论分析将允许更多的改进和应用。

完。


后记

关于我们

七月在线DL翻译组是由一群热爱翻译、热爱DL、英语六级以上的研究生或博士组成,有七月在线的学员,也有非学员。本翻译组翻译的所有全部论文仅供学习交流,宗旨是:汇集顶级内容 帮助全球更多人。目前已经翻译数十篇顶级DL论文,详见:https://ask.julyedu.com/question/7612


加入我们

如果你过了英语六级、是研究生或博士、且熟练DL、热爱翻译,欢迎加入我们翻译组,微博私信@研究者July


深度学习在线课程
为了帮助大家更好的入门、实战深度学习,七月在线有开设深度学习的在线课程,提供GPU实战,欢迎登录七月在线官网查看。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页