梯度消失和梯度爆炸

什么是梯度消失,什么是梯度爆炸

梯度消失

  • 在进行梯度下降时,得到的梯度值接近于0,称为梯度消失

梯度爆炸

  • 在进行梯度下降时,得到的梯度值非常大(NAN),称为梯度爆炸

梯度消失与梯度爆炸的产生原因

注:如果没有注明,下面指的很小是指很接近于0

反向传播因素导致的梯度消失或梯度爆炸

根据神经网络的反向传播公式: \[ \left\{ \begin{aligned} &\frac{\partial L}{\partial Z^{[l]}} = W^{[l+1]T}\cdot\frac{\partial L}{\partial Z^{[l+1]}}*g'(Z^{[l]})\\\ &\frac{\partial J}{\partial W^{[l]}} = \frac{1}{m}\frac{\partial L}{\partial Z^{[l]}}\cdot A^{[l-1]T}\\\ &\frac{\partial J}{\partial b^{[l]}} = \frac{1}{m}np.sum(\frac{\partial L}{\partial Z^{[l]}},axis=1,keepdims=True) \end{aligned} \right. \] 可得: \[ \begin{aligned} \frac{\partial L}{\partial Z^{[l]}} &= W^{[l+1]T}\cdot\frac{\partial L}{\partial Z^{[l+1]}}*g'(Z^{[l]})\\\ &= W^{[l+1]T}(W^{[l+2]T}\frac{\partial L}{\partial Z^{[l+2]}}*g'(Z^{[l+1]}))*g'(Z^{[l]})\\\ &= W^{[l+1]T}(W^{[l+2]T}(W^{[l+3]T}\frac{\partial L}{\partial Z^{[l+3]}}*g'(Z^{[l+2]}))*g'(Z^{[l+1]}))*g'(Z^{[l]})\\\ &= \cdots\cdots\\\ &= W^{[l+1]T}\Bigg(W^{[l+2]T}\bigg(W^{[l+3]T}\Big(\cdots\big(W^{[l+n+1]T}\frac{\partial L}{\partial Z^{[l+n+1]}}*g'(Z^{[l+n]})\big)\cdots\Big)*g'(Z^{[l+2]})\bigg)g'(Z^{[l+1]})\Bigg)g'(Z^{[l]}) \end{aligned} \] 由上述式子可知:

  1. 由权重导致的梯度消失或梯度爆炸:

    • \(W^{[l+i]}\)内元素都比较小时(元素值<1),在连乘的结果下,会使得随着\(n\)的增大,\(\frac{\partial L}{\partial Z^{[l]}}\)呈指数性减小,导致梯度消失

    • \(W^{[l+1]}\)内元素都比较大时(元素值>1),在连乘的结果下,会使得随着\(n\)的增大,\(\frac{\partial L}{\partial Z^{[l]}}\)呈指数性增大,导致梯度爆炸

  2. 由激活函数(的导数)导致的梯度消失或梯度爆炸:

    • \(g'(Z^{[l+i]})\)内元素都比较小时(元素值<1),在连乘的结果下,会使得随着\(n\)的增大,\(\frac{\partial L}{\partial Z^{[l]}}\)呈指数性增大,导致梯度爆炸
    • \(g'(Z^{[l+i]})\)内元素都比较大时(元素值>1),在连乘的结果下,会使得随着\(n\)的增大,\(\frac{\partial L}{\partial Z^{[l]}}\)呈指数性减小,导致梯度消失

当激活函数是sigmoid函数时,其导数最大也就0.25,非常容易导致\(\frac{\partial L}{\partial Z^{[l]}}\)接近于0;当激活函数是tanh时,虽然会比sigmoid有所缓解,但其导数除了在最高点为1,剩下的也都小于1,神经网络层数多了也很容易导致\(\frac{\partial L}{\partial Z^{[l]}}\)十分接近于0

\(\frac{\partial L}{\partial Z^{[l]}}\)十分接近于0时,\(\frac{\partial J}{\partial W^{[l]}},\frac{\partial J}{\partial b^{[l]}}\)也会因为\(\frac{\partial L}{\partial Z^{[l]}}\)的影响而十分接近于0,梯度消失;当\(\frac{\partial L}{\partial Z^{[l]}}\)比较大时,\(\frac{\partial J}{\partial W^{[l]}},\frac{\partial J}{\partial b^{[l]}}\)也会因为\(\frac{\partial L}{\partial Z^{[l]}}\)的影响而比较大,梯度爆炸

正向传播因素导致的梯度消失或梯度爆炸

根据神经网络的正向传播公式: \[ \left\{ \begin{aligned} &Z^{[l]} = W^{[l]}A^{[l-1]}+b^{[l]}\\\ &A^{[l]} = g(Z^{[l]}) \end{aligned} \right. \] 可得: \[ \begin{aligned} Z^{[l]} &= W^{[l]}A^{[l-1]}+b^{[l]} \\\ &= W^{[l]}g(W^{[l-1]}A^{[l-2]}+b^{[l-1]})+b^{[l]}\\\ &= W^{[l]}g(W^{[l-1]}g(W^{[l-2]}A^{[l-3]}+b^{[l-2]})+b^{[l-1]})+b^{[l]}\\\ &= W^{[l]}g\bigg(W^{[l-1]}g\Big(W^{[l-2]}g\big(\cdots g(W^{[1]}A^{[0]}+b^{[1]})\cdots\big)+b^{[l-2]}\Big)+b^{[l-1]}\bigg)+b^{[l]} \end{aligned} \] 因此,当权重非常小时(<1),在连乘的作用下,\(Z^{[l]}\)会很小,随着\(l\)增大,\(Z^{[l]}\)呈指数性减小;当权重比较大时(>1),在连乘的作用下,\(Z^{[l]}\)会很大(对于sigmoid、tanh激活函数,“很大”是指很接近1;对于其他激活函数,“很大”是指数值上很大,至少远大于1),随着\(l\)增大,\(Z^{[l]}\)呈指数性增大。

因为\(A^{[l]} = g(Z^{[l]})\),对于所有常用的激活函数,当\(Z^{[l]}\)很小时,\(A^{[l]}\)也会很小;如果激活函数不是sigmoid和tanh函数,而是其他的几种常见的激活函数,当\(Z^{[l]}\)很大时,\(A^{[l]}\)也会很大

\[ \left\{ \begin{aligned} &\frac{\partial L}{\partial Z^{[l]}} = W^{[l+1]T}\cdot\frac{\partial L}{\partial Z^{[l+1]}}*g'(Z^{[l]})\\\ &\frac{\partial J}{\partial W^{[l]}} = \frac{1}{m}\frac{\partial L}{\partial Z^{[l]}}\cdot A^{[l-1]T}\\\ &\frac{\partial J}{\partial b^{[l]}} = \frac{1}{m}np.sum(\frac{\partial L}{\partial Z^{[l]}},axis=1,keepdims=True) \end{aligned} \right. \]

  • \(Z^{[l]}\)很小时,对于所有常见的激活函数,它们的导数\(g'(Z^{[l]})\)也会很小,因此\(\frac{\partial L}{\partial Z^{[l]}}\)也会很小,从而导致\(\frac{\partial J}{\partial W^{[l]}}\)\(\frac{\partial J}{\partial b^{[l]}}\)都会很小,导致梯度消失;特别的,对于\(\frac{\partial J}{\partial W^{[l]}}\)会同时因为\(Z^{[l]}\)很小和\(A^{[l-1]}\)很小使得\(\frac{\partial J}{\partial W^{[l]}}\)更小,更容易梯度消失
  • \(Z^{[l]}\)很大时:
    • 对于sigmoid和tanh激活函数,\(Z^{[l]}\)“很大”应该是指\(Z^{[l]}\)内元素非常接近于1,虽然它们的函数值最大也不会达到1,但它们的导数值\(g'(Z^{[l]})\)会很小,在反向传播的角度上,会导致\(\frac{\partial L}{\partial Z^{[l]}}\)很小,从而可能导致梯度消失
    • 对于其他激活函数,它们的导数\(g'(Z^{[l]})\)基本为1,因此不会因为导数值导致梯度消失或梯度爆炸,但是:在正向连乘的结果下,\(Z^{[l-1]}\)也会很大,而\(A^{[l-1]} = g(Z^{[l]})\),因此\(A^{[l-1]}\)也会很大,而\(\frac{\partial J}{\partial W^{[l]}} = \frac{1}{m}\frac{\partial L}{\partial Z^{[l]}}\cdot A^{[l-1]T}\),这会导致权重的梯度爆炸

因此:

  • 当权重较大时(>1),在正向传播上会导致\(Z^{[l]}\)很大,激活函数为sigmoid或者tanh函数时,容易导致梯度消失;激活函数为其他常见激活函数时,容易导致权重的梯度爆炸
  • 当权重较小时(<1),在正向传播上会导致\(Z^{[l]}\)很小,容易导致梯度消失

结论

梯度消失和梯度爆炸是权重和激活函数共同作用的结果:

  • 当权重比较小(<1)时,通常会导致梯度消失
  • 当权重比较大时(>1),以sigmoid、tanh作为激活函数时,容易导致梯度消失
  • 当权重比较大时(>1),以其他常见激活函数作为激活函数时,容易导致梯度爆炸
  • 当以sigmoid、tanh作为激活函数时,容易导致梯度消失

梯度消失、梯度爆炸的危害

梯度消失、梯度爆炸会随着神经网络层数越多而越明显。如果存在梯度消失或者梯度爆炸,我们很难构建深层神经网络,因为这会导致训练非常困难。


梯度消失和梯度爆炸
https://blog.shinebook.net/2025/03/15/人工智能/理论基础/深度学习/梯度消失和梯度爆炸/
作者
X
发布于
2025年3月15日
许可协议