Stage 5: 结果分析 (Analysis)
进入时手里有什么
- 所有实验的 WandB 运行记录
- 最佳 checkpoint 和训练日志
- Research Contract(要验证的 claim 列表)
- 实验过程中的 findings.md
阶段目标
系统性地分析实验结果,对照 Research Contract 逐条验证 claim,得出明确的结论。
具体步骤
mermaid
graph TD
A[收集实验结果] --> B[Planner: 对照 Contract 分析]
B --> C[Coder: 生成分析脚本]
C --> D[运行分析]
D --> E[Planner: 撰写结论]
E --> F[Judge: 验证结论有效性]
F --> G{Judge 判定}
G -->|go| H[写入 Experiment.md]
G -->|revise| I{缺数据还是缺分析?}
I -->|缺数据| J[回退到 Training 补实验]
I -->|缺分析| C
H --> K[进入 Writing 阶段]Step 1: 收集实验结果
执行者: 编排器
从 WandB 和本地文件汇总所有实验结果:
markdown
## 实验结果汇总
| 实验 | 方法 | CUB-200 acc | 训练时间 | WandB |
|------|------|-------------|---------|-------|
| exp01 | Baseline (base paper) | 86.8% | 5.5h | baseline_001 |
| exp02 | Ours (contrastive-decouple) | 88.1% | 7.2h | main_001 |
| exp03 | Ablation (no contrastive) | 87.2% | 6.8h | ablation_001 |Step 2: 对照 Contract 分析
执行者: Planner (Claude Opus)
逐条对照 Research Contract 中的 Evidence 要求:
markdown
## Contract Verification
### E1: 精度提升 ✅
- 目标: top-1 acc > 86.8%
- 结果: 88.1%(提升 1.3%)
- 状态: 通过
### E2: 无额外推理开销 ✅
- 目标: FLOPs ≤ base paper × 1.1
- 结果: FLOPs = base paper × 1.0(推理时丢弃投影头)
- 状态: 通过
### E3: 解耦贡献 ✅
- 目标: 去掉解耦模块后精度下降
- 结果: 88.1% → 87.2%(下降 0.9%)
- 状态: 通过Step 3: 深入分析
执行者: Coder (Codex) 编写分析脚本
如果需要更深入的分析(可视化、统计检验等):
python
# analysis/visualize.py
import wandb
import matplotlib.pyplot as plt
# 1. Loss 曲线对比
# 2. 特征空间 t-SNE 可视化
# 3. 类内/类间距离统计
# 4. 消融各组件的贡献Step 4: 撰写结论
执行者: Planner (Claude Opus)
基于分析结果,撰写结构化的结论:
markdown
## 结论
### 主要发现
1. 对比学习有效解耦了共性和判别性特征(t-SNE 可视化支持)
2. 精度提升 1.3% 且推理无额外开销
3. 消融实验确认了对比损失的贡献
### 局限性
1. 仅在 CUB-200 上验证,泛化性未知
2. 温度参数 0.07 是手工调的,sensitivity analysis 缺失
### 未来工作
1. 多数据集验证(Stanford Cars, FGVC Aircraft)
2. 温度参数自适应学习Step 5: Judge 验证
执行者: Judge (Codex)
Judge 独立验证分析结论的有效性:
yaml
review: analysis-v1
verdict: revise
issues:
- severity: medium
issue: "E3 的 margin 太小"
detail: "88.1% vs 87.2%,只差 0.9%。需要确认是否统计显著"
suggestion: "跑 3 次求平均 ± std,或者做 significance test"
- severity: low
issue: "缺少训练曲线分析"
detail: "主实验的 loss 曲线在中期有波动,应该解释原因"各 Agent 职责
| Agent | 做什么 | 不做什么 |
|---|---|---|
| Planner | 对照 Contract 分析、撰写结论 | 不美化结果 |
| Coder | 编写分析脚本、可视化 | 不解读结果含义 |
| Judge | 验证结论有效性、检查统计严谨性 | 不提供替代结论 |
| 编排器 | 协调分析流程、决定是否补实验 | 不自行做分析 |
Gate 信息
| 属性 | 值 |
|---|---|
| 默认 Gate | auto-judge |
| 特殊配置 | require_all_claims: true |
| 通过条件 | 所有 claim 都有 evidence + Judge approve |
| 部分通过 | 不允许 — 要么全部 claim 通过,要么回退 |
不允许部分通过
如果 3 个 claim 中有 2 个通过了但 1 个没有,整个分析阶段不算通过。编排器需要决定:补实验(回退 Training)还是修改 claim(回退 Design)。
错误处理 / 回退
| 情况 | 处理方式 |
|---|---|
| 某个 claim 没有 evidence | 回退到 Training 补实验 |
| 结果不如预期 | 分析原因,决定调参重跑还是修改 claim |
| 统计不显著 | 增加实验次数(跑 3-5 次求平均) |
| 发现数据问题 | 回退到 Implementation 检查数据流 |
| Judge 要求更多分析 | Coder 补充分析脚本 |
产出物
| 文件 | 内容 |
|---|---|
experiments/exp-*-results.md | 每个实验的正式结果 |
Experiment.md | 所有实验的汇总结论 |
analysis/ | 分析脚本和可视化图表 |
findings.md 更新 | 分析过程中的发现 |
status.yaml 更新 | stage → analysis |
进入下一阶段的条件
- Research Contract 中所有 claim 都有 evidence 支撑
- Judge 确认分析结论有效
- Experiment.md 已写入正式结论
- 可视化图表已生成