Appearance
Informer 阅读索引与 TODO
Abstract
这篇不是新的主线文档,而是
Informer/目录下的工作台。它只做三件事:
- 给出当前这组文档的最短阅读索引
- 判断当前理解已经到哪、还差什么
- 给出从
Informer切到下一个模型的建议
0. 当前这组文档到底解决了什么
当前这组 Informer 文档,已经能稳定解决三件事:
真实运行入口
- 当前命令行参数怎样选中
Informer - 当前 batch 怎样变成
x_enc / x_mark_enc / x_dec / x_mark_dec
- 当前命令行参数怎样选中
模型主链
forward(...)为什么走short_forecast(...)short_forecast(...)五段怎样跑DataEmbedding / Encoder / Decoder在哪、怎样接起来
论文桥接
ProbSparseDistillingGenerative Decoder分别在当前代码里落到哪里
所以,这一组文档已经不只是“看懂 Informer 是什么”,而是:
能把当前这条 benchmark 里的 Informer,从入口、数据、主链、论文三大改动,一路讲到核心模块。
1. 最短阅读索引
1.1 第一轮:只看运行主线
如果你现在只想先把当前例子跑通并对上代码,按这个顺序:
- 01-Level1-配置进入Informer
- 02-Level2-数据进入Informer
- 03-Level3-forward主链
- 04-Level4-short_forecast五段总览
- 09-Informer全览流程图收束
这一轮回答的问题是:
- 当前命令怎样进 Informer
- 当前 batch 怎样进 Informer
short_forecast这条主链怎样跑
1.2 第二轮:看核心模块
如果你已经能顺着讲主链,再看:
这一轮回答的问题是:
- embedding 怎样把输入转成
d_model - encoder 怎样形成上下文
- attention 怎样投影、分头、只更新 top query
- decoder 怎样融合上下文并投影回
c_out
1.3 第三轮:从论文回接代码
如果你想保持“论文 -> 代码”的视角,再补这两篇:
这一轮回答的问题是:
- 论文三大改动在当前代码树里各落到哪里
- 参数真正控制了哪些张量和模块
2. 当前理解到哪了
现在可以认为:
2.1 已经稳定的部分
- 真实运行入口
_process(...)造四输入forward -> short_forecastDataEmbeddingEncoder主链AttentionLayerProbAttention的三步核心逻辑Decoder主链- 论文三大改动和代码对象的映射
2.2 还不够稳的部分
如果标准是“读完文档就敢直接改核心代码”,那还差三块:
AttentionLayer 还可以再补一轮
query_projection / key_projection / value_projectionsplit headsout_projection还能再更细一点
Informer 还没做一次真实调试闭环
- 用当前最小命令跑起来
- 在几个关键断点把文档和真实 tensor 对上
还没做一次最小改动实验
- 例如改一个 projection / embedding / 参数
- 看真实输出和结果有没有变化
所以当前更准确的状态是:
已经能读懂 Informer 主链并对上论文,但还没通过“真实调试 + 小改动”把理解封口。
3. 当前 TODO
3.1 文档 TODO
- [ ] 回看
04C-1-AttentionLayer,判断是否还需要再补一轮投影与分头的 toy 例子 - [ ] 如果以后继续深挖,可补一篇更细的
Decoder self/cross attention对照文档 - [ ] 如果以后要做真正的实验记录,再补一篇
Informer 最小改动实验记录
3.2 理解 TODO
- [ ] 用当前最小命令真实跑一遍 Informer
- [ ] 在
_process / forward / ProbAttention / Decoder断点停下 - [ ] 把文档里的 toy 理解和真实 tensor 对上
- [ ] 选一个很小的点做改动
4. 当前最推荐的调试闭环
如果你现在要把文档理解落到真实代码,建议只盯这几个点:
_process(...)- 看
target -> dec_input
- 看
Informer.forward(...)- 看为什么走
short_forecast(...)
- 看为什么走
DataEmbedding.forward(...)- 看
(B, L, C) -> (B, L, d_model)
- 看
ProbAttention.forward(...)- 看
scores_top / index / context
- 看
Decoder.forward(...)- 看
(B, L_dec, d_model) -> (B, L_dec, c_out)
- 看
这 5 个断点基本就能把文档和运行闭环起来。
5. 下一个模型该选谁
建议:
下一个模型先学
DLinear。
原因不是它更高级,而是它正好和当前 Informer 形成最干净的对照。
5.1 为什么不是继续扩 Transformer 家族
如果你现在继续去看:
PatchTSTiTransformerAutoformer
你得到的仍然主要是“复杂模型对复杂模型”的对比。
这不利于建立一个最稳的坐标系。
5.2 为什么是 DLinear
因为它在这几个维度上都和 Informer 形成鲜明对照:
模型复杂度低
- 没有 encoder / decoder
- 没有 attention
- 没有 embedding 体系
接口壳几乎一样
- 仍然走
run_benchmark -> _process -> model.forward
- 仍然走
对你当前最有价值
- 能分清哪些是框架固定的
- 哪些是 Informer 才有的
- 哪些是“复杂模型机制”带来的额外负担
所以它是最好的下一个对照模型。
6. 从 Informer 切到 DLinear 的建议顺序
不要直接横跳到 DLinear.forward(...)。
建议顺序:
先把
Informer收一遍:- 09-Informer全览流程图收束
- 这篇
[A4-阅读索引与TODO](A4-阅读索引与TODO.md)
然后开
DLinear的新目录,固定同样结构:- 总览
- 配置进入
- 数据进入
forward主链- 参数与 toy 例子
- 最终收束
读 DLinear 时,始终带着一个问题:
这一段如果放到 Informer 里,会对应哪一层?
这样你才能建立“简单模型 vs 复杂模型”的稳定对照。
7. 最后压成 5 句话
- 当前
Informer这组文档已经够你读懂主链、对上论文、并开始做小改动。 - 现在最缺的不是再开很多新文档,而是把文档理解和真实调试闭环起来。
- 如果还要继续补 Informer,优先补
AttentionLayer的最细 toy 投影过程。 - 如果要切下一个模型,优先选
DLinear,不要先继续扩复杂 Transformer 家族。 - 最好的学习节奏是:
Informer 收束 -> 真实调试闭环 -> DLinear 从零完整建模。