梯度消失与梯度爆炸过程分析
梯度消失与梯度爆炸过程分析
定义
百度百科:在神经网络中,前面的隐藏层的学习速率远低于后面隐藏层的学习速率。
个人理解:所求得当前隐藏层参数的梯度太小,以至于我们认为几乎消失,导致参数的学习程度基本为零的情况。
W
1
=
W
1
+
Δ
W
Δ
W
=
α
∂
L
o
s
s
∂
w
α
为
学
习
率
W_1=W_1+\Delta{W}\\\Delta{W}=\alpha \frac{\partial{Loss}}{\partial{w}}\\\alpha 为学习率
W1=W1+ΔWΔW=α∂w∂Lossα为学习率
举例
注:浅层网络几乎不会出现梯度消失的问题,所以在此我们举深层神经网络的例子
一些符号表示
a ( l ) a^{(l)} a(l):第l层神经元输出值(具体当前层的那个神经元未指定,但不影响后续推导)
z l z^{l} zl:第l层神经元的线性计算结果
g ( z ( l ) ) g(z^{(l)}) g(z(l)):第l层的**函数
正向传播神经网络计算通式
z
(
l
)
=
w
l
a
(
l
−
1
)
+
b
l
a
(
l
)
=
g
(
z
(
l
)
)
z^{(l)}=w_{l}a^{(l-1)}+b_{l}\\a^{(l)}=g(z^{(l)})
z(l)=wla(l−1)+bla(l)=g(z(l))
梯度消失过程
优化参数过程中,我们通常是基于梯度下降策略的,因此,如果我们要更新hidden layer1
的权重信息,那么就必须求出其对应的偏导数,根据链式求导法则可知:
∂
L
o
s
s
∂
w
1
=
∂
L
o
s
s
∂
a
3
∂
a
3
∂
z
3
∂
z
3
∂
a
2
∂
a
2
∂
z
2
∂
z
2
∂
a
1
∂
a
1
∂
w
1
\frac{\partial{Loss}}{\partial{w_1}}=\frac{\partial{Loss}}{\partial{a_3}}\frac{\partial{a_3}}{\partial{z_3}}\frac{\partial{z_3}}{\partial{a_2}}\frac{\partial{a_2}}{\partial{z_2}}\frac{\partial{z_2}}{\partial{a_1}}\frac{\partial{a_1}}{\partial{w_1}}
∂w1∂Loss=∂a3∂Loss∂z3∂a3∂a2∂z3∂z2∂a2∂a1∂z2∂w1∂a1
其中:
∂
z
3
∂
a
2
=
w
3
∂
z
2
∂
a
1
=
w
2
\frac{\partial{z_3}}{\partial{a_2}}=w_3\\\frac{\partial{z_2}}{\partial{a_1}}=w_2
∂a2∂z3=w3∂a1∂z2=w2
故,(3)可化简为:
∂
L
o
s
s
∂
w
1
=
∂
L
o
s
s
∂
a
3
∂
a
3
∂
z
3
w
3
∂
a
2
∂
z
2
w
2
∂
a
1
∂
w
1
\frac{\partial{Loss}}{\partial{w_1}}=\frac{\partial{Loss}}{\partial{a_3}}\frac{\partial{a_3}}{\partial{z_3}}w_3\frac{\partial{a_2}}{\partial{z_2}}w_2\frac{\partial{a_1}}{\partial{w_1}}
∂w1∂Loss=∂a3∂Loss∂z3∂a3w3∂z2∂a2w2∂w1∂a1
**函数为sigmoid时
sigmoid导数图像
结论
如果使用标准化初始w,那么各个层次权重都为0-1之间的小数
- **函数的导数值是0-1之间小数,当网络层数到达一定深度时, ∂ L o s s ∂ w \frac{\partial{Loss}}{\partial{w}} ∂w∂Loss就会足够小,导致w的权重更新几乎消失,这也就被我们称为梯度消失
如果初始w足够大,以至w乘对应**函数导数大于1
- 当网络层数达到一定深度时, ∂ L o s s ∂ w \frac{\partial{Loss}}{\partial{w}} ∂w∂Loss就会非常大,也就被称为梯度爆炸
因为博主自己也只是一个深度学习小白,所以难免可能会有错误的地方,欢迎大家一起交流、讨论。如果有幸解决了您的一些疑问,本人不胜感激!