第 6 章 第一部分:预训练数据

数据配比——预训练的隐藏变量

数据域配比、科学方法、多语言配比与课程学习

数据配比 Curriculum Learning 多语言 RegMix BiMix 熵驱动

同样的数据,不同的配比,模型性能可以相差 10% 以上。 数据配比是预训练中最影响模型”性格”的决策,但也是最缺少理论指导的决策。


6.1 为什么配比重要

假设你有以下数据源:10 万亿 token 的网页文本、5000 亿 token 的书籍、2000 亿 token 的学术论文、1 万亿 token 的代码、500 亿 token 的数学内容。你打算训练一个 70B 的模型,训练预算是 15 万亿 token。

问题来了:每种数据各用多少?

这个问题看起来像是一个简单的比例分配,实际上是预训练中最复杂的决策之一。因为:

第一,配比直接决定模型的”知识结构”。 代码数据占 20% 和占 5%,训练出来的模型在编程任务上的表现可以差一倍。更微妙的是,不同配比会产生”跨域溢出效应”——代码数据不仅影响编程能力,还会影响逻辑推理能力。这意味着配比的影响不是线性叠加的。

第二,配比效果很难预测。 不像模型架构或优化器那样有清晰的理论指导,数据配比的效果高度依赖于具体的数据质量和训练目标。同一个配比在不同质量的数据上效果可能完全不同。

第三,配比空间是高维的。 如果你有 8 个数据域,每个域的比例可以从 0% 到 100% 变化,即使只考虑 5% 的粒度,组合数也是天文数字。穷举搜索完全不可行。

第四,最优配比可能随训练阶段变化。 训练初期和训练后期,模型需要的数据分布可能不同。固定配比训练到底是否次优?这是一个尚未完全回答的问题。

让我用一个来自工业实践的故事来说明配比的影响。

一个配比决策的真实影响

某团队在训练一个 13B 的通用模型时,在两个配比方案之间纠结:

方案 A:网页 70%、代码 10%、数学 3%、书籍 10%、学术 5%、其他 2% 方案 B:网页 55%、代码 20%、数学 8%、书籍 10%、学术 5%、其他 2%

方案 B 将网页比例降低了 15 个百分点,把这些份额分给了代码和数学。最终的结果是:

Benchmark方案 A方案 B差异
MMLU(通用知识)63.262.8-0.4
HumanEval(代码)34.147.6+13.5
GSM8K(数学)52.361.7+9.4
ARC-Challenge(推理)51.454.8+3.4
HellaSwag(常识)78.677.9-0.7

方案 B 在代码和数学上的提升是巨大的,通用知识和常识推理上的损失微乎其微,而且——令人惊讶的是——在 ARC-Challenge 这样的纯推理 benchmark 上也有显著提升。

这正是代码数据的”推理溢出效应”在发挥作用。


6.2 代码数据的推理溢出效应

这可能是近年来数据配比领域最重要的发现之一:代码数据对模型推理能力的提升远超预期,而且这个提升是跨领域的。

实证证据

ICLR 2024 的论文《At Which Training Stage Does Code Data Help LLMs Reasoning?》(Ma et al., 2024)系统性地研究了代码数据在不同训练阶段对推理能力的影响。他们的核心发现是:

  1. 预训练阶段混入代码数据可以显著提升通用推理能力,而且几乎没有对其他任务造成负迁移
  2. 代码数据在预训练阶段的收益最大,在 SFT 阶段的收益较小——这意味着代码的推理增强效果更多来自”学会了结构化思维”,而非”学会了编程语法”
  3. 代码数据的比例有一个”甜蜜点”——太少没有效果,太多会挤压自然语言知识

另一篇 2024 年的研究《To Code, or Not To Code? Exploring Impact of Code in Pre-training》(arXiv: 2408.10914)更进一步,在控制了大量变量后确认了代码数据对以下能力的正向影响:

  • 自然语言推理(NLI)
  • 常识推理(Commonsense reasoning)
  • 世界知识(World knowledge,小幅提升)
  • 数学能力(显著提升)

为什么代码能提升推理?

直觉上的解释有几个:

结构化思维:代码天然具有严格的逻辑结构——条件分支、循环、函数调用、变量追踪。模型在大量代码上训练后,会学到这些结构化推理的模式,并将其迁移到自然语言推理中。

精确性要求:代码是”不容错”的——一个语法错误就无法运行。这种精确性训练了模型对细节的敏感度,对于数学推理这种需要精确步骤的任务特别有帮助。

多步推理:一段复杂代码需要追踪多个变量和状态的变化,这本质上是多步推理。模型在代码上学到的”追踪状态变化”能力,可以迁移到多步数学推理中。

对配比的启示

这个发现对数据配比策略有直接的指导意义:

  1. 代码数据的比例应该高于你直觉中的”够了”。即使你的目标是训练一个通用对话模型而非编程助手,15-25% 的代码数据也是值得的。
  2. 代码数据的质量同样重要。GitHub 上的代码质量参差不齐——有经过良好注释的开源项目代码,也有学生的练习作业和自动生成的配置文件。质量分层(按 star 数、lint 通过率、docstring 覆盖率等指标)是必要的。
  3. 代码相关的自然语言数据也很有价值。文档、README、Issue 讨论、PR review——这些代码周边的自然语言能帮助模型建立”代码-自然语言”的双向桥梁。

6.3 主要数据域的配比考量

数据域的分类

预训练数据通常可以分为以下几个主要域:

数据域典型来源特点
网页文本Common Crawl, 自建爬虫量最大、质量参差、覆盖面广
书籍Gutenberg, Books3结构完整、语言规范、叙述连贯
学术论文arXiv, S2ORC, PubMed知识密度高、专业术语多、格式特殊
代码GitHub, The Stack逻辑严密、多语言、质量分层大
数学教材、题库、合成数据需要特殊处理(LaTeX)、量相对少
百科/参考Wikipedia, StackExchange质量高、知识密度大、量有限
对话/社交Reddit, 论坛口语化、多样性高、噪声也高
多语言各语言的网页和书籍不同语言的 token 效率差异大

