Coursera 笔记

Module 01 · Recurrent Neural Networks

Gated Recurrent Unit (GRU)门控循环单元

Coursera ↗

在之前的学习中,我们了解了 基本 RNN 的工作原理。在这一部分视频中,我们将深入探讨 GRU(门控循环单元),它对 RNN 隐藏层进行了一些修改,从而在捕捉长距离依赖和解决 梯度消失问题 上表现得更为优秀。接下来,让我们一起看看 GRU 是如何工作的。 🚀


1. GRU 的背景与动机

你可能已经看到过用于计算 RNN 激活值的公式,形式如下:

在这里,a<t−1>\mathbf{a}^{<t-1>} 表示上一时刻的激活值,x<t>\mathbf{x}^{<t>} 是当前输入,Wa\mathbf{W}_a 是参数矩阵,b\mathbf{b} 是偏置项。

接下来,我们将通过图示来帮助理解 RNN 的运作。RNN 单元的图示如下:

  • 输入:a<t−1>\mathbf{a}^{<t-1>}(上一个时刻的激活值)和 x<t>\mathbf{x}^{<t>}(当前输入)
  • 输出:经过加权和偏置计算后,经过激活函数(如 tanh)计算的输出激活值 at\mathbf{a}_t

这个图示是我们理解 GRU 的基础图形。


2. GRU 的核心思想与创新

2.1 GRU 单元的结构

GRU 单元的创新在于引入了一个新的变量——C(Memory Cell)记忆单元,它可以帮助记住一些关键信息,例如 “the cat” 是单数,从而确保我们在后续生成文本时能够正确使用 "was" 或 "were"。

  • 在每个时刻 t,记忆单元会有一个值 ct\mathbf{c}_t。
  • GRU 会输出一个激活值 at\mathbf{a}_t,此时 at=ct\mathbf{a}_t = \mathbf{c}_t。

重要提示:在 GRU 中,记忆单元和输出激活值是相同的(ct=at\mathbf{c}_t = \mathbf{a}_t)。但在后续介绍的 LSTM 中,这两个值会有所不同。

2.2 GRU 的核心公式与结构

在 GRU 中,每个时刻都会计算一个候选值 c~t\tilde{\mathbf{c}}_t,用于更新记忆单元。候选值计算公式如下:

接下来,GRU 引入了一个 更新门(Update Gate),记作 γu\gamma_u,它决定是否更新记忆单元。更新门的值是介于 0 和 1 之间的,通过 sigmoid 激活函数计算。

2.3 更新门的作用

  • 当 γu=1\gamma_u = 1 时,更新记忆单元:ct=c~t\mathbf{c}_t = \tilde{\mathbf{c}}_t
  • 当 γu=0\gamma_u = 0 时,记忆单元保持不变:ct=ct−1\mathbf{c}_t = \mathbf{c}_{t-1}

2.4 记忆单元的更新公式

2.5 更新门的直觉

想象一下,我们在扫描句子时,遇到 "the cat" 这样的短语。此时,更新门 γu\gamma_u 将会被设为 1,更新记忆单元 ct\mathbf{c}_t,以便捕捉 "cat" 作为 单数 的信息,直到句子后续部分需要使用到该信息为止。

  • 如果 γu=0\gamma_u = 0,则不会更新记忆单元,保持原值,直到真正需要时才进行更新。

3. GRU 的图示与可视化

下面是 GRU 单元的简化图示,帮助理解其内部工作原理:

  1. 输入:at−1\mathbf{a}_{t-1}(上一个时刻的激活值)和 xt\mathbf{x}_t(当前输入)
  2. 候选值计算:通过加权求和、tanh 激活计算得到候选值 c~t\tilde{\mathbf{c}}_t
  3. 更新门:通过 sigmoid 激活函数计算 γu\gamma_u,确定是否更新记忆单元
  4. 记忆单元更新:根据 γu\gamma_u 的值决定记忆单元的更新方式

最终,GRU 会输出记忆单元的值,作为激活值 at\mathbf{a}_t,并可以通过 Softmax 层预测输出值 y^t\hat{y}_t。


4. GRU 如何解决梯度消失问题?

由于 GRU 的 更新门 可以非常灵活地控制记忆单元的更新,它能够有效避免 梯度消失问题。当 γu\gamma_u 逼近 0 时,记忆单元的值不会发生变化,从而使得 梯度能够在较长的序列中保持,解决了梯度消失的问题。

  • 当 γu\gamma_u 远离 0 时,记忆单元的值更新,可以捕捉到序列中较远位置的相关信息。
  • 当 γu\gamma_u 接近 0 时,记忆单元保持不变,有效避免了梯度消失。

5. GRU 的实际应用

5.1 参数维度与计算

  • 记忆单元的维度:通常,记忆单元 ct\mathbf{c}_t 是一个向量,维度与隐藏层的激活值相同(例如 100 维)。
  • 元素级乘法:在计算过程中,使用元素级乘法来控制哪些部分需要更新。

5.2 比较与 LSTM

GRU 和 LSTM(长短期记忆网络) 都是为了解决 长距离依赖 和 梯度消失 问题而设计的。GRU 在计算上更简洁,但 LSTM 引入了更多的门控机制,可能在一些复杂的任务中表现更好。


小结

关键点 基本 RNN GRU(门控循环单元)
梯度消失问题 存在问题,难以捕捉长距离依赖 通过更新门有效避免梯度消失
记忆单元 无记忆单元,只依赖当前输入和上一时刻的输出 引入记忆单元 ct\mathbf{c}_t,可存储长期信息
更新机制 直接使用上一时刻的激活值 使用更新门 γu\gamma_u 控制记忆单元的更新
常见应用 适用于短序列数据,性能有限 适用于长序列数据,能够捕捉长距离依赖

未来展望:LSTM 与 GRU 的选择

GRU 是为了解决 RNN 在长序列学习中的问题而设计的,它通过 门控机制 提供了更强的记忆能力,避免了梯度消失问题。而 LSTM(长短期记忆网络)也是解决同样问题的另一个常用方法。

在下一节视频中,我们将详细探讨 LSTM 的原理,了解它与 GRU 的区别和优缺点。🎥