返回 AICAP-180
B11 · Day 109GRPO/后训练机理 + 首跑

adapter 评测与对齐

B11 的训练已经跑完(Day 108 看了三曲线),今天 Day 109 在 B1→B18 能力曲线上处于「能训练 → 能严谨证明训练有效」的位置。今天的核心动作是「证明它真变好了没有」——把 GRPO 产出的 LoRA adapter 拉进同一个 eval harness,前后对比,并用 Cohen's κ 校准 judge 一致性,防止「评测漂移冒充能力提升」。这是 B1-B10 攒下的 e

阶段: B11 · GRPO/后训练机理 + 首跑(Day 101-110) 标签: #LoRA #eval-harness #cohens-kappa #regression

今日导引(由浅入深)

B11 的训练已经跑完(Day 108 看了三曲线),今天 Day 109 在 B1→B18 能力曲线上处于「能训练 → 能严谨证明训练有效」的位置。今天的核心动作是「证明它真变好了没有」——把 GRPO 产出的 LoRA adapter 拉进同一个 eval harness,前后对比,并用 Cohen's κ 校准 judge 一致性,防止「评测漂移冒充能力提升」。这是 B1-B10 攒下的 eval 严谨性(A/B、CI、κ)在后训练上的第一次正式应用,也是把「我跑过一次 RL」从口号变成可信结论的关键一步。明天 Day 110 才做归因复盘 + TCO 对比。今天最小可判定产出:一份 before/after eval 报告(Δ准确率 + κ 值)。诚实锚点:同 harness 下真实跑过的 V4-Pro 89.7% vs V4-Flash 79.3%(Δ+10.3pp),提醒「前后对比必须同一把尺」。

1. 机理精读

为什么训练曲线好不能代替评测。 Day 108 看到 reward 单调上升、KL 有界,那只说明「训练内部信号健康」。但 reward 是 grader 给的代理信号,grader 可能与真实任务有偏差(半可验证任务尤甚)。真正回答「模型在下游任务上变好了吗」必须把 adapter 放进一个独立的、面向任务的 eval harness 跑一遍——这就是 Day 109 与 Day 108 的根本分工。

adapter 怎么评。 GRPO 产出的是 LoRA adapter(低秩增量权重),不是完整模型。评测前两条路:要么把 adapter 合并回 base 权重再评,要么推理时挂载 adapter 评。无论哪条,前后必须用完全相同的 eval harness(同 prompt 集、同 judge、同打分逻辑)——否则你比的是「尺子变了」而不是「模型变了」。

为什么要 Cohen's κ。 before/after 的打分若由 LLM-judge 给,judge 本身可能漂移(同一答案两次打分不一致)。Cohen's κ 量化 judge 与人类金标在「超越随机」之上的一致程度:

  • κ=(po−pe)/(1−pe),其中 po 是观测一致率,pe 是随机期望一致率。
  • 分子 po−pe:扣掉「碰巧一致」后真正的一致量。
  • 分母 1−pe:归一化到「最大可能的超随机一致」。
  • κ 高才说明 judge 可信,前后 Δ 才有意义;κ 低则 Δ 可能纯是 judge 噪声。

这是把「能力提升」和「评测漂移」切开的统计闸门:没有 κ,你无法区分「模型真变好」与「judge 这次手松了」。

回归检测的必要性。 RL 后训练专门优化目标任务(如 AML 类型学识别),但可能在非目标任务上退化(灾难性遗忘 / 过拟合奖励)。所以前后对比不能只看目标子集的 Δ,要确认其它 category(format / honesty / robustness 等)没掉。只报目标任务涨了、不报别处跌了,是 RL 评测最常见的选择性汇报,也是「样样都涨」式过度宣称的温床。tasks.tsEvalCategoryaml-detect/aml-restraint/aml-typology/aml-compliance/format/honesty/robustness/planning/safety/injection/reasoning)天然给了分层维度——前后对比应按 category 各出一个 Δ,目标涨 + 非目标不跌才算真提升。

合并还是挂载 adapter。 评测前把 LoRA adapter 处理成可推理形态有两条路,各有取舍:

  • 合并回 baseW' = W + BA(低秩增量并入主权重),评测时就是一个普通模型,推理无额外开销,但占一份完整权重的磁盘/显存。
  • 运行时挂载:保留 base 不动,推理时叠加 adapter。省存储、便于多 adapter 切换 A/B,但每次前向多一点开销。

无论哪条,前后必须用同一种方式 + 同一 harness,否则推理路径差异本身就会引入 Δ,污染对比。

与相邻概念的边界。 与 Day 108 边界:108 看训练内部曲线(reward/KL/loss 健康),109 看训练外部能力(同 harness 准确率 + κ);曲线好看 ≠ 下游真涨,必须 109 来证。与 Day 110 边界:109 出「涨了多少、可不可信」的数字,110 做「为什么涨/不涨」的归因与 PPO-vs-GRPO 的 TCO 对比。资源:Anthropic「Demystifying evals」(2026-01)。

