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 能有效地缓解梯度消失现象的关键所在。