Lecture 12 · 数据扩展的极限:数据会用完吗?算力无限时怎么办?token 级过滤 · Limits of Data Scaling

Training Data for AI · Lecture 12。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS525 Winter 2026 Training Data for AI,3/9 客座讲座 Pre-training under infinite compute(Suhas Kotha,95 页 slides,含未发表的后续工作 Scaling synthetic data efficiency via megadocs);学生报告:Will We Run Out of Data?(Emily Steiner)、Shaping Capabilities with Token-Level Data Filtering(Andrew Lanpouthakoun)。阅读:Villalobos et al.(2022 / 2024)、Kim, Kotha et al.(2025)、Rathi & Radford(2026)、Isik et al. Scaling Laws for Downstream Task Performance in Machine Translation(ICLR 2025)。 依据说明:三份 slides 的文字都可读。Kotha 的 slides 是 §2 的骨架;论文摘要里的数字(5.17 倍、83%、17.5 倍、9%)我核对过。课程网站的阅读清单里,“Scaling Laws for Downstream Task Performance in Machine Translation”这个标题链接到的 arXiv 编号 2601.21571 其实是 Rathi & Radford 的 token 级过滤论文;两篇我都按各自的论文来写——机器翻译的那篇是 Isik et al.(arXiv:2402.04177),放在 §4。第 5 节”统一的视角”和第 6 节”延伸与前沿”是我补充的。 配套代码 Code:code/lecture12/(numpy;3 个脚本 + 1 个模块;最长的约 70 秒) 预计阅读时间:2.5 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

  1. 理解 Epoch AI 怎样估计”人类公开文本的存量”和”训练集的需求”,以及”大约 2028 年用完”这个结论有多稳健。
  2. 理解”数据受限、算力充足”时的训练配方:为什么现有配方会过拟合;强正则化、参数扩展、集成、蒸馏各起什么作用;为什么要用渐近线比较配方。
  3. 理解 token 级的数据过滤:为什么在预训练里就”塑造”能力,文档过滤和 token 过滤的取舍,token 移除和损失屏蔽的区别。
  4. 理解上游损失和下游指标之间的关系为什么不总是平滑的:预训练数据和下游任务的”对齐”。
  5. 能读懂代码里三个小实验的设计,知道它们的结论能推广到哪里。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲不展开 Not covered
第 6 讲:Chinchilla 扩展律、过度训练集成和蒸馏的理论(只讲直觉)
第 7 讲:数据受限扩展律(RD∗≈15.4R^*_D \approx 15.4)稀疏自编码器(SAE)的原理
第 10、11 讲:重复的代价、合成数据机器遗忘(unlearning)的方法细节

0.3 本讲地图 Map

§1  数据会用完吗?存量、需求和 2028 年                          ← 代码 01
§2  算力无限时怎样预训练:正则化、集成、蒸馏、渐近线              ← 代码 02
§3  token 级的数据过滤:在预训练里塑造能力                       ← 代码 03
§4  上游损失 ≠ 下游指标:预训练数据和任务的对齐
§5  一个统一的视角:数据受限时,算力往哪里花
§6  延伸与前沿
§7–11  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 关于数字

论文的数字来自论文摘要、正文和 slides。代码的数字来自三个小实验:

  • 代码 01 是 Epoch AI 方法的一个简化重做:所有参数取自论文,用蒙特卡洛模拟传递不确定性。
  • 代码 02 用隐马尔可夫模型(HMM)当”语言模型”:一个 32 状态的真实 HMM 生成数据,训练集只有 4000 个 token;模型大小 = 隐状态数 KK,“训练遍数” = EM 的迭代次数,“权重衰减” = Dirichlet 先验的伪计数 λ\lambda。它能生成序列、能算验证损失、会过拟合、EM 的局部最优让集成有意义。
  • 代码 03 是第 10 讲那样的三元计数模型,在一个”通用 / 生物 / 医学”三种成分的语料上比较不同的过滤方法。

代码固定了随机种子,同一台机器上重复运行输出逐字相同。


1. 数据会用完吗?

1.1 两条撞在一起的曲线

学生报告的第一页把问题画成两条曲线:

  • 训练集的大小:从 80 多个语言模型拟合出来,每年增长约 0.38 个数量级(约 2.4 倍,95% 区间 0.27–0.48);
  • 数据的存量:受限于互联网用户和网页的增长,增长慢得多。

Villalobos et al.(Epoch AI,Will we run out of data? Limits of LLM scaling based on human-generated data,2022 年首发、2024 年修订)的结论:如果趋势继续,语言模型的训练集会在 2026–2032 年之间达到人类公开文本的总量,中位数 2028 年;如果过度训练,还会提前一两年。

1.2 存量怎样估计

数据集的大小用 token 数衡量(依赖分词器;论文在附录里比较了几种分词方式,结果相近)。

索引网页(≈ 谷歌的索引,比 Common Crawl 大):

  1. 网页数:用”枢轴词”方法(van den Bosch et al. 2016:已知某些词在一般文本里的频率,用搜索引擎报告的命中数反推索引大小)估计谷歌索引约 2500 亿个网页(95% 区间 1000 亿–12000 亿);
  2. 每页的纯文本:约 7000 字节(2013 年约 6100,2021 年约 8200);
  3. 每个 token 约 4 字节。

合起来:索引网页约 510T token(95% 区间 130T–2100T)。作为交叉检验,从”互联网人口 × 每人每年写多少字”积分得到整个网络(包括深网)约 3100T,这是索引网页的上限;Common Crawl 约 130T。

