Skip to content

Informer 全览流程图收束

Abstract

这篇只做一件事:

把当前这条 Informer 精读链,从命令行参数到最终 (B, pred_len, c_out) 输出,重新压回一张完整总图。

这篇不再下钻新模块,而是做收束:

  • 总顺序图
  • 总抽象树
  • 当前真实例子的接口链
  • toy 例子在整条链里的位置
  • 各篇文档在整条链里的职责

1. 当前真实例子

固定当前主例子:

  • 数据:ETTh1.csv
  • 模型:time_series_library.Informer
  • adapter:transformer_adapter
  • strategy:rolling_forecast
  • 任务:short_term_forecast

关键参数:

  • seq_len = 96
  • label_len = 48
  • pred_len = horizon = 24
  • batch_size = 4
  • d_model = 32
  • d_ff = 128
  • e_layers = 2
  • d_layers = 1
  • n_heads = 8
  • embed = "timeF"
  • freq = "h"
  • distil = True

2. 整条主链的第一性

这组文档的第一性不是“把 Informer 每个文件都拆完”,而是:

在真实 TFB 运行链里,搞清当前这条命令怎样把参数和数据送进 Informer,再怎样经过 embedding / encoder / decoder 变成最终预测。

所以整条链必须同时回答四件事:

  1. 为什么当前会选中 Informer
  2. batch 四元组怎样变成 Informer 四输入
  3. forward -> short_forecast 内部怎样分块
  4. 各块里的张量怎样一步步变化

3. 全览顺序图

4. 全览抽象树

这张树的意思不是“执行顺序完全长这样”,而是:

  • 上半部分给主线 Level
  • 中间部分把 short_forecast 的内部逻辑块继续拆开
  • 下半部分把 encoder / decoder 里已经单独精读的核心节点挂回总树

所以这张树回答的是:

当前这一套文档,已经把 Informer 运行链拆到了什么粒度。

5. 当前例子的接口链

5.1 配置接口链

text
命令行参数
-> build_model_config(...)
-> pipeline(...)
-> get_models(...)
-> get_model_info(...)
-> transformer_adapter(Informer)
-> ModelFactory
-> _init_model()
-> Informer(config)

意义:

  • 这一段解决“为什么当前这条命令会走到 Informer,而不是别的模型”。

对应文档:

5.2 数据接口链

text
forecast_fit / batch_forecast
-> _process(input, target, input_mark, target_mark)
-> x_enc, x_mark_enc, x_dec, x_mark_dec
-> Informer.forward(...)

意义:

  • 这一段解决“batch 四元组怎样真正变成 Informer 的四输入”。

对应文档:

5.3 模型主链

text
forward(...)
-> short_forecast(...)
-> 标准化
-> DataEmbedding
-> Encoder
-> Decoder
-> 反标准化
-> 取最后 pred_len

意义:

  • 这一段解决“进入 Informer 以后,代码主体到底按什么顺序跑”。

对应文档:

6. toy 例子在整条链里的位置

真实例子里你在 PyCharm 里看到的是:

  • input.shape = (4, 96, 7)
  • target.shape = (4, 72, 7)
  • input_mark.shape = (4, 96, 4)
  • target_mark.shape = (4, 72, 4)
  • 最终 output.shape = (4, 24, 7)

但精读代码时不直接用它做数学例子,因为太大。

所以文档里固定另一个更小的 toy 例子:

  • B = 1
  • seq_len = 4
  • label_len = 2
  • pred_len = 2
  • c_in = c_out = 2
  • d_model = 4

这两个例子的分工是:

  • 真实例子:用来对齐你当前实际跑的 benchmark
  • toy 例子:用来画张量、卷积核、attention 权重、projection 的逐步变化

7. 各篇文档到底负责哪一段

文档父节点负责的段解决的问题出口
01-Level1-配置进入Informer总任务命令行到 Informer(config)为什么当前例子会选中 Informermodel = Informer(config)
02-Level2-数据进入Informer总任务_process(...)batch 四元组怎样变成四输入Informer.forward(...)
03-Level3-forward主链总任务forward -> short_forecast为什么走这条分支short_forecast(...)
04-Level4-short_forecast五段总览Level 34A~4E 总览short_forecast 内部怎样分块4A~4E
04B-DataEmbedding4B DataEmbedding三种 embedding 怎样合成 encoder / decoder 输入(B,L,d_model)
04C-Encoder主链4C Encoder编码后的历史上下文怎样形成enc_out
04C-1-AttentionLayer4C Encoder -> EncoderLayerQ/K/V 怎样投影、分头、再合并attention 输出
04C-2-ProbAttention4C Encoder -> AttentionLayertop query 怎样被选中和更新context
04D-Decoder主链4D Decoderdecoder 怎样读 enc_out 并投影回输出通道dec_out
A1-参数速查附录参数从哪来、控制什么速查表速查表
A2-代码地图附录文件和后续拆分路线文件索引文件索引

8. 一张最短收束图

9. 固定阅读顺序

严格按这个顺序:

  1. 01-Level1-配置进入Informer
  2. 02-Level2-数据进入Informer
  3. 03-Level3-forward主链
  4. 04-Level4-short_forecast五段总览
  5. 04B-DataEmbedding
  6. 04C-Encoder主链
  7. 04C-1-AttentionLayer
  8. 04C-2-ProbAttention
  9. 04D-Decoder主链
  10. 09-Informer全览流程图收束

10. 最后压成 5 句话

  1. 当前这条命令先把参数变成 Informer(config),再把 batch 四元组变成 Informer 四输入。
  2. forward(...) 只是分支入口,当前实际走的是 short_forecast(...)
  3. short_forecast(...) 的主干就是:标准化 -> embedding -> encoder -> decoder -> 反标准化。
  4. Encoder 里的 attention 不是黑盒,已经继续下钻到了 AttentionLayer / ProbAttention
  5. 这篇之后,Informer 这一组文档已经形成从入口到内部模块再到收束总图的闭环。

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