本文对LSTM的另一篇论文进行解析:Learning to Forget: Continual Prediction with LSTM(Felix A. Gers,1999)。该论文是在论文Long Short-term Memory (Sepp Hochreiter,1997)的基础上提出了遗忘门(forget gate)。
一、为什么要提出遗忘门
Sepp Hochreiter在1999年提出了LSTM算法,该算法是对RNN的改进,论文具体解析详见LSTM思想解析—论文精读(Long Short-Term Memery)Long Short-Term MemeryLSTM思想解析—论文精读(Long Short-Term Memery)。当输入到LSTM中的数据为连续的流数据,这些数据并未预先分割成一个个具有明确起点和终点的子训练集,LSTM就无法自行判断什么时候将记忆单元的状态进行重置,这就会导致状态一直无限地增长,最后导致LSTM无法工作了。
下面通过数学公式来说明LSTM存在的不足:

上图为论文Long Short-term Memory 提出的LSTM架构。表示记忆单元的输入,
表示输入门,
表示输出门,
表示记忆单元状态。那么:
(1)
(2)
其中,下标j代表记忆单元块的索引(即第j个记忆单元块),下标v表示记忆单元块中的第v个记忆单元。因此,就表示第j个记忆单元块中的第v个记忆单元。
表示从神经元m到神经元l的权重。
激活函数f是sigmoid函数: (3)
该记忆单元自身的输入(t-1时刻的输出,变为t时刻该记忆单元的输入):
(4)
激活函数g是sigmoid函数的变种: (5)
记忆单元状态: 对于t>0 (6)
记忆单元输出: (7)
h为激活函数 (8)
假定LSTM网络有一个输入层、一个隐藏层(由记忆单元组成)和一个输出层,那输出层的第k个神经元输出为: (9)
激活函数为sigmoid函数。
当记忆细胞状态随着连续输入流无限增大时,那么经过激活函数h时:
由于 ,那么随着x的无限增大,h(x)的值就趋近于1,从而饱和了。饱和会带来两个问题:(1)当h(x)的值趋近于1时,
就趋近于0(
),带来梯度消失问题。(2)记忆单元的输出值为
当h(x)的值为1时,那么记忆单元的输出值就等于输出门的输出值,此时记忆单元就退化为一个普通的BPTT了(本来输出门的作用就是确定是否访问记忆单元的内容,现在h为1了,那么就必然会访问记忆单元的内容了,和BPTT没啥区别了)。
上述问题没有在论文Long Short-Term Memery中出现。为什么呢?在Long Short-Term Memery论文实验中,输入序列都有明确的开头和结尾标志,每当新的序列输入时,就会人为重置记忆细胞状态为0。
二、什么是遗忘门
遗忘门的提出是为了解决:输入数据是连续的数据流,造成激活函数h(x)饱和,从而出现梯度消失或记忆细胞退化为普通BPTT的问题。遗忘门的作用就是让记忆单元可以在适当的时间将状态进行重置,从而丢弃那些内容过时且无用的信息。

上图为添加遗忘门后的LSTM结构。在图中,表示遗忘门。与其他门的计算方式一样,遗忘门的计算公式为:
(10)
激活函数为sigmoid函数,因此
的取值范围为0~1。
根据上图红框中的公式,公式(6)变为了:
(11)
输入门和输出门的初始化偏置为负数(为了解决记忆单元滥用问题),遗忘门的初始化偏置为正数。遗忘门在初期时不起作用的,整个记忆单元就像论文Long Short-term Memory 提出的一样。
三、带遗忘门的LSTM反向传播算法
LSTM的反向传播算法融合了截断BPTT和RTRL,并稍加修改:在输出层和输出门使用截断的BPTT;在到记忆单元的权重、输入门、遗忘门使用了截断的RTRL。截断意味着误差只在记忆单元或各种门内传播。CEC的存在,使得LSTM的误差更新并未受到指数级衰减。作者采用表示截断。为了简单,每个记忆单元块中只有一个记忆单元。
误差反向传播,是将误差从输出反向传播至输入的过程。根据图2,在误差反向传播时,首先需要计算输出层的误差,然后是输出门、记忆单元状态、输入门和遗忘门。
采用均方误差作为损失函数,用表示目标值:
(12)
假设权重更新时使用的学习率为,那么从神经元m到神经元l的权重值更新为:
其中,,那么
(13)
令,那么
1、对于输出层:
此时l=k。对公式(9)求导,可得: 那么,
(14)
2、对于输出门:
由于隐藏层神经元是直接和输出层直接相连的,根据 等式两边同乘以
,并根据公式(14)得:
对公式(1)求导,可得:
当l=out,有公式:
将和
带入公式(13),可得(令l=out):
(表示第v个记忆单元对
的贡献)
假设第j个记忆单元块中有个记忆单元,因为同一个记忆单元块中的所有记忆单元共享一个输出门,那么
。因此:
(15)
上述公式(14)和(15)分别是输出层神经元和输出门的误差公式,采用的是截断BPTT。若更新输出层和输出门的权重,可以根据公式进行更新。将公式中的l换成输出单元k或输出门
。
3、对于细胞状态、输入门、遗忘门
接下来计算输入门和遗忘门的误差更新公式,采用的是截断RTRL方法:
(16)
在公式(16),作者令,所有才有上面的公式(16)
下面计算公式(16)中的第一部分:
其中,
根据公式(7),我们可以得到
那么 (17)
下面计算公式(16)中的第二部分:
将公式(11)带入公式(16)的第二部分中,可得:
(18)
当l=时,根据公式(4),公式(18)变为了:
(19)
当l=in时,根据公式(2),公式(18)变为了:
(20)
当l=时,根据公式(10),公式(18)变为了:
(21)
初始化: (22)
- 记忆细胞状态权重参数更新:将公式(17)和(19)代入公式(16)中后,就可以求得记忆细胞状态权重参数的更新公式:
(23)
- 输入门和遗忘门权重参数更新:将公式(17)和公式(20)/公式(21)带入公式(16)中后,就可以求得输入门/遗忘门的权重参数更新公式:
(24)
四、LSTM 正向传播与反向传播伪代码
此部分直接摘取论文中的伪代码实现,是对本文第二部分和第三部分的综合。