07-Informer:超越transformer的长序列时间预测
1、研究背景:真实世界越来越需要“长预测”而不是短预测
通俗理解
- “预测接下来 1 小时怎么样?”
- “预测接下来 7 天、30 天的走势怎么样?”(更实用,但更难)
问题来了:传统 LSTM/RNN 做长预测会崩
- 误差 MSE 急剧上升
- 推理速度显著下降
- 模型“开始失败”
形象解释
LSTM 很像人“靠记忆背书” 预测 48 步以内还行 让它预测 480 步,就开始记不住、说不准、还说得很慢。
Transformer 的希望:它擅长长依赖
- 自注意力能捕捉长距离依赖
- 传播路径最短理论可达 O(1)(不用像 RNN 一步步传)
Transformer 很适合长序列预测!
- 二次方时间复杂度(quadratic time complexity)
- 显存占用非常高(high memory usage)
- Encoder-Decoder 架构本身的限制(inherent limitation)
Informer 提出的直接动机:解决 Transformer 三大痛点
动机1:Self-Attention 的计算量是 O(L²),长序列会爆炸
时间 + 显存都是 O(L²)
通俗解释
- 不是算 1000 次
- 而是算 1000×1000=1,000,000 次匹配
你有 1000 条历史记录,每预测一步都要把它们“两两互比”,肯定顶不住。
让注意力不要全算,而是只算关键的那部分。
动机2:堆叠多层 Transformer 显存更爆(O(J·L²))
堆叠后的总显存会到 O(J·L²)
- 你不仅要对 1000×1000 做比对
- 还要做 6 层、12 层
Self-attention distilling(注意力蒸馏/下采样) 每过一层就把序列长度“砍半”,只保留重要注意力特征
动机3:Decoder “一步步生成”导致长预测推理很慢
预测 yt+1 → 再预测 yt+2→ … → 直到预测完
长输出推理速度“像 RNN 一样慢”(speed plunge)
- decoder 需要跑 720 次 forward
- 速度当然慢,还会误差累积
Generative style decoder:一次 forward 生成整段预测,而不是一步步生成
2、模型总览
给我很长很长的历史数据(绿色长条),我一次性预测很长很长的未来数据(橙色长条) 但要做到:更快、不卡显存、预测还准。
1)整体结构:还是 Transformer(Encoder-Decoder),但做了“三刀改造”
- 左边:Encoder(编码器)
- 右边:Decoder(解码器)
2)看图左边:Encoder(绿色历史 → 特征地图)
读历史,提取规律,把历史变成“特征地图 Feature Map” (这张 Feature Map 后面会给 Decoder 当参考资料)
2.1 输入是什么?(图左下角绿色长条)
- Inputs: XenX_{en}Xen 是一整段很长的历史序列(绿色块)
给你一卷很长的监控录像(历史时间序列),让你提炼出“关键线索”。
2.2 Encoder 里面最关键的第一刀:ProbSparse Self-attention
Multi-head ProbSparse Self-attention
Transformer 的 attention 像什么?
班里有 1000 个同学,要求每个人都要和另外 999 个人逐个聊天一次,再总结关系。
- 计算量爆炸
- 显存爆炸
Informer 的 ProbSparse 像什么?
不是每个同学都重要 班里真正能决定“讨论方向”的,往往只有少数几个“话题中心人物” 所以只让关键人物去做大量交流,普通人少交流甚至不交流。
ProbSparse = “只重点计算最有价值的注意力连接”
2.3 Encoder 里面第二刀:Self-attention Distilling(蓝色梯形)
蓝色梯形 = self-attention distilling 用来提取主导注意力、显著减小网络规模
小白版解释:它到底在干什么?
历史太长了,不能每一层都保留全部细节 于是每往上走一层,就“删掉一些不重要的时间点”,保留更精华的代表点。
- 第1层:看整部电影(1000帧)
- 第2层:只看关键片段(500帧)
- 第3层:只看关键镜头(250帧)
- 越往上:越浓缩、越精华
- 左边两层 attention 后面,序列宽度变窄了
- 说明 “长度被压缩了”
2.4 “Concatenated Feature Map”(紫色虚线框)
Concatenated Feature Map
Encoder 不只输出一层,而是把多层/多尺度提取到的特征拼起来
- 你做摘要时不是只写“结论”
- 你还会保留:趋势、周期、异常、关键点等多尺度信息
- 最后拼成一份“资料汇总”
3)看图右边:Decoder(一次性生成未来)
3.1 Decoder 的输入是什么?(右下角)
Inputs: Xde={Xtoken,X0}
小白版解释
✅ 1)X_token(起始提示)
“预测前的热身信息 / 提示词”
✅ 2)X0(全是 0 的占位符)
“我这里留了未来 720 格空白,请你一次性填满”
3.2 Decoder 内部结构
(1)Masked Multi-head ProbSparse Self-attention
未来这段序列内部自己协调:“预测第 10 步时不能看第 20 步”(防止偷看未来)
(2)Multi-head Attention(去看 Encoder)
Decoder 在填写未来的时候,随时可以去翻 Encoder 的资料库(Feature Map) 让预测更有根据。
- Encoder:资料库 / 历史档案
- Decoder:预测员
- Attention:预测员边写边翻资料
3.3 Fully Connected Layer(最后输出)
把 decoder 的内部表示 → 变成真正的预测数字输出
4)Informer 和 Transformer 最大区别(用一句很形象的话讲)
“一个字一个字写作文”(预测一步,再预测下一步) 写得慢,还容易越写越偏。
“直接把未来整张表格一次性填完” 快,而且不容易误差越积越大。
3、Informer 的缺陷(通俗易懂版)
缺陷 1:ProbSparse Attention 可能“漏掉重要信息”
Attention 分布是长尾的,只有少数 query 真的重要,挑 Top-u query 就够了。
- 有些数据模式很复杂,“重要信息”可能分布在很多时间点上
- 你只挑 Top-u queries,可能把某些关键依赖直接忽略掉(尤其在噪声大、多变量强耦合时)
你看一部悬疑剧,只看“最像主线”的几个片段,可能把真正关键伏笔错过。
缺陷 2:Self-attention Distilling(下采样)可能丢细节
- 下采样适合保留大趋势
- 但对“局部突变、尖峰、异常点”可能不友好(细节被压掉了)
像把一段高清视频压缩成缩略图:趋势看得见,但小字细节容易糊。
缺陷 3:Encoder-Decoder 结构对时间序列预测不是最优形态
- 翻译强调“逐词生成”
- 预测更像“回归未来曲线”
缺陷 4:对“时间序列的结构归纳偏置”不够强
- 趋势 Trend
- 季节性 Seasonality
- 周期性 Periodicity
- 平稳性/非平稳性
4、后续哪些模型在 Informer 基础上改进?(最主流路线)
方向 A:更快更省(继续做 Efficient Attention)
- Reformer / Linformer / Longformer / Sparse Transformer(Informer 论文中也提到过这些同类工作)
- Pyraformer(金字塔注意力结构,效率路线相近)
方向 B:更准更懂时间序列(结构性建模)
1)Autoformer(Informer 后最经典的继承者之一)
- 引入 Series Decomposition(序列分解)
- 用 **Auto-Correlation(自相关机制)**替代普通 Attention,更适合周期性
2)FEDformer
- 走 **Frequency Enhanced(频域增强)**路线
- 用傅里叶/小波等频域思想提升预测能力
为什么频域能更好处理周期性?
3)ETSformer
- 借鉴传统 ETS(Error-Trend-Seasonality)思想
- 把“传统时间序列的可解释结构”与 Transformer 结合
4)PatchTST(非常推荐你学)
- 用 “Patch(分块)”把时间序列像图像一样切块
- 更容易学局部模式 + 降低复杂度
- 结构简单但效果非常强(近几年非常火)