各大模型的公开配比

尽管大多数模型不公开精确的数据配比,但从技术报告中可以拼凑出一个大致的图景:

Llama 3(Meta, 2024)

  • 总量:15.6T tokens
  • 英文为主(据估计 >85%),显著增加了代码比例
  • 关键决策:大幅增加了代码数据(据推测约 17%),并首次系统性地引入数学数据
  • 值得注意:相比 Llama 2,代码比例大幅增加是最显著的变化之一

DeepSeek V3(DeepSeek, 2024)

  • 总量:14.8T tokens
  • 已知特点:代码和数学数据占比极高
  • DeepSeek 系列一直以强调代码和数学能力著称,从 DeepSeek Coder 到 V3,代码数据的处理持续精细化
  • 多语言配比中中英平衡

Qwen 2.5(阿里, 2024)

  • 总量:18T tokens
  • 中英文平衡(中文占比显著高于 Llama)
  • 强化代码和数学
  • 覆盖了 29+ 种语言

Gemma 2(Google, 2024)

  • 总量:13T tokens(27B 模型)
  • 英文为主,但引入了多模态数据
  • 代码占比较高

从这些数据中可以看出几个趋势:

  1. 代码比例在普遍上升——从早期的 5-8% 到现在的 15-25%
  2. 总训练 token 数在快速增长——从 Chinchilla 时代的 1-2T 到现在的 15T+
  3. 多语言的重视度在提升——但策略差异很大(Llama 以英文为主,Qwen 中英平衡)
  4. 高质量数据(代码、数学、学术)的比例在挤占网页文本的份额

配比中的隐性决策

除了各域的宏观比例,还有一些”隐性”的配比决策同样重要:

域内的子域配比:比如代码域中,Python、Java、C++、JavaScript 各占多少?不同编程语言的数据对模型不同能力的贡献不同——Python 对数据科学和脚本能力重要,JavaScript 对 Web 开发重要,C/C++ 对底层系统理解有帮助。

质量层次的配比:同一个域内,高质量数据和低质量数据怎么混合?一种常见做法是:高质量数据多次重复使用(oversampling),低质量数据只用一遍或不用。

数据重复(Repetition):有些高质量数据(如 Wikipedia)量很少,需要在训练中重复多次。但重复过多会导致记忆化。一般认为 3-5 次重复是安全的,超过 10 次可能开始出现问题。


6.3.5 数据混合方法的二维分类框架

在进入具体方法之前,先建立一个统一的方法学骨架,有助于理解后续每种方法的位置和适用边界。按 Chen et al. (2026) “Data Mixing for LLM Pretraining: A Survey and Outlook”(Data Intelligence 期刊正式发表)的分类法,现有方法可组织为二维框架:

维度 1 \ 维度 2规则式学习式
静态混合(mixture 训练前固定)经验配比(LLaMA 1/3)Data Mixing Laws、DoReMi、RegMix、BiMix、OptiMer、CAMEL
动态混合(mixture 训练中调整)课程学习 / 数据调度自适应权重(如重复感知混合缩放定律、RepeAware Mixture Scaling Law)
  • 静态 vs 动态:mixture 在训练开始前就锁定(静态),还是训练过程中按某种信号调整(动态)
  • 规则式 vs 学习式:配比由人工启发式确定(规则式),还是通过训练小代理模型 / 拟合 scaling law(学习式)来搜索

动态混合的子分类:

  • Adaptive(自适应):模型反馈驱动(如根据验证 loss 调整)
  • Externally guided(外部引导):外部信号(参考模型、验证集)驱动

关键挑战(来自综述):跨域、跨目标、跨模型、跨验证集的迁移性问题;评估协议不统一;学习式方法的”性能提升 vs 成本控制”张力。

探索方向(来自综述):更细粒度的域划分、逆向数据混合、pipeline-aware 设计。

本章后续 §6.4–§6.6 将按这一框架组织:先静态规则式(人工配比),再静态学习式(DoReMi、RegMix、BiMix、OptiMer、CAMEL),最后动态混合(课程学习、自适应权重)。


6.4 数据配比的科学方法

如何系统性地寻找最优配比?这是一个活跃的研究方向,目前有几种代表性的方法。

6.4.1 Data Mixing Laws

复旦 MOSS 团队 2024 年提出的 Data Mixing Laws(数据混合定律,Ye et al., 2024)是这个方向的重要工作。核心思想是:

数据配比对模型性能的影响是可以用函数关系建模和预测的。

具体来说,他们发现:

  1. 对于每个评估任务,模型性能与各域数据比例之间存在一个嵌套的 scaling law关系
  2. 可以先用小模型 + 少量训练 token来拟合这个关系,然后外推预测大模型在完整训练下的性能
  3. 基于预测的性能,可以用优化算法搜索最优配比

这个方法的实用价值在于:你不需要真的训练很多大模型来比较不同配比的效果,只需要训练一批小模型(如 400M-1B 参数),就可以预测大模型的最优配比。

具体流程:

1. 选择 N 个不同的配比(可以用拉丁超立方采样等方法高效覆盖配比空间)
2. 对每个配比,训练一个小模型(如 400M 参数,训练 50B token)
3. 评估每个小模型在目标 benchmark 上的表现
4. 拟合 Data Mixing Law 函数
5. 用拟合好的函数预测大模型的最优配比
6. (可选)用中等规模模型验证预测

局限性:小模型到大模型的外推不总是准确的。某些域的配比效应可能有规模依赖——比如数学数据在大模型上的收益可能比小模型上更大。需要设计验证实验来校准外推的可靠性。

6.4.2 DoReMi

