08-Autoformer:Informer 之后的一个大升级方向

08-Autoformer:Informer 之后的一个大升级方向

导出时间:2026/1/14 20:40:28
Autoformer = 专门为“长时序预测(Long-term Forecasting)”而改造的 Transformer。

1、Autoformer的研究背景和动机


传统序列预测(比如未来 24 小时)其实不算太难,但 Autoformer 的目标是:

输入过去一段(比如 96 点),预测未来很长一段(比如 336、720 点,几天甚至几周)

现实中的典型场景

论文列的应用包括:能源、交通、经济、天气、疾病等
这些任务的特点是:
  • 长期预测必须抓大方向(趋势)
  • 又必须抓住周期规律(例如日电负荷、交通早晚高峰)
  • 长期未来的细节噪声很大,“逐点依赖”非常不可靠

痛点 A:Self-Attention 是“逐点对齐”,但长预测未来太复杂了

Transformer / Informer 的注意力本质是:

预测未来某一时刻 t,要去历史每个时刻 i 里找相关性(点对点)

这在 NLP 很适合,因为词之间依赖可解释;
但在长时序预测时,问题来了:

形象比喻

假设你要预测:
  • 未来 30 天每天的用电量
Self-Attention 像什么?

你试图用“未来第 17 天上午 11:00 的电量”去匹配“过去 3 个月每一个小时的电量”,找最像的点。

这会导致:
  • 未来越远,噪声越大
  • “点级别的相似”并不稳定
  • dependency 难以可靠学习
论文明确指出:长期未来的复杂模式使 Transformer 很难找到可靠依赖

痛点 B:Informer 用稀疏注意力提速,但带来“信息利用瓶颈”

Informer 的动机你肯定很熟:
  • self-attention O(L²) 太慢
  • 用 ProbSparse Attention 降复杂度
但 Autoformer 认为:

稀疏注意力虽然快,但本质仍是 point-wise attention,只是“抽点抽得更聪明”。

形象比喻

Informer 像什么?

考试复习你没时间看全书,于是你挑重点章节复习(稀疏取样)

Autoformer 的观点是:
  • 这会导致信息利用不足
  • 尤其当你预测很长时,“靠少数点”更不稳定
论文把这个问题称为:信息利用瓶颈(information utilization bottleneck)

痛点 C:时序预测的结构性知识(趋势/季节)没有被网络“当作第一公民”

在经典时序里(ARIMA、ETS、STL)有一个很重要思想:

时间序列 = 趋势 Trend + 季节 Seasonality + 残差 Noise

很多时序论文/工程实践会:
  • 先对原序列做 decomposition(如 STL)
  • 再对分解后的成分做预测
但是:Transformer / Informer 通常直接吃 raw series

Autoformer 的核心直觉

长期预测最该抓的不是“每个点之间的依赖”,而是:
  • 趋势怎么延伸
  • 周期怎么重复
  • 残差怎么处理
所以 Autoformer 把 decomposition 变成网络结构的一部分(progressive decomposition),这也是名字里 “Decomposition Transformers” 的由来

Autoformer 的两个核心创新(动机到设计)

创新 1:Progressive Decomposition(逐层分解)

Autoformer 做了一个非常关键的设计改变:

不再把序列分解当作数据预处理,而是在 encoder/decoder 的每层都做分解,让网络逐步把“趋势”和“季节性”拆出来。

形象化理解

你可以把每一层 Transformer block 想成一个“滤波器模块”:
  • 每一层都做一次:
    • 用 moving average 抽出趋势 trend
    • 剩余的当作 seasonal
这样深层网络会出现类似效果:
  • 越往深层:季节性越来越干净
  • 趋势越来越平滑、可预测
这非常符合长期预测需求:长期靠趋势 + 稳定周期。

创新 2:Auto-Correlation 机制(替代 Self-Attention)

这是 Autoformer 最“标志性”的创新。

self-attention:点对点匹配

  • 对每个 query 点,都计算与每个 key 点的相似度

