Alex_McAvoy

想要成为渔夫的猎手

循环神经网络的梯度问题

References:

【概述】

在深度学习中,梯度对 BP 网络的训练起到了十分重要的作用,而梯度爆炸和梯度消失,是十分常见的两个问题

在循环神经网络中,采用 BPTT 进行训练,也存在这两个问题,梯度消失会使得 RNN 权重无法被更新,最终导致训练失败,梯度爆炸会使得 RNN 不稳定,无法从长输入数据序列上学习

关于梯度爆炸与梯度消失,详见:梯度爆炸与梯度消失

【RNN 中梯度问题出现原因】

RNN 循环单元结构如下图所示

现假设存在一具有 $3$ 个循环单元的 RNN,最左端的输入 $s_0$ 为给定值,同时,为便于分析,那么前向传播过程为:

假设在 $t=3$ 时刻,损失函数为 $L_3$,那么根据反向传播过程,有:

那么,对于具有 $T$ 个时间步的 RNN,将上述公式进行推广,有:

此时,RNN 梯度消失和梯度爆炸的原因就产生了,在上述的第二个等式和第三个等式中,出现了与时间步 $t$ 相关的连乘的因式

以第二个等式为例,有:

其中,$f’$ 为隐藏层激活函数的导数,假设 $f(\cdot)$ 为 sigmoid 函数,其导数 $f’=f(1-f)\in(0,\frac{1}{4})$,那么:

  • $W<1$ 时:$\frac{\partial s_k}{\partial s_{k-1}}<1$,经过数次相乘后,$\frac{\partial L}{\partial W}$ 逐渐接近于 $0$,即梯度消失
  • $W>1$ 时:$\frac{\partial s_k}{\partial s_{k-1}}>1$,经过数次相乘后,$\frac{\partial L}{\partial W}$ 越来越大,即梯度爆炸
感谢您对我的支持,让我继续努力分享有用的技术与知识点!