07-Informer:超越transformer的长序列时间预测

07-Informer:超越transformer的长序列时间预测

导出时间:2026/1/14 20:39:23

1、研究背景:真实世界越来越需要“长预测”而不是短预测

Informer 论文开头就说:很多真实应用需要预测长序列时间序列(LSTF, Long Sequence Time-Series Forecasting),例如电力消耗规划等。
论文强调:长预测和短预测差别很大,长预测能覆盖更长周期,对政策规划/投资等更有用(图1(a))。

通俗理解

短预测像:
  • “预测接下来 1 小时怎么样?”
长预测像:
  • “预测接下来 7 天、30 天的走势怎么样?”(更实用,但更难)

问题来了:传统 LSTM/RNN 做长预测会崩

image.png
论文用 Fig.1(b) 直接展示:当预测长度变长后(>48),LSTM 的:
  • 误差 MSE 急剧上升
  • 推理速度显著下降
  • 模型“开始失败”

形象解释

你可以理解为:

LSTM 很像人“靠记忆背书” 预测 48 步以内还行 让它预测 480 步,就开始记不住、说不准、还说得很慢。

Transformer 的希望:它擅长长依赖

Informer 论文承认 Transformer 的优势:
  • 自注意力能捕捉长距离依赖
  • 传播路径最短理论可达 O(1)(不用像 RNN 一步步传)
所以直觉上:

Transformer 很适合长序列预测!

论文在摘要和 Introduction 里非常明确点出:Transformer 在 LSTF 下有严重问题:
  • 二次方时间复杂度(quadratic time complexity)
  • 显存占用非常高(high memory usage)
  • Encoder-Decoder 架构本身的限制(inherent limitation)

Informer 提出的直接动机:解决 Transformer 三大痛点


动机1:Self-Attention 的计算量是 O(L²),长序列会爆炸

Transformer 的 attention 要算 QKT,序列长度如果是 L:

时间 + 显存都是 O(L²)

通俗解释

如果历史长度 L=1000:
  • 不是算 1000 次
  • 而是算 1000×1000=1,000,000 次匹配
这就像:

你有 1000 条历史记录,每预测一步都要把它们“两两互比”,肯定顶不住。

这就是 Informer 提出 ProbSparse attention 的动机之一:

让注意力不要全算,而是只算关键的那部分。


动机2:堆叠多层 Transformer 显存更爆(O(J·L²))

Transformer 要堆叠 J 层 encoder/decoder。
论文指出:

堆叠后的总显存会到 O(J·L²)

这就像:
  • 你不仅要对 1000×1000 做比对
  • 还要做 6 层、12 层
显存马上 OOM(爆显存)。
所以 Informer 还提出第二个关键思想:

Self-attention distilling(注意力蒸馏/下采样) 每过一层就把序列长度“砍半”,只保留重要注意力特征


动机3:Decoder “一步步生成”导致长预测推理很慢

Vanilla Transformer 的 decoder 是自回归 dynamic decoding:

预测 yt+1 → 再预测 yt+2→ … → 直到预测完

论文指出这会导致:

长输出推理速度“像 RNN 一样慢”(speed plunge)

预测未来 720 步:
  • decoder 需要跑 720 次 forward
  • 速度当然慢,还会误差累积
所以 Informer 提出第三个关键改进:

Generative style decoder:一次 forward 生成整段预测,而不是一步步生成


2、模型总览

Informer 要解决的问题是:

给我很长很长的历史数据(绿色长条),我一次性预测很长很长的未来数据(橙色长条) 但要做到:更快、不卡显存、预测还准

image.png

1)整体结构:还是 Transformer(Encoder-Decoder),但做了“三刀改造”

Informer 表面上很像 Transformer:
  • 左边:Encoder(编码器)
  • 右边:Decoder(解码器)
但它做了三件“救命”的改造(论文也总结为 3 个特点):
1)ProbSparse Attention
2)Self-attention Distilling(蒸馏/下采样)
3)Generative Decoder(一次预测,不逐步预测)

2)看图左边:Encoder(绿色历史 → 特征地图)

