跳转至

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):指的是序列数据中的每个元素,例如文本中的一个单词、语音中的一个音频帧。

  • 工作原理

    1. 输入:RNN接收一个序列数据作为输入,每次输入序列中的一个元素 (时间步)。
    2. 隐藏状态更新:对于每个时间步,RNN根据当前的输入和上一个时间步的隐藏状态计算出新的隐藏状态。这个计算通常使用激活函数(如tanh或ReLU)。
    3. 输出:RNN根据当前的隐藏状态计算出当前的输出。
    4. 循环:上述过程会在序列的每个时间步重复进行,直到序列结束。

1.1.2 RNN神经网络结构

  • 一般单层神经网络

    1737633946940

  • 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模型结构. 在机器翻译, 阅读理解, 文本摘要等众多领域都进行了非常多的应用实践.
    • 按照RNN的内部构造进行分类:
      • 传统RNN
      • LSTM
      • Bi-LSTM
      • GRU
      • Bi-GRU