梯度消失和梯度爆炸
梯度消失的具体表现是,接近于输出层的权值更新相对正常,但是接近于输入层的权值基本不更新,或更新的非常慢。这样,深度网络的学习就等价于只有后几层的浅层网络的学习了。
梯度爆炸的具体的表现是,越远离输出层的隐藏层,其权值越大,由于会大幅度的更新网络参数,进而导致网络不稳定,最终无法收敛,或者权重值溢出,即输出值为NaN,而无法再更新权重。
产生的原因
梯度消失和梯度爆炸是由于神经网络的反向传播的连乘效应导致的,而且随着网络层的增多,出现的可能性会越大。
以上图中的4层网络层为例,假设每一层网络激活后的输出为
f
i
(
x
)
f_{i}(x)
fi(x),其中x表示第i层的输入,也就是第i-1层的输出,那么,
f
(
i
+
1
)
=
f
(
f
i
∗
w
i
+
1
+
b
i
+
1
)
f(i+1) = f(f_i*w_{i+1} + b_{i+1})
f(i+1)=f(fi∗wi+1+bi+1),简单记为
f
i
+
1
=
f
(
f
i
∗
w
i
+
1
)
f_{i+1} = f(f_i*w_{i+1})
fi+1=f(fi∗wi+1)。
BP反向传播方法,就是基于梯度下降策略,以目标的负梯度方向对参数进行调整,参数的更新为
w
←
w
+
Δ
w
w \gets w + \Delta w
w←w+Δw,给定学习率
α
\alpha
α,
Δ
w
=
−
α
∂
L
o
s
s
∂
w
\Delta w = -\alpha \frac {\partial{Loss}} {\partial{w}}
Δw=−α∂w∂Loss,如果更新第2层隐藏层的权值信息,根据链式求导法则,可得:
Δ
w
2
=
∂
L
o
s
s
∂
w
2
=
∂
L
o
s
s
∂
f
4
∗
∂
f
4
∂
f
3
∗
∂
f
3
∂
f
2
∗
∂
f
2
∂
w
2
\Delta w_2 = \frac {\partial{Loss}} {\partial{w_2}} = \frac {\partial{Loss}} {\partial{f_4}} * \frac {\partial{f_4}} {\partial{f_3}} * \frac {\partial{f_3}} {\partial{f_2}} * \frac {\partial{f_2}} {\partial{w_2}}
Δw2=∂w2∂Loss=∂f4∂Loss∗∂f3∂f4∗∂f2∂f3∗∂w2∂f2
如果每层对激活函数的求导均大于1,那么层数增多的时候,最终求出的梯度更新将以指数形式增加,称为梯度爆炸;如果每层求导小于1,那么层数增多的时候,求出的梯度将会以指数形式减小,称为梯度消失或梯度弥散。
参考链接: