Trace2Skill contribution 排序价值:后续实验计划
记录日期:2026-09-03。状态:待执行。本文件只记录后续实验,不启动任务,不改变现有 chunk selection 或覆盖已有报告。
1. 研究问题与当前进度
目标是验证 contribution 能否作为 chunk 排序/预算选择的启发式,暂不要求其符号准确表示独立作用方向,也不要求系数数值准确预测完整 skill 的 reward 增量。
这里的“按系数大小排序”指按有符号的 beta 从大到小排序,不是按 abs(beta) 排序。
当前回归设计已经从带自由截距的 R_i = intercept + C_i^T beta + epsilon_i 改为逐任务 paired-delta 无截距回归:
B_i = 同一个 validation task 的 bare reward
R_i = 该 task 的 masked-skill reward
C_i = chunk mask
Delta_i = R_i - B_i
Delta_i = C_i^T beta + epsilon_i # 不设 intercept
这是相对 bare 的加性贡献近似。存在 chunk interactions、共同的 skill prompt 开销或服务分布差异时,系数不自动等同于稳定的平均边际因果效应;系数和也不一定等于实际 bundle 效果。
该方法现已统一为 cold-start 与训练 online gate 的默认实现;同 checkpoint 的 bare validation traces 通过 bare_run_dir 复用,配对契约见 paired_validation.md。下列路径保留为历史探索实验记录,后续受控实验使用严格匹配的数据;这里列出的排序验证实验仍待补做。
已有数据:
- 初始 16-chunk SkillBank:
runs/qwen35-4b-train-0830/trace2skill-cold-start/initial_skillbank.json。 - Gate A masks、traces 和原回归:
runs/qwen35-4b-train-0830/trace2skill-cold-start/gate-a/。 - 逐任务 bare validation:
runs/qwen35-4b-val/;不要误用 test bareruns/qwen35-4b-test-0830/。 - 新分组为 10 个正系数 chunks、6 个负系数 chunks;已有 bundle 对比:
runs/qwen35-4b-test-paired-delta-positive-vs-negative/comparison.md。 - 现有 masked validation 来自 SiliconFlow,bare validation 和新 bundle test 来自本地服务;现有重算采用了“服务分布等价”的显式假设。后续实验优先将 bare、mask、bundle 全部统一到同一本地部署。
现有主奖励证据尚不充分:原报告 positive 比 negative 高约 2.92pp,但 95% CI 跨 0;这只是两个完整 bundles 的比较,不能证明逐 chunk 排序有效。
现有 negative 重复轨迹问题
runs/qwen35-4b-test-paired-delta-negative/retry_log.json 记录了两个 runner 同时写同一目录,387 个任务各完成两次。它不是普通 failed 补测。
按完成顺序取 first/latest 会选择不同的随机 rollout,并可能引入与轨迹时长相关的选择偏差:
| Negative 记录口径 | Negative r_strict | Positive − Negative |
|---|---|---|
| 第一条 completed | 0.572720 | +0.005294 |
| 最后一条 completed(原报告) | 0.548838 | +0.029176 |
| 同任务 completed 取平均(敏感性分析) | 0.560779 | +0.017235 |
任务内平均口径下,主奖励差值的 task-level bootstrap 95% CI 约为 [-0.02387, +0.05823],步数和 token 优势也不再显著。此平均只是敏感性分析,不将意外重复视为规范设计的重复采样。双进程竞争资源还会干扰延迟比较。
2. 共同前提与数据规范
- [ ] 冻结同一本地模型部署、checkpoint/权重版本、tokenizer/chat template、量化设置、context cap、解码参数、system prompt、runtime 和环境版本,并记录 provenance。
- [ ] 两组/多组使用相同执行并发;避免同一推理服务的额外负载干扰成本与延迟比较。
- [ ] 同一 run 目录只允许一个 runner。建议启动时使用进程锁,记录
run_id、attempt_id和进程信息。 - [ ] failed 重试与独立重复采样分开:重试沿用 episode,已 complete 的任务不重跑;重复实验使用新的
sample_id或独立 run ID。 - [ ] 不按完成先后或 reward 挑选重复轨迹;在执行前冻结纳入和聚合规则。
- [ ] 使用原始 chunk 内容与 canonical draft order,不改写/删减
Applies when、Procedure、Verify、Avoid。 - [ ]
skills.max_skills: null,避免注入内容被截断;逐条检查实际 selected chunk IDs。 - [ ] 冻结主指标
reward/r_strict,r_success为重要辅助指标;报告全部条件的 coverage 和失败原因。
数据独立性
当前 beta 使用了全部 400 个 val tasks,不能事后把其中一半改称其独立 holdout。可选方案:
- 冻结现有 beta,在尚未用于拟合/选择的新 validation tasks 上评估。
- 如果没有新任务,先将 validation tasks 固定划分为 fit/holdout 两部分,只用 fit 部分重新估计 beta 和选择 chunks,在 holdout 部分评估。拟合部分仍可复用已有 paired observations。
只在同一批任务上换 seed 或 mask,验证的是重复 rollout/新 mask 下的稳定性,不等同于对新任务的泛化。两种目标需分别标注。
后续方法探索优先在独立 validation 上进行;不要连续根据已看过的 test 结果调规则,再宣称该 test 是 untouched held-out evaluation。
3. 实验 A:同预算 Top-K / Random-K / Bottom-K
假设
若 beta 具有实际排序价值,相同 skill 预算下,高分组应较低分组有更好的 held-out reward;Random-K 提供随机选择基线。
设计
- [ ] 预先固定一个主
K(可从K=4开始;最终值执行前确定),不要看结果后挑 K。 - [ ]
Top-K:有符号 beta 最高的 K 个 chunks。 - [ ]
Bottom-K:有符号 beta 最低的 K 个 chunks。 - [ ]
Random-K:从 16 个 chunks 均匀无放回抽 K 个;每个随机 subset 在所有评测任务上保持固定。 - [ ] Random-K 使用若干预先冻结的 subset seeds(例如 5 组,按预算确定),避免用一个偶然随机 bundle 代表随机选择方法。
- [ ] 若预算允许,加一组同服务、同任务的 Bare,用于判断每组相对 no-skill 的收益。
- [ ] 所有条件使用相同任务和明确的 rollout sample IDs;必要时增加重复采样。
相同 K 不保证相同 prompt token 数。需记录实际注入 token 长度;可以另加预先定义的长度匹配敏感性实验,但不要为了匹配长度重写 chunk,或把受长度约束的选择混称为纯 Top-K。主 Top-K 规则与长度匹配规则应分开报告。
分析与判读
- [ ] 报告 Top-K − Bottom-K、Top-K − Random-K、Random-K − Bottom-K 的 task-paired reward 差值和 95% CI。
- [ ] Random-K 同时报告不同 subset seeds 的结果分布,不能只挑一组;聚合时任务等权。
- [ ] Bootstrap 保留同一任务内的所有 arms/rollouts;多个 rollout 不视为独立 task。若要泛化到随机 subset 的分布,还需反映 subset 间不确定性。
- [ ] 主 reward 对比之外,报告 success flips、reward components、protocol/invalid action、步骤和 tokens;多重检验规则提前指定。
若能在独立数据及重复实验上稳定观察到 Top-K 优于随机和低分选择,即使系数未校准,也支持其作为选择器的价值。点估计的单次顺序不足以确证这一结论。
4. 实验 B:冻结 beta,在新 masks 上验证预测排序
假设
冻结 beta 后,预测分数较高的 mask 应倾向于产生较高的实际 reward 增量:
predicted_score_i = C_i^T beta_frozen
observed_delta_i = R_i(mask) - B_i
设计
- [ ] 按第 2 节选择独立 holdout;测试期间不更新 beta。
- [ ] 优先使用恰好 K 个 chunks 的随机 masks,排除“chunk 数量更多导致分数更高”的简单混杂。
- [ ] 如果考察多个 K,在每个 K 内分别检验,或预先设计分层分析;不要仅靠跨 K 的总体相关性宣称 chunk 排序有效。
- [ ] 冻结 mask seeds,并保存任务、sample ID、mask、预测分数、实际注入长度和 reward。
- [ ] 为同一任务收集 bare 和 masked outcomes;同一冻结 checkpoint/config 内可以复用 bare 记录,跨 checkpoint 不复用。
- [ ] 如果每个 task 有多个 masks,保留其共同 bare baseline 带来的相关性,使用 task-cluster bootstrap。
分析与判读
- [ ] 主排序指标:
predicted_score与observed_delta的 Spearman 相关及 task-level/cluster bootstrap CI。 - [ ] 辅助展示预测分数分位数组的实测平均增量,不用分位组结果重新修改 beta。
- [ ] 若同一任务有多个 masks,可补充任务内排序一致性,减少剩余任务难度差异的影响。
- [ ] 另报预测值与实测值的校准斜率/误差,用于区分“排序有效”和“绝对数值预测准确”。这些诊断不在 holdout 上用于重新拟合最终选择规则。
显著正向、可重复的排序相关性支持 beta 的排序价值;校准差但排序稳定时,应使用 rank/预算选择,不把系数和解释为预期实际 reward 增量。
5. 建议执行顺序与交付
- 先修复 run 隔离和重复轨迹规范,保留原报告及敏感性分析,不覆盖历史数据。
- 明确独立 validation 来源、冻结拟合数据和本地服务配置。
- 优先执行一个固定 K 的实验 A,验证最直接的选择器价值。
- 有预算时执行实验 B,直接检验分数的排序能力与校准程度。
- 最后才根据预先定义的规则冻结新方法,并在合适的独立数据上报告最终结果。
后续交付清单:
- [ ] 独立 YAML、冻结 beta/selection、mask/subset seeds 和完整 manifest。
- [ ] 每个 arm/seed 的完整 traces、summary 与重试记录。
- [ ]
scripts/下可复现的独立分析脚本;当前计划不要求修改核心 evaluator。 - [ ] task-aligned comparison JSON/Markdown、相关性与置信区间。
- [ ] 明确区分排序、数值校准、相对 bare 的作用方向、资源成本四类结论。