有效存量还要考虑两件事:

  • 质量:去重之后的网页里,有 10%–40% 可以用来训练而不明显损害性能(依据 RefinedWeb 等工作的过滤比例);
  • 重复:Muennighoff et al. 发现多轮训练能把有效数据扩大 3–15 倍;论文保守地取 5 倍。

论文给出的有效存量约 400T(4×10144 \times 10^{14})token。

存量的增长:全球 IP 流量每年增长 24%(上限,大部分是视频);互联网用户每年增长 2%–4%;链接失效每年 2%–16%。互相抵消之后,论文估计索引网页每年增长 0%–10%。

1.3 需求怎样预测

两种方法:

  1. 训练集大小的历史趋势:对约 80 个模型的 log(训练集大小) 对时间做线性回归,每年 0.38 个数量级;
  2. 基于算力的预测:先预测最大训练的算力(受芯片能效、数据中心电力、芯片产能的约束),再按 Chinchilla 的”每参数 20 个 token”换算成数据量。

把两者合起来:如果模型不过度训练,用完存量时的训练算力约 5×10285 \times 10^{28} FLOP;如果从 2025 年起过度训练 5 倍,约 6×10276 \times 10^{27} FLOP——提前一两年。

1.4 在代码里重做(代码 01)

我们只用”历史趋势”这一种需求预测,每个参数按论文的 95% 区间抽样:

量中位数95% 区间
网页数(十亿)250100–1196
原始存量(T)506175–2543
可用比例0.200.10–0.40
有效存量 = 原始 × 可用 × 5 遍(T)518140–2895
用完的年份20282027–2031

敏感性分析:

假设中位数95% 区间
基准(重复 5 遍)20282027–2031
从 2025 年起过度训练 5 倍20272026–2030
完全不重复20262025–2029
重复 15 遍20302028–2033
去重后的网页全部可用20302028–2034
加上非公开数据(约 3000T)20312029–2034
需求增长慢一半20332029–2040

最重要的观察:存量的不确定性很大(有效存量的 95% 区间相差约 20 倍),但用完的年份只差几年。原因是需求在指数增长:存量差 10 倍,用完的时间只差 log⁡1010/0.38≈2.6\log_{10} 10 / 0.38 \approx 2.6 年。所以”数据墙在 2020 年代末”这个结论对存量的估计相当稳健;它真正依赖的是需求还会不会以每年 2.4 倍的速度增长(最后一行:增长慢一半就能多撑 5 年)。

过度训练 5 倍为什么提前约一年?同样的算力 C≈6NDC \approx 6ND,如果每参数的 token 数 D/ND/N 是 Chinchilla 的 kk 倍,那么 DD 是 Chinchilla 的 k\sqrt{k} 倍。5≈2.24\sqrt{5} \approx 2.24,按每年 2.4 倍的增长,相当于提前 log⁡2.24/log⁡2.4≈0.9\log 2.24 / \log 2.4 \approx 0.9 年。

1.5 用完之后

学生报告总结了论文列出的出路:

方向评价
合成数据(第 11 讲)有希望,有崩塌的风险;在可验证的领域里效果好;正在被大量探索
多模态和迁移学习图像和视频不够;可以考虑其他数据(金融、基因组、科学数据库)
非公开数据深网(社交媒体、通信软件)质量低、隐私问题严重;约 3000T,只能推迟约 1.5 年
提高数据效率算法的数据效率每年约提高 0.4 个数量级,可能有帮助——§2
从交互中学习要超越人类的知识就必须这样做(第 9 讲的强化学习环境)

2. 算力无限时怎样预训练

2.1 动机

Kotha 的 slides 从一个观察开始:更好的预训练模型是极其有用的”智能的初始化”——GPT-3 是上下文学习的前提,Anthropic 的基础模型是对齐的前提,DeepSeek V3 是”强化学习之后会推理”的前提。

现在的扩展配方都是为算力受限设计的:

  • 训练算力:Chinchilla 的配方,给定算力,参数和 token 按 1 : 20 分配,不重复数据;
  • 推理算力:为了推理便宜,用小模型、过度训练到 1 : 2000(Llama、Qwen 等)。

但数据只以每年约 3% 的速度增长(Villalobos),算力每年增长约 5 倍。于是问题变成:数据受限、算力不受限时,怎样做预训练?

这其实不新:经典的统计学习理论分析的就是不考虑算力的算法;MNIST、Penn Treebank 这样的基准都只有很少的样本。只是在大语言模型时代,“愿意花更多算力训练更好的模型”成了现实。

2.2 实验设置

  • 数据:DCLM 的 2 亿 token(模拟一个数据受限的未来;第 5 节会改变这个数);
  • 训练配方:Marin 的优化过的配方(Transformer、AdamW 等);
  • 模型:默认 3 亿参数——比 Chinchilla 最优大 30 倍(因为算力”无限”);
  • 指标:验证损失(和预训练质量强相关);
  • 不允许任何人类监督:不用提示、奖励函数、外部数据、外部模型。

2.3 现在的配方会过拟合

  • 多遍训练(Muennighoff et al.):重复太多遍会过拟合。
  • 多遍 + 增大参数(Kaplan、Hoffmann):即使调好了遍数,增大参数量也没什么帮助。

代码 02 演示 1:不加正则化(λ=0\lambda = 0)的 HMM,测试损失(nats/token;真实模型的损失是 2.632):

