1 认识RNN模型¶
学习目标¶
- 了解什么是RNN模型
- 了解RNN模型的作用
- 了解RNN模型的分类
1.1 什么是RNN模型¶
RNN(Recurrent Neural Network),中文称作循环神经网络,是一种专门用于处理序列数据的神经网络架构。一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。它的特点是能够捕捉序列数据中的时间依赖关系,广泛应用于自然语言处理(NLP)、时间序列预测、语音识别等领域。
1.1.1 核心概念¶
- 序列数据 (Sequential Data):指的是数据项之间存在顺序关系的数据,例如:
- 文本:句子中的单词顺序
- 语音:音频信号的时间序列
- 股票价格:随时间变化的股价
- 视频:连续的帧序列
- 循环连接 (Recurrent Connection):RNN的核心在于其循环连接,它允许信息在网络内部循环流动。这使得网络可以保留过去的信息,并将其用于处理当前的输入。
- 隐藏状态 (Hidden State):RNN在每个时间步都会维护一个隐藏状态,这个隐藏状态包含了过去的信息。它可以被认为是网络的”记忆”。
-
时间步 (Time Step):指的是序列数据中的每个元素,例如文本中的一个单词、语音中的一个音频帧。
-
工作原理
- 输入:RNN接收一个序列数据作为输入,每次输入序列中的一个元素 (时间步)。
- 隐藏状态更新:对于每个时间步,RNN根据当前的输入和上一个时间步的隐藏状态计算出新的隐藏状态。这个计算通常使用激活函数(如tanh或ReLU)。
- 输出:RNN根据当前的隐藏状态计算出当前的输出。
- 循环:上述过程会在序列的每个时间步重复进行,直到序列结束。
1.1.2 RNN神经网络结构¶
-
一般单层神经网络

-
RNN单层网络结构

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

-
RNN的循环机制使模型隐藏层上一时间步产生的结果, 能够作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐藏层输出)对当下时间步的输出产生影响
1.1.3 计算方法¶
-
隐藏状态更新:
\(h_t=σ(W_hh_{t−1}+W_xx_t+b_h)\)
- \(h_t\):当前时间步的隐藏状态。
- \(h_{t−1}\):上一个时间步的隐藏状态。
- \(x_t\):当前时间步的输入。
- \(W_h\),\(W_x\):权重矩阵。
- \(b_h\):偏置项。
- \(σ\):激活函数(如 tanh 或 ReLU)。
-
全连接层线性输出计算:
\(y_t=W_yh_t+b_y\)
- \(y_t\):当前时间步的输出。
- \(W_y\):输出层的权重矩阵。
- \(b_y\):输出层的偏置项。
1.2 RNN模型的数据处理过程¶
RNN的主要作用是处理序列数据,并捕捉数据中的时间依赖关系。
因为RNN结构能够很好利用序列之间的关系,因此针对自然界具有连续性的输入序列,如人类的语言、语音等进行很好的处理。
广泛应用于NLP领域的各项任务,如文本分类、情感分析、意图识别、机器翻译等。
下面我们将以一个用户意图识别的例子进行简单的分析:

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

-
第二步: 首先将单词”What”输送给RNN, 它将产生一个输出O1。

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

-
第四步: 重复这样的步骤, 直到处理完所有的单词。

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

1.3 RNN模型的分类¶
这里我们将从两个角度对RNN模型进行分类,第一个角度是输入和输出的结构,第二个角度是RNN的内部构造。
- 按照输入和输出的结构进行分类:
- N vs N-RNN:输入序列和输出序列的长度相同,并且通常在时间步上是一一对应的。
- N vs 1-RNN:输入一个长度为 N 的序列,输出一个单一的值或向量。
- 1 vs N-RNN:输入一个单一的值或向量,输出一个长度为 N 的序列。
- N vs M-RNN:输入一个长度为 N 的序列,输出一个长度为 M 的序列,其中 N 和 M 可以不相同。
- 按照RNN的内部构造进行分类:
- 传统RNN
- LSTM
- Bi-LSTM
- GRU
- Bi-GRU
1.3.1 N vs N-RNN¶
它是RNN最基础的结构形式,最大的特点就是:输入和输出序列是等长的。由于这个限制的存在, 使其适用范围比较小, 可用于生成等长度的合辙诗句。
应用场景:
- 词性标注(POS Tagging):为每个单词标注词性。
- 输入:
["I", "love", "programming"] - 输出:
["PRON", "VERB", "NOUN"]
- 输入:
- 时间序列预测(逐点预测):预测每个时间步的值。
- 输入:
[t1, t2, t3, t4] - 输出:
[t2, t3, t4, t5]
- 输入:
结构示意图:

1.3.2 N vs 1-RNN¶
有时候我们要处理的问题输入是一个序列,而要求输出是一个单独的值而不是序列,应该怎样建模呢?我们只要在最后一个隐藏层输出h上进行线性变换就可以了,大部分情况下,为了更好的明确结果,还要使用sigmoid或者softmax进行处理。
应用场景:
- 情感分析:根据一段文本判断情感倾向。
- 输入:
["I", "love", "programming"] - 输出:
"Positive"
- 输入:
- 文本分类:将一段文本分类到某个类别。
- 输入:
["The", "movie", "was", "great"] - 输出:
"Positive Review"
- 输入:
结构示意图:

1.3.3 1 vs N-RNN¶
如果输入不是序列而输出为序列的情况怎么处理呢?我们最常采用的一种方式就是使该输入作用于每次的输出之上,这种结构可用于将图片生成文字任务等。
应用场景:
- 文本生成:根据一个初始词生成一段文本。
- 输入:
"I" - 输出:
["I", "love", "programming"]
- 输入:
- 图像描述生成:根据一张图像生成描述文本。
- 输入:
图像特征 - 输出:
["A", "dog", "is", "running"]
- 输入:
结构示意图:

1.3.4 N vs M-RNN¶
这是一种不限输入输出长度的RNN结构,它由编码器和解码器两部分组成,两者的内部结构都是某类RNN,它也被称为seq2seq架构。输入数据首先通过编码器, 最终输出一个隐含变量c, 之后最常用的做法是使用这个隐含变量c作用在解码器进行解码的每一步上,以保证输入信息被有效利用。
seq2seq架构最早被提出应用于机器翻译,因为其输入输出不受限制,如今也是应用最广的RNN模型结构。在机器翻译、阅读理解、文本摘要等众多领域都进行了非常多的应用实践。
应用场景:
- 机器翻译:将一种语言的句子翻译成另一种语言。
- 输入:
["I", "love", "programming"](英文) - 输出:
["我", "喜欢", "编程"](中文)
- 输入:
- 文本摘要:将长文本压缩为短文本。
- 输入:
["The", "quick", "brown", "fox", ...] - 输出:
["Quick", "fox", "story"]
- 输入:
结构示意图:

对比:
| 类型 | 输入结构 | 输出结构 | 应用场景 |
|---|---|---|---|
| N vs N | 等长序列输入 | 等长序列输出 | 词性标注、逐点预测 |
| N vs 1 | 序列输入 | 单个时间步输出 | 文本分类、情感分析 |
| 1 vs N | 单个时间步输入 | 序列输出 | 文本/音乐生成、图像描述生成 |
| N vs M | 不等长序列输入 | 不等长序列输出 | 机器翻译、文本摘要 |
1.4 小结¶
- 什么是RNN模型:
- RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出.
- 什么是RNN循环机制
- RNN的循环机制使模型隐层上一时间步产生的结果, 能够作为当下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响.
- RNN模型的作用:
- 因为RNN结构能够很好利用序列之间的关系, 因此针对自然界具有连续性的输入序列, 如人类的语言, 语音等进行很好的处理, 广泛应用于NLP领域的各项任务, 如文本分类, 情感分析, 意图识别, 机器翻译等.
- RNN模型的分类:
- 按照输入和输出的结构进行分类:
- N vs N - RNN:
- 它是RNN最基础的结构形式, 最大的特点就是: 输入和输出序列是等长的. 由于这个限制的存在, 使其适用范围比较小, 可用于生成等长度的合辙诗句.
- N vs 1 - RNN:
- 有时候我们要处理的问题输入是一个序列,而要求输出是一个单独的值而不是序列,应该怎样建模呢?我们只要在最后一个隐层输出h上进行线性变换就可以了,大部分情况下,为了更好的明确结果, 还要使用sigmoid或者softmax进行处理. 这种结构经常被应用在文本分类问题上.
- 1 vs N - RNN:
- 如果输入不是序列而输出为序列的情况怎么处理呢?我们最常采用的一种方式就是使该输入作用于每次的输出之上. 这种结构可用于将图片生成文字任务等.
- N vs M - RNN:
- 这是一种不限输入输出长度的RNN结构, 它由编码器和解码器两部分组成, 两者的内部结构都是某类RNN, 它也被称为seq2seq架构. 输入数据首先通过编码器, 最终输出一个隐含变量c, 之后最常用的做法是使用这个隐含变量c作用在解码器进行解码的每一步上, 以保证输入信息被有效利用.
- seq2seq架构最早被提出应用于机器翻译, 因为其输入输出不受限制,如今也是应用最广的RNN模型结构. 在机器翻译, 阅读理解, 文本摘要等众多领域都进行了非常多的应用实践.
- N vs N - RNN:
- 按照RNN的内部构造进行分类:
- 传统RNN
- LSTM
- Bi-LSTM
- GRU
- Bi-GRU
- 按照输入和输出的结构进行分类: