高质量数据用完了怎么办?
本课一问:质量分类器删掉了 90% 以上的数据,配比又把小而精的数据上采样好几遍。高质量数据不够用了,怎么办?
这一课先不碰:最好的数据在训练的哪个阶段喂(第 6 课);后训练里的合成数据与蒸馏(C12)。
从已有出发
模型这条流水线上,本章始终停在最左边的「文字」一格;把这一格展开,就是下面这条数据管线:
贯穿任务里,我们其实早就撞上了这堵墙:整部《三國志演義》的训练集只有 501,615 个 token,而项目的基线模型训练 400 步,已经把它过了 6.5 遍。前沿模型面对的是同一个问题的放大版:筛完只剩 1.3T 的高质量数据,却要训十几 T token。
先自己设计:同一份数据多训几遍
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
项目的真实日志:和基线完全相同的配置,只把步数拉到 1,500 步(约 24.5 个 epoch)。
- val loss:第 300 步(4.9 个 epoch)到最低 4.771,之后一路升到 6.906;
- 训练窗口上的 loss 降到 0.704——模型在背书:训练集越来越熟,没见过的后文越来越差。
Muennighoff 等人(2023)在数据受限的条件下做了大量改变重复程度与算力预算的实验,拟合出重复数据的「有效量」:4 个 epoch 以内,重复数据和全新数据相比 loss 几乎没有差别;再往后收益递减,追加算力的价值最终趋于 0 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条在他们的模型与数据规模上拟合;R* 是拟合参数(附录 A 表 1 为 15.3878),换模型、换数据要重新拟合。 出处Muennighoff et al. 2023 摘要、§3、附录 A(需联网) ↗需联网 。
重复可以用,但要知道它在第几遍开始不值——下面的公式把这件事变成了一个数。
试三件事:① 把 epoch 拖到 4、16、40,读「折合 %」和「第 E 遍里的一个 token 值多少」;② 看右图蓝线的最低点在 4.9 个 epoch,再看绿色虚线(400 步的基线)在 6.5 个 epoch 时反而更低——读图下的说明,想想为什么「最佳 epoch」不能直接从这条曲线读出来;③ 注意两张图的横轴都是 epoch,但左边是论文在大规模上的拟合,右边是我们 3.7M 参数的小模型:只比形状,不比数值。
朴素方案二:让模型自己生成数据
另一条路更诱人:训好的模型能写出无穷多的文本,拿它的输出当新数据,是不是就没有数据墙了?
Shumailov 等人把这个循环做成了实验:用上一代模型生成的数据训练下一代,如此递归。在高斯混合模型、VAE 和 OPT-125m 上都看到同一件事——原始分布的尾部先消失,最后收敛到一个方差很小的分布,他们叫它 model collapse 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条实验设置是「每一代完全用上一代的生成数据替换真实数据」;混入真实数据时结论不同(见下方模拟的第三个按钮)。 出处Shumailov et al. 2023;Nature 631 (2024)(需联网) ↗需联网 。
为什么是尾部?用我们自己的语料就能算。训练集里有 4,072 个不同的字,其中 610 个只出现过 1 次。把「模型」简化成最极端的情况——模型就是上一代数据的字频,生成就是按字频抽样。一个只出现 1 次的字,在下一代 534,276 次抽样里一次都没被抽到的概率是 (1 − 1/534,276)534,276 = 0.3679,约等于 1/e;一旦某一代它的计数变成 0,之后的每一代它的概率都是 0,永远回不来 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条这是有限样本重采样的性质:计数为 0 的类别在纯自我采样下是吸收态;单代消失概率 (1 − 1/N)^N 在 N 很大时趋于 1/e。它只描述「字频模型」这个最简情形,不是对 LLM 的证明。 出处待补 。
试三件事:① 默认设置下读统计条:第 1 代实际丢了多少个只出现 1 次的字,和公式期望的 224 个比一比;② 把代数拖到 30,看右图的尾巴一路往左缩,而最常见的那些字几乎不动——崩溃先发生在尾部;③ 点「每代混入真实数据 50%」,红线和绿线分开:只要真实数据一直在,尾巴就保得住。
改进:改写真实文本,与真实数据混合
崩溃的根源是用生成数据替代真实数据。现代做法反过来:让模型改写或扩写真实文本,再和真实数据混在一起。
- 改写网页(WRAP):让指令模型把网页改写成「维基风格」或「问答风格」,和原网页一起训练。在 C4 上预训练约快 3 倍,在 The Pile 各子集上的困惑度平均改善 10% 以上,13 个零样本问答任务平均提高 2% 以上 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条改写只换表达方式,不增加原文没有的事实;效果在 C4 这类噪声较多的网页上最明显。 出处WRAP 摘要(需联网) ↗需联网 。
- 教科书式合成(Phi-1):6B token 按「教科书质量」筛选的网页 + 1B token 合成的教科书式文本,1.3B 模型在 HumanEval 上 50.6%(R4 D3,原文)。
- 合成占大头、但和真实混(Phi-4):预训练约 10T token,配比如下(Phi-4 技术报告表 5):
| 来源 | 占训练 token | 唯一 token | 走几遍 |
|---|
合成数据占 40%,但它的唯一 token 只有 290B,被重复了 13.8 遍——远超第一节说的「4 遍」。这说明「4 遍」是在 Muennighoff 的数据与模型上拟合出的经验结论,不是物理定律;Phi-4 认为高质量合成数据经得起多遍重复,这是它们的实验选择,不是共识。
- Nemotron-CC:6.3T token 里 1.9T 是对网页的合成改写(第 3 课);Qwen3 用 Qwen2.5-Math、Qwen2.5-Coder 合成了「数万亿」token 的数学与代码数据(Qwen3 报告 §3.1)。
- 2026 年并非共识:GLM-5 的数学与科学网页数据严格排除合成数据、AI 生成数据与模板化数据(R2 §2.5.1)。同一年,有人把合成当主力,有人把它当污染。
- 解决了量几乎无限:Common Crawl 定期抓取全网,FineWeb 用了 96 个快照。卡在WET 纯文本里样板和菜单太多(FineWeb §3.2);我们的原始文件不还原硬换行就跑 C4 句末规则,整本书只剩 17.02% 的字。
- 解决了Reddit 上至少 3 karma 的外链,4,500 万个链接,清洗后约 800 万文档、40 GB。卡在量太小:C6 算出的需求是十几 T token;而且只覆盖被分享过的那一小部分网页。
- 解决了句末标点、词数、平均词长、停用词、重复行……便宜,能在全网快照上跑。卡在绑语言、绑求值单位:英文原版在整本《三國志演義》3,697 段上通过 0 段;C4 句末标点规则删掉约 30% 的 token,FineWeb 最后没用它。
- 解决了C4 里一句话重复 61,036 次;去重后模型复述训练文本的频率降到 1/10。MinHash 把两两比较变成查桶。卡在去得越狠未必越好:跨 96 个快照全局去重只剩 4T,训不出更好的模型;每快照独立去重留 20T,才追平 RefinedWeb。
- 解决了判断「有没有营养」:FineWeb-Edu 让 Llama-3-70B 标 46 万页、蒸馏成分类器,MMLU 33% → 37%。卡在参考语料的困惑度偏向「像参考」:我们模型写的胡话困惑度 93.417,低于真原文 273.209;阈值 3 删掉 92%,长程训练不够用。
- 解决了DoReMi 用 280M 代理模型搜域权重,8B 模型下游平均 +6.5 个点,达到基线快 2.6 倍。卡在权重一变就要重复:按 DoReMi 的权重花完 The Pile 的有效体量,YouTube 字幕要走约 16.9 遍(按字节近似 token,只看量级)。
- 解决了重复 4 遍以内几乎等于新数据;改写真实网页(WRAP)预训练约快 3 倍;Phi-4 约 10T token 里合成占 40%。卡在让模型只吃自己生成的数据,分布的尾巴一代代消失:在三国演义真实字频上重采样,只出现 1 次的字每一代有约 36.8% 的概率丢掉,丢了就回不来。
- 解决了最好的数据放到学习率衰减段(C5 的 WSD)加量;再发展成独立阶段,顺便拉长上下文。卡在同名不同方:Qwen3 的高质量阶段占 13.9%,Llama 3 的退火只占 2.6e-6;收益与学习率调度缠在一起,很难单独归因。
常见误解一:「重复数据一定有害。」4 个 epoch 以内,重复和新数据几乎一样好(Muennighoff 2023);有害的是无节制地重复:我们的项目在约 5 遍之后 val loss 开始回升,训到 24.5 遍时升到 6.906。第 2 课删的是「网页上无意的上万次重复」,不是「有意多喂几遍好数据」。
常见误解二:「合成数据会导致模型崩溃,所以不能用。」崩溃来自「用生成数据替代真实数据、一代代递归」。混入真实数据、改写真实文本、由更强的模型生成给更弱的模型用,都不在那个设定里;Phi-4 与 Nemotron-CC 都靠合成数据取得了收益。
常见误解三:「合成数据能带来新知识。」改写只换说法,事实还是原文里的;凭空生成的数据最多包含生成模型已有的知识,还会带上它的错误。合成数据扩充的是表达与练习,不是知识的边界。
🔍 人类写的文本到底还够用多久?
Epoch AI 在 2024 年的报告《Will we run out of data?》估算了人类公开文本的存量,以及按当时的训练规模增长趋势,什么时候会被用完;它也讨论了重复、合成与多模态数据能把这堵墙推后多少。报告的具体年份区间依赖于它的假设,这里不转述数字,读原文时注意它给的是区间而不是一个点。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 高质量数据不够训练预算时,用重复、改写与合成把训练 token 补上 |
| ② 数学上为什么可能有效 / 失效? | 重复的收益递减没有证明,是拟合;纯自我采样丢失尾部可以严格说明(计数为 0 是吸收态) 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条仅就「分布拟合 + 有限样本重采样」这个最简模型而言。 出处待补 |
| ③ 实验上为什么选了它? | 重复:Muennighoff 的数百个模型;改写:WRAP 快约 3 倍;合成:Phi-4、Nemotron-CC 的消融 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条各自在自己的模型、数据与基准上成立;「合成能重复 13.8 遍」只是 Phi-4 的选择。 出处Muennighoff 2023(需联网) ↗需联网 |
一句话
数据墙前面有两条路:把真数据多喂几遍(约 4 遍以内几乎不亏),或让模型改写真数据来扩充;纯靠模型生成再喂自己,分布的尾巴会一代代消失。
先停在这里:记住三个数——4 遍、上限约 16 份新数据、只出现一次的字每代丢约 37%。
再深一层:在崩溃模拟里把每代样本量改成「1 万字」,看尾巴消失得有多快;想一想:为什么小样本的递归训练更危险?
下一个缺口
数据够了,最好的那部分什么时候喂? → 第 6 课:最好的数据什么时候喂?
先记下本课右图里那个没解释完的现象:同样的数据,400 步的基线在 6.5 遍时比 1,500 步的 run 在 4.9 遍时还好。区别在学习率——第 6 课兑现。
你可能会问
- 「合成数据和蒸馏是一回事吗?」 用大模型的输出训练小模型,本质上就是一种蒸馏(C12)。本课讲的是预训练阶段用来扩充数据量的合成;C12 讲的是后训练阶段用来传递能力的蒸馏。
- 「怎么知道自己训的数据里混进了多少 AI 生成的文本?」 很难。2023 年之后的网页快照里,AI 生成的文本越来越多;GLM-5 选择在数学与科学数据里主动排除它们,就是在防这一点。
- 「我们的项目该训几遍?」 章首页项目推进的决策 5:按 val loss 的最低点定步数——但要先按第 6 课的方法把学习率调度的影响分开。