模型大小 KK25 次迭代50 次100 次200 次
82.9562.9042.8732.871
322.8542.9012.9402.964
642.8523.1433.2993.543

K=64K = 64 在 25 次迭代时最好,之后越训越差;训练 200 次时 K=64K = 64 比 K=8K = 8 还差得多。这正是 Kotha 说的”现在的配方在数据受限时撞上过拟合”。

2.4 正则化之后的参数扩展:干净的幂律

论文对每个参数量联合调学习率、遍数和权重衰减(一个很贵的局部搜索),发现:

  • 最优的权重衰减可以比常用值 0.1 大 30 倍以上——因为模型比数据大,而且数据被重复很多遍;
  • 正则化之后,损失遵循干净的幂律:

L(N)=0.05N1.02+3.43.L(N) = \frac{0.05}{N^{1.02}} + 3.43.

  • 参数指数 1.02,比 Chinchilla 的 0.34 大得多;指数 1 正是数据受限的扩展理论(Bahri et al. 2021)预测的值。

方法论贡献:用渐近线估计”算力无限时最好能做到多少”。参数趋于无穷时损失趋于 3.43。比较两个配方时,不比某个固定算力下的损失,而比它们的渐近线——这能预测哪个算法在数据受限的未来更好。slides 的敏感性分析显示,在这里估计渐近线是合理的,因为已经很接近渐近线了。

代码 02 演示 2:每个 KK 在 λ∈{0.03,0.1,0.3,0.6}\lambda \in \{0.03, 0.1, 0.3, 0.6\} × 迭代次数的网格上调参(用验证集选、用测试集报告):

KK248163264
最好的 λ\lambda0.10.10.60.30.30.1
测试损失2.9872.9392.8592.8082.7862.784

拟合 L(K)≈2.728+0.370/K0.50L(K) \approx 2.728 + 0.370 / K^{0.50}。加了正则化之后损失随模型大小单调下降;渐近线 2.728 和真实下界 2.632 之间的差距,是”只有 4000 个 token”本身的代价。

2.5 集成:更低的渐近线

参数扩展只是一种”把算力用到极限”的方式。另一种是集成:不训练更大的模型,而是训练多个模型(不同的数据顺序和初始化),推理时平均它们的 logits。

论文的发现:

  • 增加成员数比增加参数量更好;集成也遵循幂律,指数相近、渐近线更低;
  • 为什么? Allen-Zhu & Li(2023)的”多视角”假说:数据里有多种特征都能做出正确的预测,最好的表现来自用上所有特征;参数扩展倾向于只学到其中一种”视角”,不同的初始化学到不同的视角;
  • 证据:调集成成员的超参数时,每个成员训练更多遍、正则化更弱(每个模型以不同的方式过拟合)得到更好的渐近线;
  • 替代方案不行:混合专家(MoE)端到端训练,不会学到所有特征(把十个模型按集成的架构并行训练,几乎不比一个学生好);权重平均只在微调时有效(要求在同一个损失盆地里),平均预训练好的模型得到随机猜的损失。

组合:先让成员数 K→∞K \to \infty(固定 NN),再让 N→∞N \to \infty,得到的双重渐近线是 3.17,比参数扩展的 3.43 低得多。

代码 02 演示 3(K=32K = 32):

成员的超参数1 个2 个4 个8 个成员数 → ∞(拟合)
按单模型调的(λ=0.3\lambda = 0.3,200 次)2.7892.7772.7802.7812.777
按集成调的(λ=0.1\lambda = 0.1,200 次)2.8072.7792.7632.7562.749
  • 按单模型调的成员几乎一样(正则化太强,EM 收敛到相似的解),集成几乎没有收益;按集成调的成员单个更差,集成之后好得多——和论文”成员要训练更久、正则化更弱”的发现一致。
  • 8 个成员的集成(2.756)比调好的单个 K=64K = 64(2.784)好:加成员比加参数更划算。
  • 没有复现的部分:集成的渐近线(2.749)没有低于参数扩展的拟合渐近线(2.728)。两个渐近线都是从 4–6 个点外推的,很不稳定;论文在更多的点上得到了”集成的渐近线更低”。

2.6 数据规模:恒定的数据效率倍数

这些方法只在 2 亿 token 时有用吗?论文在不同的种子 token 数上分别估计”标准配方""正则化配方""集成”的渐近线,发现:

  • 在 2 亿 token 时,基线需要约 5 倍的数据才能赶上集成(摘要:把所有方法组合起来是 5.17 倍);
  • 各种方法的渐近线随数据量变化的指数惊人地相似——说明这是一个跨数据规模的恒定倍数的数据效率提升。

代码 02 演示 5:调好的单模型在 1×、2×、4× 真实数据上的测试损失是 2.786、2.690、2.672;集成(1× 数据)是 2.756,相当于单模型用约 1.2 倍的数据。远小于论文的 5 倍:在我们的世界里,新的真实数据非常值钱(2 倍数据就降了 0.1),而集成的收益相对小。

2.7 蒸馏:把收益带回小模型

集成在推理时要跑多个模型。论文用最简单的序列级知识蒸馏(Kim & Rush 2016):

  1. 在 DD 个 token 上训练老师 M′M';
  2. 从 M′M' 无条件地采样(不给提示),得到 D′D' 个 token;
  3. 在 DD 和 D′D' 的混合上从头训练学生 MM。