DoReMi(Domain Reweighting with Minimax Optimization, Xie et al., 2023, Google/Stanford)是另一个有影响力的方法。它的核心思路是:

用一个小的参考模型来指导大模型的数据域权重。

具体算法:

  1. 先用默认配比训练一个小的参考模型
  2. 然后训练一个同样大小的代理模型,使用 Group DRO(分组分布式鲁棒优化)来动态调整各域的采样权重——目标是最小化最差域上的超额损失
  3. 训练过程中产生的域权重就是优化后的配比
  4. 用这个配比训练大模型

DoReMi 在 The Pile 数据集上的实验显示,用 280M 模型得到的域权重可以有效指导 8B 模型的训练,在所有域上的困惑度都有改善,下游 few-shot 任务平均提升 6.5%。

DoReMi 的关键洞察:默认配比(通常是按各域的原始大小比例)往往不是最优的。某些量大但质量一般的域(如网页文本)的权重应该降低,而某些量小但信息密度高的域(如数学、代码)的权重应该提高。

局限性:DoReMi 的优化目标是”最小化最差域的损失”,这是一个鲁棒性目标。但如果你的实际目标不是”所有域都好”,而是”某些域特别好”(比如你主要关心代码和数学能力),DoReMi 的结果可能不是最优的。

6.4.2.5 Apple Scaling Laws for Optimal Data Mixtures

Apple 与索邦大学在 NeurIPS 2025 提出的 Scaling Laws for Optimal Data Mixtures 是 Data Mixing Laws 的重要扩展。相比 MOSS 团队的嵌套 scaling law 方法,Apple 方法的关键创新在于:参数可从少量小规模训练中估计,且可以跨模型规模和跨外推到未见过的域权重。实验表明,其预测能力可推广到大规模预训练。

实践价值:不需要为每个候选配比跑完整的小模型训练,只需要几个基准点就能拟合参数,预测任意配比组合的效果。这比传统的全量小模型训练实验效率更高。

6.4.2.5b RegMix:用 1M 小代理预测 7B 最优配比

RegMix(Qian Liu, Xiaosen Zheng, Niklas Muennighoff, Guangtao Zeng, Longxu Dou, Tianyu Pang, Jing Jiang, Min Lin, ICLR 2025, arXiv:2407.01492, Sea AI Lab + SMU + Contextual AI + SUTD)是把”小模型搜索最优配比”思想推到工业级极致的代表。

核心方法:

  • 训练 512 个 1M 参数的小代理模型,每个训 1B token
  • 512 × 1B = 5.12 × 10¹¹ token 总训练量,FLOPs 约为 1B 模型的 2%
  • 在 64 个候选配比(1B / 25B token 两个规模)上做小模型搜索
  • 用简单的回归模型把 1M 模型上的配比排名,映射到 1B / 25B 模型上的配比表现

关键假设:rank invariance。RegMix 整套方法依赖一个比 scaling law 拟合弱得多的假设——“不同配比之间的相对排名,在模型规模和训练 token 数变化时保持稳定”。换句话说:

  • 配比 A 在 1M 模型上比配比 B 好
  • 在 1B 模型上 A 仍然比 B 好
  • 在 7B / 100B 上 A 仍然比 B 好

这比传统的 “loss 数值外推”(需要假设 loss 的具体函数形式)弱得多,因此 RegMix 只需要 512 个 1M 小模型就能在 7B / 100B 上找到 13 个下游任务平均高 2 个点的最优配比。

对工程团队的启示:

  • RegMix 是当前”配比搜索”中性价比最高的方案之一——几百个 1M 模型用 1-2 张 H100 跑一天即可
  • rank invariance 假设的稳健性是关键,方法在跨规模时表现稳定
  • 不依赖复杂回归,仅用配对排名即可

6.4.2.5c BiMix:双变量 scaling law + 熵驱动免训练

BiMix 是 RegMix 同期的双变量 scaling law 工作,方法学上有两个关键贡献:

贡献 1:双变量 scaling law

  • 同时建模”配比”和”训练 token 数”对 loss 的联合影响
  • 弥补了 Data Mixing Laws 只能做单点(固定 token 数)外推的不足
  • 在 1B / 4B / 7B / 13B 多个规模上验证

贡献 2:熵驱动的免训练数据混合(意外发现)

  • BiMix 实验过程中发现:仅基于数据本身的熵特征(无需训练代理模型)就能取得与资源密集型方法相当甚至更优的性能
  • 具体做法:计算每个数据源的 token 熵 / n-gram 熵 / 文档长度熵等指标,用简单的加权公式作为混合权重
  • 这意味着工业实践中可以用一个轻量级、可解释的 heuristic 替代昂贵的 proxy 训练

对工程团队的启示:

  • 在预算有限或需要快速 baseline 时,“熵驱动的启发式混合”是值得首先尝试的低成本路径
  • BiMix 本身的双变量 scaling law 适合做”我要训多少 token、用什么配比”的联合优化
  • 熵驱动 + RegMix 可以组合:先用熵快速筛出 top-10 候选配比,再用 RegMix 精确排序

6.4.2.6 OptiMer:分布向量合并方法

OptiMer 提出了一种革命性的持续预训练配比优化范式。核心思想:不为每种数据类型单独训练模型,而是先为每种数据类型单独训练一个模型并提取”分布向量”(distribution vector),然后通过贝叶斯优化将这些向量合并,寻找最优组合权重。相比传统方法:

  1. 不需要固定配比下从头训练
  2. 搜索时间从数周缩短到数小时
  3. 效率提升 15-35 倍

在多语言和多领域任务上的实验均显示显著改进。

6.4.2.7 重复感知混合缩放定律

Apple 在 2026 年发表的”重复感知混合缩放定律”(Repetition-Aware Mixture Scaling Law, arXiv: 2605.12715)系统研究了混合预训练中数据重复的影响,这是现有 Data Mixing Laws 的重要补充。

