跳转至

第 16 章 数据污染、能力回归与迭代闭环

开场问题:模型在测试集上接近满分,怎样判断它是真会了,还是见过题?

16.1 污染有多个层次

  • 精确污染:训练中出现相同题目和答案。
  • 近似污染:改写、翻译、选项重排。
  • 来源污染:同一题库、代码仓库或文档的其他版本。
  • 评测感知优化:团队反复针对测试集修数据,即使样本没直接进训练,也已把测试集当开发集。

最后一种最普遍。测试集一旦被反复查看和用于决策,就不再是真正测试集,需要新的密封集。

16.2 怎么检测记忆而非泛化

做语义等价变换:改变量名、数字、实体、选项顺序、叙述风格,保持底层规则不变。若原题正确、变体大量失败,很可能依赖表面记忆。

代码评测按仓库切分并生成新测试;数学题参数化重采样;知识题使用发布日之后的事实。没有单一检测器能证明“绝无污染”,只能通过多种设计降低概率。

16.3 回归集要固定,探索集要流动

回归集保存历史上重要且已修复的失败,确保它们不再复发;探索集持续加入新分布和新攻击,发现未知问题。

回归集会逐渐被团队熟悉,不能承担泛化评测;探索集不稳定,不能用于精确比较历史版本。两者必须分开。

16.4 从失败到数据的闭环

  1. 收集失败及完整上下文。
  2. 确认能稳定复现。
  3. 分类根因:模型、数据、prompt、检索、工具还是系统。
  4. 选择最轻修法。
  5. 构造正例、反例和边界近邻。
  6. 放入训练/开发集;另留同类未见变体做测试。
  7. 跑全量回归,确认没有挤坏别处。

“把失败答案改正确后直接加入训练”只完成了第 5 步的一小部分。

16.5 实验卡片与因果归因

一次实验只能有清晰的主要变量。若同时换数据、模板、学习率、基座和 judge,分数涨了也不知道为什么。

实验卡片记录:假设、变更、数据差异、训练配置、推理配置、结果、失败切片和结论。失败实验也必须保存,它们定义了已知无效区域,避免团队重复烧钱。

16.6 上线门禁

建议四层:

  1. 确定性单测:模板、解析、工具 schema、停止条件。
  2. 小型快速回归:每次提交运行。
  3. 完整离线评测:候选权重或系统版本运行。
  4. shadow/canary:真实流量中逐步验证。

高风险切片使用 hard gate,不允许总分补偿。任何自动 judge 的提升都不能绕过关键人工样本。

16.7 何时停止继续优化

当新增训练主要在测试噪声内波动、每个提升带来越来越大成本、或领域提升持续挤压关键通用能力时,应停止改权重,转向系统约束或接受边界。

成熟的模型开发不是把所有错误消灭,而是知道剩余错误是什么、概率多大、怎样被系统检测和兜底。

核心问答

Q:去重能完全解决污染吗? 不能。近似改写、同源数据和评测感知优化无法靠字符串去重彻底识别。

Q:为什么已修复错题不能直接充当最终测试? 团队已经围绕它做过决策,它现在是回归集。最终测试要用同类但未见的新变体。

Q:一次实验为什么尽量只改一个主要变量? 为了归因。不能解释提升来源的实验,无法稳定复现也无法指导下一步。

Q:什么才算迭代闭环完成? 不只是当前错题答对,还要同类未见变体提升、旧能力不退化、线上指标改善且成本可接受。