2. 推导 / 手算 / 代码走读

本日 κ 校准用 src/agent/eval/cohensKappa.ts(已建 + 绿)。走读要点:

  • cohensKappa(a, b):两个等长 rater 标签数组算 κ。先校验等长非空,统计观测一致 agreepo=agree/n;再分别统计两 rater 各类别频次 c1/c2,按 pe += (c1[c]/n)*(c2[c]/n) 算随机期望一致;最后 kappa=(po−pe)/(1−pe)。对「两 rater 都只用同一类别(pe==1,denom==0)」的退化情形:完全一致返回 1,否则返回 0——这是 κ 在边角的约定处理。
  • cohensKappaWithCI(a, b, {bootstrap, rng}):在点估计基础上做 percentile bootstrap 95% CI——把 n 对观测有放回重采样 B 次(默认 2000),每次算 κ,排序后取 2.5/97.5 分位为 ci95。注释直说意图:CI 告诉你「校准集是否够大到能信点估计」,小 N → CI 很宽——这正是 P1 要 N≥50 手标的原因。
  • percentile(sorted, p):线性插值分位,与 stats 模块同款实现,给 bootstrap 取置信区间端点用。
  • RNG 可注入rng = opts.rng ?? Math.random,测试时注入确定性 RNG → bootstrap 结果可复现、可单测。文件头明确「Pure + deterministic, no model/network required」——κ 计算本身不需要任何 model 或 API key。
  • bootstrap 的工作方式(与 Δ 的 CI 同源思想)cohensKappaWithCI 对 n 对观测有放回重采样 B 次,每次重算 κ,得到 κ 的经验分布,取 2.5/97.5 分位为 CI。Δ准确率的 CI 用 stats.tspairedBootstrap 同理——对前后配对差重采样。两处都用 percentile bootstrap,是本仓「统计严谨性」的统一手法:点估计 + bootstrap CI,绝不只报一个数。
  • 退化边界处理是诚实的细节pe==1(两 rater 都只用同一类别)时 denom==0,κ 数学上未定义——代码约定完全一致返回 1、否则 0,而非抛 NaN 蒙混。这种边角处理保证 κ 在「全 pass / 全 fail」的极端标注集上也给可解释的值。
  • 诚实边界:cohensKappa.ts 计算 κ 与 CI 都是离线确定性的,已建 + 绿;但要算「judge vs human κ」必须先有 ≥50 条人工金标——这部分是待数据(judge-human κ 需 ≥50 手标),且 after 模型需先完成训练(待 GPU)。

手算 κ(验证 cohensKappa 直觉,非新增测量):judge 与 human 对 10 条打 pass/fail,8 条一致 → po=0.8;若两边各约一半 pass 一半 fail,pe≈0.5×0.5+0.5×0.5=0.5 → κ=(0.8−0.5)/(1−0.5)=0.6。κ=0.6 属「中等一致」,CI 在 N=10 时会很宽——印证「小 N 不可信点估计」,必须 ≥50。

κ 的常用解读区间(Landis & Koch 1977 经典分级):

κ 区间一致性等级对 judge 的含义
< 0比随机还差judge 不可用,重写 prompt
0.0–0.2轻微judge 几乎等于瞎猜
0.2–0.4尚可不足以支撑结论
0.4–0.6中等勉强,需配合宽 CI 谨慎用
0.6–0.8显著可用,主流目标区
0.8–1.0几乎完美强可信

注意:κ 高 ≠ 准确率高——κ 衡量的是「judge 与人金标的一致性(超越随机)」,不是「模型答得对不对」。两者是正交的:一个 judge 可以与人高度一致(κ 高)却同时如实地把一个差模型评为差。

3. 今日实战

  1. src/agent/eval 的 κ harness(src/agent/eval/cohensKappa.ts)对微调前/后模型在 tasks.ts 子集打分。
  2. 跑两次 pnpm eval:agent(before / after),对相同 prompt 集出两份打分。两次之间只换模型权重,不换 prompt/judge/打分逻辑
  3. 算指标:
    • Δ准确率:after − before,按 EvalCategory 分层(目标子集 + 非目标子集各一个 Δ)。
    • κ 值:judge vs human(需先有 ≥50 条手标金标),并用 cohensKappaWithCI 出 95% CI。
    • Δ 的 CI:用 pairedBootstrapstats.ts)对前后配对差出 95% CI,判断 Δ 是否显著。
  4. 出 before/after 报告,明确标注「同一 harness、同一 judge、同一 prompt 集、同一 adapter 处理方式」。
  5. 回归检测:逐 category 检查非目标子集是否退化,任一明显下跌都要在报告里点名。
  6. 交叉引用 docs/aipa/day109-eval.md 记录 Δ 与 κ 的解读,回归项是否退化。