auto-correlation:子序列级别匹配(series-wise)

Autoformer 认为时序里最可靠的依赖来自:

周期性:某些 pattern 会延迟 d 后再次出现

这就是统计里“自相关函数”的思想。
Autoformer 的 Auto-Correlation 做的事情可理解为:
  1. 找到序列中最强的若干周期/延迟(top-k delays)
  2. 把相同周期对齐的子序列聚合起来(sub-series aggregation)
论文说它受到随机过程理论启发,基于周期性来做依赖发现与聚合,并且比 self-attention 更高效

形象比喻

Self-Attention 像:

我在所有历史点里找相似点。

Auto-Correlation 像:

我先判断“这件事每隔 24 小时会重复”,然后把过去每天 11:00 的点聚合起来预测未来 11:00。

这就是**“先找到规律的周期,再聚合那条规律”**,特别适合电力/交通/天气这种强周期任务。

假设你要预测一家店未来 30 天的销量:

  • Informer像: 你在历史记录里找“与未来某天最像的若干天”,再参考它们(但毕竟还是按“某一天 vs 某一天”匹配)
  • Autoformer像: 你先拆开销量:
    • 长期趋势:是否逐月增长?
    • 周期规律:周末高、工作日低? 然后分别预测趋势 + 周期,再合成

后者在长期预测上更符合时序规律,也更抗噪声。


2、模型网络结构图

image.png

先看右上角:Autoformer 眼中的时间序列是什么?

你图右上角有三行小图:
  1. Time Series(原始序列):黑色曲线
  2. Seasonal Part(季节性):橙色曲线(围绕 0 波动)
  3. Trend-cyclical Part(趋势/周期趋势):蓝色曲线(围绕均值缓慢变化)
Autoformer核心观点:

原始序列 = 趋势(Trend) + 季节性(Seasonality)

其中:
  • 季节性:每天/每周重复的波动(高频、上下抖动)
  • 趋势:长期上升/下降的形态(低频、平滑)
所以 Autoformer 预测不是“一把梭预测原序列”,而是:

预测未来 = 预测未来趋势 + 预测未来季节性(最后再相加)


Autoformer Encoder(上半部分)到底在做什么?

你图上半部分是 Encoder,结构是重复 N 次(右上角 Nx)。
它的输入是左边这块:

✅ Encoder Input:历史序列 + To Predict

图中 Encoder 输入旁边写了 “To Predict”,意思是:

Encoder 不仅看过去,还会看到一段“未来占位符”(一般用 0 或均值填充) 让模型提前“知道”输出长度/位置(类似 Informer 的做法)

Encoder 每一层长什么样?

每层大概是:

(1) Auto-Correlation(绿色块) + 残差连接

这块等价于 Transformer 的 self-attention,但 Autoformer不用点对点 attention,而用 Auto-Correlation 自相关机制
通俗理解:它不是找“像我的历史点”,而是找“像我这种波动模式的历史片段”。
尤其擅长抓:
  • 日周期
  • 周周期
  • 季节性重复模式
图里绿色块旁边的 K/V/Q 表示它也按 Transformer 那套输入输出,但内部机制不同。

(2) Series Decomp(蓝色块)

这是 Autoformer 最关键的创新之一:分解模块
它做的事情非常简单,但非常强:

输入一条序列 x 用 moving average(滑动平均)提取趋势 trend 剩下 residual = x - trend 就是 seasonal

也就是:
  • trend = MovingAvg(x)
  • seasonal = x - trend

这块为什么重要?

因为它是“强行让网络学会分工”:
  • 趋势:平滑、低频,适合做长期预测
  • 季节性:高频波动,适合用自相关去抓周期

(3) Feed Forward(粉色块) + 残差

就是 Transformer 里的 FFN(两层MLP),用于非线性变换。

(4) 再来一次 Series Decomp(蓝色块)

你可以把它理解为:

第一遍 decomposition:把 Auto-Correlation 输出的序列先清理一遍 第二遍 decomposition:把 FFN 的输出再清理一遍