核心问题:当目标领域数据稀缺时,我们需要重复使用这些数据。但重复多少次是最优的?传统 Data Mixing Laws 假设每条数据只出现一次,没有建模重复的边际效益递减。

实验规模:2000+ 次 LLM 训练运行,覆盖多种模型规模、目标数据集大小、数据类型(多语言/领域专用/质量筛选)。

关键发现:

  1. 混合训练对重复的容忍度远高于单一数据源训练。在单源训练中,数据重复超过 4 次后性能开始退化;但在混合训练中,稀缺目标语料可被重复使用 15-20 次而不退化。原因是通用数据起到了正则化作用,抵消了重复带来的记忆化风险。

  2. 样本重复次数是影响目标领域性能的核心因素,比单纯的数据量更重要。

  3. 最优重复次数取决于三个变量的交互:目标数据规模、计算预算和模型参数量。可以用缩放定律形式化建模。

对配比实践的直接影响:

传统认知:高质量数据重复不超过 5 次
                ↓
重复感知定律:混合训练中,稀缺领域可重复 15-20 次

实操建议:
  - 对于数据充足的域(如英文网页):1x 采样
  - 对于数据稀缺但重要的域(如数学、小语种):可上采样到 15-20x
  - 关键前提:必须有足够的通用数据做"正则化锚点"
  - 判断标准:监控目标域 loss 是否出现回升(记忆化信号)

6.4.2.8 CAMEL:容量感知混合定律

CAMEL(Capacity-Aware Mixture scaling Law, arXiv: 2603.08022, Mar 2026)是首个建模模型规模与数据混合非线性交互的缩放定律。

核心创新:将混合优化重构为”容量约束分配”问题。传统方法假设域权重的最优值与模型规模无关,但 CAMEL 发现:每个内在域的有效参数分配随混合比例和模型容量变化——模型越大,分配给通用域的”容量”占比越少,分配给专业域的”容量”占比越多。

方法架构:

CAMEL 管线:

1. 小模型拟合
   └─ 在 7B-A150M MoE 上拟合容量约束参数
   └─ 建模每个域的有效参数分配 = f(混合比例, 模型容量)

2. 损失预测
   └─ 从容量约束推导各域验证损失

3. 基准预测(loss-to-benchmark prediction law)
   └─ 建立验证损失 → 基准准确率的映射
   └─ 实现端到端性能预测

4. 大模型外推
   └─ 外推到 55B-A1.2B 验证

效果:优化成本降低 50%,下游基准性能提升最高 3%。

实操价值:CAMEL 的”小时glass采样策略”(小模型拟合→大模型外推)解决了现有混合定律在大模型外推时失效的问题。loss-to-benchmark 映射更是实用创新——大多数团队关心的是 benchmark 分数而非验证损失,CAMEL 直接建立了这个桥梁。

6.4.3 Proxy 实验设计

在没有现成工具的情况下,一个更朴素但有效的方法是系统化的 proxy 实验:

基本思路:用小模型(如 1B-3B)+ 短训练(如 100B-300B token)来快速测试不同配比的效果,然后将最优配比应用到大模型训练上。

设计要点:

  1. 基准配比(Baseline):先确定一个”合理的默认值”作为基准。一个常见的起点是:

    • 网页文本 60%
    • 代码 15-20%
    • 书籍 8-10%
    • 学术论文 5%
    • 数学 3-5%
    • 其他 5%
  2. 消融变量:一次只改变一个域的比例,观察其对不同 benchmark 的影响。比如:

    • 代码比例从 10% → 15% → 20% → 25% → 30%
    • 在每个比例下评估代码 benchmark(HumanEval)、数学 benchmark(GSM8K)、推理 benchmark(ARC)、通用 benchmark(MMLU)
  3. 交叉效应检测:注意不同域之间的交互效应。增加代码可能同时提升数学和推理,但增加对话数据可能降低写作的正式性。

  4. 统计显著性:小模型实验的方差较大。建议每个配比至少用 2-3 个不同的随机种子训练,取平均值。

  5. 评估指标的选择:不要只看一个 benchmark。设计一个涵盖你关心的所有能力的评估集,并给不同能力赋予权重。

实操建议:

# 一个简化的配比实验设计框架

# 定义数据域
domains = ['web', 'code', 'math', 'books', 'academic', 'wiki', 'conversation']

# 基准配比
baseline = {
    'web': 0.58, 'code': 0.17, 'math': 0.05,
    'books': 0.08, 'academic': 0.05, 'wiki': 0.04, 'conversation': 0.03
}

# 消融实验:逐个域调整
ablations = []
for domain in ['code', 'math', 'books']:
    for delta in [-0.05, 0.0, 0.05, 0.10]:
        config = baseline.copy()
        config[domain] += delta
        config['web'] -= delta  # 用网页文本来平衡
        ablations.append(config)

# 每个配比训练一个 1B 模型,100B token
# 评估并分析结果

6.4.4 在线配比调整

一个更高级的策略是在训练过程中动态调整配比,而非使用固定配比训练到底。

基本思路:每隔 N 步评估模型在不同 benchmark 上的表现,根据评估结果调整下一阶段的数据配比。如果某个能力落后了,就加大对应域的数据比例。

实现方案:

  1. 评估驱动的调整:

    • 每训练 10B token,在一组快速评估集上评估模型
    • 如果某个能力(如数学)低于目标,增加数学数据的采样权重
    • 平滑调整(每次变化不超过 ±5%),避免剧烈波动
  2. Loss 驱动的调整:

    • 监控每个域的训练 loss
    • 如果某个域的 loss 下降明显放缓(表明该域接近学习饱和),降低其权重
    • 将权重转移给 loss 仍在快速下降的域
  3. 课程式调整(见 6.5 节):

    • 训练早期:以高质量、低噪声的数据为主(书籍、维基百科、学术论文)
    • 训练中期:逐步加入更多的网页文本和代码
    • 训练后期:增加代码、数学等”推理密集”数据的比例

