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(下一帧/未来多帧预测)
典型应用:
- 降雨预测(precipitation nowcasting)
- 视频帧预测(下一帧生成)
- 交通流量时空预测
- 医学影像时间序列(比如心脏动态图)
- 任何“时间变化的二维场”
2、模型的网络结构
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_tH_{t+1}, C_{t+1}
你把这三块板子理解成:
在 t-1 / t / t+1 时刻,ConvLSTM 的“脑子状态”(隐藏状态 H 短期记忆)和“长期记忆”(记忆单元 C)。
关键点(非常重要):
这些 H 和 C 不是一个数字,也不是一个向量,而是:
一张张二维特征图(可以理解成“地图”)
所以它们是一整张图那么大的东西(比如 64×64×通道数)。
图里右边的 X_t、X_{t+1} 是什么?
右侧两块板子写着:
X_tX_{t+1}
这个
X_t 就是:
第 t 帧输入图像(或者上一层提取的特征图)
为什么图里还画了
X_{t+1}?
这是在表达一种常见任务:
✅ 下一帧预测(frame prediction)
即:
输入过去的帧(比如 X1…Xt),预测未来帧 Xt+1
所以图里画 Xt+1 是为了告诉你:ConvLSTM 的输出可以用来预测下一帧。
最难理解的部分:中间那些虚线到底表示什么?
你看到虚线从
X_t 和 H_{t-1} 指向中间那一坨结构。
这些虚线想表达的不是“连线”,而是:
ConvLSTM 内部要做卷积计算,会从输入 X_t 和上一状态 H_{t-1} 取局部区域进行计算。
也就是说:
- 普通 LSTM:对整个向量做一个全连接(矩阵乘法)
- ConvLSTM:对图像局部做卷积(卷积核滑动)