图左边 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 像什么?

原版 Transformer 的 self-attention 像:

班里有 1000 个同学,要求每个人都要和另外 999 个人逐个聊天一次,再总结关系。

结果:
  • 计算量爆炸
  • 显存爆炸

Informer 的 ProbSparse 像什么?

ProbSparse 的想法是(非常形象):

不是每个同学都重要 班里真正能决定“讨论方向”的,往往只有少数几个“话题中心人物” 所以只让关键人物去做大量交流,普通人少交流甚至不交流。

论文也说 attention 呈现“长尾分布”,只有少数点贡献很大,很多点贡献很小,所以要利用这种稀疏性。
所以:

ProbSparse = “只重点计算最有价值的注意力连接”


2.3 Encoder 里面第二刀:Self-attention Distilling(蓝色梯形)

你注意图里 Encoder 中间有一个“蓝色梯形”结构(像一个金字塔/梯田),论文图注明确说:

蓝色梯形 = self-attention distilling 用来提取主导注意力、显著减小网络规模

小白版解释:它到底在干什么?

你可以把 distilling 想象成:

历史太长了,不能每一层都保留全部细节 于是每往上走一层,就“删掉一些不重要的时间点”,保留更精华的代表点。

形象比喻:
  • 第1层:看整部电影(1000帧)
  • 第2层:只看关键片段(500帧)
  • 第3层:只看关键镜头(250帧)
  • 越往上:越浓缩、越精华
论文也明确说:它通过下采样把时间维度减半(halving),从而降低整体内存。
你看图里:
  • 左边两层 attention 后面,序列宽度变窄了
  • 说明 “长度被压缩了”

2.4 “Concatenated Feature Map”(紫色虚线框)

图左上角写:

Concatenated Feature Map

意思是:

Encoder 不只输出一层,而是把多层/多尺度提取到的特征拼起来

形象理解:
  • 你做摘要时不是只写“结论”
  • 你还会保留:趋势、周期、异常、关键点等多尺度信息
  • 最后拼成一份“资料汇总”
这份汇总就是给 Decoder 用的“资料库”。

3)看图右边:Decoder(一次性生成未来)

现在看右边 Decoder(蓝虚线框)。

3.1 Decoder 的输入是什么?(右下角)

图右下角写:

Inputs: Xde={Xtoken,X0}

这句话特别关键,Informer 的“生成式预测”就藏在这里。论文也明确写了这个输入拼接。

小白版解释

这相当于给 Decoder 两样东西:

✅ 1)X_token(起始提示)

你可以理解为:

“预测前的热身信息 / 提示词”

就像你写作文之前,给你一个开头。
论文里说 token 是从输入序列采样的一段历史片段作为 start token。

✅ 2)X0(全是 0 的占位符)

图里右下角那一排“0 0 0 0 0 …”就是它。
它表示未来要预测的长度,但里面内容先填 0:

“我这里留了未来 720 格空白,请你一次性填满”

这就是 Informer 生成式解码的关键思路:decoder 的输入里把未来位置先占住。

3.2 Decoder 内部结构

Decoder 里面两层 attention:

(1)Masked Multi-head ProbSparse Self-attention

这一步相当于:

未来这段序列内部自己协调:“预测第 10 步时不能看第 20 步”(防止偷看未来)

Mask 就像“考试遮挡板”。

(2)Multi-head Attention(去看 Encoder)

这一步相当于:

Decoder 在填写未来的时候,随时可以去翻 Encoder 的资料库(Feature Map) 让预测更有根据。

形象理解:
  • Encoder:资料库 / 历史档案
  • Decoder:预测员
  • Attention:预测员边写边翻资料

3.3 Fully Connected Layer(最后输出)

最上面紫色的 Fully Connected Layer(全连接层)就是:

把 decoder 的内部表示 → 变成真正的预测数字输出

图最上面的 Output(橙色块)就是最终预测结果。

4)Informer 和 Transformer 最大区别(用一句很形象的话讲)

Transformer 原版预测未来像:

