摘要
训练深度神经网络很复杂,因为每个层的输入分布在训练期间会发生变化,这是由于前一层的参数会发生变化。这通过要求较低的学习速率和详细的参数初始化方式来克服,但是这回减慢模型训练速度,并且使得训练具有饱和非线性的模型变得非常困难。我们将这种现象称为内部协变量偏移(internal covariate shif),该问题通过使用归一化层输入来解决。我们方法的优势在于使归一化成为模型体系结构的一部分,并对每个训练的最小批量数据执行归一化。Batch Normalization允许我们使用更高的学习速率并且不太关心初始化。它还可以充当正则化器,在某些情况下可以消除对Dropout的需求。应用于最先进的图像分类模型,Batch Normalization再训练步骤减少了14倍的前提下,实现了与原模型相同的精度,并且大大超过了原始模型。使用一组batchnormalized网络,我们改进了ImageNet分类的最佳发布结果:达到4.9%的前5个验证错误(和4.8%的测试错误),超出了人类评估者的准确性。
1.介绍
深度学习极大地提升了视觉,语音和许多其他领域的技术水平。随机梯度下降(SGD)已被证明是训练深度网络的有效方法,并且诸如引入动量的新变种(Sutskever等,2013)和Adagrad(Duchi等,2011)已被用于提高模型训练性能。 SGD用于优化网络的参数
Θ
Θ
Θ,以便最小化损失:
Θ
=
a
r
g
m
i
n
Θ
1
N
∑
i
=
1
N
ℓ
(
x
i
,
Θ
)
Θ = arg minΘ\frac{1}{N}\sum ^N_{i=1}ℓ(x_i, Θ)
Θ=argminΘN1i=1∑Nℓ(xi,Θ)
其中,
x
1...
N
x_{1...N}
x1...N是训练数据集。通过SGD,训练逐步进行,并且在每个步骤中我们考虑大小为
m
m
m的小批量数据
x
1...
m
x_{1 ... m}
x1...m。小批量数据用于通过计算来近似关于参数的损失函数的梯度:
1
m
∂
ℓ
(
x
i
,
Θ
)
∂
Θ
.
\frac{1}{m} \frac{∂ℓ(x_i, Θ)}{∂Θ}.
m1∂Θ∂ℓ(xi,Θ).
使用小批量的示例,而不是一次一个示例,在几个方面是有帮助的。首先,小批量损失的梯度是对训练集的梯度的估计,其效果随批量增加而改善。其次,由于现代计算平台提供的并行性,批量计算可以比单个示例的m次计算更有效快速。
虽然随机梯度简单有效,但需要仔细调整模型超参数,特别是优化中使用的学习率,以及模型参数的初始值。由于每层的输入都受到所有前面层的参数的影响,因此训练变得复杂, 从而随着网络变得更深,网络参数的微小变化会被放大。
由于层需要不断适应新的分布,因此层的输入分布的变化产生了一个问题。当学习系统的输入分布发生变化时,可以说是经历了协变量变换(Shimodaira,2000)。这可以通常通过域适应(domain adaptation)来解决(Jiang,2008)。然而,协变量偏移的概念能够在学习系统整体上扩展,从而影响到其它部分,例如子网络或层。考虑网络计算:
ℓ
=
F
2
(
F
1
(
u
,
Θ
1
)
,
Θ
2
)
ℓ = F_2(F_1(u, Θ_1), Θ_2)
ℓ=F2(F1(u,Θ1),Θ2)
其中
F
1
F_1
F1和
F
2
F_2
F2任意变换函数,参数
Θ
1
,
Θ
2
Θ_1,Θ_2
Θ1,Θ2是需要去学习并且最小化损失
ℓ
ℓ
ℓ。可以将学习
Θ
2
Θ_2
Θ2视为输入
x
=
F
1
(
u
,
Θ
1
)
x=F_1(u,Θ_1)
x=F1(u,Θ1)被馈送到子网络中:
ℓ
=
F
2
(
x
,
Θ
2
)
.
ℓ = F_2(x, Θ_2).
ℓ=F2(x,Θ2).
例如,一个梯度下降的步骤如下:
Θ
2
←
Θ
2
−
α
m
∑
i
=
1
m
∂
F
2
(
x
i
,
Θ
2
)
∂
Θ
2
Θ_2 ← Θ_2−\frac{α}{m} \sum^m_{i=1}\frac {∂F2(x_i,Θ_2)}{∂Θ_2}
Θ2←Θ2−mαi=1∑m∂Θ2∂F2(xi,Θ2)
(对于批量大小
m
m
m和学习率
α
α
α)与具有输入
x
x
x的独立网络
F
2
F_2
F2完全等效。因此,使训练更有效的输入分布属性 - 例如在训练和测试数据之间具有相同的分布 - 也适用于训练子网络。 因此,有利的是
x
x
x的分布随时间保持固定。然后,
Θ
2
Θ_2
Θ2不必重新调整以补偿
x
x
x分布的变化。
固定分配到子网络的输入也会对子网外的层产生积极影响。考虑具有sigmoid激活函数
z
=
g
(
W
u
+
b
)
z=g(Wu+b)
z=g(Wu+b)的层,其中
u
u
u是层输入,权重矩阵
W
W
W和偏置向量
b
b
b是要学习的层参数,并且
g
(
x
)
=
1
1
+
e
x
p
(
−
x
)
g(x)=\frac {1} {1+exp(-x)}
g(x)=1+exp(−x)1。随着
∣
x
∣
|x|
∣x∣增加,
g
′
(
x
)
g'(x)
g′(x)趋于零。这意味着对于
x
=
W
u
+
b
x=Wu+b
x=Wu+b的所有维度,除了具有较小绝对值的那些维度,流向
u
u
u其他维度的梯度将消失,这将导致模型训练缓慢。然而,由于
x
x
x受
W
,
b
W,b
W,b和下面所有层的参数的影响,在训练期间对这些参数的改变可能将
x
x
x的许多维度移动到非线性的饱和状态并且减慢收敛。随着网络深度的增加,这种效应会被放大。在实践中,饱和问题和由此产生的梯度消失通常通过使用修正线性单元(Nair&Hinton,2010)
R
e
L
U
(
x
)
=
m
a
x
(
x
,
0
)
ReLU(x)=max(x,0)
ReLU(x)=max(x,0),并加上详细初始化(Bengio&Glorot,2010; Saxe等人 ,2013),以及小的学习率来解决。但是,如果我们能够确保非线性输入的分布在网络训练时保持稳定,那么优化器将不太可能陷入饱和状态,并且将加速训练。
我们将在训练过程中深度网络内部节点分布的变化称为内部协变量偏移(Internal Covariate Shif)。消除它能提供更快训练速度的保证。我们提出了一种新的机制,我们称之为批量归一化(Batch Normalization),它在减少内部协变量偏移方面迈出了一步,并且这样做能够大大加速了深度神经网络的训练。它通过归一化步骤来实现这一点,该步骤修复了层输入的均值和方差。批量归一化还通过降低梯度对参数及其初始值的比例的依赖性,对通过网络的梯度流有益。这使我们可以使用更高的学习率而不会出现分歧的风险。此外,批量归一化使模型正规化并减少了对Dropout的需求(Srivastava等,2014)。最后,批量标准化可以通过防止网络陷入饱和模式来使用饱和非线性。
在第4.2节,我们将批量归一化应用于最佳的ImageNet分类网络,并表明我们只使用7%的训练步骤就可以达到其原始性能,并且可以进一步超出其准确性。使用通过批量归一化训练的这种网络的集合,我们实现了前5个错误率,其改进了ImageNet分类上的最佳已知结果。
2.减少内部协变量偏移
我们将内部协变量偏移定义为由于训练期间网络参数的变化导致的网络激活分布的变化。为了改善训练,我们寻求减少内部协变量的变化。通过在训练过程中固定层输入
x
x
x的分布,我们期望提高训练速度。众所周知(LeCun等,1998b; Wiesler和Ney,2011),如果对网络训练的输入进行白化操作(whitened),则网络训练收敛得更快,即,线性变换为具有均值为0和方差为1的分布,并且去相关。由于每层的输入使由下面的层产生的输出,因此实现每层的输入的相同白化将是有利的。通过增加每层的输入,我们将朝着实现固定的输入分布迈出一步,这将消除内部协变量偏移的不良影响。
(1)方案1
我们可以在每个训练步骤或某个时间间隔考虑白化激活,通过直接修改网络或通过更改优化算法的参数来依赖于网络激活值(Wiesler等,2014; Raiko等,2012 ; Povey等人,2014; Desjardins&Kavukcuoglu)。然而,如果这些修改散布在优化步骤中,则梯度下降步骤可以尝试以需要更新归一化的方式更新参数,这减少了梯度步骤的影响。例如,考虑具有输入
u
u
u的层,为其添加学习偏差
b
b
b,并通过减去在训练数据上计算的激活的平均值来归一化结果:
x
^
=
x
−
E
[
x
]
\widehat {x}=x-E [x]
x
=x−E[x]其中
x
=
u
+
b
,
X
=
x
1...
N
x=u+b,X = {x_{1 ... N}}
x=u+b,X=x1...N是训练集上的
x
x
x值的集合,并且
E
[
x
]
=
1
N
∑
i
=
1
N
x
i
E[x]=\frac{1}{N}\sum ^{N}_{i=1}x_i
E[x]=N1∑i=1Nxi。如果梯度下降步骤忽略
E
[
x
]
E[x]
E[x]对
b
b
b的依赖性,那么它将更新
b
←
b
+
Δ
b
b←b+Δb
b←b+Δb,其中
Δ
b
∝
−
∂
l
/
∂
x
^
Δb\propto -∂l/∂\widehat{x}
Δb∝−∂l/∂x
。然后
u
+
(
b
+
Δ
b
)
−
E
[
u
+
(
b
+
Δ
b
)
]
=
u
+
b
−
E
[
u
+
b
]
u+(b+Δb)-E[u+(b+Δb)]=u+b-E[u+b]
u+(b+Δb)−E[u+(b+Δb)]=u+b−E[u+b]。因此,对
b
b
b的更新和随后的归一化变化的组合导致层的输出没有变化,因此损失也没有变化。随着训练的继续,
b
b
b将无限增长,同时损失仍然固定。如果归一化不仅是中心而且还可以扩展激活,这个问题可能会变得更糟。我们在初始实验中经验性地观察到这一点,其中当在梯度下降步骤之外计算归一化参数时模型爆炸。
(2)方案2
上述方法的问题在于梯度下降优化没有考虑归一化发生的情况。为解决此问题,我们希望确保对于任何参数值,网络始终生成具有所需分布的激活。这样做将允许相对于模型参数的损失,梯度考虑归一化以及其对模型参数
Θ
Θ
Θ的依赖性。再次设x是层输入,视为矢量,
X
X
X是训练数据集上的这些输入的集合。然后可以将标准化写为变换:
x
^
=
N
o
r
m
(
x
,
X
)
\widehat{x} = Norm(x, X)
x
=Norm(x,X)
这不仅取决于给定的训练示例
x
x
x,而且取决于所有示例
X
X
X-如果
x
x
x由另一层生成,则每个示例
X
X
X取决于
θ
θ
θ。对于反向传播,我们需要计算雅可比行列式:
∂
N
o
r
m
(
x
,
X
)
∂
x
a
n
d
∂
N
o
r
m
(
x
,
X
)
∂
X
;
\frac{∂Norm(x, X)}{∂x} and \frac{∂Norm(x, X)}{∂X};
∂x∂Norm(x,X)and∂X∂Norm(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.通过最小批量统计进行标准化
由于对每层输入的完全白化操作成本很高,而且每一层都几乎相同,我们进行了两次必要的简化:
(1)第一次简化
首先,我们不是单独对层输入和输出中的特征进行白化,而是通过使其具有均值为0和方差为1来独立地标准化每个标量特征。对于具有d维输入的层$x=(x(1)…x(d)),我们将标准化每个维度:
x
^
(
k
)
=
x
(
k
)
−
E
[
x
(
k
)
]
V
a
r
[
x
(
k
)
]
\widehat{x}^{(k)}=\frac{x^{(k)}−E[x^{(k)}]}{\sqrt {Var[x^{(k)}]}}
x
(k)=Var[x(k)]x(k)−E[x(k)]
其中期望和方差在训练数据集上计算。如(LeCun等人,1998b)所示,即使特征不是去相关的,这种归一化也加速了收敛。
请注意,简单地规范化层的每个输入可能会改变层能够表示的内容。例如,标准化sigmoid的输入会将它们约束到非线性的线性区域。为了解决这个问题,我们确保插入网络中的转换可以表示唯一的转换。为了实现这一点,我们为每个激活
x
(
k
)
x^{(k)}
x(k)引入一对参数
γ
(
k
)
,
β
(
k
)
γ^{(k)},β^{(k)}
γ(k),β(k),它们对标准化值进行缩放和位移:
y
(
k
)
=
γ
(
k
)
x
^
(
k
)
+
β
(
k
)
.
y^{(k)} = γ^{(k)}\widehat{x}^{(k)} + β^{(k)}.
y(k)=γ(k)x
(k)+β(k).
这些参数与原始模型参数一起进行学习,用于恢复网络的表示能力。实际上,通过设置
γ
(
k
)
=
V
a
r
[
x
(
k
)
]
γ(k)=\sqrt{Var[x^{(k)}]}
γ(k)=Var[x(k)]和
β
(
k
)
=
E
[
x
(
k
)
]
β(k)=E [x^{(k)}]
β(k)=E[x(k)],我们可以恢复原始激活,如果这是最佳的情况。
(2)第二次简化
在批处理设置中,每个训练步骤都基于整个训练集,我们将使用整个集来规范化激活。 然而,当使用随机优化时,这是不切实际的。因此,我们进行了第二次简化:由于我们在随机梯度训练中使用小批量,每个小批量产生每次激活的均值和方差的估计。这样,用于归一化的统计数据可以完全参与梯度反向传播。请注意,通过计算每维度方差而不是联合协方差来实现最小批量的使用; 在联合情况下,由于小批量大小可能小于被白化的激活次数,因此需要正则化,从而产生奇异的协方差矩阵。
考虑一个尺寸为
m
m
m的小批量
B
B
B。 由于归一化被独立地应用于每个激活,因此让我们关注特定激活
x
(
k
)
x^{(k)}
x(k)并且为了清楚起见省略
k
k
k。我们在小批量中有
m
m
m个激活值:
B
=
x
1...
m
.
B = {x_{1...m}}.
B=x1...m.
设归一化值为
x
^
1...
m
\widehat{x}_{1 ... m}
x
1...m,它们的线性变换为
y
1...
m
y_{1 ... m}
y1...m。我们指的是变换:
B
N
γ
,
β
:
x
1...
m
→
y
1...
m
BN_{γ,β}: x_{1...m}→y_{1...m}
BNγ,β:x1...m→y1...m
作为批量归一化的变换。我们在算法1中展示BN变换。在算法中,
ϵ
\epsilon
ϵ是为数值稳定性添加到最小批量方差的常数。
可以将BN变换添加到网络中以操纵任何激活。在符号
y
=
B
N
γ
,
β
(
x
)
y =BN_{γ,β}(x)
y=BNγ,β(x)中,我们指定要学习的参数
γ
γ
γ和
β
β
β,但应注意,BN变换不在每个训练样例中独立地处理激活。相反,
B
N
γ
,
β
(
x
)
BN_{γ,β}(x)
BNγ,β(x)取决于训练样例和当前批次中的其他样例。缩放和移位的值y被传递到其他网络层。标准化的激活
x
^
\widehat{x}
x
是我们变换的内在因素,并且它们的存在至关重要。只要每个小批量的元素从相同分布中采样,并且如果我们忽略
ϵ
\epsilon
ϵ,则任何
x
^
\widehat{x}
x
的值的分布具有期望值为0和方差为1正态分布。这可以通过观察
∑
i
=
1
m
x
^
i
=
0
\sum^m_{i=1}\widehat {x}_i=0
∑i=1mx
i=0和
1
m
∑
i
=
1
m
x
^
i
2
=
1
\frac{1}{m}\sum^m_{i=1}\widehat{x}^2_i=1
m1∑i=1mx
i2=1并且取得期望来看出。每个归一化激活
x
^
(
k
)
\widehat{x}^{(k)}
x
(k)可被视为由线性变换
y
(
k
)
=
γ
(
k
)
x
^
(
k
)
+
β
(
k
)
y^{(k)}=γ^{(k)}\widehat{x}^{(k)}+β^{(k)}
y(k)=γ(k)x
(k)+β(k)组成的子网络的输入,随后是由原始网络完成其他的处理。这些子网输入都具有固定的均值和方差,虽然这些归一化的
x
(
k
)
x^{(k)}
x(k)的联合分布可以在训练过程中发生变化,但我们期望引入归一化输入可以加速子网的训练,因此,使网络作为一个整体。
在训练过程中,我们需要通过这种变换反向传播损失
ℓ
ℓ
ℓ的梯度,并计算相对于BN变换参数的梯度。我们使用链式求导法则,如下(简化之前):
∂
ℓ
∂
x
^
i
=
∂
ℓ
∂
y
i
⋅
γ
\frac{∂ℓ}{∂\widehat{x}_i}=\frac{∂ℓ}{∂y_i}·γ
∂x
i∂ℓ=∂yi∂ℓ⋅γ
∂
ℓ
∂
σ
B
2
=
∑
i
=
1
m
∂
ℓ
∂
x
^
i
⋅
(
x
i
−
µ
B
)
⋅
−
1
2
(
σ
B
2
+
ϵ
)
−
3
/
2
\frac{∂ℓ}{∂σ^2_B}=\sum^m_{i=1}\frac{∂ℓ}{∂\widehat{x}_i}· (x_i−µ_B) ·\frac{−1}{2}(σ^2_B+\epsilon)^{−3/2}
∂σB2∂ℓ=i=1∑m∂x
i∂ℓ⋅(xi−µB)⋅2−1(σB2+ϵ)−3/2
∂
ℓ
∂
µ
B
=
(
∑
i
=
1
m
∂
ℓ
∂
x
^
i
⋅
−
1
σ
B
2
+
ϵ
)
+
∂
ℓ
∂
σ
B
2
⋅
∑
i
=
1
m
−
2
(
x
i
−
µ
B
)
m
\frac{∂ℓ}{∂µ_B}=(\sum^m_{i=1}\frac{∂ℓ}{∂\widehat{x}_i}· \frac{−1}{\sqrt {σ^2_B+\epsilon}})+\frac{∂ℓ}{∂σ^2_B}·\frac{\sum^m_{i=1}−2(x_i−µ_B)}{m}
∂µB∂ℓ=(i=1∑m∂x
i∂ℓ⋅σB2+ϵ−1)+∂σB2∂ℓ⋅m∑i=1m−2(xi−µB)
∂
ℓ
∂
x
i
=
∂
ℓ
∂
x
^
i
⋅
1
σ
2
B
+
ϵ
+
∂
ℓ
∂
σ
B
2
⋅
2
(
x
i
−
µ
B
)
m
+
∂
ℓ
∂
µ
B
⋅
1
m
\frac{∂ℓ}{∂x_i}=\frac{∂ℓ}{∂\widehat{x}_i}·\frac{1}{\sqrt{σ2B+\epsilon}}+\frac{∂ℓ}{∂σ^2_B}·\frac{2(x_i−µ_B)}{m}+\frac{∂ℓ}{∂µ_B}·\frac{1}{m}
∂xi∂ℓ=∂x
i∂ℓ⋅σ2B+ϵ1+∂σB2∂ℓ⋅m2(xi−µB)+∂µB∂ℓ⋅m1
∂
ℓ
∂
γ
=
∑
i
=
1
m
∂
ℓ
∂
y
i
⋅
x
^
i
\frac{∂ℓ}{∂γ}=\sum^m_{i=1}\frac{∂ℓ}{∂y_i}·\widehat{x}_i
∂γ∂ℓ=i=1∑m∂yi∂ℓ⋅x
i
∂
ℓ
∂
β
=
∑
i
=
1
m
∂
ℓ
∂
y
i
\frac{∂ℓ}{∂β}=\sum^m_{i=1}\frac{∂ℓ}{∂y_i}
∂β∂ℓ=i=1∑m∂yi∂ℓ
因此,BN变换是可区分的变换,其将归一化的激活引入网络中。这确保了在模型训练时,每层网络可以继续学习表现出较少内部协变量偏移的输入分布,从而加速训练。此外,应用于这些标准化激活的学习仿射变换允许BN变换表示唯一变换并保留网络容量。
3.1 批量归一化网络的训练和推理
根据算法1,为批量标准化网络,我们指定一个激活子集并将每个激活子集进行BN变换。先前接收
x
x
x作为输入的任何层现在接收
B
N
(
x
)
BN(x)
BN(x)。采用批量归一化的模型可以使用批量梯度下降(batch gradient descent),或最小批量
m
>
1
m>1
m>1的随机梯度下降( Stochastic Gradient Descent),或其任何变体如Adagrad(Duchi等,2011)进行训练。依赖于小批量激活的归一化允许有效的训练,但在推理期间既不必要也不可取; 我们希望输出仅依赖于输入。 为此,一旦网络经过训练,我们就会使用规范化:
x
^
=
x
−
E
[
x
]
V
a
r
[
x
]
+
ϵ
\widehat{x}=\frac{x−E[x]}{\sqrt{Var[x]+\epsilon}}
x
=Var[x]+ϵx−E[x]
使用总体而不是小批量统计。 忽略
ϵ
\epsilon
ϵ,这些标准化的激活与训练期间具有相同的均值0和方差1。我们使用无偏方差估计
V
a
r
[
x
]
=
m
m
−
1
⋅
E
B
[
σ
B
2
]
Var[x]=\frac{m}{m-1}·E_B [σ^2_B]
Var[x]=m−1m⋅EB[σB2],其中期望超过训练小批量
m
m
m和
σ
B
2
σ^2_B
σB2的样本方差。使用移动平均,我们可以在训练时跟踪模型的准确性。由于在推理期间平均值和方差是固定的,因此归一化仅仅是应用于每次激活的线性变换。它可以进一步由缩放
γ
γ
γ和移位
β
β
β组成,以产生替换
B
N
(
x
)
BN(x)
BN(x)的单个线性变换。 算法2总结了训练批量标准化网络的过程。
3.2 批归一化卷积网络
批量标准化可以应用于网络中的任何激活集。在这里,我们专注于由线性变换和元素非线性组成的变换:
z
=
g
(
W
u
+
b
)
z=g(Wu+b)
z=g(Wu+b)
其中
W
W
W和
b
b
b是模型的学习参数,
g
(
⋅
)
g(·)
g(⋅)是非线性激活函数,如sigmoid或ReLU。该公式包含了全连接层和卷积层。我们通过归一化
x
=
W
u
+
b
x=Wu+b
x=Wu+b,在非线性变换之前添加BN变换。我们也可以对层输入
u
u
u进行归一化,但由于
u
u
u可能是另一个非线性的输出,其分布的形状可能在训练期间发生变化,并且约束其第一和第二时刻不会消除协变量偏移。相比之下,
x
=
W
u
+
b
x=Wu+b
x=Wu+b更可能具有对称的非稀疏分布,即“更高斯”(Hyv¨arinen&Oja,2000); 使其正规化可能产生具有稳定分布的激活。
注意,由于我们对
W
u
+
b
Wu+b
Wu+b进行归一化,因此偏差
b
b
b可以被忽略,因为其效果将被随后的平均减法消除(偏差的作用归入算法1中的β)。 因此,
z
=
g
(
W
u
+
b
)
z=g(Wu+b)
z=g(Wu+b)被替换为:
z
=
g
(
B
N
(
W
u
)
)
z=g(BN(Wu))
z=g(BN(Wu))
其中BN变换独立地应用于
x
=
W
u
x=Wu
x=Wu的每个维度,其中每个维度具有单独的一对学习参数
γ
(
k
)
γ(k)
γ(k),
β
(
k
)
β(k)
β(k)。
对于卷积层,我们还希望归一化遵循卷积属性—以便在不同位置对同一特征映射的不同元素以相同方式进行归一化。为实现这一目标,我们联合归一化了所有位置的小批量活动。在算法1中,我们让B成为特征映射中所有值的集合,跨越小批量和空间位置的元素 - 因此对于小批量为m的和大小为p×q的特征映射,我们使用有效 小批量m’= | B | = m·p q。 我们学习每个特征的一对参数
γ
(
k
)
γ(k)
γ(k)和
β
(
k
)
β(k)
β(k),而不是每次激活。类似地修改在算法2中,使得在推理期间,BN变换对给定特征图中的每个激活应用相同的线性变换
3.3 批归一化允许更高的学习率
在传统的深度网络中,过高的学习速度可能会导致梯度爆炸或消失,以及陷入局部最小值。批量归一化有助于解决这些问题。通过归一化整个网络的激活,它可以防止参数的微小变化放大到梯度激活的更大和次优变化; 例如,它可以防止训练陷入饱和的非线性状态。
批量归一化还使训练对参数比例更具弹性。通常,较大的学习速率可能会增加层参数的规模,然后在反向传播期间放大梯度并导致模型爆炸。但是,对于批量归一化,通过图层的反向传播不受其参数比例的影响。 即,对于标量a,
B
N
(
W
u
)
=
B
N
(
(
a
W
)
u
)
BN(Wu) = BN((aW)u)
BN(Wu)=BN((aW)u)
并且,我们可以证明:
∂
B
N
(
(
a
W
)
u
)
∂
u
=
∂
B
N
(
W
u
)
∂
u
\frac{∂BN((aW)u)}{∂u} =\frac{∂BN(Wu)}{∂u}
∂u∂BN((aW)u)=∂u∂BN(Wu)
∂
B
N
(
(
a
W
)
u
)
∂
a
W
=
1
a
∂
B
N
(
W
u
)
∂
W
\frac{∂BN((aW)u)}{∂aW} =\frac{1}{a}\frac{∂BN(Wu)}{∂W}
∂aW∂BN((aW)u)=a1∂W∂BN(Wu)