在线调整的挑战在于评估的延迟——配比变化对模型能力的影响不是即时的,需要训练一段时间后才能在 benchmark 上反映出来。如果调整频率太高,可能在效果还没显现时就又改了配比。


6.5 多语言配比的特殊考量

对于需要支持多种语言的模型,数据配比中多了一个关键维度:语言配比。

中英文配比的微妙平衡

以一个面向中文用户但也需要英文能力的模型为例,中英文配比的选择涉及多个权衡:

英文数据量远大于中文。互联网上高质量英文内容的量级大约是中文的 5-10 倍。如果简单按”可用数据量”分配,英文占比会远超中文。

但中文能力需要足够的中文数据来保证。经验上,如果中文数据占比低于 15-20%,模型的中文表现会明显不足——中文的成语使用、文言文理解、文化常识等都需要大量中文语料来学习。

英文数据对中文能力有间接帮助。很多知识是”语言无关”的——物理定律、数学概念、编程逻辑。模型从英文数据中学到的这些知识,可以一定程度上迁移到中文。所以即使中文是目标语言,大量英文数据也是有价值的。

实际案例对比:

模型中文占比(估计)英文占比(估计)其他语言中文能力英文能力
Llama 3~5%~85%~10%弱强
Qwen 2.5~40%~40%~20%强强
DeepSeek V3~25%~55%~20%强强

Qwen 系列的策略是中英文大致均衡,这保证了强劲的中文能力。Llama 系列则以英文为核心,中文能力相对较弱。DeepSeek 走了一个中间路线。

Token 效率差异的影响

一个常被忽视但很重要的因素是:不同语言的 token 效率差异很大。

以 BPE tokenizer 为例,同样一段内容:

  • 英文:“The cat sat on the mat” → 约 6 个 token
  • 中文:“猫坐在垫子上” → 可能 5-7 个 token(取决于 tokenizer)

但中文的信息密度通常高于英文——同样语义的内容,中文的字数更少。这意味着:

  1. 同样 token 数的中文数据,可能包含更多的信息
  2. 如果按 token 数计算配比,中文的”实际内容量”可能被低估
  3. 多语言 tokenizer 的设计会影响配比的实际效果——一个对中文友好的 tokenizer(中文 token 效率高)意味着同样的中文内容消耗更少的 token

低资源语言的”搭便车”效应

一个有趣的发现是:即使某种语言在训练数据中只占很小的比例,如果该语言与训练中占比较大的语言有较高的相似性,模型仍然可以表现不错。这被称为”搭便车效应”(free-riding effect)或”跨语言迁移”(cross-lingual transfer)。

例如:

  • 日文模型可以从大量中文数据中”搭便车”——两者共享汉字
  • 西班牙语模型可以从法语和意大利语数据中受益——拉丁语系的相似性
  • 粤语理解可以从普通话数据中受益——但程度有限

这意味着多语言配比不需要对每种语言都保证大量数据,但需要理解语言之间的迁移关系。FineWeb-2 的多语言管线方案为这个问题提供了一个系统化的参考框架。

多语言配比的决策框架

Step 1: 明确目标语言的优先级(一级语言、二级语言、支持语言)
Step 2: 估算各语言的可用高质量数据量
Step 3: 考虑语言间的迁移关系
Step 4: 设定各语言的最低配比保障线(一级语言 >20%,二级语言 >5%)
Step 5: 用 proxy 实验验证配比效果
Step 6: 在训练过程中监控各语言的 benchmark 表现,必要时微调

6.6 课程学习(Curriculum Learning)

数据配比解决的是”各域的比例”问题,课程学习解决的是”以什么顺序呈现数据”的问题。

基本问题

传统的预训练做法是把所有数据混在一起,随机打乱后顺序训练。但一个自然的问题是:如果精心安排数据的呈现顺序,能否提高训练效率或最终性能?

人类的学习是有课程的——先学加法再学乘法,先学语法再学写作。大模型的训练能否借鉴这种思路?

三种主要策略

策略一:从易到难(Easy-to-Hard)

先让模型学习简单、清晰、低噪声的数据(如维基百科、精选书籍),再逐步引入复杂、嘈杂的数据(如网页文本、论坛帖子)。

直觉:先建立基本的语言理解能力,再在这个基础上学习更复杂的内容。

策略二:从质到量(Quality-to-Quantity)

训练前期用高质量但量少的数据(高过滤阈值),训练后期用低质量但量大的数据(低过滤阈值)。

直觉:高质量数据帮助模型建立好的”学习习惯”,后期用更多数据来扩展知识覆盖。

策略三:完全随机(Random Shuffle)

传统做法,也是最简单的。没有特别的顺序安排。

当前的研究结论

关于课程学习在大模型预训练中是否有效,研究结论并不一致。

正面证据:

  • Kim et al.(2024,arXiv: 2405.07490)的研究表明,在某些设置下,从易到难的课程策略可以加速训练收敛。
  • 2026 年初的一项研究(arXiv: 2601.21698)系统性地训练了 200+ 个模型来分析课程学习的效果,发现在特定条件下,按质量排序的课程可以带来稳定的收益。

负面/复杂证据:

  • 一些研究发现,课程学习的收益在模型规模增大后会缩小——大模型似乎更能”自我纠正”学习顺序带来的影响。
  • 另一个有趣的发现(arXiv: 2601.21698)是,课程学习改变的可能不是模型最终学到什么,而是学到的顺序——最终收敛点可能是相似的。
  • 学习率衰减与课程冲突的问题(OpenReview, 2026):如果你用”先低质后高质”的课程安排,但学习率是单调衰减的,那高质量数据出现在低学习率阶段,模型反而学不充分。这是一个被低估的实操问题。

