长短期记忆模型(LSTM)理解

        长短记忆模型是建立在RNN基础之上的,理解RNN有助于理解LSTM模型,建议读者阅读《循环神经网络(RNN)原理及BPTT算法》

LSTM模型

        在介绍LSTM模型之前,我们先回顾一下RNN,网络结构如图:

将网络结构中每一层都缩成一个圆来表示,就是如下这样的网络结构缩图:

在t时刻,我们向网络中输入数据\mathbf{x}_t\mathbf{x}_t将作为RNN循环层的部分输入,另外一部分输入是上一时刻,也就是t-1时刻该循环层的输出\mathbf{h}_{t-1}。如果序列长度T很大,那么t=T时刻将依赖于初始时刻t=1的输入,这种依赖过长,容易导致梯度消失问题(权重矩阵和偏置项的梯度接近于0)。如果说RNN模型能够记忆住最近的一些信息,同时将更久的信息遗忘掉,这就更好了,长短记忆模型(Long Short Term Memory,简称LSTM)就是基于这样的思想而构建的。那么如何去记忆和遗忘呢?LSTM通过引入细胞状态(cell state)来实现的。下面我们详细介绍LSTM的模型。

        我们将RNN的网络结构缩图的循环层(也就是图中绿色实心圆)放大,在里面对输入数据做一系列操作,最后再输出。这样就得到了LSTM的示意图:

RNN3

图中的矩形A就是对输入做一系列处理,然后输出。矩形A的内部结构如下:

图中绘制了三个时刻的矩形A的处理情况,分别是t-1,t和t+1时刻。我们来看t时刻的矩形A,一眼看去内部处理结构复杂。不要急,我们从左向右,从下而上按照数据流向来看。在最左边有两条线。第一条线,也就是下面的黑色粗箭头:

它就是LSTM模型引入的最重要的东西,称为细胞单元(cell state),它可以理解为存储的是信息量,如图记为C_{t-1},其他与之相连的一些箭头,表示对这个信息中更久的信息进行遗忘,然后加入新的信息,然后得到新的信息量C_{t}。这条黑色粗实线贯穿整个序列(从t=1到t=T)。那么C_{t-1}记录的信息是如何被遗忘和加入新的信息的呢。我们看图的最左边下面的两个输入\mathbf{h}_{t-1},\mathbf{x}_{t}\mathbf{h}_{t-1}是t-1时刻的输出(部分旧信息的来源),\mathbf{x}_{t}是当前时刻输入(新信息的来源)。首先他们会进入如下图进行处理:

处理后输出的f_t,这个处理和我们熟悉的单个神经元是一样的,先是线性加权,然后非线性处理。\sigma就是我们熟悉的sigmoid函数,如图:

它将输入的每个分量都压缩到(0,1)之间。经过\sigma处理后的f_t有什么特征呢?就是f_t的每个分量都被压缩到了(0,1)内。这有什么用呢?我们再看,输出f_t后面会与C_{t-1}汇合,图中表示两个向量的对应分量乘积。比如

f_t=(f_1^{t},f_2^{t},...,f_n^{t})

C_{t-1}=(c_1^{t-1},c_2^{t-1},...,c_n^{t-1})

f_t\bigotimes C_{t-1}=(f_1^{t}c_1^{t-1}f_2^{t},c_2^{t-1},...,f_n^{t}c_n^{t-1})

注意到f_t的每个分量都在(0,1)之间,这样就能控制C_{t-1}的哪个分量会输出,输出多少,f_t的分量越接近1,表示C_{t-1}对应分量输出比例越高,甚至全部输出,f_t的分量越接近0,表示C_{t-1}对应分量输出比例越低,甚至不输出。这正好控制了存储信息的C_{t-1}中哪些信息应该被遗忘,哪些信息应该被保留。我们再继续看,如图:

同样的图中黄色矩形可以看成是两个神经元,第一个神经元使用的激活函数仍然是sigmoid函数,第二个神经元使用的激活函数是tanh,它的图像如下:

如图所示,tanh会将输入规范化到(-1,1)之间。两个神经元相同的是他们的输入都是\mathbf{h}_{t-1},\mathbf{x}_{t}。输入经过第一个神经元处理后输出为i_t,它的作用和f_t类似。第二个神经元的输出为\tilde{C}_{t},它表示存储的新的信息。我们现在需要将它加入到之前处理过的C_{t-1}中。但是并不是把\tilde{C}_{t}全部加入进入,而是选择性的加入,这个正好通过i_t来控制。这个时候就得到细胞单元的输出C_{t},如下:

C_{t}=f_t\bigotimes C_{t-1}+i_t\bigotimes \tilde{C}_{t-1}

C_{t}将作为当前矩形A的细胞状态的输出,它有两个输出方向,其中一个是输出到下一个时刻矩形A中。也就是如下图中所示

另外一个是作为如下图的输入(图中tanh):

根据tanh的图像,我们知道经过该函数处理后,实际是将C_{t}规范化到了(-1,1)之间。图中还有一个黄色方块,同样是一个神经元,它的输入仍然是\mathbf{h}_{t-1},\mathbf{x}_{t},经过该神经元处理后输出为o_t,同样,它的作用与之前的f_ti_t一样,也是选择性对规范化后的tanh(C_{t})输出,也就是:

\mathbf{h}_{t}=o_t\bigotimes tanh(C_t)

C_{t}一样,\mathbf{h}_{t}也有两个流向,一个是流向下一个时刻(图中有下角),另外一个流向输出层作为t时刻的最终输出。到这里整个LSTM的基本结构介绍完了,现在我们回顾头来看,LSTM模型与RNN不同的是引入了细胞状态,对旧信息和新信息选择性记忆。

文献《Understanding LSTM Networks》

发布了89 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/L_15156024189/article/details/105220727