Appearance
Autoformer 总览
NeurIPS 2021 · Wu et al. · 论文链接
1. 论文动机
已有 Transformer 的两个核心问题:
全局注意力忽略时序周期性
标准 attention 把序列里所有位置当作无差别的"词"处理,没有利用时序信号固有的周期结构(一天24小时、一周7天、年度季节……)。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. 论文组件 → 代码对应表
| 论文组件 | 代码实现 | 精读文档 |
|---|---|---|
| AutoCorrelation | AutoCorrelation.forward() | [[04A-Layer5-AutoCorrelation]] |
| AutoCorrelation Layer | AutoCorrelationLayer.forward() | [[04-Layer4-AutoCorrelationLayer]] |
| Series Decomposition | series_decomp + moving_avg | [[03D-Layer2D-SeriesDecomp]] |
| Encoder Layer w/ decomp | EncoderLayer.forward() | [[03B1-Layer3-EncoderLayer]] |
| Decoder Layer w/ decomp | DecoderLayer.forward() | [[03C1-Layer3-DecoderLayer]] |
| Encoder | Encoder.forward() | [[03B-Layer2B-Encoder]] |
| Decoder | Decoder.forward() | [[03C-Layer2C-Decoder]] |
| DataEmbedding_wo_pos | DataEmbedding_wo_pos.forward() | [[03A-Layer2A-DataEmbedding]] |
| Seasonal Layernorm | my_Layernorm.forward() | [[03B-Layer2B-Encoder]] |
| Generative Decoder 初始化 | forecast() 前半段 | [[02-Layer1-forecast主链]] |
6. 全局 Toy 参数
| 参数 | 值 | 含义 |
|---|---|---|
B | 2 | batch size |
seq_len | 12 | encoder 输入长度 |
label_len | 6 | decoder 历史前缀 |
pred_len | 4 | 预测步数 |
dec_len | 10 | = label_len + pred_len |
enc_in = dec_in = c_out | 5 | 变量数(特征维) |
d_model | 8 | 隐层维度 |
n_heads | 4 | 注意力头数 |
d_keys = d_values | 2 | = d_model / n_heads |
d_ff | 16 | FFN 隐层维度 |
moving_avg | 3 | 分解核大小(奇数) |
time_dims | 4 | 时间标记维度 |
e_layers | 2 | encoder 层数 |
d_layers | 1 | decoder 层数 |
factor | 1 | top-k 系数 |
维度独特性保证
所有主要张量维度均不同:
B=2, seq_len=12, dec_len=10, enc_in=5, d_model=8, d_ff=16。d_keys=2=B=2是偶然巧合,两者语义完全不同(d_keys 是注意力子空间维度,B 是批次大小)。
7. 推荐阅读路径
快速了解直觉:[[00-总览]] → §2 核心创新 → [[02-Layer1-forecast主链]] → [[03D-Layer2D-SeriesDecomp]]
完整代码精读:按 BFS 树顺序,从 [[01-Layer0-接入界面]] 开始,逐层向下