实操建议

基于目前的研究状态,我的建议是:

  1. 对于大规模预训练(>10T token),课程学习的收益可能不大。随机打乱是一个安全且高效的默认选择。投入在课程设计上的精力,不如投入在数据质量提升上。

  2. 对于中等规模训练(1T-10T token),可以尝试简单的课程策略。比如训练的最后 10% 阶段加入更多高质量数据(“退火”策略),这是 Llama 3 等模型在训练后期采用的做法。

  3. 对于中训练和 SFT 阶段,课程学习更有价值。因为数据量较小,顺序的影响更大。比如在 SFT 阶段,先用简单指令训练再用复杂指令训练,通常优于反过来。

  4. 如果要做课程,注意与学习率调度的协调。确保高质量数据不要全部集中在学习率已经很低的阶段。


6.7 配比实践中的常见陷阱

陷阱一:按数据量的原始比例分配

最简单也最常见的做法是”有多少用多少”——数据源有多大,就按这个比例分配。但这几乎肯定不是最优的。网页文本在 Common Crawl 中的量级远大于所有其他域的总和,如果按原始比例分配,网页文本会占 90% 以上,高质量域(代码、数学、学术)被严重稀释。

正确做法:将高质量域的配比提升到明显高于其原始比例,代价是降低网页文本的比例。这通常需要对高质量数据做 2-5 倍的重复采样。

陷阱二:过度重复高质量数据

为了提升高质量域的配比,常见的做法是让高质量数据在训练中被重复看多次。但重复过度会导致:

  • 记忆化:模型开始”背诵”这些内容而非理解
  • 多样性下降:模型的输出会偏向这些被重复的数据的风格

经验法则:单条数据的重复次数不宜超过 5 次。如果某个域的数据确实不够,考虑用合成数据来扩充,而非过度重复。

更定量的边界:InfoLaw(arXiv: 2605.02364, 2026)。经验法则”不超过 5 次”是粗粒度的,InfoLaw 的质量-重复联合 Scaling Law 提供了更精确的决策边界。核心发现:是否应该强化上采样高质量数据,取决于是否处于”过度训练”(overtraining)区间。如果模型尚未充分训练,增加上采样权重始终有益;但一旦进入过度训练区间,继续增加上采样会加剧重复,反而降低性能。判断是否进入过度训练区间,需要监控训练 loss 的下降趋势——当目标域的 loss 下降明显放缓时,可能已接近或进入过度训练区间,此时应停止增加高质量数据的上采样权重,转而寻找新的高质量数据源。

陷阱三:只看整体 benchmark,忽视分项分析

一个看似不错的配比可能掩盖了严重的能力偏科。比如代码比例过高可能导致 MMLU 整体分数不变(代码推理的提升弥补了通用知识的下降),但模型在历史、地理等知识性问题上退化了。

正确做法:建立一个多维评估体系,分别监控每个能力维度的表现。确保没有任何能力出现明显退化。

陷阱四:忽视域内的质量分层

把”代码”作为一个整体来设置配比是过于粗糙的。GitHub 上的代码质量差异巨大:

  • 高 star 数的项目代码 vs 学生作业
  • 有完善文档和测试的代码 vs 没有注释的代码
  • 主流编程语言 vs 小众语言
  • 正常的源码 vs 自动生成的配置文件

正确做法:在域内也做质量分层,对不同质量层赋予不同的采样权重。高质量代码可以 3x 采样,低质量代码可以 0.5x 或直接过滤掉。

陷阱五:训练中途改配比时不考虑连续性

如果在训练进行到一半时决定改变配比(比如增加数学数据),需要注意平滑过渡。突然大幅改变数据分布可能导致训练 loss 突然上升,甚至训练不稳定。

正确做法:配比变化应该在 1000-5000 步内线性过渡到新配比,而非一步跳变。


6.7.6 配比搜索方法决策树

结合本章 §6.4 的方法学框架和 §6.7 的陷阱分析,给出一个配比搜索方法决策树:

第 0 步(推荐作为 baseline):熵驱动的免训练混合
  - 计算每个数据源的 token 熵 / n-gram 熵 / 文档长度熵
  - 用简单加权公式作为混合权重
  - 成本:几小时 CPU 即可完成
  - 适用:预算紧、需要快速 baseline、不确定要不要上 proxy 训练
  - 出处:BiMix 论文的意外发现

第 1 步:小模型回归校准
  - RegMix(512 个 1M 模型 + 配对排名)or Apple Scaling Laws
  - 成本:1-2 张 H100 × 1 天
  - 适用:需要精确的 top-3 配比

第 2 步:双变量 scaling law 联合优化
  - BiMix(配比 + token 数)
  - 成本:需要 1B / 4B / 7B 三个规模
  - 适用:训练预算确定后想知道最优 token 分配

第 3 步:分布向量后验优化
  - OptiMer(贝叶斯优化 + 分布向量合并)
  - 成本:搜索时间从数周缩短到数小时
  - 适用:持续预训练场景(已有基座 + 多个新数据源)

第 4 步:能力定向注入
  - CAMEL(容量感知)/ DoReMi(鲁棒性目标)
  - 适用:需要模型规模 × 混合比例的非线性交互建模

第 5 步:训练中动态调整
  - 课程学习(按难度调度)
  - 重复感知混合缩放定律(按目标域 loss 回升信号调整)
  - 适用:训练周期长、有能力迁移需求

决策核心:

  • 多数团队应从第 0 步开始——熵驱动 baseline 已经能跑赢人工经验配比
  • 预算允许时第 1 步是性价比最高的科学化升级
  • 只有在第 1、2 步都不奏效时,再考虑第 3、4、5 步

6.8 一个配比决策的完整案例

让我用一个端到端的案例来展示配比决策的完整过程。

背景

