深度学习之 Vanishing Gradient Problem:深度网络中梯度消失问题的解释说明
本文是《深入浅出神经网络与深度学习》第五章 深度神经网络为何很难训练 的简易读书笔记,记录了深度神经网络中的梯度消失及产生原因说明。
一、基本概念
在深度神经网络中,梯度在隐藏层间反向传播时趋于变小,即前面隐藏层中的神经元学习速度要慢于后面隐藏层的现象,称梯度消失(Vanishing Gradient Problem)。与之相对,若前面的隐藏层中的梯度变得非常大时,称为梯度爆炸(Exploding Gradient Problem)。
二、简单解释
为何会出现梯度消失的问题?
我们通过一个每层只有一个神经元,包含三层隐藏层的神经网络来解释。网络的结构图如下:
其中,
w
1
,
w
2
,
.
.
.
w_1,w_2,...
w1,w2,... 是权重,
b
1
,
b
2
,
.
.
.
b_1,b_2,...
b1,b2,... 是偏置,
C
C
C 是代价函数,第
j
j
j个神经元的输出
a
j
=
σ
(
z
j
)
a_j=\sigma(z_j)
aj=σ(zj) ,神经元的带权输入
z
j
=
w
j
∗
a
j
−
1
+
b
j
z_j=w_j*a_{j-1}+b_j
zj=wj∗aj−1+bj,
σ
\sigma
σ 是常用的
s
i
g
m
o
i
d
sigmoid
sigmoid 激活函数。
基于上述网络,首先来计算梯度
∂
C
∂
b
1
\frac{\partial C}{\partial b_1}
∂b1∂C,经由链式法则
∂
C
∂
b
1
=
∂
C
∂
a
4
∂
a
4
∂
a
3
∂
a
3
∂
a
2
∂
a
2
∂
a
1
∂
a
1
∂
b
1
\frac{\partial C}{\partial b_1}=\frac{\partial C}{\partial a_4}\frac{\partial a_4}{\partial a_3}\frac{\partial a_3}{\partial a_2}\frac{\partial a_2}{\partial a_1}\frac{\partial a_1}{\partial b_1}
∂b1∂C=∂a4∂C∂a3∂a4∂a2∂a3∂a1∂a2∂b1∂a1,得到梯度
∂
C
∂
b
1
\frac{\partial C}{\partial b_1}
∂b1∂C的表达式如下:
∂
C
∂
b
1
=
σ
′
(
z
1
)
w
2
σ
′
(
z
2
)
w
3
σ
′
(
z
3
)
w
4
σ
′
(
z
4
)
∂
C
∂
a
4
⏟
∂
C
∂
b
2
\frac{\partial C}{\partial b_1} = \sigma^{'}(z_1)w_2 \underbrace{\sigma^{'}(z_2)w_3 \sigma^{'}(z_3)w_4\sigma^{'}(z_4) { \frac{\partial C}{\partial a_4}}}_{\frac{\partial C}{\partial b_2}}
∂b1∂C=σ′(z1)w2∂b2∂C
σ′(z2)w3σ′(z3)w4σ′(z4)∂a4∂C
同理可得,
∂
C
∂
b
2
=
σ
′
(
z
2
)
w
3
σ
′
(
z
3
)
w
4
σ
′
(
z
4
)
∂
C
∂
a
4
⏟
∂
C
∂
b
3
\frac{\partial C}{\partial b_2} = \sigma^{'}(z_2)w_3 \underbrace{\sigma^{'}(z_3)w_4\sigma^{'}(z_4) { \frac{\partial C}{\partial a_4}}}_{\frac{\partial C}{\partial b_3}}
∂b2∂C=σ′(z2)w3∂b3∂C
σ′(z3)w4σ′(z4)∂a4∂C
∂ C ∂ b 3 = σ ′ ( z 3 ) w 4 σ ′ ( z 4 ) ∂ C ∂ a 4 ⏟ ∂ C ∂ b 4 \frac{\partial C}{\partial b_3} = \sigma^{'}(z_3)w_4 \underbrace{\sigma^{'}(z_4) { \frac{\partial C}{\partial a_4}}}_{\frac{\partial C}{\partial b_4}} ∂b3∂C=σ′(z3)w4∂b4∂C σ′(z4)∂a4∂C
∂ C ∂ b 4 = σ ′ ( z 4 ) ∂ C ∂ a 4 \frac{\partial C}{\partial b_4} = \sigma^{'}(z_4) { \frac{\partial C}{\partial a_4}} ∂b4∂C=σ′(z4)∂a4∂C
通过比较
∂
C
∂
b
1
\frac{\partial C}{\partial b_1}
∂b1∂C、
∂
C
∂
b
2
\frac{\partial C}{\partial b_2}
∂b2∂C、
∂
C
∂
b
3
\frac{\partial C}{\partial b_3}
∂b3∂C、
∂
C
∂
b
4
\frac{\partial C}{\partial b_4}
∂b4∂C 的表达式,可知除了拥有共同项
∂
C
∂
a
4
\frac{\partial C}{\partial a_4}
∂a4∂C外,前面隐藏层的梯度较后面隐藏层含有更多的
w
w
w 和
σ
′
(
z
)
\sigma^{'}(z)
σ′(z) 项。
使用标准方法初始化网络权重时,会使得权重符合一个均值为
0
0
0,标准差为
1
1
1 的高斯分布,因此这些权重通常会满足
∣
w
j
∣
<
1
|w_j|<1
∣wj∣<1。
另一项
σ
′
(
z
)
\sigma^{'}(z)
σ′(z),即
s
i
g
m
o
i
d
sigmoid
sigmoid 函数的导数,其函数图如下:
易知其取值为
(
0
,
1
4
]
(0,\frac{1}{4}]
(0,41],且在
z
=
0
z=0
z=0 处,
σ
′
(
0
)
=
1
4
\sigma^{'}(0)=\frac{1}{4}
σ′(0)=41 取得最大值。
由前述可知
w
σ
′
(
z
)
<
1
4
w\sigma^{'}(z) < \frac{1}{4}
wσ′(z)<41,或者说
w
σ
′
(
z
)
<
1
w\sigma^{'}(z) < 1
wσ′(z)<1,所有会有
∂
C
∂
b
1
<
∂
C
∂
b
2
<
∂
C
∂
b
3
<
∂
C
∂
b
4
\frac{\partial C}{\partial b_1} < \frac{\partial C}{\partial b_2} < \frac{\partial C}{\partial b_3} < \frac{\partial C}{\partial b_4}
∂b1∂C<∂b2∂C<∂b3∂C<∂b4∂C,也即前面隐藏层的梯度要小于后面隐藏层的梯度。
这就是梯度消失的原因。
三、参考资料
[1] 《深入浅出神经网络与深度学习》