一.长短期记忆网络LSTM简介

LSTM是对RNN的改进和升级,在RNN模型中,对于长期依赖的问题可能产生梯度消失和梯度爆炸,而在RNN的基础上改进而来的LSTM则特别适合解决这类需要长时间依赖的问题。LSTM相对于RNN的不同使,LSTM将“记忆细胞”进行了改造,而不是像RNN那样只有一个简单的激活函数。在LSTM中,需要记录的信息会一直传递,不需要记录的信息会被截断掉

如下图所示,部分输出和输入被从网络中删除

双向长短期记忆网络代码 lstm长短期记忆网络_网络层

二.LSTM工作原理

如下图展示了LSTM的一个神经元内部的结构。每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入;粉色的圈代表 pointwise 的操作,诸如向量的和;黄色的矩阵则是学习过程中的神经网络层;两条线和在一起表示向量的连接,比如一个十维向量和一个二十维向量合并后形成一个三十维向量;分开的线表示内容被复制,分发到不同的位置。

双向长短期记忆网络代码 lstm长短期记忆网络_深度学习_02

细胞状态

神经元之间传递的信息称为细胞状态,如下图所示,该线路用来传递神经元最主要的信息,其他线路则是通过对该线路施加影响来调整细胞状态的值

双向长短期记忆网络代码 lstm长短期记忆网络_工作原理_03

LSTM对细胞状态的控制

LSTM可以通过gates门结构来去影响细胞状态的信息,gates门结构包含一个sigmoid神经网络层次和一个pointwist乘法操作,Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示不允许任务变量通过,1表示运行所有变量通过,LSTM中主要有三个门结构来影响细胞状态,分别是:忘记门,信息增强门,输出门

双向长短期记忆网络代码 lstm长短期记忆网络_lstm_04

1)忘记门

决定从细胞状态中丢弃什么信息;比如在语言模型中,细胞状态可能包含了性别信息(“他”或者“她”),当我们看到新的代名词的时候,可以考虑忘记旧的数据

双向长短期记忆网络代码 lstm长短期记忆网络_网络层_05

2)输入门

决定放什么新信息到细胞状态中;Sigmoid层决定什么值需要更新;Tanh层创建一个新的候选向量Ct

双向长短期记忆网络代码 lstm长短期记忆网络_工作原理_06

以上两个门的作用主要是对细胞状态进行更新,将Ct-1更新为Ct;将旧状态与ft相乘,丢失掉确定不要的信息;加上新的候选值it*Ct得到最终更新后的细胞状态

双向长短期记忆网络代码 lstm长短期记忆网络_工作原理_07

3)输出门

与上两个门不同,输出门的主要功能是将细胞状态值进行运算得出神经元的输出。首先运行一个sigmoid层来确定将细胞状态的哪些部分输出,使用tanh处理细胞状态得到一个在-1到1之间的值,再将它和sigmoid门的输出相乘,得到最终的输出

双向长短期记忆网络代码 lstm长短期记忆网络_深度学习_08

三.基于LSTM的改进模型

1.GRU

将忘记门和输入门合并成为一个单一的更新门,同时合并了数据单元状态和隐藏状态,结构比LSTM的结构更加简单

双向长短期记忆网络代码 lstm长短期记忆网络_工作原理_09

2.Bi-LSTM

Bi-LSTM的隐藏层要保存两个值,一个A参与正向计算,另一个值A’参与反向计算
如下图,Y2的最终输出值取决于A2和A`2

双向长短期记忆网络代码 lstm长短期记忆网络_双向长短期记忆网络代码_10


计算y2的数学方程为:

双向长短期记忆网络代码 lstm长短期记忆网络_双向长短期记忆网络代码_11

A2和A`2 计算过程为:

双向长短期记忆网络代码 lstm长短期记忆网络_工作原理_12

正向计算时,隐藏层的值st与st-1有关;反向计算时,隐藏层的值st`和st-1`有关;最终的输出取决于正向和反向计算的加和,数学方程为:

双向长短期记忆网络代码 lstm长短期记忆网络_lstm_13

Bi-LSTM的工作原理图:

双向长短期记忆网络代码 lstm长短期记忆网络_网络层_14