一、循环神经网络

循环神经网络(Recurrent neural network,RNN) 和前馈神经网络(Feedforward Neural Network)的主要区别是:

网络输入输出
前馈神经网络训练数据训练后的数据
循环神经网络训练数据 + 上一层输出的隐状态训练后的数据 + 新的隐状态

前馈神经网络对比循环神经网络

图片来源:Recurrent Neural Networks - Combination of RNN and CNN

将上图的循环神经网络展开可以得到:

RNN网络展开图

图片来源:Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs

其中:

  • xtx_t 是 tt 时刻的输入。比如 x1x_1 可以是一段话中与第 2 个单词对应的 one-hot 向量;
  • sts_t 是 tt 时刻输出的隐状态,它是网络的”记忆”。 sts_t 根据前一个隐状态和当前时刻的输入计算得出:st=f(Uxt+Wst−1)s_t = f(U x_t + W s_{t-1}),其中函数 ff 通常是非线性的,比如:tanhtanh 或 ReLUReLU 。当计算第一个隐状态时, s−1s_{-1} 通常初始化为全零;
  • oto_t 是 tt 时刻的输出。比如,如果是预测一个句子的下一个单词,它就是词汇表中各个单词的概率向量: ot=softmax(Vst)o_t = softmax(V s_t) 。

注意:

  • 隐状态 sts_t 可以看做是网络的记忆,它收集了 tt 时刻及之前所有输入的信息。
  • 每一步中的神经网络参数 UU 、 VV 和 WW 都是相同的。
  • 每一步的输出 oto_t 不是必须需要使用的。比如,在预测一段话是积极的还是消极的时,只需要最后一步的输出即可。
  • 每一步的输入 xtx_t 也不是必须的,一个网络可以只需要另一个网络最后输出的隐状态作为该网络的初始隐状态即可产生一系列的输出。

理论上,不管输入的序列 {x0,x1,x2,⋯ ,xt}\{x_0, x_1, x_2, \cdots, x_t \} 多长,最后网络输出的隐状态 sts_t 应该都是包含了所有输入信息的。但是实际在使用时发现,循环神经网络对于比较长的输入序列来说,效果更差,这称之为长期依赖(Long-Term Dependencies)问题。

比如在一个根据之前的词预测下一个词的任务中,如果文本是 “I grew up in France… I speak fluent French”,如果第一句话与最后一句话隔得越远,循环神经网络就越难预测出最后的 “French”。

二、双向循环神经网络

标准的循环神经网络只考虑的过去输入,没有考虑未来的输入,而双向循环神经网络(Bi-directional Recurrent Neural Network,BRNN)则是都考虑了,其网络结构如下:

双向循环神经网络

图片来源:双向长短时记忆循环神经网络详解(Bi-directional LSTM RNN)

其中输出的值 oto_t 由下面的公式得到:

ht=f(w1xt+w2ht−1)h_t = f(w_1 x_t + w_2 h_{t-1}) ht′=f(w3xt+w5ht+1′){h_t}\prime = f(w_3 x_t + w_5 {h_{t+1}}\prime) ot=g(w4ht+w6ht′)o_t = g(w_4 h_t + w_6 {h_t}\prime)

三、长短时记忆网络

长短时记忆(Long Short Term Memory,LSTM) 网络也属于循环神经网络,它较好的解决了循环神经网络有的长期依赖问题。其网络结构如下:

LSTM

图片来源:In Keras, what exactly am I configuring when I create a stateful LSTM layer with N units?

长短时记忆网络的一个流行的变体是 GRU(Gated Recurrent Unit) ,其网络结构如下:

GRU

图片来源:Understanding LSTM Networks

四、Seq2Seq

Seq2Seq 其实是指从一个序列生成另外一个序列的结构,这种结构由 Encoder 和 Decoder 组成。其中在 Encoder 和 Decoder 之间传递的只有输入序列最后一步得到的隐状态,如下图:

Seq2Seq

图片来源:Seq2seq (Sequence to Sequence) Model with PyTorch

五、Attention

Attention 机制就是对输入的每个元素考虑不同的权重参数,从而更加关注与输入的元素相似的部分,而抑制其它无用的信息。

Attention的整体流程 Attention的计算过程

图片来源:Sequence to Sequence (seq2seq) and Attention

六、参考资料

  1. Sequence to Sequence (seq2seq) and Attention