1.RNN的构造过程

RNN是一种特殊的神经网路结构,其本身是包含循环的网络,允许信息在神经元之间传递,如下图所示:

Pytorch学习笔记10----LSTM循环神经网络原理

 

图示是一个RNN结构示意图,图中的 Pytorch学习笔记10----LSTM循环神经网络原理 表示神经网络模型,Pytorch学习笔记10----LSTM循环神经网络原理 表示模型的输入信号,Pytorch学习笔记10----LSTM循环神经网络原理 表示模型的输出信号,如果没有 Pytorch学习笔记10----LSTM循环神经网络原理 的输出信号传递到 Pytorch学习笔记10----LSTM循环神经网络原理 的那个箭头, 这个网络模型与普通的神经网络结构无异。那么这个箭头做了什么事情呢?它允许 Pytorch学习笔记10----LSTM循环神经网络原理 将信息传递给 Pytorch学习笔记10----LSTM循环神经网络原理 ,神经网络将自己的输出作为输入了!

关键在于输入信号是一个时间序列,跟时间 Pytorch学习笔记10----LSTM循环神经网络原理 有关。也就是说,在 Pytorch学习笔记10----LSTM循环神经网络原理 时刻,输入信号 Pytorch学习笔记10----LSTM循环神经网络原理 作为神经网络 Pytorch学习笔记10----LSTM循环神经网络原理 的输入,Pytorch学习笔记10----LSTM循环神经网络原理 的输出分流为两部分,一部分输出给 Pytorch学习笔记10----LSTM循环神经网络原理 ,一部分作为一个隐藏的信号流被输入到 Pytorch学习笔记10----LSTM循环神经网络原理 中,在下一次时刻输入信号 Pytorch学习笔记10----LSTM循环神经网络原理 时,这部分隐藏的信号流也作为输入信号输入到了 Pytorch学习笔记10----LSTM循环神经网络原理 中。此时神经网络 Pytorch学习笔记10----LSTM循环神经网络原理 就同时接收了 Pytorch学习笔记10----LSTM循环神经网络原理 时刻和 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的信号输入了,此时的输出信号又将被传递到下一时刻的 Pytorch学习笔记10----LSTM循环神经网络原理 中。如果我们把上面那个图根据时间 Pytorch学习笔记10----LSTM循环神经网络原理 展开来看,就是:

Pytorch学习笔记10----LSTM循环神经网络原理

 

循环神经网络的记忆性: 

普通的神经网络:当我们输入一张卡比兽被喷水的图片时,神经网络会认出卡比兽和水,推断出卡比兽有60%的概率在洗澡,30%的概率在喝水,10%的概率被攻击。

Pytorch学习笔记10----LSTM循环神经网络原理

循环神经网络:在隐藏状态(Hidden State)为“战斗场景开始”的情况下输入神奇宝贝喷水进攻图,RNN能够根据“嘴中喷水”的场景推测图一神奇宝贝是在进攻的概率为85%。之后我们在记忆为“在战斗、敌人在攻击和敌人是水性攻击”三个条件下输入图片二,RNN就会分析出“卡比兽被攻击”是概率最大的情况。

Pytorch学习笔记10----LSTM循环神经网络原理

2.长短时间记忆网络LSTM概述

长短期记忆(Long Short Term Memory,LSTM)网络是一种特殊的RNN模型,其特殊的结构设计使得它可以避免长期依赖问题,记住很早时刻的信息是LSTM的默认行为,而不需要专门为此付出很大代价。

Pytorch学习笔记10----LSTM循环神经网络原理

粗看起来,这个结构有点复杂,不过不用担心,接下来我们会慢慢解释。在解释这个神经网络层时我们先来认识一些基本的模块表示方法。图中的模块分为以下几种:

Pytorch学习笔记10----LSTM循环神经网络原理

  • 黄色方块:表示一个神经网络层(Neural Network Layer);
  • 粉色圆圈:表示按位操作或逐点操作(pointwise operation),例如向量加和、向量乘积等;
  • 单箭头:表示信号传递(向量传递);
  • 合流箭头:表示两个信号的连接(向量拼接);
  • 分流箭头:表示信号被复制后传递到2个不同的地方。

3.LSTM的基本思想

LSTM的关键是细胞状态(直译:cell state),表示为 Pytorch学习笔记10----LSTM循环神经网络原理 ,用来保存当前LSTM的状态信息并传递到下一时刻的LSTM中,也就是RNN中那根“自循环”的箭头。当前的LSTM接收来自上一个时刻的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 ,并与当前LSTM接收的信号输入 Pytorch学习笔记10----LSTM循环神经网络原理 共同作用产生当前LSTM的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理,具体的作用方式下面将详细介绍。

