Skip to content

Autoformer 总览

NeurIPS 2021 · Wu et al. · 论文链接


1. 论文动机

已有 Transformer 的两个核心问题:

  1. 全局注意力忽略时序周期性
    标准 attention 把序列里所有位置当作无差别的"词"处理,没有利用时序信号固有的周期结构(一天24小时、一周7天、年度季节……)。

  2. O(L²) 限制长序列
    长期预测需要长输入(e.g. 720 时间步),attention 矩阵的 L² 计算量使模型难以扩展。

Autoformer 的两个创新回答:

问题解决方案
忽略周期性AutoCorrelation:用 FFT 互相关发现主导 lag,聚合时延匹配的 V
O(L²) 复杂度AutoCorrelation 只需选 top-k lag,复杂度降至 O(L log L)
额外:trend 分离Progressive Decomposition:每一层都做 moving_avg 分解,让 seasonal/trend 在全网络中独立演化

2. 核心创新

创新 1 — Progressive Series Decomposition

原始信号 x:  [t1, t2, t3, t4, t5, t6, t7, ...]
                          ↓ moving_avg (kernel=3)
trend:       [t1, avg(t1,t2,t3), avg(t2,t3,t4), ...]
seasonal:    x - trend

贯穿全网络:Encoder 的每个 EncoderLayer 做 2 次分解;Decoder 的每个 DecoderLayer 做 3 次分解,trend 通过独立路径累加,最终与 seasonal 汇合。

Encoder EncoderLayer:
  attention → 残差 → decomp1 → seasonal ✓  trend × 丢弃
  FFN       → 残差 → decomp2 → seasonal ✓  trend × 丢弃

Decoder DecoderLayer:
  self-attn  → decomp1 → seasonal ✓  trend1 ↘
  cross-attn → decomp2 → seasonal ✓  trend2 → trend1+2+3 → projection
  FFN        → decomp3 → seasonal ✓  trend3 ↗

创新 2 — AutoCorrelation(FFT 互相关)

Q, K, V: (B, L, H, E)

Phase 1 — 周期发现:
  Q → permute → (B,H,E,L) → rfft → Q_fft (复数)
  K → permute → (B,H,E,L) → rfft → K_fft (复数)
  corr = irfft(Q_fft × conj(K_fft))   # 形状 (B,H,E,L)
  corr[..., τ] = lag=τ 时 Q 与 K 的相关强度

Phase 2 — 时延聚合:
  top_k = factor × ln(L)   e.g. L=12 → top_k=2
  选出全局最强的 top-k lag 下标 [τ₁, τ₂, ...]
  V_agg = Σ softmax(corr[τᵢ]) × roll(V, -τᵢ)

3. TFB 调用链


4. 文档 BFS 树形索引


5. 论文组件 → 代码对应表

论文组件代码实现精读文档
AutoCorrelationAutoCorrelation.forward()[[04A-Layer5-AutoCorrelation]]
AutoCorrelation LayerAutoCorrelationLayer.forward()[[04-Layer4-AutoCorrelationLayer]]
Series Decompositionseries_decomp + moving_avg[[03D-Layer2D-SeriesDecomp]]
Encoder Layer w/ decompEncoderLayer.forward()[[03B1-Layer3-EncoderLayer]]
Decoder Layer w/ decompDecoderLayer.forward()[[03C1-Layer3-DecoderLayer]]
EncoderEncoder.forward()[[03B-Layer2B-Encoder]]
DecoderDecoder.forward()[[03C-Layer2C-Decoder]]
DataEmbedding_wo_posDataEmbedding_wo_pos.forward()[[03A-Layer2A-DataEmbedding]]
Seasonal Layernormmy_Layernorm.forward()[[03B-Layer2B-Encoder]]
Generative Decoder 初始化forecast() 前半段[[02-Layer1-forecast主链]]

6. 全局 Toy 参数

参数含义
B2batch size
seq_len12encoder 输入长度
label_len6decoder 历史前缀
pred_len4预测步数
dec_len10= label_len + pred_len
enc_in = dec_in = c_out5变量数(特征维)
d_model8隐层维度
n_heads4注意力头数
d_keys = d_values2= d_model / n_heads
d_ff16FFN 隐层维度
moving_avg3分解核大小(奇数)
time_dims4时间标记维度
e_layers2encoder 层数
d_layers1decoder 层数
factor1top-k 系数
维度独特性保证

所有主要张量维度均不同:B=2, seq_len=12, dec_len=10, enc_in=5, d_model=8, d_ff=16d_keys=2=B=2 是偶然巧合,两者语义完全不同(d_keys 是注意力子空间维度,B 是批次大小)。


7. 推荐阅读路径

快速了解直觉:[[00-总览]] → §2 核心创新 → [[02-Layer1-forecast主链]] → [[03D-Layer2D-SeriesDecomp]]

完整代码精读:按 BFS 树顺序,从 [[01-Layer0-接入界面]] 开始,逐层向下

*记录并在线阅读我的笔记*