资讯详情

斯坦福NLP名课带学详解 | CS224n 第7讲 - 梯度消失问题与RNN变种(NLP通关指南·完结)

ShowMeAI研究中心

  • 作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/241
  • 声明:所有版权,请联系平台和作者,注明来源

ShowMeAI为自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的所有课件都完成了,并制作成了GIF动图!

本讲内容的可以在 查看。视频、课件等资料的获取方式见


引言

(可以参考梯度消失和梯度爆炸ShowMeAI吴恩达老师课程总结文章深度学习教程 |

本文涵盖了内容

我们学会了上节课

  • (RNNs)以及他们为什么对(LM)很有用

我们今天要学习

  • RNNs的以及如何修复它们
  • 更复杂的

我们将在下一节课上学习

  • 如何使用基础RNN-based系统结构,即sequence-to-sequence with attention来实现
  • (NMT)

今日课程要点

  • 梯度消失问题
  • 两种新类型RNN:LSTM和GRU
  • 其他梯度消失(爆炸)的解决方案
    • 梯度裁剪
    • 跳接
  • 更多RNN变体
    • 双向RNN
    • 多层RNN

1.梯度消失

1.1 梯度消失问题

  • 梯度消失问题:当这些梯度很小时,反向传输越深,梯度信号就越小

1.2 梯度消失证明简述

Source: “On the difficulty of training recurrent neural networks”, Pascanu et al, 2013. http://proceedings.mlr.press/v28/pascanu13.pdf

h ( t ) = σ ( W h h ( t ? 1 ) W x x ( t ) b 1 ) \boldsymbol{h}^{(t)}=\sigma\left(\boldsymbol{W}_{h} \boldsymbol{h}^{(t-1)} \boldsymbol{W}_{x} \boldsymbol{x}^{(t)} \boldsymbol{b}_{1}\right) h(t)=σ(Whh(t−1)+Wx​x(t)+b1​)

  • 因此通过得到:

∂ h ( t ) ∂ h ( t − 1 ) = diag ⁡ ( σ ′ ( W h h ( t − 1 ) + W x x ( t ) + b 1 ) ) W h \frac{\partial \boldsymbol{h}^{(t)}}{\partial \boldsymbol{h}^{(t-1)}}=\operatorname{diag}\left(\sigma^{\prime}\left(\boldsymbol{W}_{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W}_{x} \boldsymbol{x}^{(t)}+\boldsymbol{b}_{1}\right)\right) \boldsymbol{W}_{h} ∂h(t−1)∂h(t)​=diag(σ′(Wh​h(t−1)+Wx​x(t)+b1​))Wh​

1.3 梯度消失证明简述

  • 考虑矩阵的 L2 范数

∥ ∂ J ( i ) ( θ ) ∂ h ( j ) ∥ ≤ ∥ ∂ J ( i ) ( θ ) ∂ h ( i ) ∥ ∥ W h ∥ ( i − j ) ∏ j < t ≤ i ∥ diag ⁡ ( σ ′ ( W h h ( t − 1 ) + W x x ( t ) + b 1 ) ) ∥ \left\|\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}^{(j)}}\right\| \leq\left\|\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}^{(i)}}\right\|\left\|\boldsymbol{W}_{h}\right\|^{(i-j)} \prod_{j<t \leq i}\left\|\operatorname{diag}\left(\sigma^{\prime}\left(\boldsymbol{W}_{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W}_{x} \boldsymbol{x}^{(t)}+\boldsymbol{b}_{1}\right)\right)\right\| ∥∥∥∥​∂h(j)∂J(i)(θ)​∥∥∥∥​≤∥∥∥∥​∂h(i)∂J(i)(θ)​∥∥∥∥​∥Wh​∥(i−j)j<t≤i∏​∥∥∥​diag(σ′(Wh​h(t−1)+Wx​x(t)+b1​))∥∥∥​

  • Pascanu et al 表明,如果 W h W_h Wh​ 的<1,梯度 ∥ ∂ J ( i ) ( θ ) ∂ h ( j ) ∥ \|\frac{\partial J^{(i)}(\theta)}{\partial \boldsymbol{h}^{(j)}}\| ∥∂h(j)∂J(i)(θ)​∥ 将呈

    • 这里的界限是 1 1 1因为我们使用的非线性函数是sigmoid
  • 有一个类似的证明将一个 > 1与联系起来

1.4 为什么梯度消失是个问题?

  • 来自远处的梯度信号会丢失,因为它比来自近处的梯度信号小得多。
  • 因此,模型权重只会根据近期效应而不是长期效应进行更新。

