LSTM是RNN的一个改进版,其主要目的是解决RNN因为网络中输入的序列过长,丢失了之前的信息的情况
回顾一下原来的RNN
下面这张图展示的是SimpleRNN的一个网络结构
这样的一个链式结构LSTM也是继承了的,但是其中的repeating module 有了不同的结构表现形式,也就是对应的门式结构,如下图所示,黄色方框表示的神经网络层,粉色的圈是矩阵运算符号接下来逐个介绍其中的门(一共3个)
首先是LSTM的核心思想,Cell stateL=》“细胞状态”(cell state)来刻画神经元的记忆中,不太容易衰减的部分,并围绕细胞状态构造长期记忆,而其中门是一种决定之前的记忆信息是否能够通过继承到下一次的方法,其中由一个sigmoid激活函数和一个矩阵乘法运算构成,用以控制cell state(细胞状态)
第一个门是Forget gate,其具体计算如下,里边的控制变量即其输出的ft
第二个是输入门,这里引入了一个决策变量it和一个中间变量波浪ct,其中it是与ht-1和xt相关的经过sigmoid和w矩阵乘得到的,波浪ct则是使用的tanh函数同样是与ht-1和xt相关的量
第二段输入门,这里输入门,Ct由上一次的输入Ct-1和波浪Ct决定,Ct-1是代表的之前的记忆信息,其决策变量为ft如果ft=1则全部继承,ft=0则相当于忘记了之前的记忆信息只考虑后面那一项波浪Ct,而it与ft类似,主要是配合来决定我们每次以什么样的程度继承之前的记忆信息。
最后一个是输出层,这个不多解释了产生两个输出ot是这一个节点的输出,ht会进入下一次循环,其公式略有不同,这里是因为我们要把ht构建成一个【-1,1】的变量而ot是作为输出来进行反馈梯度下降的变量
最后整合一下前面的过程放几张图整体理解下:
最后一张是解释了LSTM是如何解决梯度消失的问题的,这里容易理解之前的梯度消失是因为链式求导的过程中出现了WR的i次方,这个在前边的那一块介于0-1或者>1时都会出现对应的梯度爆炸和梯度弥散的现象,这里最后的链式求导由于引入了门的概念,Ct-1,波浪Ct,it和ft之间相互制衡,即便是出现了对应的Wf得i-1次方或者Wi的i-1次方等都会有另一个变量制衡,这样一定程度上减缓了梯度弥散的问题,当然也不是绝对的;讲了一堆理论,实战部分请参看后边的GRU实战,因为LSTM和GRU差别不大我没有额外单独做LSTM的了