动手学深度学习Task2笔记

循环神经网络

  1. 什么是循环神经网络
    下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量H,用H_t表示H在时间步t的值。H_t的计算基于X_tH_{t-1},可以认为H_t记录了到当前字符为止的序列信息,利用H_t对序列的下一个字符进行预测。
  1. 循环神经网络构造
    \boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h)
    由于引入了\boldsymbol{H}_{t-1} \boldsymbol{W}_{hh}H_{t}能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于H_{t}的计算基于H_{t-1},上式的计算是循环的,使用循环计算的网络即循环神经网络,在时间步t,输出层的输出为:
    \boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q
  2. one-hot向量
    假设词典大小是N,每次字符对应一个从0到N-1的唯一的索引,则该字符的向量是一个长度为N的向量,若字符的索引是i,则该向量的第i个位置为1,其他位置为0。
  3. 裁剪梯度
    循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量g,并设裁剪的阈值是\theta。裁剪后的梯度
    \min\left(\frac{\theta}{\|\boldsymbol{g}\|}, 1\right)\boldsymbol{g}
  4. GRU⻔控循环神经⽹络
    RNN存在的问题:梯度较容易出现衰减或爆炸
    ⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系


  • 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
  • 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
  1. LSTM长短期记忆
    遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
    输出门:控制从记忆细胞到隐藏状态
    记忆细胞:⼀种特殊的隐藏状态的信息的流动


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容