“一个字一个字写作文”(预测一步,再预测下一步) 写得慢,还容易越写越偏。

Informer 预测未来像:

“直接把未来整张表格一次性填完” 快,而且不容易误差越积越大。

论文也强调 generative decoder 的特点:一次 forward 输出长序列,而不是 step-by-step。

3、Informer 的缺陷(通俗易懂版)

Informer 解决了 Transformer 在 LSTF 的三大痛点:计算 O(L²) 太大、堆层内存爆炸、Decoder 推理慢
并且提出了三大改造:ProbSparse、Distilling、Generative Decoder。

缺陷 1:ProbSparse Attention 可能“漏掉重要信息”

ProbSparse 的核心假设是:

Attention 分布是长尾的,只有少数 query 真的重要,挑 Top-u query 就够了。

这个假设通常成立,但并不是所有数据都完美长尾。
问题:
  • 有些数据模式很复杂,“重要信息”可能分布在很多时间点上
  • 你只挑 Top-u queries,可能把某些关键依赖直接忽略掉(尤其在噪声大、多变量强耦合时)
形象理解:

你看一部悬疑剧,只看“最像主线”的几个片段,可能把真正关键伏笔错过。



缺陷 2:Self-attention Distilling(下采样)可能丢细节

Informer encoder 里有 distilling(蓝色梯形金字塔结构),会不断下采样、压缩长度。
图2和图3说明了这种“越往上越短”的设计。
问题:
  • 下采样适合保留大趋势
  • 但对“局部突变、尖峰、异常点”可能不友好(细节被压掉了)
形象理解:

像把一段高清视频压缩成缩略图:趋势看得见,但小字细节容易糊。


缺陷 3:Encoder-Decoder 结构对时间序列预测不是最优形态

Informer 沿用了 Transformer 的 Encoder-Decoder 框架。
但时间序列预测跟翻译不一样:
  • 翻译强调“逐词生成”
  • 预测更像“回归未来曲线”
因此后续很多模型直接抛弃了 Encoder-Decoder,改成更适合预测的结构(例如只用 Encoder + 预测头)。

缺陷 4:对“时间序列的结构归纳偏置”不够强

Informer 主要是在解决“效率”,但对时间序列本身的特性:
  • 趋势 Trend
  • 季节性 Seasonality
  • 周期性 Periodicity
  • 平稳性/非平稳性
它没有像后来一些模型那样进行更强的建模(比如显式分解、频域建模等)。

4、后续哪些模型在 Informer 基础上改进?(最主流路线)

这里我给你一个“Informer 后时代”的关键路线图:后面的模型基本都围绕两个方向改进

方向 A:更快更省(继续做 Efficient Attention)

目标:继续把注意力机制优化得更高效、更可控、更不丢信息。
代表:
  • Reformer / Linformer / Longformer / Sparse Transformer(Informer 论文中也提到过这些同类工作)
  • Pyraformer(金字塔注意力结构,效率路线相近)

方向 B:更准更懂时间序列(结构性建模)

目标:不光要快,还要更“懂”时间序列的规律(趋势/季节/频域)。
这条线是近几年最重要的时间序列预测 Transformer 主线。

1)Autoformer(Informer 后最经典的继承者之一)

核心改进:
  • 引入 Series Decomposition(序列分解)
  • 用 **Auto-Correlation(自相关机制)**替代普通 Attention,更适合周期性
它非常“时间序列友好”,通常被认为是 Informer 之后的一个大升级方向。

2)FEDformer

核心改进:
  • 走 **Frequency Enhanced(频域增强)**路线
  • 用傅里叶/小波等频域思想提升预测能力
适合理解:

为什么频域能更好处理周期性?

3)ETSformer

核心改进:
  • 借鉴传统 ETS(Error-Trend-Seasonality)思想
  • 把“传统时间序列的可解释结构”与 Transformer 结合

4)PatchTST(非常推荐你学)

核心改进:
  • 用 “Patch(分块)”把时间序列像图像一样切块
  • 更容易学局部模式 + 降低复杂度
  • 结构简单但效果非常强(近几年非常火)