LSTM

       LSTM也就是长短期记忆,是用来解决RNN网络中的梯度消失而提出的。

       首先我们了解一下RNN(循环神经网络),该网络主要用来处理时序问题,也就是网络的前后输入之间是有联系的,网络不仅要学习输入样本本身的特征,还有学习相邻输入样本之间的关系,所以RNN常用来处理自然语言问题,因为要理解一句话,不仅要理解话里的每个字或单词的意思,还要理解这些字或单词的不同排列顺序会产生什么不同的意思。RNN解决时序问题的措施无非就是在下一时刻输入样本的同时将该时刻的输出一同输入,这样就可以同时学习 t - 1 时刻和 t 时刻的样本特征了,由于 t-1 时刻学习得到的特征是对 t 时刻之前的所有时刻的样本的处理(这是递归的),t 时刻的状态就只和 t-1 时刻状态相关,所以说RNN其实就相当于是一个马尔可夫链模型,每一时刻的训练时只考虑前一时刻的状况就能考虑到之前所有时刻的状况,所以这样一来网络就能较为容易地学习到时序输入样本之间的联系。 RNN的网络结构就如图一最左边所示,将其按照训练输入展开就是等号右边的结果。图二所示的是RNN内部的结构,两个输入进行一系列处理后通过tanh**函数输出,ht 就是 t 时刻的隐层输出。

LSTM
图一

 

LSTM
图二

 

        但是RNN有所有神经网络所共有的缺点,那就是梯度弥散,t0 时刻的状态可能到 tn(n比较大) 时就会因为梯度弥散而作用微乎其微,而且前面某些时刻的状态在后面可能会用不到,也就没有必要再将其算进去增加网络的学习难度,所以根据这些种种的原始RNN网络的缺点, 长短期记忆训练LSTM就被提出来解决这一问题。LSTM最初地motivate就是原有RNN的基础上始终维持一条主线,称之为cell,这条主线包含有目前为止所有序列的有用的信息,主线中的信息不会随着梯度弥散而消失,因为在每个时刻训练时都会依据输入的样本对主线进行更新,或删除某些信息,或增加某些信息,而且主线会和上一时刻的输出一起对该时刻的输出起作用。    

LSTM
图三

       如图三所示是LSTM的网络结构,可以看到与RNN不同的是贯穿序列的有两条线,上面一条便是主线,下面一条便是之前时刻是的隐层输出h,我们可以看到相比原始的RNN,LSTM网络结构中多出了很多操作,从Cell进来开始我们就可以看到有两个操作作用在其上,首先是乘操作,这便是对主线中的没用的信息删除操作,因为我们可以看到乘数是经过sigmoid**的,所以乘数的数值在(0,1),0表示完全删除,1表示完全接受,0和1之间的值就是相应程度的接受,该操作对应的模块称之为遗忘门,对主线进行一定程度的剔除;接着是加操作,这就是将当前时间 t 的信息添加到主线中去,这一模块被称为输入门,可以注意到这个模块中有tanh**函数,之前原始RNN的隐层输出就是先进行tanh的,所以tanh**后的值应该就是当前时刻 t 的信息,在加到主线之前还有一个乘的操作无非就是对当前时刻 t 的信息进行一次过滤或者说是attention;遗忘门和输入门就是分别对主线信息进行删除和添加的操作(根据当前时刻训练样本的信息),后面就是要利用主线信息来结合当前时刻训练样本信息生成该时刻的隐层输出,该模块就是输出门,我们可以看到,该模块中的tanh函数的输入是主流信息,sigmoid函数的输入值是当前时刻的输入样本和前一时刻的隐层输出,所以输出门还是在用当前训练样本的信息去筛选主流信息中的特征进行输出。下面我们就给出LSTM中三门具体的运算公式:

LSTM
图四 遗忘门

       

       首先是遗忘门,LSTM 就是对主流信息乘的系数,它的计算公式如图四中右边的公式所示,LSTM 表示前一时刻 t-1 时刻隐层输出,LSTM 表示当前时刻 t 的序列样本输入, LSTM 和 LSTM 就是用于训练的权重和偏置。LSTM 表示sigmoid**函数。

 

LSTM
图五 输入门

 

        接着是输入门,该模块先生成当前时刻 t 的信息 LSTM 以及用于进一步筛选信息的 LSTM ,最终新的主流信息的生成公式为:

                                                                                 LSTM

 

LSTM
图六 输出门

       

       最后是输出门,如图六所示,用本次输入的序列信息 LSTM 去筛选主流信息获得隐层输出 LSTM  ,不是将 LSTM **前的值作为隐层的输出可能是因为主流信息包含的信息量更加丰富而且此刻主流信息已经包含了当前时刻序列样本的信息。