1 啥是RNN模型?
以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也以序列形式进行输出。
一般单层神经网络结构:
InputHiddenOutputRNN单层网络结构:

以时间步对RNN进行展开后的单层网络结构:

RNN的循环机制使模型隐层上一时间步产生的结果,能作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响。
2 RNN模型的作用
RNN结构能很好利用序列之间的关系,因此针对自然界具有连续性的输入序列,如人类语言、语音等进行很好处理,广泛应用于NLP领域各项任务,如文本分类, 情感分析, 意图识别, 机器翻译等。
以一个用户意图识别的例子进行简单的分析:

第一步:用户输入"What time is it ?",先要对它进行基本的分词,因为RNN是按序工作,每次只接收一个单词进行处理。

第二步:先将单词"What"输给RNN,它将产生一个输出O1

第三步:继续将单词"time"输给RNN,但此时RNN不仅利用"time"产生输出O2,还会用来自上一层隐层输出O1作为输入信息:

第四步:重复直到处理完所有单词:

第五步:最后,将最终的隐层输出O5进行处理来解析用户意图:

3 RNN模型分类
两个角度对RNN模型分类:
3.1 输入和输出的结构
① N vs N - RNN
RNN最基础的结构形式,最大特点是输入和输出序列等长。由于这限制,使其适用范围较小,可用于生成等长度的合辙诗句。
y₁ y₂ y₃ y₄ ↑ ↑ ↑ ↑ │ │ │ │ ┌───┴───┐ ┌───┴───┐ ┌───┴───┐ ┌───┴───┐ ┌───┴───┐ │ h0 │→│ h₁ │→│ h₂ │→│ h₃ │→│ h₄ │ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ ↑ ↑ ↑ ↑ │ │ │ │ x₁ x₂ x₃ x₄② N vs 1 - RNN
有时要处理的问题输入是一个序列,而要求输出是一个单独的值而非序列,咋建模?
在最后一个隐层输出h上进行线性变换即可。大部分情况下,为了更好的明确结果,还要用sigmoid或softmax进行处理. 这种结构经常被应用在文本分类问题上.
③ 1 vs N - RNN
如果输入不是序列而输出为序列的情况怎么处理呢?我们最常采用的一种方式就是使该输入作用于每次的输出之上. 这种结构可用于将图片生成文字任务等。
④ N vs M - RNN
这是一种不限输入输出长度的RNN结构, 它由编码器和解码器两部分组成, 两者的内部结构都是某类RNN, 它也被称为seq2seq架构. 输入数据首先通过编码器, 最终输出一个隐含变量c, 之后最常用的做法是使用这个隐含变量c作用在解码器进行解码的每一步上, 以保证输入信息被有效利用。
3.2 RNN的内部构造
- 传统RNN
- LSTM
- Bi-LSTM
- GRU
- Bi-GRU
seq2seq架构最早被提出应用于机器翻译, 因为其输入输出不受限制,如今也是应用最广的RNN模型结构。在机器翻译, 阅读理解, 文本摘要等众多领域都进行了非常多的应用实践。
















