Appearance
DLinear 总览
1. 论文问题与动机
2021-2022 年,时间序列预测领域陷入一种奇怪的军备竞赛:每篇新论文都比前一篇更复杂——Informer 改注意力机制,Autoformer 加自相关,FEDformer 进频域……每篇都声称刷了 SOTA。
但没人回答一个基础问题:这些复杂结构到底有没有在起作用?还是说复杂模型赢,只是因为它们顺手做了序列分解或归一化?
ICLR 2023,Zeng et al. 做了一个「破坏性实验」:把所有复杂结构全拿掉,只留一个线性层加一点分解,结果打平甚至超过了 Informer 等模型。这就是 LTSF-Linear,其中 DLinear 是最核心的变体。
2. 核心创新
两个动作,缺一不可:
① 序列分解(series decomp)
x_enc ──→ moving_avg(x) = trend
└──→ x - trend = seasonal
② 独立线性外推
seasonal ──→ Linear_Seasonal ──→ seasonal_pred
trend ──→ Linear_Trend ──→ trend_pred
↓
seasonal_pred + trend_pred = output为什么分解有用:线性层只擅长学单调关系。把慢变化(trend)和快变化(seasonal)分开,每路只需学各自规律,比混在一起更容易。
为什么用线性层而不是 Transformer:直接 seq_len → pred_len 的映射,不需要 attention 建立 token 间关系。
3. 论文架构图(原理层)
4. TFB 完整调用链
5. 文档 BFS 树形索引
| 文件 | 层级 | 覆盖内容 | 关键 tensor |
|---|---|---|---|
| 01-Layer0-接入界面 | Layer 0 | config映射 + batch I/O + forward分支 | (B,seq_len,C) → (B,pred_len,C) |
| 02-Layer1-encoder主链 | Layer 1 | encoder()全链 + permute原理 + Linear双路 | (B,T,C)→(B,C,T)→(B,C,pred_len)→(B,pred_len,C) |
| 03-Layer2-series_decomp | Layer 2 | moving_avg的填充+池化,seasonal/trend拆解 | (B,T,C)→seasonal(B,T,C)+trend(B,T,C) |
| 04-收束 | 收束 | 端到端流程图 + tensor汇总 | 全链 |
6. 全局 toy 参数
| 参数 | toy 值 | 真实值(ETTh1) |
|---|---|---|
B | 2 | 4 |
seq_len | 6 | 96 |
pred_len | 2 | 24 |
enc_in | 3 | 7 |
moving_avg | 3 | 25 |
各维度互不相等:防止 permute/reshape 后 shape 看起来没变化而掩盖轴语义错误。
toy 输入示例(x_enc,shape (2, 6, 3)):
python
x_enc[0] = [
[1.0, 10.0, 100.0], # t=0
[2.0, 11.0, 101.0], # t=1
[3.0, 12.0, 102.0], # t=2
[4.0, 13.0, 103.0], # t=3
[5.0, 14.0, 104.0], # t=4
[6.0, 15.0, 105.0], # t=5
]最终输出 shape:(2, 2, 3),即 (B, pred_len, enc_in)。
7. 推荐阅读路径
快速了解直觉(不深入代码):
总览 §1-§3 → 01-Layer0 §3-§4(顺序图) → 02-Layer1 §3-§4(顺序图)
完整代码精读:
总览 → 01-Layer0 → 02-Layer1 → 03-Layer2 → 09-收束
旧版文档(Level1/2/3/4 结构)已归档至
DLinear_v1_archive/。