从RNN说起
循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。如下图图片均来自台大李宏毅教授的PPT
x为当前状态下数据的输入,h表示接收到的上一个节点的输入。y为当前节点状态下的输出,而 h‘为传递到下一个节点的输出。通过上图的公式可以看到,输出 h’ 与 x 和 h 的值都相关。而 y 则常常使用 h’ 投入到一个线性层(主要是进行维度映射)然后使用softmax进行分类得到需要的数据。
短时记忆
RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。 因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。
在反向传播期间,RNN 会面临梯度消失的问题。 梯度是用于更新神经网络的权重值,消失的梯度问题是当梯度随着时间的推移传播时梯度下降,如果梯度值变得非常小,就不会继续学习。
br/>
LSTM
长短期记忆,(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表按位 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
门
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个按位的乘法操作。
步骤
第一步 忘记门
LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 ht-1 和 xt,输出一个在 0 到 1 之间的数值给每个在细胞状态 Ct-1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
第二步 输入们
用值为1表示的完全保留的忘记门输出输入sigmoid 层称 “输入门层” 决定什么值我们将要更新。
然后,一个 tanh 层创建一个新的候选值向量
第三步
进行乘法和加法运算,将Ct-1 更新为 Ct,输出的结果是Ct。
Ct作为下一个神经元的输入
第三步 输出层
以ht-1为输入运行一个 sigmoid 层来输出ot。接着,我们把Ct通过 tanh 进行处理并将它和ot相乘作为最后的输出。
LSTM的变体
所有的 LSTM 都长成一个样子的。实际上,几乎所有包含 LSTM 的论文都采用了微小的变体。
流行LSTM
流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。
coupled
通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。
GRU
Gated Recurrent Unit (GRU)是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门,进行其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
参考
https://www.jianshu.com/p/9dc9f41f0b29
https://blog.csdn.net/weixin_44162104/article/details/88660003