https://arxiv.org/abs/1502.03167
具有以下的优点:
a)可以设置较大的初始学习率,并且减少对参数初始化的依赖,提高了训练速度;
b)这是个正则化模型,因此可以去除dropout和降低L2正则约束参数;
c)不需要局部响应归一化层;
d)能防止网络陷入饱和,即消除梯度弥散。
摘要
深层神经网络的训练是复杂的,因为在训练过程中,随着前一层的参数的变化,每一层的输入的分布也会发生变化。这需要较低的学习率和仔细的参数初始化,从而降低了训练的速度,并且使训练具有饱和非线性的模型变得非常困难。我们将这种现象称为内部协变量偏移,并通过对层输入进行归一化来解决这个问题。我们的方法将规范化作为模型架构的一部分,并为每个训练的mini-batch执行规范化,从而获得了它的优势。批处理规范化允许我们使用更高的学习层次,而对初始化不那么小心。它还可以作为一个正则化器,在某些情况下消除Dropout的需要。应用到一个最先进的图像分类模型,批处理归一化实现了相同的精度与14倍少的训练步骤,并击败了原始模型的一个显著的差距。使用批处理标准化网络集合,我们提高了ImageNet分类的最佳发布结果:达到4.9%的前5验证误差(4.8%测试误差),超过了人类评分器的准确性。
1 引言
深度学习极大地提高了视觉、语言和许多其他领域的技术水平。随机梯度下降(SGD)已被证明是一种训练深度网络的有效方法,SGD变体如momentum (Sutskever et al., 2013)和Adagrad (Duchi et al., 2011)已被用于达到最佳性能状态。SGD网络优化参数Θ,以减少损失
其中x1…xN为训练数据集,使用SGD,训练是分步骤进行的,每一步我们将一个mini-batch看作是x1…xm。用mini-batch近似的梯度损失函数的参数,通过计算
使用样本的mini-batch(而不是一次只使用一个样本)在许多方面都很有帮助。首先,mini-batch上的损失梯度是对训练集上的梯度的估计,其质量随着批量大小的增加而提高。其次,由于现代计算平台提供的并行性,批处理的计算比单个样本的m次计算效率高得多。
虽然随机梯度简单有效,但它需要仔细调整模型超参数,特别是优化中使用的学习率,以及模型参数的初始值。由于每一层的输入都受到前面所有层的参数的影响,所以随着网络的深入,网络参数的微小变化也会放大,这使得训练变得复杂起来。
层输入分布的变化带来了一个问题,因为层需要不断适应新的分布。当学习系统的输入分布发生变化时,就会出现协变量偏移(Shimodaira, 2000)。这通常通过域适应来处理(Jiang, 2008)。然而,协变量偏移的概念可以扩展到整个学习系统之外,应用到它的各个部分,如子网络或层。考虑网络计算
其中F1和F2是任意的转换,参数Θ1,Θ2被学习使ℓ损失降到最低。学习Θ2可以被查看,如果输入x = F1 (u,Θ1)被送入子网络。
例如,梯度下降一步
对于一个独立的网络F2输入x,(batch大小m和学习速率α)是完全等价的。因此,提高训练效率的输入分布特性也适用于子网络的训练。比如在训练和测试数据之间有相同的分布因此,随着时间的推移,x的分布保持不变是有利的。然后,Θ2不需要重新调整来补偿x分布的变化
子网输入的固定分布也会对子网外的层产生积极的影响。考虑具有sigmoid激活函数z = g(Wu + b)的层,其中u为层输入,权值矩阵W和偏差向量b为需要学习的层参数,
g
(
x
)
=
1
1
+
e
x
p
(
−
x
)
g(x)={1\over 1+exp(-x)}
g(x)=1+exp(−x)1。随着|x|的增加,g ’ (x)趋向于零。这意味着在x = Wu+b的所有维度中,除了绝对值较小的维度外,流向u的梯度会消失,模型的训练会变慢。但是,由于x受到W、b以及下面各层的参数的影响,在训练时改变这些参数很可能会使x的多个维度进入非线性的饱和状态,收敛速度变慢。随着网络深度的增加,这种效应被放大。在实践中,饱和问题和由此产生的消失梯度通常通过使用矫正的线性单位(Nair & Hinton, 2010) ReLU(x) = max(x,0),仔细的初始化(Bengio & Glorot, 2010;Saxe et al., 2013),和小学习率来改善。然而,如果我们能够确保非线性输入的分布在网络运行时保持更稳定,那么优化器就不太可能陷入饱和状态,训练就会加速。我们将深层网络在训练过程中内部节点分布的变化称为内部协变量偏移。取消它提供了更快的训练的承诺。我们提出了一种新的机制,我们称之为Batch Normalization,它朝着减少内部协变量偏移的方向迈出了一步,并在这样做的同时显著加速了深度神经网络的训练。它通过修正层输入的方法和方差的标准化步骤来实现这一点。Batch Normalization 对通过网络的梯度流也有有益的影响,减少了梯度对参数尺度或其初始值的依赖。这允许我们使用更高的学习率,而没有出现分歧的风险。此外,批量标准化使模型规范化,减少了Dropout的需要(Srivastava et al., 2014)。最后,通过防止网络陷入饱和模式,批量归一化使得使用饱和非线性成为可能。
在4.2节中,我们对性能最好的ImageNet分类网络进行了Batch Normalization,结果表明我们仅用7%的训练步骤就可以匹配它的性能,并且可以进一步大大超出它的精度。使用经过Batch Normalization训练的这类网络集合,我们获得了排名前5的错误率,这比ImageNet分类中最著名的结果有所改进。
我们将内部协变偏移定义为训练过程中由于网络参数的变化而引起的网络激活分布的变化。为了改进训练,我们试图减少内部协变量的偏移。通过在训练过程中固定层输入x的分布,我们期望能提高训练速度。它早已为人所知(LeCun et al., 1998b;(Wiesler & Ney, 2011)认为,如果输入是白的,网络训练的收敛速度会更快-即,线性变换为均值和单位方差为零,且无相关。由于每一层观察下面各层产生的输入,实现每一层输入的相同白化将是有利的。通过对每一层的输入进行白化,我们将朝着实现固定的输入分布迈出一步,从而消除内部协变量移位的不良影响。
我们可以通过直接修改网络或改变优化算法的参数,使其依赖于网络激活值,在每个训练步骤或某一间隔考虑白化激活(Wiesler et al., 2014;Raiko等人,2012;Povey等人,2014年;德斯贾丁斯& Kavukcuoglu)。但是,如果这些修改与优化步骤交织在一起,那么梯度下降步骤可能会尝试以一种需要更新归一化的方式更新参数,这会降低梯度步骤的效果。例如,考虑一个输入u加上学习偏差b的层,并通过减去在训练数据上计算的激活的平均值来规范化结果:
x
′
=
x
−
E
∣
x
∣
x'=x-E|x|
x′=x−E∣x∣。其中x = u + b, χ = {x1…N}是训练集上x的值的集合,
E
[
x
]
=
1
N
Σ
i
=
1
N
x
i
E[x] ={1\over N}Σ^N_{i=1}x_i
E[x]=N1Σi=1Nxi。如果梯度下降法一步忽略了 E (x)对b的依赖,那么它将更新b←b +∆b, 其中∆b∝−∂ℓ/∂x^。然后u + (b +∆b)−E (u + (b +∆b)) = u + b−E (u + b)。因此,对b的更新和随后的归一化更改的组合不会导致层的输出发生变化,因此也不会导致损失。随着训练的继续,b将无限增长,而损失是固定的。如果规范化不仅集中而且扩展激活,这个问题会变得更糟。我们在最初的实验中观察到这一点,当归一化参数在梯度下降步骤之外计算时,模型就会爆炸。
上述方法的问题是,梯度下降优化没有考虑到规范化的事实。为了解决这个问题,我们希望确保对于任何参数值,网络总是生成具有所需分布的激活。这样做会让失去的梯度对模型参数占正常化,Θ和依赖的模型参数。设x是一个层输入,作为一个向量,χ是这些输入在训练数据集上的集合,这个归一化可以写成一个转换
这不仅取决于给定的训练样本,而是取决于所有样本χ -每个取决于Θ如果x是由另一个层。对于反向传播,我们需要计算雅可比矩阵
忽视后一项将导致上述爆炸。在这个框架内,白化输入是昂贵的,因为它需要计算协方差矩阵
C
o
v
[
x
]
=
E
x
∈
x
[
x
x
T
]
−
E
[
x
]
E
[
x
]
T
Cov[x] = E_{x∈x} [xx^T]−E[x] E[x]^T
Cov[x]=Ex∈x[xxT]−E[x]E[x]T及其平方根的倒数,以产生白化激活
C
o
v
[
x
]
−
1
/
2
(
x
−
E
[
x
]
)
Cov[x]^{−1/2}(x - E[x])
Cov[x]−1/2(x−E[x]),以及这些转换的导数为反向传播。这促使我们寻找一种替代方法,以可微的方式执行输入归一化,并且不需要在每次参数更新后分析整个训练集。
以前的一些方法(例如(Lyu & Simoncelli, 2008))使用对单个训练样本计算的统计数据,或者,对于图像网络,使用给定位置的不同特征地图。然而,这通过丢弃激活的绝对尺度改变了网络的表示能力。我们希望在网络中保存信息,通过相对于整个训练数据的统计数据对训练示例中的激活进行规范化。
3 通过mini-batch统计正则化
由于每一层输入的全部白化是昂贵的,并且不是处处可微的,所以我们做了两个必要的简化。首先,我们将每个标量特征分别归一化,使其均值为0,方差为1,而不是联合对层输入和输出的特征进行白化。对于d维输入x = (x(1)…x(d))的层,我们将对每个维度进行规格化
如(LeCun et al., 1998b)所示,即使在特征不去相关的情况下,这种归一化也会加快收敛速度。
注意,简单地规范化一个层的每个输入可能会改变该层可以表示的内容。例如,对一个s型函数的输入进行归一化会将它们限制在非线性的线性范围内。为了解决这个问题,我们确保插入到网络中的变换可以表示恒等变换。为了实现这一点,我们为每个激活x(k)引入一对参数γ(k),β(k),分别缩放和平移
这些参数与原始模型参数一起学习,恢复网络的表示能力。实际上,通过设置
γ
(
k
)
=
V
a
r
[
x
(
k
)
]
γ(k)=\sqrt {Var[x(k)]}
γ(k)=Var[x(k)]和β(k) = E[x(k)],我们可以恢复原始激活,如果这是最理想的做法的话。
在批处理设置中,每个训练步骤都基于整个训练集,我们将使用整个训练集来规范化激活。然而,当使用随机优化时,这是不切实际的。因此,我们进行了第二次简化:由于我们在随机梯度训练中使用了小批量,每个小批量都会产生每个激活的均值和方差的估计值。这样,用于归一化的统计量可以充分参与到梯度反向传播中。注意,使用小批量是通过计算每维方差而不是联合协方差来实现的;在联合的情况下,将需要正则化,因为微型批处理的大小可能小于被白化的激活的数量,从而导致奇异协方差矩阵。
考虑一个大小为m的小批量B。由于规范化应用于每个独立的激活,让我们关注一个特定的激活x(k),为了清楚起见,省略k。我们有m个小批次的激活值
令归一化值为x^1…m,它们的线性变换是y1…m。我们指的是变换
作为批处理标准化转换。我们提出了BN变换算法。在算法中,ε是一个常数添加到mini-batch方差的数值稳定性。
BN转换可以添加到网络中来操作任何激活。在式子
y
=
B
N
γ
,
β
(
x
)
y = BN_{γ,β} (x)
y=BNγ,β(x)中,我们指出要学习的参数是参数γ,β,但是需要注意的是BN转换在每个训练样本中并没有独立处理激活。相反,
B
N
γ
,
β
(
x
)
BN_{γ,β} (x)
BNγ,β(x)依赖于训练样本和mini-batch中的其他样本。缩放和移动后的值y被传递到其他网络层。规范化的激活x^是我们转变的内部变量,但它们的存在是至关重要的。x^值的分布的期望为0和方差为1,只要每个mini-batch元素从相同的分布抽样,如果我们忽视ε。通过观察
Σ
i
=
1
m
x
i
′
=
0
Σ^m_{i=1}x_i' = 0
Σi=1mxi′=0和
1
m
Σ
i
=
1
m
x
i
′
2
=
1
{1\over m}Σ^m_{i=1}x_i'^2 = 1
m1Σi=1mxi′2=1,并取期望可以看出这一点。每个归一化的激活x^(k)都可以看作是一个子网络的输入,这个子网络由线性变换
y
(
k
)
=
γ
(
k
)
x
′
(
k
)
+
β
(
k
)
y(k) = γ(k)x'(k)+ β(k)
y(k)=γ(k)x′(k)+β(k)组成,然后由原始网络进行其他处理。这些子网络输入都有固定的平均值和方差,尽管这些正态化的x’(k)的联合分布在训练过程中会发生变化,我们期望标准化输入的引入能加速子网络的训练,从而加速整个网络的训练。
训练期间我们需要通过这个变换的梯度反向传播ℓ损失,以及计算梯度对BN的参数变换。我们使用链式法则,如下(化简前):
因此,BN转换是一个可微的转换,它将标准化激活引入到网络中。这就确保了模型训练时,各层可以继续学习投入分配,从而显示出内部变化的变化,从而加速培训。此外,应用于这些标准化激活的学习仿射变换允许BN变换表示恒等变换并保持网络容量。
3.1批量归一化网络的训练和推理
为了批处理规范化网络,我们指定激活的子集,并根据Alg. 1为每个激活插入BN转换。以前接收x作为输入的任何层现在接收BN(x)。采用批处理归一化的模型可以使用批处理梯度下降或随机梯度下降对一个小批大小m > 1,或者它的任何变种,如Adagrad(Duchi等,2011)。依赖于小批处理的激活的规范化允许有效的训练,但在推理过程中既不是必要的,也不是可取的;我们想要确定地让输出只依赖于输入。为此,一旦网络训练完成,我们就使用归一化
使用总体而不是小批统计数据。忽视ε,这些规范化的激活有相同的均值0和方差1在训练。我们使用无偏方差估计
V
a
r
[
x
]
=
m
m
−
1
⋅
E
B
[
σ
B
2
]
Var[x] = {m\over m−1}·E_B[σ^2_B]
Var[x]=m−1m⋅EB[σB2],这里的期望是过度训练的小批量大小m,而σ2B是他们的样本方差。使用移动平均值,我们可以在模型运行时跟踪它的准确性。由于在推理期间平均值和方差是固定的,因此规范化只是应用于每个激活的线性变换。它还可以进一步与y的伸缩和β的平移组合,从而产生一个替换BN(x)的线性变换。算法2总结了训练批处理归一化网络的过程
3.2批处理归一化卷积网络
批处理规范化可应用于网络中的任何一组激活。这里,我们关注由仿射变换和元素上的非线性组成的转换:
其中W和b为模型的学习参数,g(·)为sigmoid或ReLU等非线性。这个公式涵盖了全连接层和卷积层。通过对x = Wu+b进行归一化,我们在非线性之前加上BN变换。我们也可以标准化层输入u,但由于u可能是另一个非线性的输出,它的分布形状可能会改变训练,约束它的第一和第二矩不会消除协变量漂移。相比之下,Wu + b更有可能是对称的、非稀疏的分布,即“更加高斯化”(Hyva¨rinen & Oja, 2000);正则它可能产生具有稳定分布的激活。
注意,由于我们正则Wu+b, 偏差b可以被忽略,因为它的影响将被随后的均值减法所抵消(bias的作用将被纳入到 Alg. 1的β中),因此z = g(Wu +b)被替换为
在这里BN变换被独立地应用到x = Wu的每个维度上,每个维度有一个单独的一对学习参数γ(k),β(k)
对于卷积层,我们还希望规范化遵循卷积属性——以便同一特征图中不同位置的不同元素以相同的方式规范化。为了实现这一点,我们在一个小批量中共同标准化了所有位置上的所有激活。Alg1中,我们让B中所有值的集合特征映射在mini-batch和空间位置的元素,所以mini-batch的尺寸大小的地图p×m和特性,我们使用的有效mini-batch尺寸m ’ = |B| = m·pq。我们学习了每个特性映射(而不是每个激活)的两个参数:对Alg. 2进行类似的修改,以便在推理过程中BN变换对给定feature map中的每个激活应用相同的线性变换
3.3 批处理归一化可以提高学习率
在传统的深度网络中,过高的学习率可能导致梯度爆炸或消失,并陷入较差的局部极小值。批处理规范化有助于解决这些问题。通过对整个网络的激活进行标准化,它可以防止参数的小变化在梯度中放大为更大的、次优的激活变化;例如,它可以防止训练陷入非线性的饱和状态。
批处理归一化也使训练对参数尺度更有弹性。通常情况下,学习率过大会增大层参数的尺度,从而放大了反向传播时的梯度,导致模型爆炸。然而,通过批处理规范化,通过层的反向传播不受其参数的大小的影响。事实上,对于标量a,
我们有
尺度不影响层的雅可比矩阵,因此,梯度的传播。权值越大,梯度越小,批量归一化可以稳定参数的增长。
我们进一步推测批处理归一化可能导致层雅可比矩阵的奇异值接近1,已知这有利于训练(Saxe et al., 2013)。考虑与规范化输入两个连续层,这些归一化向量之间的转换:bz = F b (x)。如果我们假设thatb x andb z是高斯和不相关的,和F b (x)≈Jb x是一个线性变换为给定的模型参数,然后bothb x andb z单位协方差,I = x[热]= JCov x [b] JT = JJT。因此,JJT = I, J的所有奇异值都等于1,这样可以保持反向传播时的梯度大小。实际上,这种变换不是线性的,而且规格化后的值也不能保证是高斯的,也不能保证是独立的,但我们仍然希望批量规格化能帮助使梯度传播表现得更好。批量归一化对梯度传播的精确影响还有待进一步研究。
3.4 批量归一化使模型规范化
当使用批处理归一化进行训练时,在迷你批处理中,一个训练例子与其他例子一起出现,训练网络不再为一个给定的训练例子产生确定性的值。在我们的实验中,我们发现这种效应有利于网络的推广。虽然Dropout (Srivastava et al., 2014)通常用于减少过拟合,但我们发现,在批处理normalizednetwork中,它可以被删除或减弱强度。