循环神经网络是一种用于处理序列数据的神经网络。
RNN 的输入输出:用「动图」和「举例子」讲讲 RNN
右侧是 RNN 在时间上进行展开的示意图。这个过程由 Encoder 完成,目的是从序列输入中依次提取数据并将其编码为向量(表示输入)。
对于第 时刻, 是当前时刻的输入,用于实时更新状态; 是上一隐藏层的状态,用于记忆状态(对于文本而言,就是前文留下的对推断后文有用的信息)。
基于 Encoder-Decoder 的 RNN 模型可应用于机器翻译,输入是英文句子,输出为法语句子。Encoder 依次提取英文句子中的单词后,形成定长的向量表示,然后 Decoder 将此向量作为输入,依次产生每个法语单词,形成翻译后的英语句子。
RNN 模型也有明显的缺点:
训练慢:输入需要依次处理,无法并行化无法很好地处理长序列:序列太长会导致梯度消失和梯度爆炸长短期记忆网络(LSTM)Long Short Term Memory network 是一种特殊的 RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。相比于普通的 RNN,LSTM 能够在更长的序列中有更好的表现。
相比 RNN 只有一个传递状态,LSTM 有两个传递状态 和 。LSTM 包含遗忘门(决定了要从上一个状态中舍弃什么信息),输入门(决定了要往当前状态中保存什么新的信息)和输出门(决定了要从状态中输出什么信息)。
LSTM 前向传播的过程 更新遗忘门输出:第一步是由遗忘门(sigmoid layer)决定舍弃什么信息。
更新输入门两部分输出:第二步是决定存储什么新信息,分为两部分:
一是输入门(sigmoid layer)决定将要更新哪些值;
二是创建候选值(),存储的是当前时间点可能会存入 的信息。
结合以上两部分来更新 :删除决定要忘记的信息,然后存储决定要保存的新信息。
更新输出门输出首先决定要输出哪部分(sigmoid layer),然后输出决定要输出的部分。
Referencehttps://zhuanlan.zhihu.com/p/36455374
https://towardsdatascience.com/illustrated-guide-to-transformer-cf6969ffa067
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://towardsdatascience.com/animated-rnn-lstm-and-gru-ef124d06cf45