LSTM长短期记忆人工神经网络简述

By:Yang Liu

1.什么是LSTM

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,属于时间递归神经网络(RNN)中的一种。LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。

2.LSTM的结构

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_matlab建立长短时记忆神经网络代码


上图被称为memory block(记忆块),主要包含了三个门(forget gate、input gate、output gate)与一个记忆单元(cell)。

方框内上方的那条水平线,被称为cell state(单元状态),它就像一个传送带,可以控制信息传递给下一时刻。

换句话说,cell 最上面的一条线的状态 代表了长时记忆,而下面的 线代表了工作记忆或短时记忆。LSTM中最重要的是Forget gate,其次是Input gate,最次是Output gate。

可以看到中间的 cell 里面有四个黄色小框,每一个小黄框代表一个前馈网络层,num_units就是这个层的隐藏神经元个数。其中1、2、4的激活函数是 sigmoid,第三个的激活函数是 tanh。

名词解释:

sigmoid:在信息科学中,由于sigmoid单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到0,1之间。在计算机网络中,一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。

公式:

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_神经网络_02


tanh:tanh是双曲函数中的一个,tanh()为双曲正切。

公式:

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_激活函数_03


前馈神经网络:前馈神经网络(feedforward neural network,FNN),简称前馈网络,是人工神经网络的一种。前馈神经网络采用一种单向多层结构。其中每一层包含若干个神经元。在此种神经网络中,各神经元可以接收前一层神经元的信号,并产生输出到下一层。第0层叫输入层,最后一层叫输出层,其他中间层叫做隐含层(或隐藏层、隐层)。隐层可以是一层。也可以是多层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_神经网络_04


3.LSTM流程介绍

(1)第一个小黄框表示忘记门,该层的输出是一个介于0到1的数,表示允许信息通过的多少,0 表示完全不允许通过,1表示允许完全通过。

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_循环神经网络_05


(2)第二个和第三个小黄框表示产生我们需要更新的新信息。第一个是一个“input gate”层(第二个小黄框)通过sigmoid来决定哪些值用来更新,第二个是一个tanh层用来生成新的候选值。

上两步结合起来就是丢掉不需要的信息,添加新信息的过程。

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_激活函数_06


(3)第三个小黄框(输出门)和之后的部分决定模型的输出,首先是通过sigmoid层来得到一个初始输出,然后使用tanh将值缩放到-1到1间,再与sigmoid得到的输出逐对相乘,从而得到模型的输出。tanh函数是对先前学到信息的压缩处理,起到稳定数值的作用。

matlab建立长短时记忆神经网络代码 长短期记忆神经网络_matlab建立长短时记忆神经网络代码_07


4.三个门的作用

遗忘门(forget gate):决定了上一时刻的单元状态 有多少保留到当前时刻。

输入门(input gate):决定了当前时刻网络的输入有多少保存到单元状态。

输出门(output gate):控制单元状态 有多少输出到 LSTM 的当前输出值。

5.LSTM的反向传播

(1) 前向计算每个神经元的输出值。

(2)反向计算每个神经元的误差项值。

两个方向:

1.沿时间的反向传播,即从当前 t 时刻开始,计算每个时刻的误差项;

2.将误差项向上一层传播。

(3)根据相应的误差项,计算每个权重的梯度。

参考文献:

(2)https://zhuanlan.zhihu.com/p/32085405