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$,前向传播过程如下:
计算隐藏层激活值:
\[a^{(t)} = g_1(W_{aa} a^{(t-1)} + W_{ax} x^{(t)} + b_a)\]- $W_{aa}$:控制从上一时刻隐藏状态到当前隐藏状态的权重。
- $W_{ax}$:控制从当前输入到当前隐藏状态的权重。
- $g_1$:激活函数,通常选用 tanh(有时也用 ReLU)。
计算输出预测值:
\[\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 进行授权