⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

3.5 序列建模与一维信号处理

核心问题: 图像之外,深度学习如何处理时间序列、音频和其他一维信号?

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明


技术背景

核心问题

前面介绍的 CNN 更擅长处理二维空间数据,但现实中还有大量一维信号和序列数据:文本、音频、传感器、医学时序和金融序列。它们都要求模型理解“顺序”和“依赖关系”。

关键概念

概念简单解释
RNN用隐状态递推处理序列
1D CNN在时间轴上滑动卷积核提取局部模式
状态空间模型用状态递推描述动态系统
长期依赖当前输出依赖很久之前的输入

应用场景

  • 文本建模:句子、Token序列
  • 音频处理:语音、音乐、环境声音
  • 传感器信号:加速度计、心电图、工业时序
  • 金融时间序列:价格、成交量、波动模式

思考问题

  • 为什么时序信号比静态图像更难处理?
  • 1D CNN、RNN、Transformer各自适合什么依赖结构?

本节学习目标

完成本节后,你应该能够:

  1. ✅ 理解RNN与状态空间模型的联系
  2. ✅ 理解1D CNN如何处理一维信号
  3. ✅ 理解1D CNN、RNN、Transformer在序列建模中的差异

序列数据的挑战

序列与图像的区别

图像主要强调空间结构,而序列数据强调时间顺序。序列通常长度可变,且当前输出可能依赖很久之前的输入。

例子:

  • 文本:单词序列
  • 音频:声波序列
  • 时间序列:传感器读数序列

RNN的基本思想

RNN 在每个时刻用隐状态记忆历史信息。

h_t = f(h_{t-1}, x_t)
y_t = g(h_t)

其中:

  • ht:第t时刻的隐状态
  • xt:第t时刻的输入
  • yt:第t时刻的输出

直观理解

时刻1:h_1 = f(h_0, x_1)
时刻2:h_2 = f(h_1, x_2)
时刻3:h_3 = f(h_2, x_3)
...

隐状态像一个不断更新的“记忆”。


RNN与状态空间模型的联系

状态空间模型

状态转移方程:

xt+1=Axt+But

观测方程:

yt=Cxt+Dut

RNN

隐状态更新:

ht=tanh(Whhht1+Wxhxt+bh)

输出:

yt=Whyht+by

联系

RNN可以看作可学习的状态空间模型:

  • 状态转移矩阵 A → 可学习的 Whh
  • 输入矩阵 B → 可学习的 Wxh
  • 观测矩阵 C → 可学习的 Why

这也是为什么RNN特别适合时间序列和动态系统建模。


1D CNN如何处理一维信号

RNN并不是处理序列的唯一方法。对于很多一维信号,1D CNN也很有效。

核心思想

1D CNN把卷积核沿时间轴滑动:

输入信号:x[1], x[2], x[3], ..., x[T]
卷积核:w[1], w[2], ..., w[k]
输出:局部模式响应

与DSP的联系

这和第1章的一维滤波非常接近:

  • DSP中的滤波器:手工设计
  • 1D CNN中的卷积核:自动学习

可以把1D CNN理解为可学习的滤波器组。

适用场景

1D CNN特别适合:

  • 语音中的局部频谱模式
  • ECG中的波形结构
  • 传感器中的周期性模式
  • 工业时序中的局部异常

RNN的问题

梯度消失

反向传播时,梯度通过多个时刻相乘,容易变得很小:

Lh1=LhTt=2Ththt1

如果这些导数长期小于1,梯度会指数衰减。

梯度爆炸

如果这些导数长期大于1,梯度会指数增长。

工程含义

这意味着RNN虽然有“记忆”,但并不总能稳定地保留很久之前的信息。


LSTM和GRU

为了解决RNN的长期依赖问题,出现了门控结构:

LSTM

  • 遗忘门:决定丢弃哪些信息
  • 输入门:决定写入哪些信息
  • 输出门:决定输出哪些信息

GRU

  • LSTM的简化版本
  • 参数更少
  • 训练更高效

这些结构可以理解为在改进“如何管理状态记忆”。


1D CNN vs RNN vs Transformer

1D CNN

优势:

  • 并行计算快
  • 擅长局部模式检测
  • 很像可学习滤波器组

局限:

  • 处理长距离依赖不够直接

RNN

优势:

  • 有显式状态递推
  • 很适合动态系统和递推过程

局限:

  • 难并行
  • 长期依赖困难

Transformer

优势:

  • 更容易建模长距离依赖
  • 支持并行训练
  • 更通用

局限:

  • 计算和内存成本较高

一个简单总结

1D CNN:擅长局部模式
RNN:擅长递推状态
Transformer:擅长直接建模长距离依赖

这三类方法不是互相完全替代,而是分别对应不同的依赖结构和计算权衡。


代码实验

完整的代码示例位于:code/ch03_deep_learning_fast/sequence_models_1d_signal.py

运行方式:

bash
python code/ch03_deep_learning_fast/sequence_models_1d_signal.py

RNN Structure

图3.5:RNN 的时间递推结构示意。它把隐状态如何沿时间轴传递信息画出来,有助于理解序列建模为什么天然依赖”记忆状态”,以及梯度消失为何会随着时间展开而出现。

代码文件: code/ch03_deep_learning_fast/rnn_structure.py
运行方式: python code/ch03_deep_learning_fast/rnn_structure.py

Sequence Models Comparison

图3.6:1D CNN、RNN 和 Transformer 在序列建模上的结构对比。它直观展示了三类模型分别偏向局部模式、递推状态和长距离依赖,为后续进入 Transformer 章节做铺垫。

代码文件: code/ch03_deep_learning_fast/sequence_models_1d_signal.py
运行方式: python code/ch03_deep_learning_fast/sequence_models_1d_signal.py

本节小结

序列建模和一维信号处理展示了深度学习的另一条主线:

  • RNN通过隐状态递推建模历史信息
  • 1D CNN通过可学习卷积核检测局部时序模式
  • 它们都与DSP中的滤波和状态空间建模密切相关
  • Transformer则进一步提升了对长距离依赖的建模能力

这一节真正想传达的是:序列建模不是只有一种答案,而是要先判断依赖结构,再选择合适的模型。 如果依赖主要是局部的,1D CNN 往往更直接;如果需要显式记忆状态,RNN 有启发意义;如果需要全局关系和更好的并行训练,就会自然走向下一节的 Transformer。


下一节: 3.6 为什么Transformer适合大规模序列建模

本教程采用 CC BY-NC-SA 4.0 许可协议