梯度消失与梯度爆炸

在深度学习中,梯度消失和梯度爆炸是常见问题,影响模型训练。解决方法包括随机初始化(如Xavier和He初始化)、使用ReLU等非饱和激活函数、批量归一化、梯度裁剪以及复用预训练层。激活函数的选择对模型性能至关重要,例如ReLU及其变体在防止梯度消失方面优于sigmoid和tanh,但RNN中仍偏好使用tanh来避免数值膨胀。批量归一化可以加速训练并稳定模型,但预测阶段会增加计算负担。梯度裁剪用于限制梯度幅值,防止梯度爆炸。预训练层的复用可以加速新任务的训练并提高模型性能。
摘要由CSDN通过智能技术生成

原文链接:https://www.yuque.com/yahei/hey-yahei/gradient_vanish_explode

在深度学习任务中,随着层数的增加,因为反向传播的链式求导规则,梯度容易出现指数形式地减小或增长,从而导致梯度消失(非常小,训练缓慢)或梯度爆炸(非常大,训练不稳定)现象的发生。
相比CNN,RNN更容易出现梯度消失和梯度爆炸问题,这一点在《梯度消失与梯度爆炸 - 为什么RNN通常不用ReLU? | Hey~YaHei!》中有一些简单的讨论。

参考:

  1. Hands-On Machine Learning with Scikit-Learn and TensorFlow(2017)》Chap11
  2. 卷积神经网络——深度学习实践手册(2017.05)
  3. 详解深度学习中的梯度消失、爆炸原因及其解决方法 | 知乎, DoubleV

解决梯度消失爆炸的常用技术(本文只讨论前五项):

  1. 【减少爆炸】合理的随机初始化策略(Xavier Initialization、He Initialization等)
  2. 【减少消失】使用非饱和函数作为激活函数(如ReLU)
  3. 【减少消失爆炸】批量归一化(Batch Normalization, BN)
  4. 【减少爆炸】梯度裁剪(Gradient Clipping)
  5. 【减少消失爆炸】复用预训练层
  6. 【较少爆炸权重正则化(Weights Regularization)
  7. 【减少消失残差结构
  8. 【减少消失】LSTM

随机初始化

参考:《深度学习500问 - Ch03深度学习基础 - 3.8权重偏差初始化
模型的训练需要对参数进行初始化,然后用反向传播算法和梯度下降法更新参数,如何初始化参数是有讲究的。通常会随机初始化为一些相对比较小的数值,防止参数过大导致梯度爆炸;但也不能太小,否则梯度太小,收敛就太慢。
考虑一些简单的初始化方式,
image.png

前向传播:
a 1 ( 2 ) = f ( W 11 ( 1 ) x 1 + W 12 ( 1 ) x 2 + W 13 ( 1 ) x 3 + b 1 ( 1 ) ) a 2 ( 2 ) = f ( W 21 ( 1 ) x 1 + W 22 ( 1 ) x 2 + W 23 ( 1 ) x 3 + b 2 ( 1 ) ) a 3 ( 2 ) = f ( W 31 ( 1 ) x 1 + W 32 ( 1 ) x 2 + W 33 ( 1 ) x 3 + b 3 ( 1 ) ) h W , b ( x ) = a 1 ( 3 ) = f ( W 11 ( 2 ) a 1 ( 2 ) + W 12 ( 2 ) a 2 ( 2 ) + W 13 ( 2 ) a 3 ( 2 ) + b 1 ( 2 ) ) a_1^{(2)} = f(W_{11}^{(1)} x_1 + W_{12}^{(1)} x_2 + W_{13}^{(1)} x_3 + b_1^{(1)}) \\ a_2^{(2)} = f(W_{21}^{(1)} x_1 + W_{22}^{(1)} x_2 + W_{23}^{(1)} x_3 + b_2^{(1)}) \\ a_3^{(2)} = f(W_{31}^{(1)} x_1 + W_{32}^{(1)} x_2 + W_{33}^{(1)} x_3 + b_3^{(1)}) \\ h_{W,b}(x) = a_1^{(3)} = f(W_{11}^{(2)} a_1^{(2)} + W_{12}^{(2)} a_2^{(2)} + W_{13}^{(2)} a_3^{(2)} + b_1^{(2)}) a1(2)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))a2(2)=f(W21(1)x1+W22(1)x2+W23(1)x3+b2(1))a3(2)=f(W31(1)x1+W32(1)x2+W33(1)x3+b3(1))hW,b(x)=a1(3)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))

反向传播:
∂ J ( W , b ; x , y ) ∂ W i j ( l ) = a j ( l ) δ i ( l + 1 ) ∂ J ( W , b ; x , y ) ∂ b i ( l ) = δ i ( l + 1 ) \begin{aligned} \frac{\partial J(W,b;x,y)}{\partial W_{ij}^{(l)}} &= a_j^{(l)} \delta_i^{(l+1)} \\ \frac{\partial J(W,b;x,y)}{\partial b_{i}^{(l)}} &= \delta_i^{(l+1)} \end{aligned} Wij(l)J(W,b;x,y)bi(l)J(W,b;x,y)=aj(l)δi(l+1)=δi(l+1)
其中, δ ( l ) \delta^{(l)} δ(l)是第 l l l层的输出误差,
δ i ( l ) = ( ∑ j = 1 s t + 1 W j i ( l ) δ j ( l + 1 ) ) f ′ ( z i ( l ) ) \delta_i^{(l)} = (\sum_{j=1}^{s_{t+1}} W_{ji}^{(l)} \delta_j^{(l+1)} ) f^{\prime}(z_i^{(l)}) δi(l)=(j=1st+1Wji(l)δj(l+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值