LSTM(Long Short Term Memory)
LSTM(Long Short Term Memory)
LSTM(Long-Short Term Memory/LSTM)是一种时间递归神经网络,论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。
LSTM是RNN(Recurrent Neural Network)的特例,RNN是一种节点定向连接成环的人工神经网络,其简化结构及展开形式如下。
RNN的优势在于能够通过先前的信息来指导当前的任务,而关键问题在于长期依赖(Long-Term Dependencies),所谓“长期依赖”是指当所需信息跨度过大时,如下图中h(t+1)需要依赖于x(0)和x(1),RNN在计算过程中,后面时间节点相对前面时间节点的感知力下降(或根据链式法则推导求取梯度时所导致的梯度消失或爆炸),因此会导致方法失效。为了解决这个问题,有研究提出了LSTM算法。
相比RNN,LSTM将隐含单元修改成为了如下所示的block单元。
如下图所示分别是典型的RNN和LSTM结构。
其中图中基本元素的含义如下。
由此可以推导出LSTM正向传播的公式如下。
其中,C(t)是隐含单元所传递的状态,f(t)是“forget gate layer”,控制上一阶段的隐含状态哪些需要保留,i(t)是“input gate layer”,控制本阶段的输入哪些需要对状态进行更新,是本阶段候选状态,基于此,可以出计算本阶段的状态C(t),系统的输出和隐含单元输出分别是o(t)和h(t)。
LSTM内部结构相对复杂,因此还有一种简化形式称为GRU(Gated Recurrent Unit),其将“forget gate”和“input gate”合并成为“update gate”,结构和正向传播公式如下所示。
为了理解LSTM的工作原理,需要对反向传播算法进行推导,可以参考这篇文章http://nicodjimenez.github.io/2014/08/08/lstm.html。
LSTM正向传播的公式重写如下。
为了简化形式,将x(t)和h(t-1)连接成向量xc(t)。
公式可简化为。
选取方差函数为损失函数。
下面推导LSTM反向传播公式。假设w是模型参数,则根据链式法则,梯度计算如下。为了简化,引入L(t)。
因此有:
下面结合源码进行分析,代码中变量的含义如下所示。
代码中ds的计算如下。
因此有,ds = self.state.o * topdiffh + topdiffs。
其他推导和RNN类似,完整代码如下。
相关连接
- http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- http://nicodjimenez.github.io/2014/08/08/lstm.html
- https://github.com/nicodjimenez/lstm