简要概括:对每层的激活函数都进行标准化。可以对 z [ l ] z^{[l]} z[l]或者 a [ l ] a^{[l]} a[l]进行标准化,其中前者更常见。
1. Batch normalization原理
对于神经网络中的某些中间值
z
[
l
]
(
i
)
,
i
=
1
,
2
,
⋯
,
m
z^{[l](i)},i=1,2,\cdots,m
z[l](i),i=1,2,⋯,m(下面省略
l
l
l),进行下列的一系列运算:
μ
=
1
m
∑
z
(
i
)
σ
2
=
1
m
∑
(
z
(
i
)
−
μ
)
2
z
n
o
r
m
(
i
)
=
z
(
i
)
−
μ
σ
2
+
ϵ
z
~
(
i
)
=
γ
z
n
o
r
m
(
i
)
+
β
(1-1)
\begin{aligned} \mu&=\frac{1}{m}\sum z^{(i)}\\ \sigma ^{2}&=\frac{1}{m}\sum (z^{(i)}-\mu)^2\\ z_{norm}^{(i)}&=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}\\ \tilde z^{(i)}&=\gamma z_{norm}^{(i)}+\beta\\ \tag{1-1} \end{aligned}
μσ2znorm(i)z~(i)=m1∑z(i)=m1∑(z(i)−μ)2=σ2+ϵz(i)−μ=γznorm(i)+β(1-1)
其中
γ
\gamma
γ和
β
\beta
β可以通过学习得到。
2. 在多层神经网络中的具体操作
实际操作时,对每个mini-batch进行batch-normalization。
b
[
l
]
b^{[l]}
b[l]可以设置为零,因为不论它为多少,在batch-normalization时都会被减去。
z
[
l
]
=
w
[
l
]
a
[
l
−
1
]
z
n
o
r
m
[
l
]
=
z
[
l
]
−
μ
σ
2
+
ϵ
z
~
[
l
]
=
γ
z
n
o
r
m
[
l
]
+
β
[
l
]
(2-1)
\begin{aligned} z^{[l]}&=w^{[l]}a^{[l-1]}\\ z_{norm}^{[l]}&=\frac{z^{[l]}-\mu}{\sqrt{\sigma^2+\epsilon}}\\ \tilde z^{[l]}&=\gamma z_{norm}^{[l]}+\beta^{[l]}\\ \tag{2-1} \end{aligned}
z[l]znorm[l]z~[l]=w[l]a[l−1]=σ2+ϵz[l]−μ=γznorm[l]+β[l](2-1)
for t=1…numMiniBatches
compute forward prop on
X
{
t
}
X^{\{t\}}
X{t}
in each hidden layer, use BN to replace
z
[
l
]
z^{[l]}
z[l] with
z
~
[
l
]
\tilde z^{[l]}
z~[l]
use backprop to compute
d
w
[
l
]
,
d
b
[
l
]
,
d
β
[
l
]
,
d
γ
[
l
]
dw^{[l]},db^{[l]},d\beta^{[l]},d\gamma^{[l]}
dw[l],db[l],dβ[l],dγ[l]
update parameters(梯度下降方法及其各种改进)
3. Batch normalization有效的原因
- 类似于对输入层进行标准化的作用,可以加速学习过程。
- 使得后面的网络层更具有鲁棒性,当前面的网络层变化时,后面的网络层的均值和方差不变。换句话讲,减少了前面层参数和后面层参数之间的耦合
- 有轻微的正则化效果,因为采用了mini-batch的方法,均值和方差是在mini-batch上计算的而不是整个训练集,所以均值和方差中具有噪声,导致 z ~ \tilde z z~具有噪声。这个dropout有异曲同工之妙。
4. 测试时的处理手段
训练时,均值和方差是针对一个mini-batch来求的,但是测试的时候往往是一个一个样本进行的。
解决方法,利用指数加权平均的方法,对训练集上的各个mini-batch进行指数加权平均,用来估计测试样本的隐藏层的均值和方差