Pytorch学习笔记10----LSTM循环神经网络原理

在LSTM中,采用专门设计的“门”来引入或者去除细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 中的信息。门是一种让信息选择性通过的方法。有的门跟信号处理中的滤波器有点类似,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。这里所采用的门包含一个 Pytorch学习笔记10----LSTM循环神经网络原理 神经网络层和一个按位的乘法操作,如下图所示:

Pytorch学习笔记10----LSTM循环神经网络原理

其中黄色方块表示Pytorch学习笔记10----LSTM循环神经网络原理神经网络层,粉色圆圈表示按位乘法操作。Pytorch学习笔记10----LSTM循环神经网络原理神经网络层可以将输入信号转换为 Pytorch学习笔记10----LSTM循环神经网络原理 到 Pytorch学习笔记10----LSTM循环神经网络原理 之间的数值,用来描述有多少量的输入信号可以通过。Pytorch学习笔记10----LSTM循环神经网络原理 表示“不允许任何量通过”,Pytorch学习笔记10----LSTM循环神经网络原理 表示“允许所有量通过”。Pytorch学习笔记10----LSTM循环神经网络原理神经网络层起到类似下图的Pytorch学习笔记10----LSTM循环神经网络原理函数所示的作用:

Pytorch学习笔记10----LSTM循环神经网络原理

其中,横轴表示输入信号,纵轴表示经过sigmod函数以后的输出信号。

LSTM主要包括三个不同的门结构:遗忘门、记忆门和输出门。这三个门用来控制LSTM的信息保留和传递,最终反映到细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 和输出信号 Pytorch学习笔记10----LSTM循环神经网络原理 。如下图所示:

Pytorch学习笔记10----LSTM循环神经网络原理

图中标示了LSTM中各个门的构成情况和相互之间的关系,其中:

  • 遗忘门由一个Pytorch学习笔记10----LSTM循环神经网络原理神经网络层和一个按位乘操作构成;
  • 记忆门由输入门(input gate)与tanh神经网络层和一个按位乘操作构成;
  • 输出门(output gate)与 Pytorch学习笔记10----LSTM循环神经网络原理 函数(注意:这里不是 Pytorch学习笔记10----LSTM循环神经网络原理 神经网络层)以及按位乘操作共同作用将细胞状态和输入信号传递到输出端。

4.LSTM门讲解

(1)遗忘门

顾名思义,遗忘门的作用就是用来“忘记”信息的。在LSTM的使用过程中,有一些信息不是必要的,因此遗忘门的作用就是用来选择这些信息并“忘记”它们。遗忘门决定了细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 中的哪些信息将被遗忘。那么遗忘门的工作原理是什么呢?看下面这张图。

Pytorch学习笔记10----LSTM循环神经网络原理

 

Pytorch学习笔记10----LSTM循环神经网络原理

左边高亮的结构就是遗忘门了,包含一个Pytorch学习笔记10----LSTM循环神经网络原理神经网络层(黄色方框,神经网络参数为 Pytorch学习笔记10----LSTM循环神经网络原理),接收 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的输入信号 Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 时刻LSTM的上一个输出信号 Pytorch学习笔记10----LSTM循环神经网络原理 ,这两个信号进行拼接以后共同输入到Pytorch学习笔记10----LSTM循环神经网络原理神经网络层中,然后输出信号 Pytorch学习笔记10----LSTM循环神经网络原理Pytorch学习笔记10----LSTM循环神经网络原理是一个 Pytorch学习笔记10----LSTM循环神经网络原理 到Pytorch学习笔记10----LSTM循环神经网络原理之间的数值,并与 Pytorch学习笔记10----LSTM循环神经网络原理 相乘来决定 Pytorch学习笔记10----LSTM循环神经网络原理中的哪些信息将被保留,哪些信息将被舍弃。

(2)记忆门

记忆门的作用与遗忘门相反,它将决定新输入的信息 Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 中哪些信息将被保留。

Pytorch学习笔记10----LSTM循环神经网络原理

Pytorch学习笔记10----LSTM循环神经网络原理

