• LSTM 浅析


    1. LSTM 简介

      1997 年,Hochreiter 和 Schmidhuber 提出长短期记忆网络 (Long Short Term Memory, LSTM),这是一种特殊的循环神经网络,能够学习长期依赖性。由于梯度爆炸/消失的影响,RNN 只能学到短期依赖关系。如果一个序列过长,RNN 中梯度更新幅度小的网络层 (通常是较早的层) 将停止学习,很难把较早的信息传输到后面,造成了较早的信息的遗失。

      LSTM 是 RNN 的升级版,是为了克服短期记忆问题而提出的解决方案。普通 RNN 隐层中只有单一的神经网络层 (如 tanh 层),但在 LSTM 中增加至 4 个。此外,LSTM 还引入了 “门” 机制来调节信息流。这些门结构可以保留/删除序列中的特定信息,沿着长链序列传递相关信息来实现预测。LSTM 网络结构如下

    图中各模块定义为

    • 黄色方块:神经网络层;
    • 粉色圆圈:按位操作或逐点操作 (如向量加和、向量乘积等);
    • 单箭头:信号传递;
    • 合流箭头:信号的连接 (向量拼接);
    • 分流箭头:信号的复制分流。

    2. LSTM 详解

      LSTM 有两个关键,其一是单元状态 C t C_t Ct。LSTM 接收上一个时刻的单元状态 C t − 1 C_{t-1} Ct1,与当前信号作用 (信息的增/删与融合) 产生新的单元状态 C t C_{t} Ct,最后传递至下一时刻。LSTM 中引入的“”是另一关键,门用来控制 C t C_t Ct 中信息的增/删。门是一种让信息选择性通过的方法,有的直接控制信号通过与否,有的则在信息通过的过程中对信息进行加工。LSTM 存在着遗忘门、记忆门和输出门三种门结构,使用了 S i g m o i d Sigmoid Sigmoid t a n h tanh tanh 两种神经网络层。

    • tanh 层:由输入门与 t a n h tanh tanh 神经网络层和一个按位乘操作构成;
    • Sigmoid 层:由一个 S i g m o i d Sigmoid Sigmoid 神经网络层和一个按位乘操作构成;
    • 遗忘门:由一个 S i g m o i d Sigmoid Sigmoid 神经网络层和一个按位乘操作构成;
    • 输入门:由输入门与 t a n h tanh tanh 神经网络层和一个按位乘操作构成;
    • 输出门:与 t a n h tanh tanh 函数以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。

    2.1 Tanh/Sigmoid

      Tanh 网络层的果与 Tanh 函数相同,其输出位于区间 (-1, 1) 内,用于调节流经网络的值。当向量流经网络时,向量经历了许多数学变换,其输出范围难以预料。使用 Tanh 层则能够将参数取值限制在一定范围内。

      Sigmoid 网络层与 Tanh 网络层类似,其输出区间为 (0, 1),用于控制信息的保留/删除。其输出值介于 0~1 之间,可视作一个比例因子,控制信息通过的比例。

    Tanh 函数Sigmoid 函数

    2.2 遗忘门

      遗忘门结构如下图高亮部分所示。遗忘门用来“忘记”信息,用来实现上一时刻单元状态 C t − 1 C_{t-1} Ct1 中信息的过滤选择。具体而言, S i g m o i d Sigmoid Sigmoid 层以当前输入 x t x_t xt 和上一时刻隐层状态 h t − 1 h_{t-1} ht1 为输入,计算得到参数 f t f_t ft。最后通过 f t f_t ft C t − 1 C_{t-1} Ct1 的乘积,得到选择性遗忘后的输出 C t ′ C'_{t} Ct。值得注意的是,遗忘门虽以 x t x_t xt h t − 1 h_{t-1} ht1 为输入,但输出 f t ∈ ( 0 , 1 ) f_t \in (0, 1) ft(0,1) 是个标量,所以在整个过程中并不存在新信息的流入。

      此处给出遗忘门的动画演示

    2.3 输入门

      输入门结构如下图高亮部分所示。输入门的作用与遗忘门相反,它决定着 x t x_t xt h t h_t ht 中哪些信息会被添加至 C t C_t Ct 中。输入门中同时存在 S i g m o i d Sigmoid Sigmoid 层和 T a n h Tanh Tanh 层。 i t i_t it S i g m o i d Sigmoid Sigmoid 层输出,与 f t f_t ft 类似, i t i_t it 是个决定添加信息程度的标量。 S i g m o i d Sigmoid Sigmoid 分支不涉及信息的流动,新增信息通过 T a n h Tanh Tanh 分支流入。 T a n h Tanh Tanh 层输出 C ~ t \tilde{C}_t C~t 是个中间变量,被称作候选状态 C ~ t \tilde{C}_t C~t 通过与 i t i_t it 的乘积,最终确定被添加至 C t C_t Ct 中的信息,这部分信息将被“记住”。

      此处给出输入门的动画演示

    2.4 单元状态

      观察下图,贯穿图片顶部的水平线代表传送带机制,上面是单元状态 C t C_t Ct。在向量贯穿过程中,仅有少量线性操作,这使得信息很容易以不变的方式流过。单元状态相当于传输信息的通路,让信息在序列链中传递下去,这部分可看作是网络的 “记忆”。理论上,在序列处理过程中,单元状态能够一直携带相关信息。因此,早先获得的信息也能够持续传输,达到长时间记忆的效果。

      如果遗忘门和输入门都已掌握,那单元状态更新部分就很好理解了。遗忘门遗忘了 C t C_t Ct 中的部分信息,得到 f t ∗ C t f_t * C_t ftCt;输入门从输入信息中挑选了部分信息进行记忆,得到 i t ∗ C ~ t i_t * \tilde{C}_t itC~t;用二者的加和完成 C t C_t Ct 的更新

      此处,给出细胞状态更新的动画演示

    2.5 输出门

      输出门结构如下图高亮部分所示。输出门决定着隐藏状态 h t h_t ht 的值,而 h t h_t ht 中蕴含着先前输入的相关信息。与前文类似, o t o_t ot S i g m o i d Sigmoid Sigmoid 层的输出标量, T a n h Tanh Tanh 层则完成 C t C_t Ct 的变换。最后,以二者的乘积确定 h t h_t ht 所携带的信息

      此处,给出输出门动画演示

    3. LSTM 的 PyTorch 实现

    3.1 手写 LSTM 单元

    To be continue…

    3.2 LSTM 实例

    To be continue…

    参考

    1. LSTM 详解
    2. 超生动图解长短记忆神经网络
    3. 深度学习笔记 (13.numpy 实现 LSTM)
  • 相关阅读:
    mysql中自定义变量(浅显易懂简洁版)
    C++_pen_类
    centos查询服务器硬件信息
    MFC Windows 程序设计[243]之托盘弹泡泡(附源码)
    [Go版]设计模式——Template模版方法模式
    【数字逻辑】——逻辑函数及其简化(学习笔记)
    含文档+PPT+源码等]精品基于SpringCloud实现的商品服务系统-微服务毕业设计项目源码-分布式毕设项目[包运行成功]
    UPS负载箱的工作原理是什么?
    java毕业设计城镇保障性住房管理系统mybatis+源码+调试部署+系统+数据库+lw
    kafka消息的生产和消费(java)
  • 原文地址:https://blog.csdn.net/qq_41731861/article/details/126860871