深度学习中的梯度消失与梯度爆炸问题及其解决办法

问题引出

在前面,我们介绍了反向传播算法,其最终极的含义就是计算偏导数 ∂ C ∂ ω j k l \frac{\partial C}{\partial\omega_{jk}^{l}} ωjklC ∂ C ∂ b j l \frac{\partial C}{\partial b_{j}^{l}} bjlC,其中 ∂ C ∂ ω j k l = α k l − 1 ⋅ δ j l \frac{\partial C}{\partial\omega_{jk}^{l}}=\alpha_k^{l-1}\cdot\delta_j^l ωjklC=αkl1δjl δ l = ( ( ω l + 1 ) T δ l + 1 ) σ ′ ( z l ) \delta^l=((\omega^{l+1})^T\delta^{l+1})\sigma^{\prime}(z^l) δl=((ωl+1)Tδl+1)σ(zl),将 ∂ C ∂ ω \frac{\partial C}{\partial\omega} ωC δ l \delta^l δl展开,可以想象一下,这会有很多的 σ ′ ( z ) ω \sigma^{\prime}(z)\omega σ(z)ω连乘。
其中: σ ( z ) = 1 1 + e − z \sigma(z)=\frac{1}{1+e^{-z}} σ(z)=1+ez1,计算得到:
σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma^{\prime}(z)=\sigma(z)(1-\sigma(z)) σ(z)=σ(z)(1σ(z))

梯度消失

利用google搜索(1/(1+exp(-x)))(1-1/(1+exp(-x)))得到 σ ′ ( z ) \sigma^{\prime}(z) σ(z)的图像:
在这里插入图片描述
该函数的最大值为 1 4 \frac{1}{4} 41,我们假设 ω \omega ω都是一个合适的数,使 ∣ σ ′ ( z ) ω ∣ < 1 |\sigma^{\prime}(z)\omega|\lt 1 σ(z)ω<1,可以想象,网络越深,连乘的次数越多,得到的 ∂ C ∂ ω \frac{\partial C}{\partial\omega} ωC越小,极端情况下 ∂ C ∂ ω \frac{\partial C}{\partial\omega} ωC可能趋近于0,这就是梯度消失。

梯度爆炸

既然梯度消失时令 ∂ C ∂ ω \frac{\partial C}{\partial\omega} ωC越来越小,相反的梯度爆炸就是让 ∂ C ∂ ω \frac{\partial C}{\partial\omega} ωC可能趋近于0越来越大,只要 ∣ σ ′ ( z ) ω ∣ > 1 |\sigma^{\prime}(z)\omega|\gt 1 σ(z)ω>1就是有可能的。回忆一下梯度下降算法中 ω \omega ω的更新方法:
ω k → ω k ′ = ω k − η ∂ C ∂ ω k \omega_k \rightarrow \omega_k^{\prime}=\omega_k-\eta\frac{\partial C}{\partial \omega_k} ωkωk=ωkηωkC
想想一下,如果 η ∂ C ∂ ω k \eta\frac{\partial C}{\partial \omega_k} ηωkC比原本的 ω k \omega_k ωk都还要大了,那这个梯度就向反方向更新了,模型无法收敛,这就是梯度爆炸。

总结一下,其实梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应,越乘越小或越乘越大。

如何解决

规避梯度消失和梯度爆炸的方法有:

  • 预训练和微调
  • 梯度阈值
    主要是针对梯度爆炸,它设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。
  • 正则化
    也是针对梯度爆炸的,主要是通过对网络权重做正则来限制过拟合。如果发生梯度爆炸,那么权值就会变的非常大,反过来,通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生,常用的正则化方法有 L1 正则和 L2 正则。
  • 激活函数
    通过之前的分析,我们发现梯度问题是由 s i g m o d sigmod sigmod函数的导数引起的,我们可以选其他的激活函数代替 s i g m o d sigmod sigmod函数,如 r e l u relu relu t a n h tanh tanh,其中 r e l u relu relu函数在正数部分的导数为1,不会导致梯度问题。
    注: t a n h ′ ( z ) = 1 − t a n h ( z ) 2 tanh^{\prime}(z)=1-tanh(z)^2 tanh(z)=1tanh(z)2,其最大值为1,也有可能出现梯度问题。
  • BN方法
    BN(Batch Normalization)就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。
  • LSTM
    通过各种是遗忘门、输入门和输出门决定需要丢弃和记忆哪些信息。能防止梯度问题。

其他

那深度神经网络难以训练的根本是因为梯度消失或梯度爆炸问题吗?不是,而是因为退化,具体来讲就是权重矩阵的退化,导致模型的有效自由度减少。

矩阵的条件数可以表示为:
κ ( A ) = σ m a x ( A ) σ m i n ( A ) \kappa (A)=\frac{\sigma_{max}(A)}{\sigma_{min}(A)} κ(A)=σmin(A)σmax(A)
其中 σ m a x ( A ) \sigma_{max}(A) σmax(A) σ m i n ( A ) \sigma_{min}(A) σmin(A)分别是 A A A的极大和极小奇异值。
随着相乘矩阵的数量(网络深度)的增加,矩阵的乘积变得更加退化,积矩阵的奇异值变得越来越集中,因此其条件数变得越来越大,越来越病态。

若一个矩阵的条件数越小,那么求解这个矩阵的线性方程组就越稳定,不会因为一点扰动导致这个线性方程组的解变化很大。可逆矩阵为非退化矩阵,不可逆矩阵为退化矩阵。

感谢阅读。

如果觉得文章对你有所帮助,欢迎打赏哦~
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yougwypf1991

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值