1.5 为什么梯度消失是个问题?

  • 另一种解释:可以被看作是的衡量标准

  • 如果梯度在较长一段距离内(从时间步 t t t 到 t + n t+n t+n)变得越来越小,那么我们就不能判断:

    • 在数据中,步骤 t t t 和 t + n t+n t+n 之间
    • 我们用来捕获 t t t 和 t + n t+n t+n 之间的真正依赖关系

1.6 梯度消失对RNN语言模型的影响

  • 为了从这个训练示例中学习,RNN-LM需要对第7步的 tickets 和最后的目标单词 tickets 之间的

  • 但是如果梯度很小,模型就

    • 因此模型无法在测试时

1.7 梯度消失对RNN语言模型的影响

“Assessing the Ability of LSTMs to Learn Syntax-Sensitive Dependencies”, Linzen et al, 2016. https://arxiv.org/pdf/1611.01368.pdf

  • Correct answer:

    • The writer of the books is planning a sequel
  • 由于梯度的消失,RNN-LMs更善于从学习而不是,所以他们犯这种错误的频率比我们希望的要高[Linzen et al . 2016]

2.梯度爆炸

2.1 为什么梯度爆炸是个问题?

  • 如果梯度过大,则SGD更新步骤过大

  • 这可能导致:我们更新的太多,导致错误的参数配置(损失很大)

  • 在最坏的情况下,这将导致网络中的 (然后你必须从较早的检查点重新启动训练)

2.2 梯度剪裁:梯度爆炸的解决方案

Source: “On the difficulty of training recurrent neural networks”, Pascanu et al, 2013. http://proceedings.mlr.press/v28/pascanu13.pdf

  • :如果梯度的范数大于某个阈值,在应用SGD更新之前将其缩小

  • :朝着同样的方向迈出一步,但要小一点

2.3 梯度剪裁:梯度爆炸的解决方案

Source: “Deep Learning”, Goodfellow, Bengio and Courville, 2016. Chapter 10.11.1. https://www.deeplearningbook.org/contents/rnn.html

  • 这显示了一个简单RNN的损失面(隐藏层状态是一个标量不是一个向量)

  • 在左边,由于陡坡,梯度下降有,导致攀登悬崖然后向右射击(都是)

  • 在右边,梯度剪裁减少了这些步骤的大小,所以参数调整不会有剧烈的波动

2.4 如何解决梯度消失问题?

  • 主要问题是RNN很难学习在多个时间步长的情况下保存信息
  • 在普通的RNN中,隐藏状态不断被重写

h ( t ) = σ ( W h h ( t − 1 ) + W x x ( t ) + b ) \boldsymbol{h}^{(t)}=\sigma\left(\boldsymbol{W}_{h} \boldsymbol{h}^{(t-1)}+\boldsymbol{W}_{x} \boldsymbol{x}^{(t)}+\boldsymbol{b}\right) h(t)=σ(Wh​h(t−1)+Wx​x(t)+b)

  • 有没有更好结构的RNN

3.长短时记忆网络(LSTM)

3.1 长短时记忆(LSTM)

“Long short-term memory”, Hochreiter and Schmidhuber, 1997. https://www.bioinf.jku.at/publications/older/2604.pdf

  • Hochreiter和Schmidhuber在1997年提出了一种RNN,用于解决梯度消失问题。

  • 在第 t t t 步,有一个 h ( t ) h^{(t)} h(t) 和一个 c ( t ) c^{(t)} c(t)

    • 都是长度为 n n n 的向量
    • 单元存储长期信息
    • LSTM可以从单元中
  • 信息被 擦除 / 写入 / 读取 的选择由三个对应的门控制

    • 门也是长度为 n n n 的向量
    • 在每个时间步长上,门的每个元素可以(1)、(0)或介于两者之间
    • :它们的值是基于当前上下文计算的

3.2 长短时记忆(LSTM)

我们有一个输入序列 x ( t ) x^{(t)} x(t),我们将计算一个隐藏状态 h ( t ) h^{(t)} h(t) 和单元状态 c ( t ) c^{(t)} c(t) 的序列。在时间步 t t t 时

  • :控制上一个单元状态的保存与遗忘

  • :控制写入单元格的新单元内容的哪些部分

  • :控制单元的哪些内容输出到隐藏状态

  • :这是要写入单元的新内容

  • :删除(“忘记”)上次单元状态中的一些内容,并写入(“输入”)一些新的单元内容

  • :从单元中读取(“output”)一些内容

  • :所有的门的值都在0到1之间

  • 通过逐元素的乘积来应用门

  • 这些是长度相同( n n n)的向量

3.3 长短时记忆(LSTM)

Source: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

3.4 长短时记忆(LSTM)

Source: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

3.5 LSTM如何解决梯度消失

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司