你的团队要训练一个 30B 的通用中文模型,目标是在代码、数学、中文理解、英文理解四个能力上都达到较好水平。训练预算是 8T token。

Step 1:盘点可用数据

数据域可用量(token)平均质量评估
中文网页3T中
英文网页8T中
中文书籍200B高
英文书籍500B高
代码2T中-高
数学100B高(含合成)
学术论文300B高
维基百科(中+英)50B高
中文对话/论坛500B低-中

Step 2:设定初始配比

基于团队经验和参考其他模型的做法,设定初始配比:

数据域配比实际 token 数重复倍数
中文网页25%2T<1x
英文网页25%2T<1x
中文书籍6%480B2.4x
英文书籍6%480B~1x
代码20%1.6T<1x
数学5%400B4x
学术论文5%400B1.3x
维基百科3%240B4.8x
中文对话5%400B<1x

Step 3:Proxy 实验

用 1B 模型 + 100B token 训练 9 个配比变体(基准 + 8 个消融),评估结果:

关键发现:
1. 代码从 15% → 20% → 25%:HumanEval +5.2/+3.1,GSM8K +2.3/+1.8,ARC +1.4/+0.9
   → 代码 20% 是性价比最高的点,25% 边际收益递减
2. 数学从 3% → 5% → 8%:GSM8K +4.2/+2.8
   → 5% 足够,8% 的额外收益不够显著
3. 中文网页从 20% → 25% → 30%:C-Eval +1.8/+1.2,MMLU_CN +1.5/+0.8
   → 25% 是合理的平衡点
4. 维基百科重复 3x vs 5x vs 8x:MMLU +0.5/+0.2/-0.3
   → 5x 以上开始出现记忆化迹象

Step 4:确定最终配比

根据 proxy 实验结果微调,最终配比:

数据域最终配比
中文网页25%
英文网页23%
代码20%
中文书籍7%
英文书籍6%
数学5%
学术论文5%
维基百科4%
中文对话5%

Step 5:训练中监控与调整

在训练过程中,设置检查点:

  • 每训练 500B token,在完整评估集上评估一次
  • 如果某个能力出现明显退化(>2%),分析原因并考虑微调配比
  • 训练最后 10%(800B token)阶段,增加高质量数据比例(“退火”)

回顾

这个案例展示了一个务实的配比决策流程。它不追求”理论最优”,而是通过系统化的实验和监控,找到一个”足够好且稳健”的配比。在实际工作中,完美的配比是不存在的——关键是建立一个快速验证和迭代的机制,而不是追求一次做对。


动手环节:设计并模拟一个数据配比实验

目标:为一个假想的 7B 中文通用模型设计数据配比方案,并用模拟实验验证你的直觉。

练习 1:配比方案设计器

"""
数据配比方案设计工具
帮助你系统化地思考配比决策
"""

from dataclasses import dataclass
from typing import Dict

@dataclass
class DataDomain:
    name: str
    available_tokens: float  # 可用 token 数(单位:B)
    quality: str             # "high", "medium", "low"
    max_repeat: int = 5      # 最大重复次数

class MixingDesigner:
    def __init__(self, target_tokens_B: float):
        self.target = target_tokens_B
        self.domains: Dict[str, DataDomain] = {}

    def add_domain(self, domain: DataDomain):
        self.domains[domain.name] = domain

    def design_mix(self, ratios: Dict[str, float]) -> dict:
        """根据配比计算实际使用量和重复倍数"""
        # 验证比例和为 1
        total_ratio = sum(ratios.values())
        if abs(total_ratio - 1.0) > 0.01:
            print(f"⚠️ 比例之和 = {total_ratio:.2f},应为 1.0")
            ratios = {k: v/total_ratio for k, v in ratios.items()}

        result = {}
        warnings = []
        for name, ratio in ratios.items():
            domain = self.domains.get(name)
            if not domain:
                warnings.append(f"未知域: {name}")
                continue

            needed_B = self.target * ratio
            repeat = needed_B / domain.available_tokens
            if repeat > domain.max_repeat:
                warnings.append(
                    f"⚠️ {name}: 需要重复 {repeat:.1f}x,"
                    f"超过上限 {domain.max_repeat}x(记忆化风险)"
                )

            result[name] = {
                "ratio": f"{ratio*100:.1f}%",
                "tokens_B": f"{needed_B:.0f}B",
                "repeat": f"{repeat:.1f}x" if repeat > 1 else "< 1x",
                "quality": domain.quality,
            }

        return {"mix": result, "warnings": warnings}

# === 设计你的配比 ===
designer = MixingDesigner(target_tokens_B=8000)  # 8T token

# 添加可用数据域
designer.add_domain(DataDomain("中文网页", 3000, "medium"))
designer.add_domain(DataDomain("英文网页", 8000, "medium"))
designer.add_domain(DataDomain("代码", 2000, "medium-high"))
designer.add_domain(DataDomain("中文书籍", 200, "high", max_repeat=5))
designer.add_domain(DataDomain("英文书籍", 500, "high", max_repeat=5))
designer.add_domain(DataDomain("数学", 100, "high", max_repeat=5))
designer.add_domain(DataDomain("学术论文", 300, "high"))
designer.add_domain(DataDomain("维基百科", 50, "high", max_repeat=5))
designer.add_domain(DataDomain("对话/论坛", 500, "low-medium"))

# 方案 A: 中文优先
mix_a = designer.design_mix({
    "中文网页": 0.25, "英文网页": 0.23, "代码": 0.20,
    "中文书籍": 0.07, "英文书籍": 0.06, "数学": 0.05,
    "学术论文": 0.05, "维基百科": 0.04, "对话/论坛": 0.05,
})

# 方案 B: 代码/数学强化
mix_b = designer.design_mix({
    "中文网页": 0.20, "英文网页": 0.18, "代码": 0.28,
    "中文书籍": 0.05, "英文书籍": 0.05, "数学": 0.10,
    "学术论文": 0.05, "维基百科": 0.04, "对话/论坛": 0.05,
})

