03-ConvLSTM:卷积嵌入LSTM,用于气象、交通流量等时空序列的预测

03-ConvLSTM:卷积嵌入LSTM,用于气象、交通流量等时空序列的预测

导出时间:2026/1/14 20:36:13

1、研究背景和动机

你已经会的 LSTM / BiLSTM:它本质上在做什么?

你可以把普通 LSTM 想象成一个“带记忆的时间机器”:
  • 输入是一个序列:x1, x2, x3, ...
  • 它要在时间维度上捕捉规律:比如文字、语音、传感器时间序列
  • 它靠隐藏状态 h_t 和记忆单元 c_t 来记住过去的信息
但请注意:普通 LSTM 的输入通常是“向量”

也就是说,每一帧输入是 R^d 的一个向量,而不是图片那种二维结构。


2. 关键问题:如果输入不是向量,而是“图片序列”呢?

现在考虑一个非常常见的任务:
  • 输入:一段雷达降雨云图(每 5 分钟一张)
  • 目标:预测未来 30 分钟的降雨云图
这时你的输入不是:
  • x_t = 一个向量
而是:
  • X_t = 一张图片(二维矩阵/三维张量),例如 H×W×C
也就是说,这是一个 **“时空序列(spatiotemporal sequence)”**任务:
  • 时间:云图在变化
  • 空间:云图内部结构很重要(形状、位置、纹理)

3. 为什么不能直接把图片喂给 LSTM?

你当然可以把图片 H×W **拉直(flatten)**成一个长向量,再送进 LSTM。
但这会造成严重问题:

问题 A:空间结构被破坏(最核心)

图片的本质是空间结构:
  • 左边的像素和右边的像素不是随机的
  • 相邻像素之间强相关
  • “局部模式”很重要(云团边缘、移动方向、旋转结构……)
Flatten 之后 LSTM 看到的只是:

一个很长的一维数字串,它不知道哪些像素相邻,也不知道空间位置

形象比喻:
  • 图片本来是“地图”
  • Flatten 之后变成“把地图剪碎然后丢进袋子里”

问题 B:参数爆炸

假设一张图 64×64=4096 个像素
LSTM 里面有很多 W * x_t 的线性变换,如果输入维度巨大:
  • 参数量会非常夸张
  • 训练慢
  • 容易过拟合

4. 研究背景:深度学习开始处理“时空序列”

ConvLSTM 的出现不是偶然的,它来自一个时代背景:

背景 1:CNN 在空间建模上太强了

CNN 擅长:
  • 识别空间局部模式
  • 利用卷积保持空间结构
  • 参数共享(卷积核滑动),参数量小

背景 2:LSTM 在时间建模上太强了

LSTM 擅长:
  • 建模长时间依赖
  • 可记忆历史信息
于是一个非常自然的问题出现了:

能不能把 CNN 的“空间理解能力” + LSTM 的“时间记忆能力”合并?

这就是 ConvLSTM 的研究动机。

5. ConvLSTM 的动机:让 LSTM “看懂二维结构”

ConvLSTM 不是简单的“CNN + LSTM 拼接”那么粗暴。
它的核心思想是:

LSTM 里所有的全连接(矩阵乘法)都换成卷积(convolution)。

普通 LSTM:

输入 x_t、隐藏状态 h_{t-1}都是向量 门控计算是:
  • W_x * x_t + W_h * h_{t-1}

ConvLSTM:

输入 X_t、隐藏状态 H_{t-1}都是“特征图” 门控计算是:
  • W_x ⊛ X_t + W_h ⊛ H_{t-1} 其中 ⊛ 表示卷积
这样一来:
  • 记忆单元 C_t 也变成“二维记忆地图”
  • 隐藏状态 H_t 也变成“二维隐状态地图”

6. 形象化理解:ConvLSTM = “会记忆的卷积滤镜组”

你可以把 ConvLSTM 想象成:

一个 CNN 摄像头,配了一个“能记住过去画面规律”的大脑