这就是论文所说的 progressive decomposition(逐层分解)

越到后面,季节性更“纯”,趋势更“平”

Encoder 输出到底是什么?

你看图下方的说明写得很关键:

encoder eliminates the long-term trend-cyclical part ... and focuses on seasonal patterns modeling

意思是:

✅ Encoder 的目标不是把所有信息都编码进去

而是:

Encoder 通过 decomposition 不断把趋势从隐变量里剥离掉 最后留下的 encoder hidden states 更偏向“季节性信息”

一句话总结 Encoder:

Encoder = 季节性专家(Seasonal Expert)


Decoder(下半部分)到底在干什么?

Decoder 在图里标注 Mx(重复 M 层)。
Decoder 输入在左侧有两条初始化:

3.1 Seasonal Init(季节性初始化)

图中橙色那条写着 Zero,意思是:

Decoder 对未来的 seasonal 部分,一开始先假设是 0(空白),让模型去生成

同时也会把历史的一段 seasonal 给进来(一般是 label_len 部分的真实历史片段 + pred_len 的 0 占位)。

3.2 Trend-cyclical Init(趋势初始化)

蓝色趋势初始化下面写着 Input Data Mean(输入数据均值)
意思是:

Decoder 的趋势部分一开始不是 0,而是用历史序列的均值/趋势当作基底

这是非常重要的 trick:
  • 趋势预测如果从 0 开始会很难学
  • 从均值/趋势开始,相当于预测“增量”,更稳定

Decoder 每层结构:为什么有两个 Auto-Correlation?

看你图里 Decoder 每一层有:
  1. Auto-Correlation(绿色)—— self
  2. Series Decomp(蓝色)
  3. Auto-Correlation(绿色)—— cross(中间那块)
  4. Series Decomp(蓝色)
  5. Feed Forward(粉色)
  6. Series Decomp(蓝色)
我逐个翻译成“人话”。

4.1 第一个 Auto-Correlation:Decoder Self Auto-Corr

作用:

在 Decoder 内部,把“已经生成/已知的季节性片段”做周期建模 预测未来 seasonal 怎么延续

可以类比 Transformer decoder 的 masked self-attention,只不过这里是 Auto-Corr。

4.2 中间这个 Auto-Correlation:Encoder-Decoder Auto-Corr(Cross)

图下面说明写:

past seasonal information from encoder is utilized by encoder-decoder Auto-Correlation

这句话很关键,它说明:

✅ Decoder cross 连接用的是 encoder 的 seasonal 信息

即:

Decoder 生成未来季节性时,会去参考 Encoder 学到的历史季节性规律

所以这个 cross auto-correlation 很像:

“把历史周期模板拿过来,对齐未来的位置再生成”


Decoder 最核心:趋势是怎么“累加”出来的?

你注意 Decoder 下方有一条非常长的蓝色“趋势通道”,每个 Series Decomp 蓝块都会往下掉一个“+”号加入趋势里。
这就是论文里说的:

decoder accumulates the trend part ... progressively

通俗解释:

Encoder 是“剥离趋势”

每层 decomposition 都会把趋势成分从隐变量里拿出来扔掉,让 encoder 更专注 seasonal。

Decoder 是“收集趋势”

每层 decomposition 都会把从 seasonal 计算里“剥出来的趋势”收集起来叠加:

trend_total = trend_init + trend_layer1 + trend_layer2 + ... + trend_layerM

所以趋势不是一次性预测的,而是“每一层修正一点”。
你可以理解为:

Decoder 在做长期预测时,趋势这种低频信息最难一次性到位 所以让模型像“画草图”一样层层补全趋势


最后 Prediction 是怎么来的?

看图最右边:
  • 一条来自 seasonal 输出
  • 一条来自 trend 累加总输出
最终:

Prediction = Seasonal_Output + Trend_Output

也就是说 Autoformer 的输出是:
✅ 有趋势基底(不会漂)
✅ 有季节性波动(不会太平)
✅ 两者各司其职(更适合 long-horizon)