结果:

  • 集成蒸馏:把 8 个成员的集成蒸馏成一个模型(小 8 倍),保留了 83% 的集成收益,而且超过了标准的参数扩展;
  • 自蒸馏:学生和老师完全一样大。直觉上学生不可能超过老师,而且已有工作说”在自己生成的数据上训练会模式崩塌”(第 11 讲)——但论文发现自蒸馏能提高性能,学生超过了老师。解释(Allen-Zhu & Li):自蒸馏可以看作把训练好的老师和新初始化的学生隐式地集成在一起。Kotha 的评论:“自蒸馏是一种不需要任何人类先验(提示、奖励函数)的合成数据。”

代码 02 演示 4(学生 K=32K = 32,用按单模型调好的超参数):

模型测试损失拿到集成收益的
基线:调好的单模型(也是自蒸馏的老师)2.7860%
8 个成员的集成2.756100%
集成蒸馏:真实 + 1× 合成2.76958%
集成蒸馏:真实 + 4× 合成2.76280%
自蒸馏:真实 + 4× 老师生成的数据2.793−24%

集成蒸馏和论文一致(80% vs 83%);自蒸馏没有复现:学生没有变好,甚至略差。一个可能的原因:HMM 的学生在真实 + 合成数据上重新跑 EM,收敛到的局部最优主要由数据决定,没有保留老师的”另一个视角”。

2.8 下游的收益

验证损失的改进能转化成下游的改进吗?

  • 在小模型的基准(ARC Easy、PIQA、SciQ)上,更好的验证损失对应更好的平均表现;摘要:这些干预让预训练评测提高了 9%;
  • 继续预训练:以 OctoThinker 的 MegaMath-Web-Pro(很强的数学推理数据)为例,用这些数据效率技巧,40 亿 token 的训练超过了原作者用 730 亿 token 的训练——17.5 倍的数据效率提升。

2.9 结论与下一步:megadocs

Kotha 的结论:这些方法(更大的模型、正则化、集成、蒸馏)都不是新的——在只有很少图片(MNIST、CIFAR)或句子(Penn Treebank、BabyLM)的年代都是经典技巧。重新思考架构、目标函数、数据增强、优化器这些基本的训练决策,可能有大量”免费的午餐”。在算力换数据的时代,渐近线是判断哪个算法最好的关键工具;他们特别想找新的”杠杆”——能持续投入算力、单调改进性能的维度。

一个这样的杠杆是合成数据(Scaling synthetic data efficiency via megadocs,准备中):

  • 设置同上(2 亿种子 token、3 亿参数),用 Llama 3.1 8B Instruct 作为改写模型(不是纯粹的自我提升,因为从头预训练一个改写模型太贵;但已有工作显示自我提升是可能的);
  • 改写(WRAP 式):每篇种子文档生成 RR 个改写;损失随 RR 单调改进,但在 32 个改写左右开始饱和;
  • megadocuments:同一篇文档的多个生成是相关的,随机打乱浪费了这种结构。把它们拼成一个”巨型文档”填满上下文——(a) 排序改写:把同一篇文档的所有改写拼在一起(受 In-context Pre-training 启发);(b) 潜在思维(Latent Thoughts):让模型写出”从前文推出后文的理由”,把原文扩展开。megadocs 随生成数的增加扩展得更好,几乎看不到饱和,长上下文的损失改进更多;
  • 和集成组合:所有合成数据方法都能和集成叠加;自蒸馏不能——这支持了”自蒸馏其实就是集成”的假说,也说明合成数据在做一件”特别的事”。

3. token 级的数据过滤:在预训练里塑造能力

3.1 问题:能力一旦学会就很难去掉

Rathi & Radford(Shaping capabilities with token-level data filtering,2026)想让模型不具备某种能力。事后的方法都有漏洞:

  • RLHF / 安全训练:教会模型拒答,但知识还在;
  • 机器遗忘(例如 RMU):针对表示做优化,但几步对抗性微调之后就失效;
  • 分类器守卫:监控输入输出,但会被越狱。

在预训练数据里就把它去掉:模型从没学过,就没有潜在的知识可以通过越狱或微调”引出来”。核心观点:能力一旦存在于基础模型里,就极难去掉。

3.2 设置:用”医学”做代理任务

真正危险的能力(生物武器、CBRN)需要很大的模型才能评测;医学可以在小规模上用现成的基准测(MedMCQA、MedQA-USMLE、MMLU),而生物学是一个紧挨着的、希望保留的领域——用它检验过滤的”附带伤害”。

  • 预训练数据:FineWeb-Edu(普通的 FineWeb 里生物医学内容太少,小模型学不到医学能力,就没法测过滤的效果);
  • 遗忘集:医学(临床信息、诊断、治疗、药理、人体生理、病毒学、免疫学、神经学);保留集:生物学、非生物医学的 STEM、非 STEM、通用文本;
  • 模型:6100 万到 18 亿参数(增强的 GPT-2 架构:RoPE、ReLU²、pre-RMSNorm;AdamW + µP;Chinchilla 最优的规模)。

3.3 文档过滤 vs token 过滤

  • 文档过滤:扔掉被判为医学的整篇文档。问题:被过滤的文档里约一半的 token 其实是无害的(slides 的例子:一篇讲”用转基因甜薯生产诺如病毒和乙肝的可食用疫苗”的文章,医学词之间夹着大量生物学内容);
  • token 过滤:只去掉医学 token——同样的召回率下精度更高。两种做法:
    • 损失屏蔽(loss masking):医学 token 仍在前向传播里(作为上下文),反向传播时去掉它们的梯度。优点:周围的保留 token 有连贯的上下文;缺点:模型可能为遗忘 token 发展出上下文表示。
    • token 移除(token removal):把医学 token 换成特殊的 <|hidden|> token,同时屏蔽损失。优点:完全移除;缺点:周围 token 的上下文被打断。

