
2.2.3 LSTM
LSTM计算过程的数学形式如下:

(2.27)
其中,表示逐元素相乘,
表示 Sigmoid 函数
。和RNN 相比,LSTM 多了一个隐状态变量
,称为细胞状态(Cell State),用来记录信息。式(2.27)看起来似乎十分复杂,这是因为公式一次性把 LSTM的所有细节都展示出来了,但是突然暴露这么多细节会使读者眼花缭乱,从而无处下手。因此,本节提出的方法旨在简化门控机制中相对不重要的部分,从而更关注在LSTM的核心思想。整个过程称为“三次简化一张图”,具体流程如下。
(1)第1次简化:忽略门控单元、
、
的来源。3个门控单元的计算方法完全相同,都是由输入经过非线性变换得到的,区别只是计算的参数不同:

(2.28)
使用相同计算方式的目的是它们都扮演了门控的角色,而使用不同参数的目的是为了在误差反向传播阶段对3个门控单元独立地进行更新。在理解 LSTM 运行机制的时候,为了对图进行简化,我们不在图中标注3个门控单元的计算过程,并假定各门控单元是给定的。
(2)第2次简化:考虑一维门控单元、
、
。LSTM中对各维是独立进行门控的,所以为了表示和理解方便,我们只需要考虑一维情况,在理解 LSTM 原理之后,将一维推广到多维是很直接的。经过这两次简化,LSTM的数学形式只有下面3行:

(2.29)
由于门控单元变成了一维,所以向量和向量的逐元素相乘变成了标量和向量相乘。
(3)第3次简化:各门控单元二值输出。门控单元、
、
由于经过了Sigmoid 激活函数,输出范围是
。使用Sigmoid 激活函数的目的是为了近似 0/1 阶跃函数,这样 Sigmoid 实数值输出单调可微,可以基于误差反向传播进行更新,如图2-27所示。

图2-27 Sigmoid 函数和单位阶跃函数
既然 Sigmoid 激活函数是为了近似 0/1 阶跃函数,那么,在进行 LSTM 理解分析的时候,为了理解方便,我们认为各门控单元输出是二值,即门控单元扮演了开关的角色,用于控制信息的通断。
(4)一张图。将3次简化的结果用图表示出来,左边是输入,右边是输出。在LSTM中,有一点需要特别注意,LSTM中的细胞状态实质上起到了RNN中隐层单元
的作用,否则只看
的变化是很难看出 LSTM的原理的,这点在其他资料中不常被提到。因此,整个图的输入是
,而不是
。为了方便画图,我们需要将公式做最后的调整:

(2.30)
最终画出的原理图如图2-28所示。和RNN 相同的是,网络接受两个输入,得到一个输出。其中使用了两个参数矩阵,以及
激活函数。不同之处在于,LSTM中通过 3 个门控单元
来对信息交互进行控制。当
(输入门开关闭合)、
(遗忘门开关打开)、
(输出门开关闭合)时,LSTM 退化为标准的RNN。

图2-28 LSTM 运行原理图
根据原理图,我们可以对 LSTM中各单元的作用进行分析。
● 输出门:输出门的目的是从细胞状态
产生隐层单元
。并不是
中的全部信息都和隐层单元
有关,
可能包含了很多对
无用的信息。因此,
的作用就是判断
中哪些部分是对
有用的,哪些部分是无用的。
● 输入门:
控制当前词
的信息融入细胞状态
。在理解一句话时,当前词
可能对整句话的意思很重要,也可能并不重要。输入门的目的就是判断当前词
对全局的重要性。当
(输入门开关打开)的时候,网络将不考虑当前输入
。
● 遗忘门:
控制上一时刻细胞状态
的信息融入细胞状态
。在理解一句话时,当前词
可能继续延续上文的意思继续描述,也可能从当前词
开始描述新的内容,与上文无关。和输入门
相反,
不对当前词
的重要性进行判断,而判断的是上一时刻的细胞状态
对计算当前细胞状态
的重要性。当
(遗忘门开关打开)的时候,网络将不考虑上一时刻的细胞状态
。
● 细胞状态:
综合了当前词
和前一时刻细胞状态
的信息。这和ResNet中的残差逼近思想十分相似(见 2.1.6 节),通过从
到
的“短路连接”,梯度得已有效地反向传播。当
(遗忘门开关闭合)时,
的梯度可以直接沿着最下面这条短路线传递到
,不受参数
的影响,这是LSTM 能有效地缓解梯度消失现象的关键所在。