网页、代码、数学、书,按什么比例混?
本课一问:洗干净的数据来自很多地方:网页、代码、论文、书、百科、数学题。训练时每一步从哪一类里取多少?
这一课先不碰:好数据不够、只能重复或合成时怎么办(第 5 课);不同阶段用不同配比(第 6 课)。
从已有出发
模型这条流水线上,本章始终停在最左边的「文字」一格;把这一格展开,就是下面这条数据管线:
前三课是在每一类数据内部删东西。现在换一个问题:各类之间怎么分配训练的 token。
本课换例子,原因写在这里:贯穿任务里我们只有一种数据——文言小说,没有「配比」可调;配比问题只在多种来源之间才存在。所以本课的实验改用 The Pile 的 22 个真实来源,项目自己的配比决策(要不要加现代白话、英文,加多少)放在本课最后一节。
先自己设计:按体量自然混
最「公平」的做法:每类数据有多少就按多少的比例取,也就是把所有数据倒进一个池子里均匀打乱。
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
The Pile 由 22 个来源组成,原始体量合计 825.18 GiB。其中 Pile-CC(网页)227.12 GiB,英文维基百科只有 6.38 GiB。
按体量混:维基百科占 0.77%,网页占 27.5%。每个来源都恰好走一遍——不管它每个 token 值多少。
GPT-3 的训练配比(论文表 2.2),训练 300B token:
| 来源 | 体量(B token) | 按体量应占 | 实际权重 | 走几遍 |
|---|
论文原话的意思是:我们认为质量更高的数据集被更频繁地采样,所以权重有意不按体量。 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条权重是作者的判断,论文没有给不同配比的消融;代价是维基、WebText2 要重复 2.9–3.4 遍,换来少量过拟合。 出处GPT-3 §2.2、表 2.2 ↗
表里「按体量应占」一列是用前一列的 token 数现算的:499B 里维基占 0.6%,实际给了 3%;WebText2 占 3.8%,实际给了 22%。
改进一:手工权重,和它的问题
The Pile 的做法和 GPT-3 一样,只是写成了「每个来源走几遍」:维基 3 遍,Gutenberg 书 2.5 遍,PubMed、arXiv、GitHub 讨论区等 2 遍,网页和 GitHub 代码 1 遍——22 个来源的 epoch 数是手工定的,合起来的有效体量是 1,254.20 GiB 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条作者按对质量的判断手工定 epoch,没有对这些数字做优化。 出处The Pile 表 1(需联网) ↗需联网 。
问题是:手工权重离最优有多远?DoReMi(Xie 2023)给出了一个数字。它先用 280M 参数的小代理模型,用 Group DRO 的思路反复调整各域权重——哪个域上的 loss 比参考模型高得多,就给哪个域更多权重——再用搜出来的权重训 8B 模型。结果:下游 one-shot 平均高 6.5 个点,达到基线精度所需的步数少 2.6 倍(75k 步对 200k 步) 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条摘要写 few-shot,正文与图 3 是 one-shot;「代理模型上搜出的权重能迁移到 8B」本身是经验假设,论文在 280M→8B 这一组上验证了它。 出处DoReMi 摘要、§3、表 1(需联网) ↗需联网 。
它搜出来的权重很反直觉:Pile-CC 从基线的 0.1121 升到 0.6057,arXiv 从 0.1052 降到 0.0036,PubMed Central 从 0.1071 降到 0.0046——而 YouTube 字幕从 0.0042 升到 0.0502,PhilPapers 从 0.0027 升到 0.0274。「人觉得质量高」和「对模型最有用」不是一回事。
改进二:温度采样——在体量与均匀之间调一个旋钮
多语言训练遇到的是同一个问题的另一面:英文数据多出其他语言几个数量级。mT5 与 XLM-R 用的是一个单参数的折中:
数据:The Pile 表 1(原始体量单位 GiB,合计 825.18 GiB;有效体量 1,254.20 GiB)与 DoReMi 表 1(one-shot 下游平均 +6.5 个点,达到基线精度的步数少 2.6 倍,280M 代理模型求权重、8B 主模型)。DoReMi 权重是 token 占比、这里近似按字节折算,它那一栏的 epoch 只看量级。
试三件事:① 在「Pile 手工」下读「走几遍」一列——预算默认是 Pile 的有效体量 1,254 GiB,这一列应该和原表逐项相同(维基 3.0、Gutenberg 2.5……),这是计算器的自检;② 切到「DoReMi」,数一数有几个域超过 4 遍,重复最多的是谁;③ 切到「温度采样 α」,从 1 拖到 0,看灰竖线(按体量的份额)和蓝条怎么分开。
DoReMi 的权重有一个代价在计算器里一眼可见:同样 1,254 GiB 的预算下,YouTube 字幕要走十几遍,PhilPapers、维基也一样(这一栏把 token 占比近似当字节占比,只看量级)。重复太多遍就不值了——第 5 课专门算这笔账。
2026 年的做法
- Llama 3 的最终配比:约 50% 通识、25% 数学与推理、17% 代码、8% 多语言。405B 训了 15.6T token,其中代码约 0.17 × 15.6 = 2.65T(实算) 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条报告说配比是在小模型上做配比实验、再用 scaling law 外推定下来的;具体实验数据没有全部公开。 出处Llama 3 §3.1.2(需联网) ↗需联网 。
- Qwen3:给 30T 以上 token 做多维度标注(教育价值、领域、主题、安全等),在单个样本的粒度上优化配比,并在小代理模型上做大量消融(Qwen3 报告 §3.1)。
- SmolLM3:网页 / 代码 / 数学的配比分三个阶段变化,越往后代码与数学越多——配比不是一次定死的,第 6 课展开。
- 仍在用的另一条路:把配比当回归问题,用许多小模型的结果拟合「配比 → loss」,再求最优(RegMix,arXiv 2407.01492)。
放回演进图里
前三代都在决定「一条数据要不要」;从这一代开始,决定的是「每类数据要多少」。
- 解决了量几乎无限: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;收益与学习率调度缠在一起,很难单独归因。
我们的项目:古今、中英比例怎么定
旧版课程的项目第一步就是「选语料,定中英比例(建议中文为主、少量英文和代码)」,理由是:分词器只认得它见过、统计过的东西,语料配比直接决定压缩率。第 2 课的实验把这句话变成了数字:训练分词器的语料里混进 107 份英文声明后,1,791 次合并里有 1,034 次变成了英文 token,中文验证集的 token 数从 58,386 涨到 71,330。
所以项目里的配比决策有两层:
- 分词器的训练语料按什么比例混——它决定每种语言、每种文体的压缩率,一旦定下就和模型终身绑定(C1);
- 模型的训练数据按什么比例混——它决定模型在各类任务上的能力。
我们的语料目前是 100% 文言小说。如果加入现代白话或英文,比较时要用 val_bpb(每字节比特数)而不是 val loss——换了分词器,每个 token 的含义就变了(MILESTONES 的全局约定第 2 条)。这组实验还没有跑,列在章首页的项目推进里。
常见误解一:「按体量混最公平、最自然。」按体量混意味着每个 token 同等重要。可维基的一个 token 和推广页的一个 token 对模型的价值不同;从 GPT-3 起,所有公开的配方都在有意上采样小而精的数据。
常见误解二:「配比靠拍脑袋。」The Pile 时代确实是手工定的;现在用小代理模型搜(DoReMi、RegMix、Qwen3 的消融)。但「代理模型上的最优能迁移到大模型」本身是一个经验假设,只在论文验证过的那几组规模上成立。
常见误解三:「配比一次定终身。」SmolLM3、Qwen3、Llama 3 都在训练后期改配比,第 6 课讲为什么。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 决定训练的每个 token 来自哪一类数据,让价值高的数据多出现、价值低的少出现 |
| ② 数学上为什么可能有效? | DoReMi 的出发点是 Group DRO:优化「最差的那个域」的超额 loss,让模型不偏废任何一类 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条这是一个优化目标的选择,有动机但不保证对下游最优;温度采样的 α 同样只是一个折中旋钮。 出处待补 |
| ③ 实验上为什么选了它? | DoReMi 在 280M → 8B 上 +6.5 个点、快 2.6 倍;Llama 3、Qwen3 都用小模型实验定配比 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条只在 The Pile 与 GLaM 数据集上验证;换数据集要重新搜。 出处DoReMi(需联网) ↗需联网 |
一句话
配比不是按体量摊,而是按「每个 token 值多少」分:小而精的数据被有意多喂几遍,权重可以用小代理模型搜出来——但上采样得越多,就重复得越多。
先停在这里:记住「按体量混没人用」「手工权重离最优很远」「权重决定了每个域要重复几遍」。
再深一层:读 DoReMi 表 1,想一想为什么 Pile-CC 的权重会从 11% 升到 61%——提示:Group DRO 看的是「超额 loss」,不是「质量」。
下一个缺口
高质量数据被上采样到第几遍就不值了?用完了怎么办? → 第 5 课:高质量数据用完了怎么办?
你可能会问
- 「DoReMi 的基线权重为什么和 The Pile 表 1 的百分比对不上?」 DoReMi 的基线是用它自己的分词器数出每个域的 token 块数、再乘上 Pile 的 epoch 得到的,口径和 Pile 表 1(按字节)不同(DoReMi 附录 C)。本课的计算器两套数字都照原文用,并注明了口径。
- 「代码数据对不写代码的模型也有用吗?」 很多技术报告认为代码有助于推理,但这属于经验观察,各家的消融结论并不完全一致;本课不下结论。
- 「我们的项目要不要加英文?」 要看目标:如果只想续写三国演义,加英文只会稀释;如果想让模型有一点通用能力,就要配合分词器一起重新决策——章首页的项目推进里把它列成了待做实验。