如图所示,记忆门包含2个部分。第一个是包含Pytorch学习笔记10----LSTM循环神经网络原理神经网络层(输入门,神经网络网络参数为 Pytorch学习笔记10----LSTM循环神经网络原理)和一个 Pytorch学习笔记10----LSTM循环神经网络原理 神经网络层(神经网络参数为 Pytorch学习笔记10----LSTM循环神经网络原理)。

  • Pytorch学习笔记10----LSTM循环神经网络原理神经网络层的作用很明显,跟遗忘门一样,它接收 Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 作为输入,然后输出一个 Pytorch学习笔记10----LSTM循环神经网络原理 到 Pytorch学习笔记10----LSTM循环神经网络原理 之间的数值 Pytorch学习笔记10----LSTM循环神经网络原理 来决定哪些信息需要被更新;
  • Tanh神经网络层的作用是将输入的 Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 整合,然后通过一个Pytorch学习笔记10----LSTM循环神经网络原理神经网络层来创建一个新的状态候选向量 Pytorch学习笔记10----LSTM循环神经网络原理 ,Pytorch学习笔记10----LSTM循环神经网络原理 的值范围在 Pytorch学习笔记10----LSTM循环神经网络原理 到 Pytorch学习笔记10----LSTM循环神经网络原理 之间。

记忆门的输出由上述两个神经网络层的输出决定,Pytorch学习笔记10----LSTM循环神经网络原理 与 Pytorch学习笔记10----LSTM循环神经网络原理 相乘来选择哪些信息将被新加入到 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 中。

(3)更新细胞状态

有了遗忘门和记忆门,我们就可以更新细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 了。

Pytorch学习笔记10----LSTM循环神经网络原理

Pytorch学习笔记10----LSTM循环神经网络原理

这里将遗忘门的输出 Pytorch学习笔记10----LSTM循环神经网络原理 与上一时刻的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 相乘来选择遗忘和保留一些信息,将记忆门的输出与从遗忘门选择后的信息加和得到新的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理。这就表示 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理 已经包含了此时需要丢弃的 Pytorch学习笔记10----LSTM循环神经网络原理 时刻传递的信息和 Pytorch学习笔记10----LSTM循环神经网络原理 时刻从输入信号获取的需要新加入的信息 Pytorch学习笔记10----LSTM循环神经网络原理 。Pytorch学习笔记10----LSTM循环神经网络原理 将继续传递到 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的LSTM网络中,作为新的细胞状态传递下去。

(4)输出门

前面已经讲了LSTM如何来更新细胞状态 Pytorch学习笔记10----LSTM循环神经网络原理, 那么在 Pytorch学习笔记10----LSTM循环神经网络原理 时刻我们输入信号 Pytorch学习笔记10----LSTM循环神经网络原理 以后,对应的输出信号该如何计算呢?

Pytorch学习笔记10----LSTM循环神经网络原理

Pytorch学习笔记10----LSTM循环神经网络原理

如上面左图所示,输出门就是将Pytorch学习笔记10----LSTM循环神经网络原理时刻传递过来并经过了前面遗忘门与记忆门选择后的细胞状态Pytorch学习笔记10----LSTM循环神经网络原理, 与 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的输出信号 Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 时刻的输入信号 Pytorch学习笔记10----LSTM循环神经网络原理 整合到一起作为当前时刻的输出信号。整合的过程如上图所示,Pytorch学习笔记10----LSTM循环神经网络原理 和 Pytorch学习笔记10----LSTM循环神经网络原理 经过一个Pytorch学习笔记10----LSTM循环神经网络原理神经网络层(神经网络参数为 Pytorch学习笔记10----LSTM循环神经网络原理)输出一个 Pytorch学习笔记10----LSTM循环神经网络原理 到 Pytorch学习笔记10----LSTM循环神经网络原理 之间的数值 Pytorch学习笔记10----LSTM循环神经网络原理Pytorch学习笔记10----LSTM循环神经网络原理 经过一个Pytorch学习笔记10----LSTM循环神经网络原理函数(注意:这里不是 Pytorch学习笔记10----LSTM循环神经网络原理 神经网络层)到一个在 Pytorch学习笔记10----LSTM循环神经网络原理 到 Pytorch学习笔记10----LSTM循环神经网络原理 之间的数值,并与Pytorch学习笔记10----LSTM循环神经网络原理 相乘得到输出信号 Pytorch学习笔记10----LSTM循环神经网络原理 ,同时 Pytorch学习笔记10----LSTM循环神经网络原理 也作为下一个时刻的输入信号传递到下一阶段。

其中,Pytorch学习笔记10----LSTM循环神经网络原理函数是激活函数的一种,函数图像为:

Pytorch学习笔记10----LSTM循环神经网络原理

参考文献:

https://zhuanlan.zhihu.com/p/27345523

https://zhuanlan.zhihu.com/p/104475016