Skip to content

Informer 阅读索引与 TODO

Abstract

这篇不是新的主线文档,而是 Informer/ 目录下的工作台。

它只做三件事:

  1. 给出当前这组文档的最短阅读索引
  2. 判断当前理解已经到哪、还差什么
  3. 给出从 Informer 切到下一个模型的建议

0. 当前这组文档到底解决了什么

当前这组 Informer 文档,已经能稳定解决三件事:

  1. 真实运行入口

    • 当前命令行参数怎样选中 Informer
    • 当前 batch 怎样变成 x_enc / x_mark_enc / x_dec / x_mark_dec
  2. 模型主链

    • forward(...) 为什么走 short_forecast(...)
    • short_forecast(...) 五段怎样跑
    • DataEmbedding / Encoder / Decoder 在哪、怎样接起来
  3. 论文桥接

    • ProbSparse
    • Distilling
    • Generative Decoder 分别在当前代码里落到哪里

所以,这一组文档已经不只是“看懂 Informer 是什么”,而是:

能把当前这条 benchmark 里的 Informer,从入口、数据、主链、论文三大改动,一路讲到核心模块。


1. 最短阅读索引

1.1 第一轮:只看运行主线

如果你现在只想先把当前例子跑通并对上代码,按这个顺序:

  1. 01-Level1-配置进入Informer
  2. 02-Level2-数据进入Informer
  3. 03-Level3-forward主链
  4. 04-Level4-short_forecast五段总览
  5. 09-Informer全览流程图收束

这一轮回答的问题是:

  • 当前命令怎样进 Informer
  • 当前 batch 怎样进 Informer
  • short_forecast 这条主链怎样跑

1.2 第二轮:看核心模块

如果你已经能顺着讲主链,再看:

  1. 04B-DataEmbedding
  2. 04C-Encoder主链
  3. 04C-1-AttentionLayer
  4. 04C-2-ProbAttention
  5. 04D-Decoder主链

这一轮回答的问题是:

  • embedding 怎样把输入转成 d_model
  • encoder 怎样形成上下文
  • attention 怎样投影、分头、只更新 top query
  • decoder 怎样融合上下文并投影回 c_out

1.3 第三轮:从论文回接代码

如果你想保持“论文 -> 代码”的视角,再补这两篇:

  1. A3-Informer论文原理与代码桥接
  2. A1-参数速查

这一轮回答的问题是:

  • 论文三大改动在当前代码树里各落到哪里
  • 参数真正控制了哪些张量和模块

2. 当前理解到哪了

现在可以认为:

2.1 已经稳定的部分

  • 真实运行入口
  • _process(...) 造四输入
  • forward -> short_forecast
  • DataEmbedding
  • Encoder 主链
  • AttentionLayer
  • ProbAttention 的三步核心逻辑
  • Decoder 主链
  • 论文三大改动和代码对象的映射

2.2 还不够稳的部分

如果标准是“读完文档就敢直接改核心代码”,那还差三块:

  1. AttentionLayer 还可以再补一轮

    • query_projection / key_projection / value_projection
    • split heads
    • out_projection 还能再更细一点
  2. Informer 还没做一次真实调试闭环

    • 用当前最小命令跑起来
    • 在几个关键断点把文档和真实 tensor 对上
  3. 还没做一次最小改动实验

    • 例如改一个 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. 当前最推荐的调试闭环

如果你现在要把文档理解落到真实代码,建议只盯这几个点:

  1. _process(...)
    • target -> dec_input
  2. Informer.forward(...)
    • 看为什么走 short_forecast(...)
  3. DataEmbedding.forward(...)
    • (B, L, C) -> (B, L, d_model)
  4. ProbAttention.forward(...)
    • scores_top / index / context
  5. Decoder.forward(...)
    • (B, L_dec, d_model) -> (B, L_dec, c_out)

这 5 个断点基本就能把文档和运行闭环起来。


5. 下一个模型该选谁

建议:

下一个模型先学 DLinear

原因不是它更高级,而是它正好和当前 Informer 形成最干净的对照。

5.1 为什么不是继续扩 Transformer 家族

如果你现在继续去看:

  • PatchTST
  • iTransformer
  • Autoformer

你得到的仍然主要是“复杂模型对复杂模型”的对比。

这不利于建立一个最稳的坐标系。

5.2 为什么是 DLinear

因为它在这几个维度上都和 Informer 形成鲜明对照:

  1. 模型复杂度低

    • 没有 encoder / decoder
    • 没有 attention
    • 没有 embedding 体系
  2. 接口壳几乎一样

    • 仍然走 run_benchmark -> _process -> model.forward
  3. 对你当前最有价值

    • 能分清哪些是框架固定的
    • 哪些是 Informer 才有的
    • 哪些是“复杂模型机制”带来的额外负担

所以它是最好的下一个对照模型。


6. 从 Informer 切到 DLinear 的建议顺序

不要直接横跳到 DLinear.forward(...)

建议顺序:

  1. 先把 Informer 收一遍:

  2. 然后开 DLinear 的新目录,固定同样结构:

    • 总览
    • 配置进入
    • 数据进入
    • forward 主链
    • 参数与 toy 例子
    • 最终收束
  3. 读 DLinear 时,始终带着一个问题:

这一段如果放到 Informer 里,会对应哪一层?

这样你才能建立“简单模型 vs 复杂模型”的稳定对照。


7. 最后压成 5 句话

  1. 当前 Informer 这组文档已经够你读懂主链、对上论文、并开始做小改动。
  2. 现在最缺的不是再开很多新文档,而是把文档理解和真实调试闭环起来。
  3. 如果还要继续补 Informer,优先补 AttentionLayer 的最细 toy 投影过程。
  4. 如果要切下一个模型,优先选 DLinear,不要先继续扩复杂 Transformer 家族。
  5. 最好的学习节奏是:Informer 收束 -> 真实调试闭环 -> DLinear 从零完整建模

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