序列数据的建模
1. 序列数据的特点
序列数据是指具有时间或顺序依赖性的数据类型,其核心特征包括:
- 时序性:数据点之间存在明确的时间先后关系(如股票价格、语音信号)
- 变长性:序列长度可能动态变化(如不同长度的文本句子)
- 上下文依赖:当前数据点的含义受前后数据点影响(如自然语言中的代词指代)
常见序列数据类型:
| 数据类型 | 示例 | 特点 |
|---|---|---|
| 时间序列 | 传感器数据、ECG信号 | 连续数值,强时间相关性 |
| 文本序列 | 新闻、社交媒体文本 | 离散符号,语义依赖 |
| 生物序列 | DNA/蛋白质序列 | 符号组合,结构特征 |
2. RNN的序列建模原理
循环神经网络通过隐藏状态实现序列建模:
# 简化的RNN计算过程(数学表示)
h_t = tanh(W_hh * h_{t-1} + W_xh * x_t + b_h)
y_t = W_hy * h_t + b_y
关键机制:
- 循环连接:隐藏状态h_t作为"记忆"传递历史信息
- 参数共享:同一组权重(W_hh, W_xh)处理所有时间步
- 序列展开:通过时间展开形成计算图(见图5.3)

3. 序列建模的典型任务
3.1 序列分类
- 任务特点:为整个序列分配类别标签
- 实现方式:
# PyTorch实现示例 class RNNClassifier(nn.Module): def forward(self, x): _, h_n = self.rnn(x) # 取最后时间步的隐藏状态 return self.fc(h_n[-1]) - 应用场景:
- 情感分析(文本→正面/负面)
- 动作识别(传感器序列→动作类别)
3.2 序列生成
- 核心方法:自回归生成(Autoregressive)
p(x_{1:T}) = \prod_{t=1}^T p(x_t|x_{1:t-1}) - 技术挑战:
- 暴露偏差(Exposure Bias)
- 长程依赖问题
3.3 序列到序列(Seq2Seq)
典型架构:
[Encoder RNN] → Context Vector → [Decoder RNN]
改进方案:
- 注意力机制(见第6章)
- 双向编码器
4. 高级建模技术
4.1 层次化建模
- 动机:捕获不同时间尺度的模式
- 实现方式:
- 堆叠多层RNN(低层→短时特征,高层→长时特征)
- 时钟工作RNN(Clockwork RNN)
4.2 注意力机制
- 核心思想:动态关注相关历史片段
- 计算过程:
\alpha_t = \text{softmax}(score(h_{t-1}, h_i)) c_t = \sum_i \alpha_{t,i}h_i
4.3 现代序列建模趋势
- Transformer架构的崛起
- 卷积时序网络(TCN)
- 神经微分方程(Neural ODE)
5. 实践建议
- 数据预处理:
- 文本:子词切分(BPE)、词向量初始化
- 时序:归一化、缺失值处理
- 训练技巧:
- 梯度裁剪(解决梯度爆炸)
- 课程学习(Curriculum Learning)
- 评估指标:
任务类型 常用指标 分类 Accuracy, F1-score 生成 BLEU, ROUGE, Perplexity 预测 MAE, RMSE, DTW
案例研究:在电力负荷预测任务中,结合LSTM与时序特征工程(傅里叶变换提取周期特征)可将预测误差降低23%(IEEE TPWRS 2022)
