LSTM简介

LSTM中文翻译为长短期记忆网络。是RNN的一种变形。LSTM可以通过网络学习到是否需要记忆或遗忘之前序列的信息,相比较之下,RNN只能机械地将之前序列的信息做无选择性地记录。与RNN一样,LSTM也可以通过前向遍历序列和后向遍历序列得到序列前后的信息。对于文本情感分析、词性标注等需要利用上下文信息的任务来说,LSTM是一个重要的模型。

LSTM的架构

LSTM之所以能做到选择性记忆,是因为LSTM引入了三个新的结构,分别是:输入门、遗忘门和输出门。如下图:

从图中可以看出,每个LSTM单元接受的输入是4个向量,这4个向量其实都是和同一个输入向量有关。以自然语言处理任务为例,假设原始的输入向量是一个词向量zz,将zz进行三次不同的线性变换得到三个向量ziz_i,zfz_f,zoz_o,新得到的这三个向量分别作为输入门、遗忘门和输出门的输入。

非形式化地讲,输入向量zz首先会经过输入门,如果输入门的输出越趋向于1,则输入向量zz越会趋向于保留完整信息。图中的CELL即是上一时刻LSTM单元中的数据,遗忘门的作用则是输出一个权重,如果权重越趋向于1则CELL中原始的数据越趋向于保留。CELL中新存放的数据则是输入数据与经过“遗忘”操作后的旧数据之和。输出门的作用类似,输出一个权重,用于控制CELL中记忆的数据是否用于输出。

值得一提的是,上述过程之所以能对特定的数据得出特定的操作,是因为这是由训练得出来的结果。也就是说,我们并不需要人为地考虑什么时候该输入、什么时候该遗忘,这些过程都是训练的一部分,由机器决定。

形式化地说,输入向量zz经过三次不同的线性变换得到三个向量ziz_i,zfz_f,zoz_ozz首先经过一个激活函数得到g(z)g(z),同时,ziz_i也经过一个激活函数得到f(zi)f(z_i),这里ff通常选用Sigmoid函数,目的是将值映射到0和1之间。于是f(zi)f(z_i)就可以看成是输出的权重,这就是f(zi)f(z_i)g(z)g(z)相乘的原因,得到的结果g(z)f(zi)g(z)f(z_i)作为CELL的一部分输入。CELL的另一部分输入由遗忘门所得,为f(zf)f(z_f),这里f(zf)f(z_f)也可以看成是一个权重。假设CELL中之前存放的值为cc,那么遗忘过后的值变为f(zf)cf(z_f)c,CELL中新的值则更新为c=g(z)f(zi)+f(zf)cc'=g(z)f(z_i)+f(z_f)c。即新值加遗忘的旧值。输出门同理,得到输出的权重f(zo)f(z_o),整个单元的输出值为f(zo)cf(z_o)c'

下图为另一个简化的LSTM结构:

再简单提一下输入,简化的LSTM的输入仅由输入向量组成,而真正的LSTM的输入由三个部分组成,分别为当前时刻的输入向量、上一个时刻的输出和上一个时刻中CELL的值。

一些理解

从LSTM的结构不难看出,每个LSTM的单元输入为四个向量,输出为一个标量,所以把一个LSTM单元理解为MDP中的一个神经元比较合理。因为传统神经网络的一个神经元的输入就是一个向量,输出为一个值。

正因为LSTM的输入为四个向量,它的参数比相同体量的全连接神经网络多了4倍。