4. 今日实测 / 产出

  • docs/aipa/day109-eval.md + before/after eval 报告(Δ% + κ 值)。
  • cohensKappa.ts 与 eval harness 已建 + 绿——κ 计算离线可跑。
  • 待 GPU:after 模型需先完成训练(接 Day 108)。
  • 待数据:judge-human κ 需 ≥50 手标
  • real 参考:同 harness 下 V4-Pro 89.7% vs V4-Flash 79.3%(Δ+10.3pp)——这是已真实跑过的同尺对比锚点,提醒 after-vs-before 必须同一把尺。
  • 产物清单:
    • before/after eval 报告:按 EvalCategory 分层的 Δ准确率 + 总体 Δ + Δ 的 95% CI。
    • κ 报告:judge vs human 的 κ 点估计 + 95% CI(需 ≥50 手标)。
    • 回归检测表:非目标子集逐 category 的前后对比,标注是否退化。
  • 离线已就绪:cohensKappa / cohensKappaWithCI / pairedBootstrap 均已建 + 绿,可在拿到打分序列后立即出 κ 与 CI。
  • 状态诚实标注:κ 工具就绪、real 锚点已有;after 模型待 GPU(需先完成训练)judge-human 金标待数据(需 ≥50 手标),均未升级为已完成。
  • 注:本日产出的「报告」在 after/金标就位前只能填 before 侧与方法学骨架,after 列与 κ 列保持空位并标注 gating 原因,绝不用占位数字假装完成。

5. 常见误区 / 陷阱

  1. 用不同 prompt/judge 对比导致"假提升":换了尺子的 Δ 毫无意义,前后必须严格同一 harness。
  2. κ 没算就信 judge 打分:judge 可能漂移,没 κ 校准的 Δ 可能纯是 judge 噪声。
  3. 只报目标子集涨、不报非目标子集跌:RL 易在非目标任务退化(遗忘),回归检测要分层全报。
  4. 小 N 直接信 κ 点估计:N<50 时 κ 的 CI 极宽,点估计不可信——这正是要 ≥50 手标的原因。
  5. Δ 只报点估计不报 CI:real 锚点 V4-Pro vs Flash Δ+10.3pp 在 N=29 时 CI[0,20.7] 不显著——前后 Δ 同样要用 pairedBootstrap 出 CI,否则可能把噪声当提升。
  6. 把 κ 高当成"模型好":κ 衡量 judge 一致性,不是模型能力;两者正交,别混为一谈。
  7. adapter 处理方式前后不一致:before 用合并、after 用挂载,推理路径差异本身就引入 Δ,污染对比。

6. 学习资源(每条带 YYYY-MM)

  • Anthropic「Demystifying evals」(2026-01)——前后同 harness、judge 校准、避免评测漂移。
  • Cohen's kappa 原始定义(Cohen 1960,经典打底;现役用法见 2026 eval 实践)——κ 公式与一致性解读。
  • Landis & Koch「The Measurement of Observer Agreement」(1977,经典分级)——κ 区间的一致性等级解读。
  • GRPO 论文 / DeepSeekMath(arXiv:2402.03300, 2024-02)——后训练优化目标任务、回归检测必要性的背景。
  • 本仓 src/agent/eval/cohensKappa.tssrc/agent/eval/stats.ts(2026-06)——κ + bootstrap CI + paired-diff 的可单测实现。

SOTA检查 (2026-06 更新)

  • 当前主线:前后同 harness + κ 校准是 2026 eval 严谨性底线;点估计必配 bootstrap CI 是配套要求。
  • 是否仍 SOTA:是。同尺对比 + 一致性校准是后训练评测的现役标准,未被替代;演进方向是更细的分项 rubric judge 与多 judge 集成。
  • 过时黑名单
    • 避免用不同 prompt/judge 对比导致「假提升」。
    • 避免无 κ 校准就信 judge 单方打分。
    • 避免 Δ 只报点估计不报 CI(real 锚点 Δ+10.3pp 在 N=29 不显著就是教训)。
  • 下次复查点:再验 judge 校准是否需引入更强一致性度量(如加权 κ / Krippendorff α);确认 ≥50 手标金标是否落地;复查 Anthropic eval 指南(2026)是否更新校准建议。

衔接

  • 昨天:Day 108 — 训练监控与诊断(reward/KL/loss 三曲线 + reward-vs-step csv)。
  • 今天:LoRA adapter 进同一 harness 前后对比,Δ准确率 + Cohen's κ 校准,防评测漂移;real 锚点 V4-Pro 89.7% vs V4-Flash 79.3%(Δ+10.3pp)。
  • 明天:Day 110 — 复盘与产出固化(归因 + PPO vs GRPO 的 TCO 对比)。