论文的结论:token 移除总体上好于损失屏蔽,在鲁棒性和对齐任务上尤其明显。

3.4 怎样给 token 打标签

全语料逐 token 标注太贵。论文的流程:

  1. 找”医学”特征:用 Gemma 2 9B 第 31 层的预训练稀疏自编码器(16k 个特征),每个特征有自动生成的解释;让 Claude 判断每个解释是不是医学的,再用嵌入打分过滤低质量的特征——得到 600 个医学特征;
  2. 种子标签:一个 token 强烈激活 ≥ 2 个医学特征就标为医学(要求多个特征减少噪声);
  3. 扩展成片段:相邻的 token 只要在 ≥ 1 个医学特征上有正激活,就也标为医学——捕捉”insert the catheter”这样的整个短语,而不只是”catheter”;
  4. 蒸馏成便宜的分类器:SAE 只用来造一个小的标注集(12.8 万篇文档、820 万 token),用它训练一个双向语言模型 + 线性探针。为什么要双向?“virus”是不是医学,要看后文(“the computer virus infected the network” vs “the influenza virus infected the patient”)。论文训练两个单向模型(从左到右、从右到左)拼接表示,比 BERT 式的掩码更简单。为什么用线性探针?SAE 的标签有噪声,线性探针不能记住虚假的模式,只能学到真正的方向。

分类器的效果(F1):ModernBERT-large(3.95 亿参数)0.812 → RoBERTa(6500 万,在 FineWeb-Edu 上训练)0.834 → 双向 LM(2 × 6100 万)0.880 → 最终的 2.24 亿参数双向 LM 0.894。小的、针对任务的模型胜过大的通用模型。

3.5 结果

指标:损失匹配的算力放慢倍数——要训练一个未过滤的模型,少用多少算力,它在遗忘领域上的损失才和过滤后的模型一样?

  • 过滤随规模越来越有效:在 18 亿参数的模型上,token 移除在遗忘领域造成了 7000 倍的算力放慢,文档过滤约 30 倍;过滤后的模型在遗忘领域上的扩展指数更小。
  • 下游(18 亿参数):token 过滤的模型在 MedMCQA、MedQA-USMLE 上接近随机猜;MMLU 的生物、STEM、非 STEM 没有明显下降;在医学的开放问答上,回答的连贯和相关程度低 4 倍、正确率低 10 倍;在 Alpaca(非医学)上没有明显损失。
  • 比遗忘方法更鲁棒:要多少对抗性微调才能恢复到基线的表现?以 RMU 为 1 倍:文档过滤 1.5 倍、token 损失屏蔽 3 倍、token 移除 13 倍。原因:RMU 改的是表示,知识还在;过滤从源头去掉了知识,攻击者相当于要从头教会模型。
  • 让对齐更容易(一个意外的发现):训练模型拒答医学问题(HealthSearchQA)、正常回答 Alpaca。token 移除的模型拒答率 HSQ 约 42%、Alpaca 约 2%;基线 22% / 1%;损失屏蔽 18% / 1%;文档过滤 30% / 28%——文档过滤的模型分不清该拒答的和不该拒答的。解释:拒答 = 区分”训练过的”和”没训练过的”内容,token 过滤的模型对这个边界有一个干净的信号。这和以前”毒性过滤会损害对齐”的工作相反;作者认为能力 ≠ 毒性。
  • 标签有噪声时:随机翻转一小部分标签,过滤效果按幂律下降;在低错误率区间,分类器的一点提升带来很大的改进。但差的分类器也能用:降低阈值、过滤得更激进,再扩大模型——大模型样本效率高,能从剩下的文本里学回保留的能力。

3.6 在玩具世界里(代码 03)

语料有三种成分(通用、生物、医学);生物和医学共享 4 个词(像”病毒""细胞”);通用文档里有 5% 的医学片段,生物文档里有 10%,医学文档里有 40%。一个 token 分类器给每个 token 打”医学分数”。“医学知识”指标是:在医学文档里,已知下一个词是医学词,模型给正确的那个医学词的条件交叉熵——越高越”无知”,随机猜是 ln⁡12≈2.48\ln 12 \approx 2.48。

演示 1(预算 80 万 token):

方法去掉的比例医学知识 ↑生物(保留)↓
不过滤0%1.7012.545
文档过滤,阈值 0.237.2% 的文档1.9812.542
文档过滤,阈值 0.162.9% 的文档3.0312.622
token 移除,阈值 2.013.6% 的 token2.4482.499
token 移除,阈值 1.520.1% 的 token2.8932.508
损失屏蔽,阈值 1.520.1% 的 token1.9672.500
  • 要让医学知识退到随机水平,文档过滤得扔掉 63% 的文档,生物学的损失从 2.545 涨到 2.622;token 移除只去掉 20% 的 token 就做到了,生物学反而略好(2.508)——同样的遗忘,token 过滤的附带伤害小得多。(医学成分占比超过 20% 的文档里,57% 的 token 其实不是医学的——和论文的”约一半”一致。)
  • 损失屏蔽忘得差得多(1.967):漏标的医学 token 带着真实的医学上下文被学了进去;token 移除把它们周围的医学 token 也换成了 <hidden>,漏网的 token 学不到有用的上下文。

演示 2:放慢倍数(未过滤的模型要少用多少 token,医学知识才一样):

