Skip to content

收束 — FEDformer 端到端流程与对比

1. 端到端完整流程图


2. Tensor 变化汇总表

步骤操作输入 shape输出 shape
0TFB 接入 _process()x_enc(3,12,5), target(3,10,5)x_enc(3,12,5), x_mark_enc(3,12,4), dec_input(3,10,5), x_mark_dec(3,10,4)
1x_enc.mean(dim=1) → repeat(3,12,5)mean(3,4,5)
2series_decomp(x_enc)(3,12,5)seasonal_init(3,12,5), trend_init(3,12,5)
3cat[trend[-6:,:], mean](3,6,5) + (3,4,5)trend_init(3,10,5)
4F.pad(seasonal[-6:,:], (0,0,0,4))(3,6,5)seasonal_init(3,10,5)
5enc_embedding(3,12,5) + (3,12,4)enc_out(3,12,16)
6Encoder(2×EncoderLayer + Layernorm)(3,12,16)enc_out(3,12,16)
6aAutoCorrelationLayer(FourierBlock,self-attn)(3,12,16)(3,12,16)
6bFourierBlock.forward(q,k,v,mask)q(3,12,8,2)(k/v 忽略)(3,8,2,12)
6c↳ rfft + M=4 频率线性变换 + irfft(3,8,2,12)(3,8,2,12)
7dec_embedding(3,10,5) + (3,10,4)dec_out(3,10,16)
8Decoder(1×DecoderLayer + Layernorm + projection)dec_out(3,10,16) + enc_out(3,12,16)seasonal_part(3,10,5) + trend_part(3,10,5)
8a↳ DecoderLayer self-attn(FourierBlock,dec_len=10)(3,10,16)(3,10,16)
8b↳ DecoderLayer cross-attn(FourierCrossAttention)q(3,10,8,2) + k(3,12,8,2)(3,10,16)
8cFourierCrossAttention.forwardq(3,10,8,2), k(3,12,8,2), v 忽略(3,8,2,10)
8d↳ xqk_ft 频域注意力矩阵xq_ft_(3,8,2,4) + xk_ft_(3,8,2,4)xqk_ft(3,8,4,4)
8e↳ tanh + V加权 + W投影(3,8,4,4)xqkvw(3,8,2,4)
8f↳ scatter + irfft(3,8,2,4) → out_ft(3,8,2,6)out(3,8,2,10)
9dec_out = trend_part + seasonal_part(3,10,5) + (3,10,5)dec_out(3,10,5)
10[:, -4:, :] 截取(3,10,5)(3,4,5)

3. 核心设计对比表

维度DLinearInformerAutoformerNon-stationaryFEDformeriTransformer
论文会议ICLR 2023ICLR 2021NeurIPS 2021NeurIPS 2022ICML 2022ICLR 2024
核心问题O(L²)慢且复杂O(L²) 效率忽略周期性过平稳化Auto-Corr 仍局部排列不变性
Attention 类型ProbSparseAuto-CorrelationDSAttentionFourierBlock + FourierCrossAttn倒置 FullAttention
Attention 复杂度O(LlogL)O(LlogL)O(L2)O(ML)M 固定则 O(L)O(N2)(变量轴)
时域 vs 频域时域 Linear时域稀疏FFT 自相关→时域时域修正分布频域直接操作时域倒置
Q/K/V 用法全部使用K,V 用于加权全部使用+τδself: 只用Q;cross: K充V,v忽略全部使用
分解Series DecompSeries Decomp(同Autoformer)Instance Norm
token 语义时间步时间步时间步时间步时间步变量
非平稳处理趋势分解τ/δ 注入趋势分解Instance Norm
Decoder 双路✅ seasonal+trendseasonal+trend(同Autoformer)
多变量建模channel-independent混合混合混合混合跨变量注意力

4. FEDformer 设计决策回顾

4.1 频率稀疏假设是核心前提

所有 FourierBlock / FourierCrossAttention 的有效性依赖于:真实时序的有用信息集中在少数 M 个频率。若某数据集频谱平坦(无明显主频),M 个频率的选择效果会接近随机,退化为低效版线性变换。

mode_select="random" 是默认策略——通过随机扰动 M 个频率的选择,引入类似 Dropout 的正则化效果,防止过拟合特定频率组合。"low" 策略(低频优先)则更保守,仅用低频成分(光滑趋势),实际上等同于平滑滤波 + 可学习变换。

4.2 FEDformer = Autoformer 骨架 + 注意力替换

FEDformer 对 Autoformer 的改动极小:

组件AutoformerFEDformer变化
Encoder self-attnAutoCorrelationFourierBlock替换
Decoder self-attnAutoCorrelationFourierBlock替换
Decoder cross-attnAutoCorrelationFourierCrossAttention替换
series_decompseries_decompseries_decomp(同文件)不变
EncoderLayer / DecoderLayer共用共用不变
DataEmbedding_wo_pos共用共用不变
my_Layernorm共用共用不变
MOEDecomp(论文)N/A⚠️ 未实现,用 series_decomp 替代TFB 简化

4.3 两个已知 Quirks

Quirk 1 — FourierBlock n_heads 硬编码weights1/2 第一维写死为 8(不是 n_heads 参数)。实际后果:TFB 中 n_heads 强制为 8,否则 einsum 维度不匹配报错。FourierCrossAttention 已修正此问题(使用 num_heads)。

Quirk 2 — AutoCorrelationLayer view 语义偏差:FourierBlock/FourierCrossAttention 返回 (B, H, E, L) 形状,但 AutoCorrelationLayer.forward()out.view(B, L, -1),把内存按"时间步第一"解读,实际每个"时间步"包含了不同 head 和不同时间位置的混合数据。模型收敛但语义不完全对应 Transformer 的"每时间步独立"约定。

4.4 三参数不可配置问题

versionmode_selectmodesFEDformer.__init__ 的 Python 默认参数,但 _init_model() 只传 self.config,三个参数永远取默认值 "fourier", "random", 32(实际 modes 受序列长度截断)。这是 TFB 接入层的实现细节,不影响模型正确性,但用户无法通过命令行调整频率选择策略。

4.5 v 在 FourierCrossAttention 中完全无效

FourierCrossAttention 接受 (q, k, v) 三元输入但只用 qk(其中 k 同时充当 v)。传入的 v 执行了一次 permute 但后续从未被引用。这意味着 encoder 输出中的值向量 (v) 信息和键向量 (k) 信息完全相同,模型学习的是 K=V 约束下的频域注意力。


5. 推荐阅读路径回顾

目标路径
快速理解设计直觉[[00-总览]] §二核心创新 → §八关键Quirks
理解 TFB 如何调用[[01-Layer0-接入界面]]
理解主预测链[[02-Layer1-forecast主链]]
深入频域 self-attn[[03A-Layer2A-FourierBlock]] §5.4 M频率线性变换
深入频域 cross-attn[[03B-Layer2B-FourierCrossAttention]] §5.4-5.7
调试运行[[调试形参]]

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