训练完,在公开 benchmark 上报一个分数——这个分数能信吗?
本课一问:训练仪表都正常,模型训完了。拿一个公开 benchmark 考一下,报一个分数——这个分数说的就是模型的能力吗?
这一课先不碰:别人技术报告里的数字该信几分(岔路课);小模型上分数有多少噪声、能不能推到大模型(第 3 课);用模型当裁判、人类盲测投票这类评测方式(见文末「你可能会问」)。
从已有出发
模型从文字一路算到下一个 token 的概率,这条流水线已经完整了。评测就是在流水线的末端,把模型的输出和标准答案比:
把贯穿例句做成一道阅读题:「小明把苹果给了小王。问:谁拿到了苹果?」标准答案是「小王」。模型读完题,续写出「小王」就算对。一个 benchmark 就是几百到几万道这样的题,分数 = 答对的比例。
这道题的原文在锚点模型里只有 5 个 token(小明 / 把 / 苹果 / 给了 / 小王)。记住这个长度,第 2 节会用到:GPT-3 查「题目有没有泄进训练数据」用的是 8 到 13 个词的片段,这道题连一个片段都凑不出来。
这一课为什么换例子。要看「题泄进训练数据会怎样」,得有一份能完全掌控的训练语料,并且能在页面里现场训练。所以实验台改用我们项目的《三國志演義》:训练文本是训练集前 30,000 字,题目是验证集(全书最后约 10%)里的真原文句子,模型是 C0 第 1 课那种「数数」的字级 4-gram 语言模型——训练就是数一遍,在浏览器里 0.1 秒完成。
先自己设计:直接报分
最直接的做法:把公开题库拿来考,答对多少报多少。下面是一个 30 道题的「公开题库」(给出一句的前面部分,续写最后 6 个字)和另外 30 道同分布、从没公开过的「新题」。默认设置是公开题只混进训练文本 1 份:
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
数字来源:浏览器实时计算(训练 = 数 n-gram,确定性,无随机噪声;打乱与「打散」用固定种子)。训练文本是项目训练集前 30,000 字;题目是验证集里的真原文。每改一次设置都重新数一遍。
同一个模型、同一个分数,换三个问题去问它:
- 题目里的片段在训练数据里出现过吗?——逐字重叠扫描(需要能查训练数据)。
- 换一套同分布、保证没见过的新题,分数还一样吗?——新题对照(不需要训练数据)。
- 按原顺序排列的整份题库,是不是比打乱后「更眼熟」?——交换性置换检验(只需要模型给出的概率)。
下面三节各讲一个。
试三件事:① 把「泄进训练文本」切到 0 份,读两套题的逐字准确率:16.1% 对 20.6%,差的这 4.5 个点是 30 道题的抽样噪声,不是污染;② 切到 1 份,读下面那张表里模型的续写——整句原样背出来;③ 切到 4 份,6 字全对到 28 / 30,逐字准确率 98.9%,新题还是 0。
这个 4-gram 模型会把见过的句子整句背下来,所以这里的虚高是上限。大模型上效应要小得多,而且因题而异——GPT-3 的结论是多数基准上影响很小,但不能排除;这正是需要下面三种检测办法的原因。
改进一:查逐字重叠(n-gram 去污染)
C0 第 1 课埋过一句:n-gram 没有消失,它成了数据工具,GPT-3 用它查评测题有没有混进训练数据。现在兑现。
GPT-3 做了两件事 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条英文词级 n-gram;过滤与分析是两套不同的 N。 出处GPT-3 §4、附录 C(本地 PDF) ↗ :
- 训练前过滤:在训练数据里找和评测题重叠的 13-gram,删掉它和周围 200 个字符。可是过滤程序有 bug,书这类长文档没滤掉;因为重训成本太高,模型没有重训。几个语言建模基准和 Children’s Book Test 几乎整份在训练数据里,论文只好不报这几项。
- 训练后分析:每道题只要和训练数据有任何 N-gram 重叠就标成「脏」,剩下的是「干净子集」,比较两个分数。N 取该数据集题长(按词)的第 5 百分位,下限 8、上限 13;比 N 还短的题按整题匹配;在 10 篇以上训练文档里出现的 13-gram 被忽略,因为多半是常见短语或法律样板。
数字来源:浏览器实时计算(训练 = 数 n-gram,确定性,无随机噪声;打乱与「打散」用固定种子)。训练文本是项目训练集前 30,000 字;题目是验证集里的真原文。每改一次设置都重新数一遍。
试三件事:① 默认 n = 8、不泄题:30 道一道都没标——干净;② 把 n 调到 4:17 道被标出来,可它们一道也没泄露,只是和第一回到第六回共用了四字短语——这就是 GPT-3 把 N 的下限定为 8 的理由;再开「忽略高频片段」,误报只少了 2 道;③ 切到「泄进 1 份」:任何 n 下 30 道全中。逐字扫描抓得住原样抄进去的题。
它有两个盲区,都来自原文:
- 重叠 ≠ 泄题:DROP 有 94% 的题被标「脏」,人工检查发现训练数据里有的只是题目引用的原文段落,问题和答案都没有;Llama 3 用 8-gram 估计「污染带来的分数增益」,Natural Questions 有 52% 被标出,增益却几乎为 0 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条按 Singh et al. 2024 的做法,每个数据集挑使「估计增益」最大且显著的阈值。 出处Llama 3 §5.1.4、表 15 ↗需联网 。反过来,HellaSwag 85% 被标出,8B / 70B / 405B 三个模型的估计增益是 14.8 / 14.8 / 14.3 个点;MMLU、HumanEval 的 8-gram 重叠高到无法估计。
- 没重叠 ≠ 没泄题:把题目改写、翻译一遍,逐字匹配就一处也抓不到。Yang 等人用改写过的测试题训练一个 13B 模型,在 MMLU、GSM8K、HumanEval 上做到了 GPT-4 的水平;他们还在 RedPajama、StarCoder 这类预训练数据里发现 HumanEval 有 8%–18% 的重叠 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条「GPT-4 水平」是在被污染的测试集上测的;论文据此主张用 LLM 做去污染、多出一次性新题。 出处Yang et al. 2023 摘要 ↗需联网 。
C7 第 2 课的去重也在同一条线上:Lee 等人发现标准数据集里有超过 4% 的验证样本与训练集重叠——去重本身就在给评测去污染。
改进二:换一套没见过的题
不看训练数据,也能量出虚高:照着原题库的风格重新出一套题,两边分数一比。GSM1k 就是这么做的——按 GSM8K 的风格、难度、步数、答案量级,请人重新出了 1,205 道小学数学题。同一套评测设置下,部分模型在新题上掉了最多 8 个点;最大的是 Yi-6B-Chat,从 GSM8K 的 43.7% 掉到 GSM1k 的 35.7% 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条「最多 8%」是 v4 摘要的说法,指百分点;前沿模型大多没有过拟合的迹象。 出处GSM1k 摘要(v4)、附录 F ↗需联网 。
差 8 个点,是不是抽样噪声?用两比例 z 检验算一次(GSM1k 附录 F 用的就是这个检验):
这个办法不需要知道训练数据是什么,但有两个代价:新题的分布只能「尽量」和老题一致(GSM1k 用人类解题率、步数、答案量级去对齐);新题一公开,下一代模型又可能吃进去。所以 GSM1k 的作者先不公开这套题,还额外留了一小批从未发出去的题。另一种思路是按时间切分:LiveCodeBench 持续收集比赛平台上新出的题,只用模型训练截止日期之后的题评测;Li 与 Flanigan 发现,很多模型在它们训练数据截止之前发布的数据集上,表现明显好于之后发布的 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条GPT-3 系列与若干开源模型;控制了数据集难度。 出处Li & Flanigan 2023 摘要 ↗需联网 。
改进三:拿不到训练数据时,可证地检测
大多数模型不公开训练数据。Oren 等人找到一个只要模型概率就能用的办法:很多题库的题目顺序是无关紧要的——打乱了,联合分布不变(可交换)。没见过题库的模型,对原顺序和对任意一种打乱顺序应该一样「眼熟」;如果模型对原顺序明显更熟,那只能是训练时见过按这个顺序排列的题库。
数字来源:浏览器实时计算(训练 = 数 n-gram,确定性,无随机噪声;打乱与「打散」用固定种子)。训练文本是项目训练集前 30,000 字;题目是验证集里的真原文。每改一次设置都重新数一遍。
试三件事:① 默认「整份按原顺序泄进 1 份」:原顺序比 99 次打乱都更眼熟,p̂ = 0.01;② 切到「一题一处、打散」:题照样泄露了(上一个实验台里分数照样虚高),可 p̂ 变成 0.44——模型没见过题与题之间的顺序,这个检验测不出来;③ 切到 0 份:p̂ = 0.99,落在 0 到 1 之间哪里都有可能,这就是「没有污染时 p̂ 均匀」。
原文在一个 1.4B 模型上故意混入测试集做了验证 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条误报率保证在「题库可交换」的前提下成立(置换检验的标准结论);检出能力本身是实验结果。 出处Oren et al. 2023 §3 ↗需联网 :重复 10 次以上的测试集,分片检验的 p 值小到 10−11 以下;只出现 1 次的测不出(三个数据集 p = 0.099、0.485、0.544),检出门槛约 4 次。作者自己写明了三条局限:题库必须可交换(建议出题人公开声明「已随机打乱」);只查逐字污染;无法排除更复杂的部分污染。
改进四:让题目不公开
三种检测各有盲区,最彻底的办法是让题目根本进不了训练数据:不公开。GSM1k 先不发布;美国 NIST 下属 CAISI 评测 DeepSeek-V4 Pro 时,9 个基准里有两个非公开,结论和 DeepSeek 自报的差了一大截。这件事放到岔路课里细看。
⚠ 常见误解
「做过去污染,分数就干净了。」GPT-3 做了,但过滤程序有 bug;逐字匹配抓不住改写和翻译(Yang 2023);置换检验抓不住打散插入的题。去污染只能说明「按这种方法没查到」。
「查出重叠,分数就是虚高的。」DROP 94% 被标,重叠的只是原文段落;Natural Questions 52% 被标,估计增益约为 0。重叠是嫌疑,要用「干净子集与全集的差」或新题去验证。
「同一个 benchmark 名字,分数就可以直接比。」HF 在 2023 年发现,同一个 LLaMA-65B 在 MMLU 的三种实现下是 0.637 / 0.488 / 0.636,排名也跟着变;OLMES 列出的 6 份文献里,Llama2-7B 的 ARC-Challenge 从 43.2 到 53.7 不等;Anthropic 报告过,把选项从 (A) 改成 (1)、括号换成方括号、多一个空格,MMLU 准确率就能变约 5%。先问:几 shot、什么格式、怎么打分。
在演进地图上的位置
- 只看 loss(和 PPL)
- 仪表:开局对 ln V、梯度范数、最大 logit、spike score
- 公开 benchmark
- n-gram 去污染 + 干净子集
- 换一套没见过的题 / 按时间切分
- 交换性置换检验(可证检测)
- 非公开题 + 第三方预先定好的评测集
- 三层可信度 + 口径核对
- 多种子、信噪比
- 平滑指标 + 两步预测
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 公开题会混进训练数据,分数就量不准能力;还要分清「见过题」「见过原文」和「没见过」 |
| ② 数学上为什么可能有效? | 置换检验在题库可交换时误报率有保证 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条Lehmann & Romano 的置换检验标准结论 出处Oren et al. 2023 §3 ↗需联网 ;两比例 z 检验衡量差值是否大过抽样噪声 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条正态近似下的标准统计检验;前提是每道题独立。 出处GSM1k 附录 F 用的同一检验 ↗需联网 |
| ③ 实验上为什么最后选了它? | GPT-3 的干净子集分析、Llama 3 的估计增益、GSM1k 的新题对照都是在真实模型上量出来的 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条n-gram 的 N、阈值都是经验规则,换数据要重新定 出处GSM1k、GPT-3 附录 C、Llama 3 §5.1.4 ↗需联网 |
一句话
公开基准的分数混着三样东西:能力、见没见过题、怎么考;n-gram 只查逐字重叠,新题对照、顺序检验和非公开题各补一块。
先停在这里:记住三种检测各查哪一种污染、各漏哪一种,进下一课。
再深一层:走岔路课,看别人技术报告里的数字怎么分三层读——那里有一个「公开题上几乎追平、非公开题上差 16 个点」的真实案例。
下一个缺口
就算题目干净、口径统一,分数本身也有噪声——上面干净时两套题就差了 4.5 个点。小模型上的分数有多少噪声?小实验的结论能推到大模型吗? → 第 3 课:小实验与大决策
岔路 → 技术报告里的数字,各该信几分?
你可能会问
- 「题目本身会不会就是错的?」会。MMLU-Redux 重新人工标注了 5,700 道 MMLU 题,估计整个 MMLU 约 6.49% 的题有错,病毒学子集里被分析的题有 57% 有问题 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条人工标注的估计值 出处Gema et al. 2024 摘要 ↗需联网 。分数接近上限时,剩下的「错题」可能正是标准答案错了。
- 「不用标准答案,让强模型当裁判、让人类盲测投票呢?」这是另外两类评测:LLM-as-judge(MT-Bench 等)和 Arena 式人类偏好投票。它们解决了「开放式回答没有唯一答案」的问题,也带来了新的偏差(裁判模型偏爱某类回答、投票人群与话题的分布)。李宏毅《生成式 AI 导论 2024》第 12 讲把这几类评测放在一起讲(见章首页资料)。
🔍 GPT-3 里还有两个值得一看的「污染」细节
① PIQA:29% 的题被标出,干净子集低 3 个点;可在一个小 25 倍、几乎没有记忆能力的模型上也看到了同样的下降,所以作者判断更可能是「被标出的题恰好更简单」这种统计偏差,但无法严格证明,于是给 PIQA 的结果打了星号。② Winograd:45% 被标出,干净子集低 2.6%;人工检查发现有 132 个 Winograd 题确实在训练数据里,只是格式不同。两件事放在一起看:同一个「干净子集低几个点」,可能是泄题,也可能是两个子集难度不同——这就是第 3 课要讲的「差距要和噪声比」。