本文探讨深度学习中经常会提到的概念–梯度消失与梯度爆炸。他们是影响模型收敛,学习好坏的一个重要因素,对此现象也提出了对应的解决方案。在此记录其概念,原因和相关的解决方案,仅供参考。
目录
概念
梯度爆炸就是在梯度更新时偏导数很大,导致更新参数无法收敛到最值(总会跳到其他不好的地方)。
梯度消失就是在梯度更新时偏导数很小,导致更新参数无法收敛到最值(训不动)。
参数更新公式:
w = w − α ∂ J ( w ) ∂ w w = w-\alpha\frac{\partial J(w)}{\partial w} w=w−α∂w∂J(w)
原因
主要原因有三点,反向传播在网络较深时出现梯度累积,激活函数的导数,权重初始化参数过小或过大。
- 训练方式:在反向传播的链式求导过程中,如果权重乘以激活函数导数这部分大于1,随着层数加深时,梯度更新会以指数的形式增加,则会梯度爆炸;如果这部分小于1,随着层数加深,梯度会指数衰减,则会出现梯度消失。
- z = wx+b a= σ ( z ) \sigma(z) σ(z) a-> y ^ \hat{y} y^ L( y ^ \hat{y} y^,y)
- 对于某一层:da/dx = da/dz * dz/dx =(激活函数导数)✖️w 得到da/dx 用于梯度传播
- dw = da/dz * x x就是[dz/dw] 用于更新本层的权重参数
- 这一层的dx相当于下一层的da 则继续相乘计算下一层的dx
-
激活函数:如果选用sigmoid激活函数, S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}}