Lstm通俗详解
- LSTM因其特殊的网络结构,目前在序列建模中有非常大的优势,也算是序列建模的标配了(不考虑Self-Attention的情况下)。
- RNN的局限性
- 对RNN有认识的人都知道RNN在训练的过程中会有长期依赖的问题,这是由于RNN模型在训练时会遇到梯度消失(大部分情况)或者梯度爆炸(很少,但对优化过程影响很大)的问题。对于梯度爆炸是很好解决的,可以使用梯度修剪(Gradient Clipping),即当梯度向量大于某个阈值,缩放梯度向量。但对于梯度消失是很难解决的。所谓的梯度消失或梯度爆炸是指训练时计算和反向传播,梯度倾向于在每一时刻递减或递增,经过一段时间后,梯度就会收敛到零(消失)或发散到无穷大(爆炸)。简单来说,长期依赖的问题就是在每一个时间的间隔不断增大时,RNN会丧失到连接到远处信息的能力。
- LSTM网络结构通俗详解
- RNN网络结构图
- LSTM网络结构图
由两个结构图可见,RNN与LSTM都具有一种重复神经网络模块的链式的形式。但在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层;但在LSTM中
重复的模块拥有一个不同的结构,不同于RNN单一神经网络层,这里是有四个,并且以一种非常特殊的方式进行交互。LSTM的核心理解就在于这里指出的四种特殊网络交互层了。
- 1.细胞状态(Ct)
t时刻的记忆信息,用来保存重要信息。就好像我们的笔记本一样,保存了我们以前学过的知识点。如下图的水平线从图上方贯穿运行,直接在整个链上运行,使得信息在上面流传保持不变会很容易
- 2.输入门(it)
处理当前序列位置的输入,确定需要更新的信息,去更新细胞状态。此过程分为两个步骤,第一个步骤:使用包含sigmoid层的输入门决定哪些新信息该被加入到细胞状态;第二个步骤:在第一步确定了哪些新信息要加入后,需要将新信息转换成能够加入到细胞状态的形式,使用tanh函数产生一个新的候选向量。(其实第一步才是真正意义上的输入门,第二步只是构造了候选记忆,实质就是通过输入门来控制多少候选记忆被记住,这里将两个过程合并了)
- 3.遗忘门(ft)
控制遗忘上一层细胞状态的内容,根据上一序列的ht-1和本序列的Xt为输入,通过sigmoid激活函数,得到上一层细胞状态内容哪些需要去除,那些需要保留。值得注意的是,该输入是以向量的形式,我们希望遗忘门输出的值大多为0或1,即对向量中的每个值是完全忘记或者完全记住,因此我们使用的是sigmoid函数作为激活函数,因为该函数在许多取值范围内的值都接近于0或1。其他门使用sigmoid函数(建议使用)同理。
- 记忆单元更新过程
从上一个记忆单元Ct−1到当前状态Ct的转移不完全取决于激活函数计算得到的状态(RNN就完全取决于激活函数),而是由前面构造的两个门:输入门和遗忘门共同控制。
有了遗忘门和输入门,现在我们就能把细胞状态Ct−1更新为Ct了。如下图所示,其中ft×Ct−1表示希望删除的信息,it×C~t表示新增的信息
- 4.输出门(ot)及输出内容
最后要基于细胞状态保存的内容来确定输出什么内容,即选择性的输出细胞状态保存的内容。类似于输入门两部分实现更新一样,输出门也是需要使用sigmoid激活函数确定哪个部分的内容需要输出(此为输出们)。并使用tanh激活函数对细胞状态的内容进行处理(因为通过上面计算得到的Ct每个值不是在tanh的取值范围-1~1中,需要调整),将这两部分相乘就得到了我们希望输出内容
- 总结
- 与传统的RNN相比,LSTM依然是基于xt和ht−1来计算ht,只不过对内部的结果进行了更加精细的设计:加入了输入门it,遗忘门ft,以及输出门ot和一个内部记忆单元ct
- 输入门控制当前计算的新状态以及以多大程度更新到记忆单元中;遗忘门控制前一步记忆单元中的信息以多大程度被遗忘掉;输出门控制当前的输出有多大程度取决于当前的记忆单元
- 经典的LSTM中,第t步的更新计算公式为
其中it是通过输入xt和上一步的隐含层输出ht-1进行线性变换,再经过激活函数σ得到。输入门it的结果时向量,其中每个元素都是从0到1之间的实数,用于控制各维度流过阀门的信息量;
Wt和Ut两个矩阵和向量bt为输入门的参数,是在训练过程中得到的。遗忘门ft和输出们ot的计算方式与输入门类似,它们有各自的参数W、U和b。
- 在一个训练好的网络中,当输入序列没有重要信息时,LSTM遗忘门的值接近为1,输入门接近0,此时过去的记忆会被保存,从而实现了长期记忆;当输入的序列中出现了重要信息时,LSTM会将其存入记忆中,此时输入门的值会接近于1;当输入序列出现重要信息,且该信息意味着之前的记忆不再重要的时候,输入门接近1,遗忘门接近0,这样旧的记忆被遗忘,新的重要信息被记忆;故所谓长短记忆神经网络。
- 参考