Coursera 笔记

Module 01 · Recurrent Neural Networks

Deep RNNs深度 RNN

Coursera ↗

到目前为止,您已经学习了 RNN(循环神经网络) 的不同版本,并且这些版本本身已经能够很好地工作。然而,在学习复杂的函数时,堆叠多个RNN层 来构建 更深的模型 是非常有用的。在本视频中,我们将介绍如何构建 深度RNN,让我们一起看一下。


标准神经网络与深度RNN的关系

标准神经网络结构

在标准的神经网络中,通常有以下几个步骤:

  1. 输入:从输入层 X 开始。
  2. 隐藏层:接着传递到多个隐藏层,每个隐藏层都有激活值,例如:
  • 第一层的激活值为 a1a_1
  • 第二层的激活值为 a2a_2
  • 以此类推
  1. 预测输出:最终经过多个层后,模型进行预测 y^\hat{y}。

深度RNN 也类似于这种结构,只不过它将时间维度引入其中。


深度RNN的工作原理

RNN的层次堆叠

让我们从一个标准RNN出发,构建深度RNN。为了简化表示,我们使用以下的记号:

  • a[l]<t>a^{[l]<t>}:表示 第 l 层 在 时间 t 时刻的激活值。

例如,一个包含三个隐藏层的RNN网络,激活值计算过程如下:

  1. 第1层(a[1]<t>a^{[1]<t>}):
  • 来自底层和左侧的信息共同作用,产生第一层的激活值。
  1. 第2层(a[2]<t>a^{[2]<t>}):
  • 这个层接收来自上一层(a[1]<t>a^{[1]<t>})和底层输入的激活值,并经过相应的计算。

每一层都有自己独立的权重矩阵 Wa[l]W_a[l] 和偏置 ba[l]b_a[l],如图所示:

  • 第1层的参数:Wa[1]W_a[1],ba[1]b_a[1]
  • 第2层的参数:Wa[2]W_a[2],ba[2]b_a[2]

通过这种方式,网络可以逐层堆叠,以实现更深的结构。


深度RNN中的层级计算示例

假设一个三层的深度RNN,激活计算的流程如下:

  1. 第2层计算:
  • 输入:来自第1层的激活值(例如 a[1]<3>a^{[1]<3>}),以及输入数据(例如 a[2]<2>a^{[2]<2>})。
  • 使用激活函数 g 和权重矩阵 Wa[2]W_a[2] 计算激活值:
  1. 第1层计算:
  • 通过类似的方式计算第一层的激活值,参数是 Wa[1]W_a[1] 和 ba[1]b_a[1]。

深度RNN的架构与组合

堆叠RNN的网络架构

  • 在标准的 RNN 中,可能会看到多个隐藏层堆叠在一起。但对于 RNN 来说,即使只有三层,它已经具有相当大的复杂度,因为时间维度会使网络变得更加庞大。
  • 另外一种更常见的做法是,堆叠 递归层,但每一层的输出并不相互连接,而是由多个 深度网络 进行处理。例如,输出 y<1>y^{<1>} 可能由一个递归层接入深度网络生成,而 y<2>y^{<2>}、y<3>y^{<3>}、y<4>y^{<4>} 等则由后续的深度网络进行预测。

深度网络的连接方式

这种网络通常的形式是递归层依时间连接,而深度网络部分则采用垂直堆叠的方式,形成一个 深度递归网络(例如多个RNN层后接深度网络):

  • 正向连接:递归单元按照时间步长连接。
  • 深度网络:递归层输出接入深度网络。

深度RNN中的变种与扩展

  • 深度双向RNN(Bidirectional RNN):除了常见的标准RNN,还可以构建 深度双向RNN,即在 正向 和 反向 的信息流中堆叠多个递归单元。这种结构能够同时考虑 过去 和 未来 的信息,进一步提升模型的表达能力。
  • RNN、GRU、LSTM的组合:堆叠层不一定局限于标准的RNN,也可以是 GRU 或 LSTM 模型,这使得网络在处理长序列时更加高效。

深度RNN的计算复杂度

  • 训练复杂度:由于深度RNN需要较长的 时间维度,因此它们在训练过程中通常计算量非常大。这也意味着,虽然可以堆叠多个递归层,但实际中,我们通常不会看到超过三层的递归堆叠。
  • 与传统深度神经网络的比较:与传统的深度神经网络相比,深度RNN的递归层数通常较少。即使是有多个隐藏层的递归结构,它们的计算量也会受到 时间维度 的制约。

总结:深度RNN的优缺点

优点 🏅 缺点 ⚠️
能够处理复杂的序列任务 计算复杂度较高,训练时间长
可以堆叠多个递归层以增强模型表达能力 递归层数通常不超过三层
可与GRU、LSTM结合使用,提升性能 对于长序列的训练需求较高
适用于长时序依赖问题 相较于传统深度网络,递归层数较少

结语

通过本周的学习,您已经掌握了从 基本RNN 到 GRU、LSTM、双向RNN,以及这些模型的 深度版本。现在,您拥有了一个非常丰富的工具箱,能够构建强大的 序列学习模型。

祝您在问题练习中取得好成绩,并期待下周的课程!🎓