Appearance
TimeMixer 总览
论文问题与动机
标准 Transformer 将时序视为"一个分辨率"的 token 序列,无法同时捕获粗粒度趋势和细粒度季节波动。早期工作(Autoformer、FEDformer)通过在单一分辨率上分解解决了部分问题,但分解后的趋势与季节成分仍在同一时间尺度混合——高频噪声干扰趋势、低频背景模糊了季节峰值。
TimeMixer 的核心主张:先将时序下采样到多个分辨率,再让趋势和季节各自在最合适的分辨率方向上混合。趋势从粗到细(顶向下),季节从细到粗(底向上),两条路分开走,最终在每个尺度汇合。
核心创新
多尺度输入(Multi-Scale Inputs)
原始序列 (T=24): [t1, t2, ..., t24]
AvgPool(window=2): [t1+t2/2, t3+t4/2, ..., t23+t24/2] → 长度 12
AvgPool 再次: [...] → 长度 6
x_list = [(B,24,N), (B,12,N), (B,6,N)]细粒度尺度保留完整波动;粗粒度尺度自然平滑噪声、凸显趋势。
PastDecomposableMixing(PDM):双路多尺度混合
x_list 各尺度先做 series_decomp:
季节成分 season_list = [(B,N,24), (B,N,12), (B,N,6)] ← 已 permute
趋势成分 trend_list = [(B,N,24), (B,N,12), (B,N,6)] ← 已 permute
季节路(底向上):
scale0(24) ──Linear(24→12)──> 加到 scale1(12) ──Linear(12→6)──> 加到 scale2(6)
"细粒度季节信息向上渗透"
趋势路(顶向下):
scale2(6) ──Linear(6→12)──> 加到 scale1(12) ──Linear(12→24)──> 加到 scale0(24)
"粗粒度趋势向下广播"
最终:out = season + trend(每个尺度)Future Multi-scale Mixing(FMM):多尺度并行预测求和
每个尺度独立做:enc_out.T → predict_layer(Linear T→pred_len) → projection(d_model→1)
→ reshape 成 (B, pred_len, N)
三个尺度预测 stack 再 sum:dec_out_list 累加 → 最终 (B, pred_len, N)跨模型对比表
| 维度 | DLinear | PatchTST | Autoformer | TimeMixer |
|---|---|---|---|---|
| 时序分解 | 静态(移动均值) | 无 | 贯穿编解码 | 每个 PDM 块内分解 |
| 多尺度 | ❌ | ❌ | ❌ | ✅ 3层下采样 |
| 注意力 | ❌ | 时间轴(patch) | Auto-Correlation | ❌(纯 MLP mixing) |
| channel 处理 | CI(独立) | CI | 混合 | CI 或 CD(可配) |
| 趋势混合方向 | — | — | 单尺度 | 顶向下(粗→细) |
| 季节混合方向 | — | — | 单尺度 | 底向上(细→粗) |
| 预测头 | 单路 Linear | 单路 Linear | Decoder 生成 | 每尺度独立 Linear → 求和 |
| 复杂度 |
TFB 调用链
文档 BFS 树形索引
论文组件 → 代码对应表
| 论文组件 | 实现代码 | 精读文档 |
|---|---|---|
| Multi-Scale Inputs | TimeMixer.__multi_scale_process_inputs() | [[03A-Layer2A-MultiScale]] |
| Past Decomposable Mixing (PDM) | PastDecomposableMixing.forward() | [[03B-Layer2B-PDM]] |
| Bottom-up Season Mixing | MultiScaleSeasonMixing.forward() | [[03B1-Layer3-SeasonMixing]] |
| Top-down Trend Mixing | MultiScaleTrendMixing.forward() | [[03B2-Layer3-TrendMixing]] |
| Future Multi-scale Mixing (FMM) | TimeMixer.future_multi_mixing() | [[03C-Layer2C-FutureMixing]] |
| Series Decomp | series_decomp(来自 Autoformer) | [[Autoformer/03D-Layer2D-SeriesDecomp]] |
| Instance Normalization | Normalize.forward("norm"/"denorm") | 见 [[02-Layer1-forecast主链]] §norm |
全局 Toy 参数
| 参数 | 值 | 含义 |
|---|---|---|
B | 2 | batch size |
seq_len | 24 | encoder 输入长度 |
pred_len | 6 | 预测步数(= horizon) |
label_len | 12 | decoder 历史前缀(= seq_len//2,TFB 自动设置) |
enc_in | 3 | 变量数(= dec_in = c_out) |
d_model | 8 | 隐层维度 |
d_ff | 16 | FFN 中间维度 |
e_layers | 2 | PDM 块数 |
down_sampling_window | 2 | 每次下采样倍率 |
down_sampling_layers | 2 | 下采样层数(共 3 个尺度) |
moving_avg | 3 | series_decomp 核大小 |
channel_independence | 1 | CI 模式(每变量独立) |
多尺度 shape 一览:
| 尺度 | 时间维 | 原始 shape | CI reshape 后 |
|---|---|---|---|
| 0(最细) | 24 | (2, 24, 3) | (6, 24, 1) |
| 1 | 12 | (2, 12, 3) | (6, 12, 1) |
| 2(最粗) | 6 | (2, 6, 3) | (6, 6, 1) |
注:CI 模式下
推荐阅读路径
快速了解直觉:[[00-总览]] → [[02-Layer1-forecast主链]] §5.1 宏观逻辑
完整代码精读:[[01-Layer0-接入界面]] → [[02-Layer1-forecast主链]] → [[03A-Layer2A-MultiScale]] → [[03B-Layer2B-PDM]] → [[03B1-Layer3-SeasonMixing]] → [[03B2-Layer3-TrendMixing]] → [[03C-Layer2C-FutureMixing]] → [[04-收束]]