长短期记忆(Long-Short Term Memory, LSTM)是一种时间递归神经网络(RNN),论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。

       LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好,比如用在不分段连续手写识别上。2009年,用LSTM构建的人工神经网络模型赢得过ICDAR手写识别比赛冠军。LSTM还普遍用于自主语音识别,2013年运用TIMI自然演讲数据库达成17.7%错误率的纪录。作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。(wikipedia)

根据谷歌的测试表明,LSTM中最重要的是Forget gate,其次是Input gate,最次是Output gate。

 循环神经网络展开成一个全神经网络:

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_递归


下面是其中一个隐藏层的分析:


长短记忆循环神经网络的pytorch实现 长短时间记忆模型_递归_02




长短记忆循环神经网络的pytorch实现 长短时间记忆模型_神经网络_03

黄色矩形表示有学习能力的神经网络层

粉色圆圈表示运算符号,”x” 表示乘号(例如向量乘法),“+”表示加号

黑色箭头表示 向量传递

两条线融合表示进行运算

线分叉表示内容被复制成两个,不同方向传递

forget gate layer

数据信息由上一层hidden state信息与现在的输入数据信息的加权之和,

而激活函数sigmoid,决定什么信息是需要从cell state中丢弃的,forget gate layer 输出是[0,1]之间的数,1表示完全变成保留信息,0表示完全丢弃

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_机器学习_04

input gate layer

同样有一个激活函数sigmoid,意义解释为决定哪些值需要更新,其实和forget gate layer的意思类似,

但作用不同。       

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_激活函数_05

A tanh layer : 

a tanh layer creates a vector of new candidate values:

tanh layer是创建现隐藏层cell state的候选值,之前说候选值,只因为它只是一个中间值。          

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_递归_06

Final memory cell:

这里是获取现隐藏层

cell state ,它是基于上一个隐藏层 cell state( 称为 old cell state) 与现隐藏层的候选值。

这两个值通过与forget gate 、input gate相乘,决定我们从之前的cell state忘记多少信息和更新多少信息。                                                                                

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_LSTM RNN_07

Output gate : 

这里也有一个激活函数sigmoid,习惯把它叫Output gate。

它决定我们应该输出哪一部分的 cell state。

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_激活函数_08

Final hidden state

计算现隐藏层

Final state 的时候,先要让现隐藏层cell state经过一个激活函数tanh,让它的值控制在[-1,1]之内, 这样做可能是防止梯度爆炸(exploding gradient )。然后再与 Output gate相乘决定输出那部分信息。

 

                                                                          

长短记忆循环神经网络的pytorch实现 长短时间记忆模型_机器学习_09