每一帧进来:
  • CNN 部分负责提取空间局部特征(云团形状)
  • LSTM 门控负责决定:
    • 哪些空间模式要记住
    • 哪些要忘掉
    • 哪些要更新到记忆地图里
所以 ConvLSTM 本质上是在做:

在时间维度上,追踪空间模式是如何移动、变形、出现、消失的


7. ConvLSTM 主要解决了哪些任务类型?

ConvLSTM 最典型的任务就是:Predict the next frames(下一帧/未来多帧预测)
典型应用:
  1. 降雨预测(precipitation nowcasting)
  2. 视频帧预测(下一帧生成)
  3. 交通流量时空预测
  4. 医学影像时间序列(比如心脏动态图)
  5. 任何“时间变化的二维场”


2、模型的网络结构

image.png

1)2D Image 是什么?

左边的网格就是一张二维图片
  • 高 H
  • 宽 W
  • 每个格子是一个像素值
但如果我们直接把它给 LSTM,会有问题:
  • LSTM 原本吃的是“向量序列”(1D)
  • 图片是“二维结构”(2D)

2)图中红色的 P 是什么?

红色格子 P 是其中一个像素。
Figure 1 的意思是:

把图片拆成很多“局部小块(patch / receptive field)”,并把这些局部区域堆叠成一个3D Tensor

你可以这样理解:
2D Image(H×W) 经过卷积抽特征后变成 ✅ 3D Tensor(H×W×C)
其中:
  • H×W:仍然保持原来的空间位置(每个格子还是对应原来的区域)
  • C:通道数(channels),代表这个位置提取出来的 C 种特征

3)形象类比(非常重要)

把它想象成:
  • 原图像:一个平面地图(只有一个图层)
  • 3D Tensor:一个“多图层地图”
    • 第 1 层:检测边缘
    • 第 2 层:检测纹理
    • 第 3 层:检测形状
所以 Figure 1 其实是在说明 ConvLSTM 的输入不是简单的 x(向量),而是:

X_t:一个带空间结构的特征图(feature map)


二、Figure 2:ConvLSTM 的核心网络结构(内部结构)


你可以把 Figure 2 理解成一句话:

ConvLSTM 像 LSTM 一样按时间一帧一帧处理,但每一帧不是一个数/向量,而是一张“特征图”。

所以这个图不是在画“一个网络结构”,而是在画:
同一个 ConvLSTM 单元,在不同时间 t-1、t、t+1 是如何传递信息的。

图里每块“板子”代表什么?

Figure 2 里面有三层大板子(左边堆叠的那一列),分别标了:
  • H_{t-1}, C_{t-1}
  • H_t, C_t
  • H_{t+1}, C_{t+1}
你把这三块板子理解成:

在 t-1 / t / t+1 时刻,ConvLSTM 的“脑子状态”(隐藏状态 H 短期记忆)和“长期记忆”(记忆单元 C)。

关键点(非常重要):

这些 H 和 C 不是一个数字,也不是一个向量,而是:

一张张二维特征图(可以理解成“地图”)

所以它们是一整张图那么大的东西(比如 64×64×通道数)。

图里右边的 X_tX_{t+1} 是什么?

右侧两块板子写着:
  • X_t
  • X_{t+1}
这个 X_t 就是:

第 t 帧输入图像(或者上一层提取的特征图)

为什么图里还画了 X_{t+1}
这是在表达一种常见任务:
下一帧预测(frame prediction)
即:

输入过去的帧(比如 X1…Xt),预测未来帧 Xt+1

所以图里画 Xt+1 是为了告诉你:ConvLSTM 的输出可以用来预测下一帧。

最难理解的部分:中间那些虚线到底表示什么?

你看到虚线从 X_tH_{t-1} 指向中间那一坨结构。
这些虚线想表达的不是“连线”,而是:

ConvLSTM 内部要做卷积计算,会从输入 X_t 和上一状态 H_{t-1} 取局部区域进行计算。

也就是说:
  • 普通 LSTM:对整个向量做一个全连接(矩阵乘法)
  • ConvLSTM:对图像局部做卷积(卷积核滑动)