方法预算 100k400k1600k
文档过滤(阈值 0.2)8×10×8×
损失屏蔽(阈值 1.5)8×9×8×
token 移除(阈值 1.5)> 25×51×168×

token 移除的放慢倍数随预算增长(论文:过滤随规模越来越有效);文档过滤停在个位数,因为通用和生物文档里零散的医学段落从文档分类器下面漏过去了。注意我们的计数模型不会泛化:没见过医学 token 就对医学一无所知;真实的模型能从通用知识里推断一部分医学知识,所以真实的倍数是有限的。

演示 3:分类器变差(医学分数的间隔从 2.5 降到 1.5)时,同样的阈值下医学知识指标从 2.86 降到 1.83(漏得多了,预算 1600k);把阈值降到 0.5、去掉 41% 的 token,指标回到 2.80,代价是生物学损失变高——但这个代价随规模缩小:比未过滤模型高 0.130(200k)、0.033(1600k)。和论文的”降低阈值 + 扩大模型”一致。

3.7 相关:在 token 级别选择质量

token 级的选择不只能用来”去掉能力”。Rho-1(Lin et al. 2024,Not All Tokens Are What You Need)的”选择性语言建模”:用一个参考模型给每个预训练 token 打分(例如训练模型的损失减去参考模型的损失,即”超额损失”),只在分数高的 token 上训练。在 150 亿 token 的 OpenWebMath 上继续预训练,9 个数学任务的少样本准确率最多提高 30%;在 800 亿通用 token 上,15 个任务平均提高 6.8%。第 6 讲的质量过滤是在文档级别做的;token 级的过滤和加权把”数据整理”推到了更细的粒度。


4. 上游损失 ≠ 下游指标

本讲反复用”验证损失”衡量进步,但我们最终关心的是下游任务。Isik et al.(Scaling Laws for Downstream Task Performance in Machine Translation,ICLR 2025)研究了一个具体的迁移学习场景:先在无标注数据上预训练、再在机器翻译上微调,预训练数据的选择和大小怎样影响翻译质量(下游交叉熵、BLEU、COMET)。

  • 微调数据的大小和预训练数据与下游数据的分布对齐程度,都显著影响扩展的行为;
  • 对齐得足够好时:下游交叉熵和翻译质量都随预训练数据的增加单调改进,翻译质量可以用一个对数律很好地预测;
  • 中等程度地不对齐时:BLEU、COMET 可能随预训练数据的增加波动甚至变差,而下游交叉熵仍然单调改进。

几点启示:

  1. “更多数据”的价值取决于数据和任务的对齐——这和第 10 讲”混合比例要看下游任务”是同一件事。
  2. 交叉熵是一个平滑的代理,但不总是可靠的代理。Kotha 的论文检查了验证损失和下游基准的关系(§2.8);做数据选择时,这一步不能省。
  3. 第 7 讲的 FineWeb / DCLM 把”小规模的下游评测”当作数据整理的指标,部分原因正在于此:困惑度好不等于下游好。

5. 一个统一的视角:数据受限时,算力往哪里花(补充)

把第 10–12 讲放在一起:当独特的高质量数据成为瓶颈时,有几类”把算力换成数据效率”的杠杆:

杠杆怎样用算力例子本课
重复 + 正则化多看几遍,用更强的正则化防止过拟合权重衰减大 30 倍第 7 讲、§2.4
更大的模型参数比数据多,靠正则化保持单调参数指数 1.02§2.4
集成训练多个模型,各自以不同方式过拟合渐近线 3.43 → 3.17§2.5
蒸馏把集成的收益压回一个模型保留 83%§2.7
合成数据用生成模型重新表述、重新组织已有的数据WRAP、EntiGraph、SBP、megadocs第 11 讲、§2.9
更好地选择在混合比例、文档、token 上做更细的选择OLMix、DCLM、Rho-1第 6、10 讲、§3.7

还有一个容易忽视的维度:过滤不只是为了”更好”,也是为了”塑造”。§3 的 token 级过滤说明,数据整理可以精确地决定模型会什么、不会什么——这对安全和隐私(第 18 讲)有直接的意义。


6. 延伸与前沿 · Beyond the original lecture

本节是我补充的。

  • 数据墙的实际情况:2024–2025 年的开源模型训练集已经到了 15T–36T token(Llama 3、Qwen3),各家越来越依赖合成数据、多轮训练和更激进的过滤-改写管线(Nemotron-CC)。Epoch AI 的估计是”人类公开文本”,各大公司还有授权数据、用户交互数据这些不在估计里的来源。
  • 数据效率的经典技巧在大模型上的回归:除了本讲的正则化和集成,数据增强、课程学习、更好的优化器(例如对数据效率更友好的二阶方法)都在被重新研究。用”渐近线”而不是”固定算力下的损失”来比较,是这类研究的新方法论。
  • 从交互中学习:强化学习环境(第 9 讲)产生的数据是”无限的”,但需要验证器;把预训练规模的数据和强化学习规模的交互结合起来,是 2025 年以后的大方向。
  • 能力塑造的边界:token 级过滤在医学上效果很好;但对”推理能力”这类分布在所有数据里的能力,过滤就难得多。哪些能力可以在数据层面塑造、哪些不能,仍是开放问题。

