Logo
Section 1 / 11

循环神经网络简介

在本节课中,我们将讨论循环神经网络(Recurrent Neural Networks)、其架构以及标准RNN存在的一些问题。

导入

循环神经网络简介

在本节课中,我们将讨论循环神经网络(Recurrent Neural Networks)、其架构以及标准RNN存在的一些问题。

什么是循环神经网络?

在前面的章节中,我们已经讨论了卷积神经网络(CNN),它们主要用于计算机视觉任务。但如果输入数据是一段文本或数字序列呢?为了处理这类序列型数据,我们需要一种特殊的神经网络:循环神经网络(Recurrent Neural Network, RNN)。

让我们通过一个例子来说明为什么多层感知机(MLP)这类人工神经网络不适用于序列数据。

假设我们有一个MLP模型,用于对电影评论进行1到5的评分。对于评论“This is a great movie”,该模型预测评分为4;而对于评论“This is not a good movie”,MLP仍然预测为4(显然错误)。这是因为多层感知机无法记住之前的信息,它将每个词视为相互独立的个体,忽略了词语顺序和上下文关系。

因此,我们需要能够处理序列信息的模型——RNN。RNN可以像人类一样从左到右逐词处理信息,并持续保留已读内容的记忆(类似于人脑的工作方式)。RNN被设计用来识别数据中的时序特征,并利用这些趋势预测下一个可能的情况。虽然RNN在训练过程中与前馈神经网络类似,但它还能记住先前输入所学到的信息,并在生成输出时加以利用。相比之下,CNN和传统ANN是无状态的。

RNN的结构

RNN可以接收一个或多个输入向量,并产生一个或多个输出向量。其输出不仅取决于输入权重(如同标准神经网络),还依赖于一个“隐藏”状态向量,该向量承载了此前输入和输出所表达的意义。因此,相同的输入在不同上下文中可能会产生不同的输出。

下图展示了一个简单的循环神经网络:

这看起来不像传统的神经网络结构,对吧?不用担心,这只是表示RNN的一种标准方式。它的行为本质上仍是神经网络,唯一的区别在于存在一个反馈回路,这个回路的输出会作为下一时刻的输入之一。这种回路被称为时间循环(temporal loop)。为了更好地理解,我们可以将其展开:

结构说明:

  • 黄色节点代表网络的输入层。
  • 蓝色节点代表隐藏层。注意,这些节点的输出会被合并到下一层的输入中(与黄色输入结合),这就是我们所说的时间循环。
  • 红色节点是隐藏层产生的输出。根据RNN类型的不同,可以使用所有时刻的输出,也可以仅使用最后一个时刻的输出(具体将在下一课详细讲解)。

与前馈神经网络不同,RNN通过反馈机制(如“随时间反向传播”BPTT)在计算过程中将信息循环回网络内部。正是这种机制将不同时间步的输入关联起来,使RNN具备处理序列数据和时序信息的能力。

现在你已经了解了RNN的基本概念,接下来我们来看看它的主要应用场景。

RNN的应用场景

  • 情感分析
  • 文本摘要
  • 机器翻译
  • 图像描述生成(Image Captioning)

此外,你可以了解一下由AI创作的电影《Sunspring》。从中可以看到RNN的强大能力,但也能明显察觉其存在的严重问题。下面我们来讨论这个问题。

梯度消失问题

梯度消失(vanishing gradient)问题最早由Sepp(Joseph)Hochreiter在1991年发现。Sepp是一位杰出的科学家,也是推动RNN和LSTM发展的重要奠基人之一。另一位关键人物是蒙特利尔大学的Yoshua Bengio教授。他也独立发现了梯度下降过程中的这一问题,并于1994年发表了相关研究。Yoshua同样是深度学习特别是RNN领域的重要推动者。

在神经网络中,信息从前向传播至输出层,误差再通过反向传播更新权重。RNN也采用类似机制,但由于信息是跨时间传递的,因此可以在每个时间点计算误差。

为了最小化总误差,每一个参与输出计算的神经元都应更新其权重。但在RNN中,由于存在反馈回路,实际上并不存在“单一神经元”的概念——多个时间步的神经元共同影响某一输出,因此所有相关权重都需要被调整。

通常我们初始化权重时会让其接近零(称为权重循环)。在展开的时间循环中,这些连接隐藏层自身的权重如果初始值过小,会导致梯度变得极小,从而使网络难以有效更新权重,收敛速度显著变慢。

例如,可能需要1000个训练轮次才能让时间点t的权重达到理想值,但对于更早的时间点t−3,同样的训练次数却远远不够,因为那里的梯度已经趋近于零。更严重的是,早期层的输出是后续层的输入基础。如果前面的层没有充分训练,后面的训练就建立在不可靠的输入之上,导致整个网络都无法正确学习。

梯度消失问题的本质是:在网络中越往前(时间上越早),梯度值越低,权重越难更新,这种效应会像多米诺骨牌一样影响后续所有层的训练效果。

解决梯度消失问题的方法:

  • 合理初始化权重,以最大程度减少梯度消失的可能性
  • 使用专为解决该问题设计的回声状态网络(Echo State Networks)
  • 采用长短期记忆网络(LSTM)

解决梯度爆炸问题的方法:

  • 在反向传播过程中设置截断点(虽不理想,因部分权重无法更新)
  • 对梯度施加惩罚或人为缩小其数值
  • 设定梯度的最大阈值(梯度裁剪)

词嵌入:两个小项目

RNN架构的类型