文章

03 循环神经网络模型(Recurrent Neural Network Model)

03 循环神经网络模型(Recurrent Neural Network Model)

1. 为什么标准神经网络不适合序列数据?

  尝试使用标准全连接神经网络处理序列数据(如命名实体识别)存在两个主要缺陷:

  • 输入/输出长度不固定:不同句子的单词数量不同,标准网络难以处理变长输入。即使通过填充(Padding)统一长度,也不是最优的表达方式。
  • 无法共享特征:标准网络在不同位置学到的特征无法共享。例如,如果在位置1学到了“Harry”是人名,网络无法自动将在位置5出现的“Harry”也识别为人名。这导致参数量巨大且缺乏泛化能力。

2. 循环神经网络(RNN)的核心思想

  RNN 通过引入时间步(Time Step)隐藏状态(Hidden State) 来解决上述问题:

  • 序列处理:按顺序(从左到右)逐个处理输入单词 $x^{(t)}$。
  • 记忆传递:在时间步 $t$,网络不仅接收当前输入 $x^{(t)}$,还接收上一时间步的隐藏层激活值 $a^{(t-1)}$。
  • 参数共享:所有时间步共用同一组参数(权重矩阵),大大减少了参数量,并使得模型能够将从序列某一部分学到的特征推广到其他部分。
  • 初始化:通常将初始激活值 $a^{(0)}$ 设为零向量。

3. RNN 的局限性

  • 单向依赖:标准的 RNN 仅利用序列之前的信息来预测当前输出。

    • 例子:判断 “Teddy” 是否为人名。

      • 句子 A: “Teddy Roosevelt was a great President.” (是人名)
      • 句子 B: “Teddy bears are on sale!” (不是人名,是玩具熊)
    • 仅凭前几个词无法区分,需要后面的上下文信息(如 “Roosevelt” 或 “bears”)。

  • 解决方案预告:后续课程将介绍双向循环神经网络(BRNN) 来解决此问题,使其能同时利用前后文信息。

4. 数学公式与前向传播

符号定义

  • $x^{(t)}$:时间步 $t$ 的输入向量(例如 one-hot 编码)。
  • $a^{(t)}$:时间步 $t$ 的隐藏层激活值。
  • $\hat{y}^{(t)}$:时间步 $t$ 的输出预测值。
  • $a^{(0)} = \vec{0}$:初始激活值。

基本计算公式

  在时间步 $t$,前向传播过程如下:

  1. 计算隐藏层激活值

    \[a^{(t)} = g_1(W_{aa} a^{(t-1)} + W_{ax} x^{(t)} + b_a)\]
    • $W_{aa}$:控制从上一时刻隐藏状态到当前隐藏状态的权重。
    • $W_{ax}$:控制从当前输入到当前隐藏状态的权重。
    • $g_1$:激活函数,通常选用 tanh(有时也用 ReLU)。
  2. 计算输出预测值

    \[\hat{y}^{(t)} = g_2(W_{ya} a^{(t)} + b_y)\]
    • $W_{ya}$:控制从隐藏状态到输出的权重。
    • $g_2$:输出激活函数,取决于任务类型。

      • 二分类问题(如命名实体识别):Sigmoid
      • 多分类问题:Softmax

简化符号表示

  为了简化书写,可以将 $W_{aa}$ 和 $W_{ax}$ 合并为一个矩阵 $W_a$,将 $a^{(t-1)}$ 和 $x^{(t)}$ 拼接为一个向量:

  • 参数合并

    \[W_a = \begin{bmatrix} W_{aa} & W_{ax} \end{bmatrix}\]

    若 $a$ 维度为 $n_a$, $x$ 维度为 $n_x$,则 $W_a$ 的维度为 $(n_a, n_a + n_x)$。

  • 输入拼接

    \[\begin{bmatrix} a^{(t-1)} \\ x^{(t)} \end{bmatrix}\]

    该向量的维度为 $(n_a + n_x, 1)$。

  • 简化后的公式

    \[a^{(t)} = g_1\left( W_a \begin{bmatrix} a^{(t-1)} \\ x^{(t)} \end{bmatrix} + b_a \right)\] \[\hat{y}^{(t)} = g_2(W_{ya} a^{(t)} + b_y)\]

5. 图形表示

  • 展开图(Unrolled Graph) :将 RNN 按时间步从左到右展开,清晰展示数据流向($x^{(1)} \to a^{(1)} \to \dots \to x^{(T)} \to a^{(T)}$)。这是本课程推荐的理解方式。
  • 循环图(Loop Graph) :用带圈的箭头表示反馈连接,虽然紧凑但较难直观理解内部的时间展开逻辑。

6. 下一步

  掌握前向传播后,接下来的内容将涉及反向传播通过时间(BPTT) ,即如何计算梯度并利用梯度下降法训练 RNN 模型。

本文由作者按照 CC BY 4.0 进行授权