7. 小结 · Summary

  1. 数据墙:人类公开文本的有效存量约 400T token;训练集每年增长约 2.4 倍;中位数 2028 年用完(2026–2032)。结论对存量的不确定性很稳健(存量差 10 倍只差 2.6 年),主要取决于需求增长的速度。
  2. 数据受限的训练:现在的配方(多遍、大模型)会过拟合;强正则化(权重衰减大 30 倍)让参数扩展单调、遵循幂律;用渐近线比较配方;集成的渐近线更低(3.43 → 3.17);组合起来相当于 5.17 倍的数据;集成可以蒸馏回一个模型(保留 83%);自蒸馏也能提升;合成数据(megadocs)是另一个可以叠加的杠杆。
  3. token 级过滤:能力一旦学会就难以去掉,所以在预训练里过滤;token 过滤在同样的遗忘程度下对保留能力的伤害小得多;token 移除优于损失屏蔽;过滤随规模越来越有效(7000 倍)、比遗忘方法鲁棒 13 倍、让对齐更容易;分类器差时降低阈值并扩大模型。
  4. 上游 ≠ 下游:预训练数据和下游任务对齐时,下游指标随数据单调改进;不对齐时下游指标可能变差,而交叉熵仍在改进。

8. 常见误区 · Common pitfalls

  1. “数据用完了,模型就不会进步了。” 用完的是”人类公开文本”这一条路;正则化、集成、合成数据、强化学习环境都是继续进步的路(§1.5、§2)。
  2. “存量估计的不确定性这么大,2028 年这个结论没意义。” 需求的指数增长把存量的不确定性压缩成了几年的差别(代码 01)。
  3. “算力多了就训练更大的模型。” 数据受限时不加正则化,更大的模型更差(代码 02 演示 1)。
  4. “集成成员应该用单模型最好的超参数。” 成员要训练更久、正则化更弱,以不同的方式过拟合(代码 02 演示 3)。
  5. “比较两个训练配方,看同样算力下的损失就行。” 数据受限时应该比渐近线(§2.4)。
  6. “想去掉某种能力,扔掉相关的文档就行。” 文档里一半是无害内容,零散的片段又会漏网;token 过滤更精确(代码 03)。
  7. “把有害 token 的损失屏蔽掉就够了。” 它们仍在上下文里,模型会为它们发展出表示;漏标的 token 会带着真实上下文被学进去(代码 03 演示 1)。
  8. “验证损失下降,下游一定变好。” 预训练数据和任务不对齐时不一定(§4)。

9. 练习 · Exercises

练习 1(存量的账) (a) 用中位数算:2500 亿个网页 × 每页 7000 字节 ÷ 每 token 4 字节 = 多少 token?(b) 乘上可用比例 0.2 和 5 遍重复,有效存量是多少?(c) 2024 年最大的训练集是 15T,每年增长 2.4 倍,哪一年用完?(d) 如果过度训练 5 倍(需求乘 5\sqrt{5}),提前多少年?

参考答案

(a) 2.5×1011×7000/4≈4.4×10142.5 \times 10^{11} \times 7000 / 4 \approx 4.4 \times 10^{14},约 437T。(论文报告 510T——它是对各因子分布的蒙特卡洛结果的中位数,不是中位数的乘积;代码 01 的蒙特卡洛中位数是 506T。)

(b) 437×0.2×5≈437437 \times 0.2 \times 5 \approx 437T。

(c) log⁡(437/15)/log⁡2.4=log⁡29.2/log⁡2.4≈3.37/0.875≈3.85\log(437 / 15) / \log 2.4 = \log 29.2 / \log 2.4 \approx 3.37 / 0.875 \approx 3.85 年,即 2028 年左右。

(d) log⁡(29.2/2.24)/log⁡2.4≈2.93\log(29.2 / 2.24) / \log 2.4 \approx 2.93 年,提前约 0.9 年——和论文的”提前一两年”一致。

练习 2(参数指数) 论文在数据受限时拟合的参数指数是 1.02,Chinchilla 是 0.34。(a) 参数量增加 4 倍,两种情况下”可约损失”(损失减去渐近线)分别缩小到原来的多少?(b) 这说明数据受限时参数扩展有什么特点?

参考答案

(a) 可约损失 ∝ N−αN^{-\alpha}。41.02≈4.114^{1.02} \approx 4.11,缩小到约 24%(减少 76%);40.34≈1.604^{0.34} \approx 1.60,缩小到约 62%(减少 38%)。

(b) 数据受限时,增大参数(加强正则化)能很快把可约损失压下去——但压到的是一个由数据量决定的渐近线(3.43),离”数据无限”时的损失还很远。参数扩展很快”到顶”,所以要比较的是渐近线,以及能不能找到降低渐近线的方法(集成、合成数据)。

练习 3(集成为什么不会更差) 两个模型对正确的下一个 token 分别给出概率 0.9 和 0.3。(a) 各自的交叉熵是多少?平均是多少?(b) 平均概率之后的集成的交叉熵是多少?(c) 证明对任意的概率,集成的交叉熵不大于成员交叉熵的平均。

参考答案

(a) −ln⁡0.9≈0.105-\ln 0.9 \approx 0.105,−ln⁡0.3≈1.204-\ln 0.3 \approx 1.204,平均 0.655。

(b) −ln⁡0.6≈0.511-\ln 0.6 \approx 0.511。

(c) −ln⁡-\ln 是凸函数,由 Jensen 不等式 −ln⁡(1K∑kpk)≤1K∑k(−ln⁡pk)-\ln\left(\frac{1}{K}\sum_k p_k\right) \le \frac{1}{K}\sum_k (-\ln p_k)。等号只在所有成员给出相同的概率时成立——所以成员越”不一样”,集成的收益越大。这就是为什么集成成员要以不同的方式过拟合(代码 02 演示 3)。注意:这个不等式只保证集成不差于成员的平均,不保证好于最好的成员。

