LSTM(Long Short Term Memory networks)被称为长短期记忆模型,是一种比较特殊的循环神经网络,其基本结构和基本思路与RNN一样。关于模型,我们都知道LSTM有解决长依赖问题的能力,这是区别于普通RNN的地方。本篇将总结LSTM及其相关变体。
循环神经网络RNN 1—— 基本模型及其变体
循环神经网络RNN 2—— attention注意力机制(附代码)
循环神经网络RNN 3——LSTM及其变体
目录
1,LSTM概述
所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。标准的RNN网络如下图所示:
LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示:
很多人问,为什么开发者知道这种结构就能有这样的效果呢?其实,很多时候是有了这种效果然后解释这种结构,能达到这种效果的结构有很多,不止一种,当然LSTM的效果是经得住考验的,但是现在逐渐发展的transform结构已经逐渐有替代LSTM的趋势。
2,剖析LSTM
2.1 细胞状态
LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。细胞状态如下图所示:
LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息,总的来说还是比较好理解的,以细胞状态为轴,将每个time-step的信息进行过滤处理,添加到细胞状态中,过滤就包括删除和添加,由三个门来控制,这三个门分别称为忘记门、输入门和输出门。
2.2 忘记信息
LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。它通过查看和信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态中的哪些信息保留或丢弃多少,0表示不保留,1表示都保留。
2.3 添加信息
下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用和通过一个称为输入门的操作来决定更新哪些信息。然后利用和通过一个tanh层得到新的候选细胞信息,这些信息可能会被更新到细胞信息中。这两步描述如下图所示 。
2.4 更新细胞状态
下面将更新旧的细胞信息,变为新的细胞信息。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息的一部分得到新的细胞信息。更新操作如下图所示:
2.5 输出细胞状态
更新完细胞状态后需要根据输入的和来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示
3, LSTM反向传播
与RNN一样,我们通过隐藏状态的梯度一步步向前反向传播,只不过LSTM有两个隐藏状态,,LSTM中所有的参数要经过这两个状态,只要这两个隐藏状态的导数计算出来,相应的等参数就很好计算了。这里我们以h为例做简单推导。
为了方便表示,我们将损失函数表示为两部分,一部分是位置t的损失函数,另一部分是位置t+1的损失函数。
对于序列结尾的位置:
其他时间位置要多加一项:
至于C的求导要更加复杂一些,有兴趣的可以参考文末的资料。有了两个隐藏变量的导数,就可以根据前向公式进行参数求导了。
4, LSTM注意事项
1)首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样。MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度 .
2)由 1 中所述的原因,RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和便不会消失。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
3)LSTM 中梯度的传播有很多条路径,细胞状态C 这条路径上只有逐元素相乘和相加的操作,梯度流最稳定;但是其他路径(上梯度流与普通 RNN 类似,照样会发生相同的权重矩阵反复连乘。
4)LSTM 刚提出时没有遗忘门,或者说相当于 ,这时候在直接相连的短路路径上,从而这条路径上的梯度畅通无阻,不会消失。类似于 ResNet 中的残差连接。
5)同样,因为总的远距离梯度 = 各条路径的远距离梯度之和,高速公路上梯度流比较稳定,但其他路径上梯度有可能爆炸,此时总的远距离梯度 = 正常梯度 + 爆炸梯度 = 爆炸梯度,因此 LSTM 仍然有可能发生梯度爆炸。不过,由于 LSTM 的其他路径非常崎岖,和普通 RNN 相比多经过了很多次激活函数(导数都小于 1),因此 LSTM 发生梯度爆炸的频率要低得多。实践中梯度爆炸一般通过梯度裁剪来解决。
5, LSTM变体
5.1 peephole connections
Peephole是窥视的意思,意图也很明显,就是将细胞状态信息传递给各个门,让其能窥视到细胞状态。
5.2 引入耦合(GRU)
我们熟知的就是GRU,将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门,上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。
6, biLSTM
为什么会有双向LSTM?原因很简单,单项LSTM信息量不够,例如:
“我今天不舒服,我打算____一天。”
只根据‘不舒服‘,可能推出我打算‘去医院‘,‘睡觉‘,‘请假‘等等,但如果加上后面的‘一天‘,能选择的范围就变小了,‘去医院‘这种就不能选了,而‘请假‘‘休息‘之类的被选择概率就会更大。
而双向计算的思路也很简单,从前往后计算一遍,然后从后往前再计算一遍,得到的特征维度要比lstm多一倍
7, LSTM总结
回顾一下,LSTM的过程,LSTM与RNN一样是重复模块链式结构,我们把每个模块看做细胞,其中贯穿所有细胞的为细胞状态,起到保留有效信息的左右,对于每个细胞状态,根据当前输入和前一时刻的输入,分别计算需要忘记和保留的细胞信息,并把这些信息添加到细胞状态中,然后再根据当前输入计算细胞状态输出。
LSTM 之所以能够实现长时记忆而不会形成远距离梯度衰减,是因为有细胞状态这条高速通道。
参考文献
https://www.cnblogs.com/pinard/p/6519110.html
https://www.zhihu.com/question/34878706