for label, mix in [("方案A(中文优先)", mix_a), ("方案B(代码强化)", mix_b)]:
    print(f"\n=== {label} ===")
    print(f"{'数据域':<10} {'配比':>6} {'用量':>8} {'重复':>6} {'质量':<8}")
    print("-" * 45)
    for name, info in mix["mix"].items():
        print(f"{name:<10} {info['ratio']:>6} {info['tokens_B']:>8} "
              f"{info['repeat']:>6} {info['quality']:<8}")
    if mix["warnings"]:
        print("\n警告:")
        for w in mix["warnings"]:
            print(f"  {w}")

练习 2:模拟配比对模型能力的影响

"""
用简化模型模拟不同配比对能力的影响
这是一个教学性质的模拟,帮助建立直觉
"""

import random

# 能力-数据域影响矩阵(简化版)
# 每个值表示该域对该能力的贡献权重
INFLUENCE_MATRIX = {
    # 域          通用知识  代码  数学  中文  推理
    "中文网页":   [0.8,   0.0,  0.0,  1.0,  0.1],
    "英文网页":   [0.9,   0.1,  0.1,  0.2,  0.2],
    "代码":       [0.1,   1.0,  0.3,  0.0,  0.5],
    "中文书籍":   [0.6,   0.0,  0.0,  0.8,  0.3],
    "英文书籍":   [0.7,   0.0,  0.0,  0.1,  0.3],
    "数学":       [0.1,   0.2,  1.0,  0.0,  0.8],
    "学术论文":   [0.5,   0.1,  0.3,  0.2,  0.4],
    "维基百科":   [1.0,   0.0,  0.1,  0.3,  0.2],
    "对话/论坛":  [0.3,   0.0,  0.0,  0.6,  0.0],
}

ABILITIES = ["通用知识", "代码", "数学", "中文理解", "推理"]

def simulate_performance(ratios: dict) -> dict:
    """模拟给定配比下模型在各项能力上的表现"""
    scores = [0.0] * 5
    for domain, ratio in ratios.items():
        if domain in INFLUENCE_MATRIX:
            influences = INFLUENCE_MATRIX[domain]
            quality_factor = {"high": 1.2, "medium-high": 1.1,
                            "medium": 1.0, "low-medium": 0.8, "low": 0.6}
            for i in range(5):
                # 分数 = 配比 × 影响力(带递减效应)
                contribution = ratio * influences[i] * (1 - 0.3 * ratio)
                scores[i] += contribution
    # 归一化到 0-100 分
    max_possible = max(scores) if scores else 1
    scores = [min(s / max_possible * 80 + random.gauss(0, 2), 100) for s in scores]
    return dict(zip(ABILITIES, [round(s, 1) for s in scores]))

# 对比多个配比方案
schemes = {
    "方案A(中文优先)": {
        "中文网页": 0.25, "英文网页": 0.23, "代码": 0.20,
        "中文书籍": 0.07, "英文书籍": 0.06, "数学": 0.05,
        "学术论文": 0.05, "维基百科": 0.04, "对话/论坛": 0.05,
    },
    "方案B(代码强化)": {
        "中文网页": 0.20, "英文网页": 0.18, "代码": 0.28,
        "中文书籍": 0.05, "英文书籍": 0.05, "数学": 0.10,
        "学术论文": 0.05, "维基百科": 0.04, "对话/论坛": 0.05,
    },
    "方案C(按原始比例)": {
        "中文网页": 0.22, "英文网页": 0.59, "代码": 0.15,
        "中文书籍": 0.01, "英文书籍": 0.04, "数学": 0.01,
        "学术论文": 0.02, "维基百科": 0.004, "对话/论坛": 0.04,
    },
}

print(f"{'方案':<18}", end="")
for ability in ABILITIES:
    print(f"{ability:>8}", end="")
print()
print("-" * 60)

for name, ratios in schemes.items():
    perf = simulate_performance(ratios)
    print(f"{name:<18}", end="")
    for ability in ABILITIES:
        print(f"{perf[ability]:>8.1f}", end="")
    print()

# 思考题:
# 1. 为什么方案 C(按原始比例)在中文理解上表现最差?
# 2. 方案 B 在推理上为什么比方案 A 强?代码数据的溢出效应在起作用吗?
# 3. 尝试设计你自己的方案 D,目标是中文理解和推理并重。

练习 3:设计一个配比消融实验方案

假设你有 1B 模型的训练资源(100B token),请设计一个包含 6 组实验的消融实验方案,验证代码数据比例对推理能力的影响。需要明确:实验变量、控制变量、评估指标、预期结果。


本章要点回顾

  1. 数据配比是预训练中对模型”性格”影响最大的决策之一——同样的数据不同配比,benchmark 差异可超 10%
  2. 代码数据的”推理溢出效应”是重要发现:代码不仅提升编程能力,还跨域提升推理能力。15-25% 的代码配比对大多数通用模型是合理的
  3. Data Mixing Laws 和 DoReMi 提供了科学化的配比优化方法,但 proxy 实验仍是最实用的工具
  4. 多语言配比需要考虑:目标语言优先级、token 效率差异、跨语言迁移效应
  5. 课程学习在大规模预训练中的收益尚不确定,但在训练后期的”退火”策略是被广泛采用的
  6. 常见陷阱:按原始比例分配、过度重复、只看整体 benchmark、忽视域内质量分层、突变配比
  7. 最优配比不存在——建立快速验证和迭代机制比追求一次做对更重要
  8. 重复感知混合缩放定律——混合训练中稀缺数据可重复 15-20 次(vs 单源 4 次),通用数据的正则化作用是关键
  9. CAMEL 容量感知混合定律——模型规模与混合比例存在非线性交互,loss-to-benchmark 映射实现端到端性能预测