练习 4(文档过滤的代价) 一篇 100 个 token 的文档里有 40 个医学 token、60 个无害 token。token 分类器的召回率 95%,对无害 token 的误报率 1%。(a) token 移除去掉多少个 token?漏掉多少个医学 token?(b) 文档过滤去掉多少个无害 token?(c) 再假设通用文档里有 5% 的医学 token(每篇 5 个),文档分类器的阈值是”医学 token 超过 20%“。文档过滤对这类文档的效果如何?

参考答案

(a) 去掉 40×0.95+60×0.01=38.640 \times 0.95 + 60 \times 0.01 = 38.6 个,漏掉 2 个医学 token(而且漏掉的 token 周围大多是 <hidden>,学不到有用的上下文)。

(b) 60 个无害 token 全部扔掉(加上 40 个医学 token)。

(c) 5% < 20%,文档分类器把这些文档全部放过,里面的医学 token 全都留在训练集里。通用文档的数量往往远多于医学文档,这些”零散的医学片段”加起来可能是一个不小的泄漏源——代码 03 演示 2 里文档过滤的放慢倍数停在个位数,原因就在这里。

练习 5(共享词更难分辨时) 把代码 03 里”生物 / 医学共享词”的医学分数从均值 1.0 提高到 2.0(分类器更容易把生物学里的”病毒""细胞”误判成医学),重新运行演示 1。先预测:token 移除在阈值 1.5 时的生物学损失会怎样变?它还比文档过滤好吗?

参考答案(实际运行结果,在代码副本里运行)

token 移除(阈值 1.5)的生物学损失从 2.508 变成 2.574——比不过滤(2.545)还差:更多生物学里的共享词被换成了 <hidden>。但它仍然优于文档过滤:要让医学知识退到随机水平,token 移除(阈值 1.0:医学知识 3.602,生物 2.673)的附带伤害仍然小于文档过滤(阈值 0.1:3.018,生物 2.862)。分类器在”两个领域共享的东西”上的精度,决定了 token 过滤的附带伤害——这就是论文要用双向上下文、要把 SAE 标签扩展成片段的原因。

练习 6(讨论:上游和下游) 你要为一个英语—斯瓦希里语翻译模型选预训练数据,有两个选择:(A) 1T token 的英语网页;(B) 100B token 的英语网页 + 20B token 的东非新闻(含斯瓦希里语)。按 Isik et al. 的发现,你预计哪个下游更好?验证损失会告诉你正确的答案吗?

参考答案(要点)

(B) 和下游任务(斯瓦希里语翻译)对齐得好得多,下游 BLEU / COMET 很可能更好,而且随预训练数据的增加单调改进。(A) 数据量大 10 倍,但和任务不对齐:在它上面扩大数据,下游的交叉熵可能仍然改进,BLEU 却可能波动甚至变差。在英语网页的验证集上测困惑度,(A) 会赢——但那是错的指标。应该用和任务对齐的验证集(例如斯瓦希里语或翻译数据的困惑度),并且直接在小规模上测下游指标(第 6、7 讲 DCLM / FineWeb 的方法论)。


10. 延伸阅读 · Further reading

原课阅读与讲座

  • Villalobos et al., Will we run out of data? Limits of LLM scaling based on human-generated data(2022 / 2024):arXiv:2211.04325。
  • Kim, Kotha, Liang, Hashimoto, Pre-training under infinite compute(ICLR 2026):arXiv:2509.14786。
  • Rathi & Radford, Shaping capabilities with token-level data filtering(2026):arXiv:2601.21571。
  • Isik et al., Scaling Laws for Downstream Task Performance in Machine Translation(ICLR 2025):arXiv:2402.04177。

slides 里引用的工作

  • Allen-Zhu & Li, Towards Understanding Ensemble, Knowledge Distillation and Self-Distillation in Deep Learning(2023)。
  • Bahri et al., Explaining Neural Scaling Laws(2021)。
  • Kim & Rush, Sequence-Level Knowledge Distillation(2016)。
  • Shi et al., In-Context Pretraining(2024);Ruan et al., Reasoning to Learn from Latent Thoughts(2025)。

本讲补充

  • Lin et al., Rho-1: Not All Tokens Are What You Need(2024):arXiv:2404.07965。
  • Muennighoff et al., Scaling Data-Constrained Language Models(2023)——第 7 讲。

和本目录其他课程的联系


11. 下一讲预告 · Next lecture

第 6–12 讲都在问”什么样的数据能训练出好模型”,用的方法基本是做实验:换一份数据、训练、评测。但如果我们想知道某一个预测来自哪些训练样本呢?去掉这 100 篇文档,模型的这个回答会变吗?

第 13 讲:数据归因。 客座讲者 Logan Engstrom 和 Juhan Bae:影响函数(Koh & Liang 2017)和它在深度网络上为什么会失效、datamodels(训练几十万个模型拟合一个线性代理)、TRAK(随机投影 + 线性化,用几十个模型达到几万个模型的效果)、用 EK-FAC 把影响函数扩展到 520 亿参数的语言模型,以及元梯度——对整个训练过程求导,直接优化训练数据。代码会在逻辑回归和小网络上比较精确的留一法、影响函数、datamodels 和 TRAK,并用元梯度给训练样本加权。

← 返回课程目录