讲义定位
最后一课不是“跑一个 benchmark 表格然后宣布完成”,而是建立一套能区分不同能力的评测协议:固定任务 内预测、held-out task 泛化、OOD prior、概率质量、资源成本和架构改造必须分别说明。
本讲义把前七课的对象串成一份可审计报告,并说明一次架构改造如何通过 hypothesis、ablation、指标和 失败解释进入课程证据。结业时应该能说清楚“证明了什么、没有证明什么”。
Mini 简化:评测在课程 synthetic prior 与固定 protocol 上进行。官方 TabPFN-3 报告 TabArena / TALENT / TabSTAR 等公开基准与 Thinking 模式;课程不复现官方 Elo、胜率或 benchmark 数字,也不把课程分数 写成官方性能声明。
1. 学习目标与先修知识
学完后你应该能够:
- 以 task/episode 为评测单位,而不是只按 row 随机切分;
- 设计统一的 baseline comparison protocol;
- 报告分类、回归、概率和资源指标;
- 区分 fixed-task、held-out-task 和 OOD-prior 结果,并写出各自支持的陈述;
- 用 ablation 评估一次明确的架构改造;
- 写出一份不夸大因果、机制或泛化能力的 final report,并衔接第 1–7 课的验收门。
先修:第 7 课的 prior / seed / checkpoint;第 5–6 课的 leakage 与 head 语义;第 3–4 课的 inducing / row token 形状契约。
2. 从第 1–7 课到结业叙事
结业报告应按计算图回顾证据链,而不是只贴最终 accuracy:
| 课次 | 对象 | 结业时必须还能回答 |
|---|---|---|
| 01 | episode / leakage | query label 为何只进 loss? |
| 02–03 | attention / inducing | \(N\to K\to N\) 省了哪张 score matrix? |
| 04 | row token | \(D_{\mathrm{row}}\) 从哪里来? |
| 05 | ICL mask | 四块可见性各允许什么? |
| 06 | heads | retrieval softmax 轴;回归输出语义 |
| 07 | prior training | outer loop 与 OOD 轴改了什么? |
| 08 | eval / variant | 数字挂在哪个 split 与 claim 上? |
可选论文扩展(本课可讨论、不强制实现):row-chunking、KV cache、MQA、Thinking / test-time compute。 若做,须标为“对齐官方推理优化叙事的可选实验”,不得改写为课程默认能力。
3. 评测单位必须是 task
一份预测结果至少需要这些标识:
run_id, split, task_id, episode_id, task_kind,
n_context, n_query, n_features, prior_version, seed
计算平均指标时,先明确是在 row 上平均还是在 task 上平均:
- row-weighted metric:query 多的 task 权重更大;
- task-weighted metric:先对每个 task 求指标,再对 task 平均。
若目标是跨任务泛化,通常需要 task-weighted 视角(canon §3.9)。若第 \(t\) 个 task 的指标为 \(m_t\):
不要把所有 query rows 合并后只报一个 micro average 掩盖 task failure。
4. 三种 split 与它们支持的陈述(claim 边界)
| Split | 测试对象 | 可以支持的陈述 | 不能支持的陈述 |
|---|---|---|---|
| fixed-task | 同一任务的新 row | 任务内预测能力 | 跨任务算法、零样本任务泛化 |
| held-out-task | 新 task 的 context/query(prior 内) | 在指定 prior 内的跨任务适应证据 | 任意真实数据上的普遍优势 |
| OOD-prior | prior 某些维度变化的新 task | 对已声明分布外轴的鲁棒性 | 未测试轴上的外推、因果识别 |
“zero-shot”必须写清楚 zero 的是哪一种 update:若模型使用 context 做 forward adaptation,它是 zero-gradient-update 的 task adaptation,而不是完全不读取 context。
Claim ledger(结业必填):每一条定量结论旁写 supports / does-not-support / not-yet-verified, 并指向具体 split、seed 与 checkpoint。
5. Baseline comparison protocol
至少需要:
- 一个 per-task MLP 或重新拟合 baseline;
- 一个简单的 KNN/检索 baseline(适用于相应 task);
- 一个 Mini-TabPFN backbone + head;
- 如可行,加入一个固定数据集模型,作为 split 语义对照。
比较时固定:
- task sampler 与 split;
- \(N_c,N_q,P\) 与 feature width 分布;
- target normalization;
- train budget、early stopping 与 seed 数量;
- 后处理、class mapping 与 missing handling。
否则“模型 A 胜过模型 B”可能只是输入、训练或预处理不同。课程结果不得直接与官方 TabArena Elo 并列写成同一结论。
6. 指标分层
分类
accuracy / balanced accuracy 类别判断
NLL / logloss 概率质量
calibration / ECE 置信度可靠性
回归
MAE / RMSE 点预测误差
NLL 分布预测质量(若 head 定义了 likelihood)
coverage 预测区间覆盖率
interval width 区间宽度
pinball loss quantile 质量
系统成本
parameters, peak memory, wall-clock, tokens, attention score size
成本不是附属信息。Inducing encoder 的意义就包含计算/表达折衷;只看 accuracy 会漏掉设计目标。
7. Zero-shot report 的最小结构
一份可复盘的报告至少包含:
- task prior 与版本(含第 7 课官方维对照);
- train/validation/test task 数量和 split 规则;
- context/query/feature 的分布;
- 模型输入契约和是否使用 context labels;
- baseline 与训练预算;
- 主要指标及 task-level aggregation;
- seed 数量、均值和不确定性摘要;
- 失败 task、异常 mask 和 OOD 结果;
- 资源成本;
- 尚未验证的能力与 claim ledger。
只贴一张 mean accuracy 表不能替代这份 protocol。
8. 架构改造必须先写 hypothesis
一次改造的格式应是:
Hypothesis:
某个明确的输入/计算瓶颈导致某种 task 上的误差。
Change:
只修改一个模块或一条信息路径。
Prediction:
若 hypothesis 成立,哪个 split/metric 会改善,哪个不应改善?
例如第二轮 column-row interaction:先声明它要补回“列上下文更新后,row aggregation 之前缺少一次 跨轴交互”的可能瓶颈;再比较 baseline、一次 interaction 和两次 interaction,而不是直接挑最好层数。
标准路线(单变量):
最小 gated update:
只允许改变这一处;\(d_{\mathrm{cell}}\)、\(n_{\mathrm{cls}}\)、optimizer、prior、训练 steps 和评测 tasks 保持不变。
9. Ablation matrix
一个最小矩阵可以是:
| Variant | Column encoder | Row aggregator | Row ICL | 预期作用 |
|---|---|---|---|---|
| A | induced | mean | on | baseline |
| B | induced | CLS | on | aggregation change |
| C | induced + second interaction | CLS | on | proposed change |
| D | no column context | CLS | on | column-context ablation |
| E | induced | CLS | no label injection | task-evidence ablation |
每个 variant 应在同一 task split、同一预算和同一随机协议下运行。结果既要记录 improvement,也要记录 计算成本、失败 task 和是否改变了 invariance/leakage 性质。
10. “学到了算法”需要什么证据
这句话至少需要多层证据共同支持:
- held-out tasks 上 query prediction 不依赖固定表 ID;
- context ablation 会改变合理的 task-conditioned behavior;
- query label intervention 不改变 prediction;
- row/column permutation 行为符合声明的性质;
- OOD prior 有明确、可重复的结果;
- baseline 对照与多个 seed 不支持偶然性解释。
即使这些都通过,也应使用“在指定 synthetic prior 和 protocol 下表现出跨任务预测证据”,而不是无限泛化 成“理解了所有表格”或“恢复了真实生成机制”。
11. 失败解释比最好数字更重要
最终报告应保留失败样本,例如:
- context 太少时 class mass 退化;
- missing pattern 改变后 calibration 变差;
- OOD feature width 超出训练范围后 representation collapse;
- quantile crossing 增加;
- induced \(K\) 太小时性能下降但内存节省明显。
失败解释帮助我们知道模型的能力边界,也为下一轮架构改造提供 hypothesis。
12. 知识检查与口试问题
- 为什么 row split 不能替代 task split?
- 一个概率更好的模型是否一定 accuracy 更高?
- 为什么 ablation 必须固定 task sampler 和预算?
- 怎样证明改造改善的是 column-row interaction,而不是参数量增加?
- 哪些证据可以支持“跨任务预测”,哪些不能支持 causal claim?
- 如果 OOD 失败,应该先改 prior、模型、head 还是 evaluation?你需要什么实验才能判断?
- 你的 report 里哪一条数字绝不能写成官方 TabArena 结论?
13. 最终提交目录
experiments/final/
├── protocol.md
├── config.yaml
├── checkpoints/
├── metrics/
│ ├── iid_task.csv
│ ├── heldout_task.csv
│ └── ood_prior.csv
├── figures/
│ ├── attention_audit.png
│ ├── scaling_curve.png
│ └── ablation.png
├── failure_cases.md
├── claim_ledger.md
└── report.md
每个数字都应该能追溯到 config、seed、checkpoint 和 task split。没有 provenance 的漂亮图表只能算草稿。
14. 课程结业边界
课程完成可以表述为:学习者实现了一个受 TabPFN-3 启发、可训练、可审计、可改造的 Mini-TabPFN,并在 指定 synthetic prior 和 evaluation protocol 下留下了 prediction、ablation 和 failure evidence。
课程不能据此声称:
- 复现官方 TabPFN-3 的全部内部 recipe、Thinking 模式或 benchmark;
- 在真实数据上具有普遍优势或官方 Elo 水平;
- 由 attention 或 synthetic SCM 自动得到 causal identification;
- 具有未经专门测试的 intervention、counterfactual 或 persistent Unit 能力。
15. 本课的硬结论
评测不是最后补一张表,而是定义模型能力边界的实验协议。数字必须挂在 task split + protocol + claim ledger 上;否则不能说“学会了算法”。架构改造只有在对照、资源、失败解释和明确的 claim boundary 都齐全时,才算一项可复盘的课程成果。
第 8 课:评测与架构改造
项目问题
模型能在训练任务上跑通,还不能证明它学到了跨任务预测算法。最后一课要完成 zero-shot 测试、基线对比 和一次架构改造,并把每一条结论挂到明确的 split 与 claim 边界上。
统一模型
MiniTabPFN
├── CellEmbedder
├── ColumnEncoder
├── RowAggregator
├── ICLTransformer
├── ClassificationHead
└── RegressionHead
衔接第 1–7 课:结业报告应按这条计算图回顾 leakage、inducing、row token、ICL mask、head 语义与 prior/seed;不要只提交最终 accuracy。
评测任务
- 在未见过的新 classification/regression tasks 上测试;
- 与 MLP、KNN、XGBoost 做同口径比较;
- 报告 context size、feature count、task family、seed 和 compute;
- 分开报告预测指标、运行成本、失败样例和 calibration/interval 行为;
- 填写 claim ledger:每条结果写
supports / does-not-support / not-yet-verified。
架构改造任选其一
- 增加第二轮 column-row interaction;
- 加入列名语义;
- 替换回归头;
- 改变 inducing points 或 CLS 数量;
- 加入 categorical embedding 或 missing-value mechanism;
- 实现 row chunking 或简化 KV cache(标为可选论文扩展,非默认结业能力)。
验证实验
改造必须有 baseline、单变量变化、明确指标和失败解释。不能只展示一个更高分数就写成“架构更好”; 需要说明比较是否同预算、同任务分布和同数据切分。课程数字不得写成官方 TabArena / Elo 结论。
最终交付
代码仓库、可运行训练脚本、分类实验、回归实验、attention 可视化、结构图、实验报告、claim ledger 和架构改进方案。
课程结业标准
学习者能够独立解释 cell token、inducing points、row token、label injection、query readout, 并能把一个论文中的计算对象改成代码、张量检查和实验,而不是只复述术语。
本课的具体教学包
本课不是“跑一下 test set”,而是完成跨任务评测协议、baseline 对照和一项单变量架构改造。推荐流程:
| 时间 | 内容 | 证据 |
|---|---|---|
| 00:00–00:25 | task-level split 与 claim ledger | 写出 train/heldout/OOD |
| 00:25–00:55 | baseline protocol | MLP/KNN/XGBoost 同口径 |
| 00:55–01:25 | Mini-TabPFN zero-shot evaluation | fresh task report |
| 01:25–01:40 | 休息 | 查找 leakage/overfit |
| 01:40–02:20 | 一项架构改造 | 单变量 diff + ablation |
| 02:20–02:50 | 失败解释与可视化 | report figures/tables |
| 02:50–03:00 | 结业 review | artifact + claim checklist |
1. 评测单位必须是 task
最终报告至少拆成三组(canon §3.9):
不能把同一个 task 的 rows 一部分放进 train、一部分放进 test 后称为 zero-shot task evaluation。 每张结果表都要带 task_id/seed、kind、n_context、n_features、prior_split。
若第 \(t\) 个 task 指标为 \(m_t\),跨任务汇总优先用:
2. Claim 边界速查
| Split | 可支持 | 不可支持 |
|---|---|---|
| fixed-task | 任务内预测 | 跨任务算法 |
| held-out-task | 指定 prior 内适应 | 任意真实数据优势 |
| OOD-prior | 已声明轴上的鲁棒性 | 未测轴外推、因果识别 |
3. Baseline comparison protocol
比较 MLP、KNN、XGBoost 或其他 baseline 时,要声明它们是否在每个 task 内重新 fit:
| 方法 | context label 使用 | query 处理 | 是否每 task fit |
|---|---|---|---|
| Per-task MLP | 是 | query forward | 是 |
| KNN | 是 | context distance | 否(存储 context) |
| XGBoost | 是 | query predict | 是 |
| Mini-TabPFN | 是 | shared learned algorithm | 否(只 forward) |
baseline 的 compute budget、早停、超参数搜索和 target normalization 都要写入 ledger。不能用为 Mini- TabPFN 调好的预算与 baseline 的默认值直接比较。
4. Zero-shot report 的最小表格
分类报告:
split | task_family | Nc | P | accuracy | NLL | calibration | forward_ms
回归报告:
split | task_family | Nc | P | RMSE | MAE | coverage | interval_width | forward_ms
每个 cell 的汇总要同时提供 task-level mean 和 task-level spread(例如 standard deviation 或 quantile)。 不要把所有 query rows 合并后只报一个 micro average 掩盖 task failure。
5. 选择一项主架构改造:第二轮 column-row interaction
为了让“改造”不是口号,课程提供一条标准路线:
最小 gated update:
只允许改变这一处;d_cell、n_cls、optimizer、prior、训练 steps 和评测 tasks 保持不变。若实现 复杂度太高,可把改造替换为“missing-value branch”或“quantile head”,但必须在 report 中说明为何选择。
6. 改造实验的 ablation matrix
至少运行:
记录:
- held-out/OOD task metrics;
- train/validation curves;
- 参数量与显存;
- 每个 query 的 forward time;
- 失败 task examples;
- variant 是否改善所有 task family,还是只改善某一类。
单次 run 的分数上涨不够支持“架构更好”。至少用 3 个 run seeds,或者明确这是 smoke experiment, 并把不确定性写出来。
7. 必做可视化与失败解释
结业报告至少包含:
- 完整计算图:
cell -> column -> row -> ICL -> head; - 一张 attention/readout visualization,标注它是 routing diagnostic;
- 一张 train-like vs held-out vs OOD 的结果图;
- 一张 baseline/variant metric table;
- 两个失败 task 的输入摘要、预测、ground truth 和可能原因;
- 一段明确说明哪些结果是作者报告、哪些是课程实验、哪些仍是
not-yet-verified; claim_ledger.md:每条定量结论对应 split / seed / checkpoint。
8. 结业口试问题
学习者应能现场回答:
- 为什么 query label 只能进 loss,不能进
forward? - inducing points 减少了哪一张 score matrix,保留了多少输出 token?
- row token 的 \(D_{\mathrm{row}}\) 从哪里来,改变 CLS 数量会影响什么?
- classification retrieval 的 softmax 轴分别是什么?
- synthetic SCM prior 能证明真实数据上的什么,不能证明什么?
- 你的架构改造改变了哪一个 computation object,代价是什么?
- 你的哪一条数字绝不能写成官方 TabArena 结论?
答不出时,应把对应 artifact 标成未完成,而不是只以最终 accuracy 作为结业依据。
退出条件与评分
结业必须拥有:
- 可重放的分类和回归 evaluation manifest;
- task-level held-out/OOD 结果;
- 同口径 baseline;
- 一项有单变量对照的架构改造;
- attention、结构图和失败案例;
- README / report 中的 boundary 与 claim ledger;
- 明确写出:课程结果 ≠ 官方 TabPFN-3 benchmark / Thinking 能力。
评分建议:评测协议 25%,baseline fairness 20%,zero-shot evidence 25%,架构实验 20%,报告和口试 10%。
最终提交目录
experiments/final/
├── manifest.yaml
├── metrics_classification.csv
├── metrics_regression.csv
├── baseline_vs_variant.csv
├── claim_ledger.md
├── figures/
├── failure_cases/
└── report.md
report.md 的第一段必须写清:这是受 TabPFN-3 启发、可训练、可审计的 Mini-TabPFN,不是官方模型 复现,也不自动携带 causal identification、Unit identity 或 counterfactual ability。
课后作业
把本课的 baseline/variant comparison 复跑一遍,额外加入一个你自己设计的 OOD task family。先写 manifest.yaml 和预期失败解释,再运行实验;如果 OOD 结果没有改善,也要完整提交结果,并在 claim ledger 中标为 does-not-support 或 not-yet-verified,而不是删除失败数字。