第十章:序列建模:循环与递归网络
1. 引言
序列建模(Sequence Modeling)是深度学习中处理时序数据和可变长度序列的核心技术。与前馈神经网络(Feedforward Neural Networks)不同,循环神经网络(Recurrent Neural Networks, RNN)具有内部状态(Hidden State),能够捕捉数据中的时序依赖关系和动态行为。序列数据广泛存在于自然语言处理(文本、语音)、视频分析、股票价格预测、音乐生成、DNA序列分析等领域。
循环神经网络的核心思想是参数共享(Parameter Sharing):在网络的不同时间步上使用相同的权重矩阵,从而能够处理任意长度的输入序列,并泛化到不同长度的序列。这种参数共享机制使得RNN能够有效地建模长期依赖(Long-term Dependencies)问题,尽管在实际训练中仍面临梯度消失和梯度爆炸等挑战。
递归神经网络(Recursive Neural Networks)是RNN在树结构数据上的推广,能够处理具有层次化结构的输入,如句子的语法分析树。本章将系统介绍循环与递归网络的基本原理、训练方法、经典架构以及前沿应用。
2. RNN展开与前向传播
2.1 循环神经网络的基本结构
循环神经网络的核心是一个隐藏状态 \(\mathbf{h}_t\) 的更新函数。给定输入序列 \(\mathbf{x} = (\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_T)\),RNN在每个时间步 \(t\) 计算隐藏状态 \(\mathbf{h}_t\) 和输出 \(\mathbf{o}_t\):
其中 \(f\) 是非线性激活函数,\(\boldsymbol{\theta}\) 为网络参数。最基本的RNN形式称为Elman网络:
其中 \(\mathbf{W}_{xh} \in \mathbb{R}^{d_h \times d_x}\)、\(\mathbf{W}_{hh} \in \mathbb{R}^{d_h \times d_h}\)、\(\mathbf{W}_{hq} \in \mathbb{R}^{d_o \times d_h}\) 分别为输入到隐藏、隐藏到隐藏、隐藏到输出的权重矩阵,\(\mathbf{b}_h\) 和 \(\mathbf{b}_q\) 为偏置向量。
2.2 时间展开(Unfolding)
RNN的时间展开是理解和分析循环网络的重要工具。将RNN沿时间轴展开,我们可以得到一个非循环的计算图,其中每个时间步对应一个独立的节点,但共享相同的参数:
展开后的网络包含 \(T\) 个时间步,每个时间步包含相同的子网络结构,参数 \((\mathbf{W}_{xh}, \mathbf{W}_{hh}, \mathbf{W}_{hq}, \mathbf{b}_h, \mathbf{b}_q)\) 在所有时间步上共享。这种参数共享机制确保了网络能够处理可变长度的序列,并且对位置不敏感——无论某个特征出现在序列的哪个位置,都使用相同的变换进行处理。
2.3 前向传播算法
RNN的前向传播过程如下:
输入:序列 \(\mathbf{x}_{1:T}\),初始隐藏状态 \(\mathbf{h}_0\)(通常为零向量)
输出:每个时间步的隐藏状态 \(\mathbf{h}_t\) 和输出 \(\mathbf{o}_t\)
算法:
# 初始化
h = h0
for t in range(1, T+1):
# 隐藏状态更新
h = tanh(W_xh @ x[t] + W_hh @ h + b_h)
# 输出计算
o = W_hq @ h + b_q
# 保存结果
hidden_states.append(h)
outputs.append(o)
时间复杂度为 \(O(T)\),空间复杂度为 \(O(T)\)(需要存储所有时间步的隐藏状态用于反向传播)。
3. 时间反向传播(BPTT)与教师强制
3.1 BPTT的基本原理
反向传播通过时间(Backpropagation Through Time, BPTT) 是训练循环神经网络的标准算法。其核心思想与标准反向传播相同——通过计算损失函数对参数的梯度来更新参数——但由于RNN的时间展开特性,梯度需要沿时间轴反向传播。
设损失函数为 \(\mathcal{L} = \sum_{t=1}^{T} \mathcal{L}_t\),其中 \(\mathcal{L}_t\) 是第 \(t\) 时间步的损失。BPTT的计算分为两步:
第一步:前向传播
沿时间步依次计算并保存 \(\mathbf{h}_t\) 和 \(\mathbf{o}_t\)。
第二步:反向传播
从最后一个时间步开始,逐步向前计算梯度。
对参数 \(\mathbf{W}_{hh}\) 的梯度:
其中 \(\frac{\partial^+ \mathbf{h}_k}{\partial \mathbf{W}_{hh}}\) 是直接偏导数(不考虑对 \(\mathbf{h}_{k-1}\) 的间接影响)。
定义 \(\boldsymbol{\delta}_t = \frac{\partial \mathcal{L}_t}{\partial \mathbf{h}_t}\),则有递推关系:
其中 \(\mathbf{z}_t = \mathbf{W}_{xh}\mathbf{x}_t + \mathbf{W}_{hh}\mathbf{h}_{t-1} + \mathbf{b}_h\)。
3.2 梯度消失与梯度爆炸
BPTT面临的核心问题是梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)。
沿时间轴反向传播时,梯度项 \(\frac{\partial \mathbf{h}_t}{\partial \mathbf{h}_{k}}\) 的计算涉及雅可比矩阵的连乘:
当 \(t - k\) 较大时(即需要捕捉长期依赖时),雅可比矩阵的连乘会导致:
- 梯度消失:若 \(\left| \lambda_{\max}(\mathbf{W}_{hh}) \right| < 1\),梯度按指数衰减,难以学习长期依赖
- 梯度爆炸:若 \(\left| \lambda_{\max}(\mathbf{W}_{hh}) \right| > 1\),梯度按指数增长,导致训练不稳定
3.3 教师强制(Teacher Forcing)
教师强制(Teacher Forcing) 是一种加速RNN训练的技术,尤其适用于训练初期或生成任务。在标准RNN训练中,当前时间步的输入依赖于前一时间步的预测输出;而在教师强制中,当前时间步的输入使用真实的标注数据(Ground Truth):
而非 \(\mathbf{h}_t = f(\mathbf{h}_{t-1}, \hat{\mathbf{y}}_{t-1}; \boldsymbol{\theta})\)。
教师强制的主要优势: 1. 加速收敛:避免了早期训练中误差的累积传播 2. 稳定训练:真实输入分布更稳定,梯度更可靠
缺点是训练与推理不一致:推理时无法获得真实标注,必须使用模型自己的预测作为输入,这可能导致误差累积。解决方案包括: - 计划采样(Scheduled Sampling):训练时按概率在真实标注和模型预测间切换 - 混合训练:训练早期使用教师强制,逐步过渡到使用模型预测
4. 梯度问题的解决方案:LSTM、GRU与回声状态网络
4.1 长短期记忆网络(LSTM)
长短期记忆网络(Long Short-Term Memory, LSTM) 由Hochreiter和Schmidhuber于1997年提出,是解决梯度消失问题最成功的架构之一。LSTM通过引入门控机制(Gating Mechanism) 来控制信息的流动。
LSTM的核心组件包括三个门和一个记忆细胞(Cell State):
记忆细胞的更新:
隐藏状态的更新:
其中 \(\odot\) 表示逐元素乘法(Hadamard乘积),\(\sigma\) 为Sigmoid函数。
LSTM如何缓解梯度消失:关键在于记忆细胞 \(\mathbf{c}_t\) 的更新方式。遗忘门 \(\mathbf{f}_t\) 控制需要保留的历史信息,当 \(\mathbf{f}_t\) 接近1时,梯度可以几乎无损地沿时间轴传播:
由于 \(\mathbf{f}_t\) 是可学习的(取值在0到1之间),网络能够自适应地决定需要保留多远的历史信息,从而有效捕捉长期依赖。
4.2 门控循环单元(GRU)
门控循环单元(Gated Recurrent Unit, GRU) 是Cho等人于2014年提出的另一种门控RNN架构,相比LSTM更加简洁,仅使用两个门:
更新门 \(\mathbf{z}_t\) 控制前一隐藏状态需要保留多少信息,重置门 \(\mathbf{r}_t\) 控制需要忽略多少历史信息。GRU的参数数量比LSTM少(无输出门和记忆细胞),在某些任务上表现相当甚至更好。
4.3 回声状态网络(Echo State Network)
回声状态网络(Echo State Network, ESN) 是一种特殊的RNN架构,其核心思想是将网络分为储备池(Reservoir) 和读出层(Readout) 两部分。储备池的连接权重(\(\mathbf{W}_{hh}\) 和 \(\mathbf{W}_{xh}\))是随机初始化且固定不变的,只有读出层权重(\(\mathbf{W}_{hq}\))需要训练。
ESN的隐藏状态更新:
其中 \(\alpha\) 是泄漏率(Leak Rate),控制状态的更新速度。
ESN的理论基础:若储备池的谱半径(Spectral Radius)\(\rho(\mathbf{W}_{hh}) < 1\),则网络具有回声状态属性(Echo State Property)——网络会渐进地忘记初始状态,最终状态由输入序列决定。这种设计避免了对 \(\mathbf{W}_{hh}\) 的训练,从而解决了梯度反向传播的困难。
ESN的主要优势是训练速度快(只需训练线性读出层),但其性能高度依赖于储备池的设计和超参数选择。
5. 双向RNN与深度RNN
5.1 双向循环神经网络
双向循环神经网络(Bidirectional RNN, Bi-RNN) 由Schuster和Paliwal于1997年提出,用于同时利用序列的前向和后向信息。在许多任务中(如语音识别、机器翻译),当前时刻的输出不仅依赖于之前的上下文,还依赖于之后的上下文。
Bi-RNN由两个独立的RNN组成: - 前向RNN:\(\overrightarrow{\mathbf{h}}_t = f(\overrightarrow{\mathbf{h}}_{t-1}, \mathbf{x}_t)\),沿时间正序处理 - 后向RNN:\(\overleftarrow{\mathbf{h}}_t = f(\overleftarrow{\mathbf{h}}_{t+1}, \mathbf{x}_t)\),沿时间逆序处理
最终隐藏状态拼接两者的输出:
输出层基于 \(\mathbf{h}_t\) 计算:
Bi-RNN的应用场景:需要完整序列上下文的任务,如命名实体识别、语音识别、机器翻译。注意:Bi-RNN不适用于实时流式处理,因为它需要等待整个序列输入后才能开始计算。
5.2 深度循环神经网络
深度循环神经网络(Deep RNN) 通过堆叠多个RNN层来增加模型的表示能力。每一层接收上一层的隐藏状态作为输入:
其中 \(l = 1, 2, \ldots, L\) 表示层索引,\(L\) 为网络深度。
深层Bi-RNN(Deep Bi-RNN)结合了双向性和深度的优势,能够学习更复杂的时序表示:
深度RNN的挑战是梯度传播:随着层数增加,梯度在空间维度(层间)和时间维度(时间步)上同时传播,更容易出现梯度问题。残差连接(Residual Connections)和高速连接(Highway Connections)可以有效缓解这一问题。
5.3 公式汇总表
| 架构 | 核心公式 | 特点 |
|---|---|---|
| 基础RNN | \(\mathbf{h}_t = \tanh(\mathbf{W}_{xh}\mathbf{x}_t + \mathbf{W}_{hh}\mathbf{h}_{t-1})\) | 简单,但存在梯度消失/爆炸 |
| LSTM | \(\mathbf{c}_t = \mathbf{f}_t \odot \mathbf{c}_{t-1} + \mathbf{i}_t \odot \tilde{\mathbf{c}}_t\) | 三个门控,记忆细胞,缓解梯度消失 |
| GRU | \(\mathbf{h}_t = (1-\mathbf{z}_t) \odot \mathbf{h}_{t-1} + \mathbf{z}_t \odot \tilde{\mathbf{h}}_t\) | 两个门控,参数少 |
| ESN | \(\mathbf{h}_t = (1-\alpha)\mathbf{h}_{t-1} + \alpha \tanh(\mathbf{W}_{xh}\mathbf{x}_t + \mathbf{W}_{hh}\mathbf{h}_{t-1})\) | 随机储备池,只需训练读出层 |
| Bi-RNN | \(\mathbf{h}_t = [\overrightarrow{\mathbf{h}}_t; \overleftarrow{\mathbf{h}}_t]\) | 利用前后上下文 |
6. 序列到序列模型与注意力机制
6.1 编码器-解码器架构
序列到序列(Sequence-to-Sequence, Seq2Seq) 模型由Sutskever等人于2014年提出,广泛应用于机器翻译、文本摘要、对话系统等任务。Seq2Seq模型由两个核心组件构成:
编码器(Encoder):将输入序列 \(\mathbf{x}_{1:T}\) 编码为固定维度的上下文向量 \(\mathbf{c}\)
解码器(Decoder):基于上下文向量 \(\mathbf{c}\) 和先前预测的符号生成输出序列 \(\mathbf{y}_{1:T'}\)
Seq2Seq的核心问题是信息瓶颈:所有输入信息必须压缩到最后一个隐藏状态 \(\mathbf{h}_T\) 中,这在处理长序列时成为严重限制。
6.2 注意力机制
注意力机制(Attention Mechanism) 由Bahdanau等人于2015年提出,彻底解决了信息瓶颈问题。核心思想是在解码的每一步,允许模型"关注"输入序列的不同部分:
软性注意力(Soft Attention):对所有输入位置计算加权求和
其中注意力权重 \(\alpha_{ti}\) 由解码器当前状态 \(\mathbf{s}_{t-1}\) 和编码器各状态 \(\mathbf{h}_i\) 共同决定:
其中 \(e\) 是注意力评分函数(Attention Scoring Function)。
解码器状态更新:
注意力机制的优势: 1. 解决了长序列的信息压缩问题 2. 提供了可解释性——可视化注意力权重可以观察模型关注的位置 3. 支持并行计算(相比完全自回归模型)
自注意力(Self-Attention):在序列内部建立位置间的依赖关系,是Transformer架构的核心组件。
6.3 注意力变体
| 类型 | 公式 | 特点 |
|---|---|---|
| 加性注意力 | \(e(\mathbf{s}, \mathbf{h}) = \mathbf{v}^\top \tanh(\mathbf{W}_s\mathbf{s} + \mathbf{W}_h\mathbf{h})\) | 通用性强,计算量较大 |
| 点积注意力 | \(e(\mathbf{s}, \mathbf{h}) = \mathbf{s}^\top \mathbf{h}\) | 简单高效,需要缩放因子 |
| 双线性注意力 | \(e(\mathbf{s}, \mathbf{h}) = \mathbf{s}^\top \mathbf{W}_a \mathbf{h}\) | 捕获任意相关性 |
| 多头注意力 | \(\text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\mathbf{W}^O\) | 捕捉多种相关性模式 |
7. 递归神经网络与记忆网络
7.1 递归神经网络(Recursive Neural Network)
递归神经网络(Recursive Neural Network) 是RNN在树结构或图结构数据上的推广。与RNN沿时间轴展开不同,递归网络根据输入的层次结构(如句子的语法树)进行空间展开。
给定一个二叉树,每个非叶子节点 \(\mathbf{u}\) 的表示由其两个子节点 \(\mathbf{l}\) 和 \(\mathbf{r}\) 决定:
其中 \([\mathbf{l}; \mathbf{r}]\) 表示子节点向量的拼接,\(\mathbf{W}\) 和 \(\mathbf{b}\) 为共享参数。
递归网络的训练采用反向传播穿过结构(Backpropagation Through Structure, BPTS)算法:
递归网络适用于: - 自然语言处理:句子的语义表示、情感分析 - 场景理解:图像的层次化表示 - 程序分析:源代码的抽象语法树
7.2 记忆网络(Memory Networks)
记忆网络(Memory Networks) 由Facebook AI Research于2015年提出,旨在让模型能够读写外部记忆(External Memory),从而支持复杂推理和长期记忆。
记忆网络的核心组件: 1. 记忆模块(Memory):存储信息向量 \(\mathbf{m}_i\) 的外部数组 2. 读取(Read):基于查询 \(\mathbf{q}\) 从记忆中提取相关信息 3. 写入(Write):将新信息写入记忆
端到端记忆网络(End-to-End Memory Networks) 的运作流程:
输入阶段:将输入 \(\mathbf{x}\) 编码为特征向量 \(\mathbf{x}_i\)(如词袋或嵌入向量),存入记忆
读取阶段: $$ \alpha_i = \text{softmax}(\mathbf{q}^\top \mathbf{m}_i) $$ $$ \mathbf{o} = \sum_i \alpha_i \mathbf{c}_i $$
其中 \(\mathbf{c}_i\) 是与 \(\mathbf{m}_i\) 关联的记忆内容,\(\mathbf{q}\) 是查询向量。
回答阶段: $$ \hat{\mathbf{a}} = \mathbf{q} + \mathbf{o} $$ $$ P(\mathbf{a}) = \text{softmax}(\mathbf{W} \hat{\mathbf{a}}) $$
记忆网络相比标准RNN/LSTM的优势在于: - 容量:可以存储大量信息(远超隐藏状态的有限容量) - 可解释性:通过查询记忆可以直接理解模型的决策依据 - 长期记忆:信息可以持久保存,不因时间步增加而衰减
7.3 神经图灵机与可微计算机
神经图灵机(Neural Turing Machine, NTM) 由DeepMind于2014年提出,是一种可微分计算机(Differential Computer),结合了神经网络的学习能力与图灵机的形式化计算框架。
NTM的核心组件: - 控制器(Controller):通常为RNN或前馈网络,负责处理输入输出 - 记忆矩阵(Memory Matrix):\(\mathbf{M} \in \mathbb{R}^{N \times M}\),\(N\) 为记忆位置数,\(M\) 为每个位置的向量维度 - 读写头(Read/Write Heads):基于控制器输出产生读写权重
读取操作: $$ \mathbf{r}_t = \sum_i w_t(i) \mathbf{M}_t(i) $$
其中 \(w_t(i)\) 是第 \(i\) 个记忆位置的权重。
写入操作:包括擦除和添加两个步骤:
其中 \(e_t(i)\) 和 \(a_t(i)\) 分别为擦除向量和添加向量,由控制器输出。
NTM通过注意力机制对记忆进行寻址(Content-based和Location-based寻址),实现了端到端的可微训练,为构建更强大的记忆增强模型奠定了基础。
参考文献
- Hochreiter, S., & Schmidhuber, J. (1997). Long short-term memory. Neural computation, 9(8), 1735-1780.
- Cho, K., Van Merriënboer, B., Gulcehre, C., et al. (2014). Learning phrase representations using RNN encoder-decoder for statistical machine translation. EMNLP.
- Jaeger, H. (2001). The "echo state" approach to analysing and training recurrent neural networks. GMD Technical Report 148.
- Schuster, M., & Paliwal, K. K. (1997). Bidirectional recurrent neural networks. IEEE Transactions on Signal Processing.
- Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural networks. NeurIPS.
- Bahdanau, D., Cho, K., & Bengio, Y. (2015). Neural machine translation by jointly learning to align and translate. ICLR.
- Graves, A., Wayne, G., & Danihelka, I. (2014). Neural Turing Machines. arXiv.
- Sukhbaatar, S., Weston, J., Fergus, R., et al. (2015). End-to-end memory networks. NeurIPS.