对应:Stanford CS336 Spring 2026 Lecture 9(Scaling laws - basics,Tatsunori Hashimoto 的幻灯片)。Spring 2025 的第 9 讲内容相近,有公开录像。 配套代码:
code/lecture09/预计阅读时间:3–4 小时 硬件说明:普通电脑即可。配套代码包含两个真实的小型训练实验(02、06 号文件,各约半分钟到一分钟)。
0. 本讲导航
0.1 学完本讲,你应该能够
- 说出规模定律要解决的问题:为什么不能在大模型上直接调参,为什么要”在小模型上实验、再外推”。
- 在双对数坐标下识别和拟合幂律,说明不可约损失 对拟合的影响。
- 用均值估计、非参数回归、长尾分布三个例子,解释”为什么会出现幂律”,以及为什么神经网络的指数远小于 1。
- 说出数据规模定律的几个应用:数据量、数据组成、重复数据(约 4 轮以内几乎和新数据一样好)。
- 说出用规模定律做”模型工程”的思路(架构、优化器、深宽比、批次大小),解释临界批量大小及其随损失的变化。
- 写出 Chinchilla 的损失公式 ,推导计算最优的 、,说出”约 20 token / 参数”的来历。
- 描述 Chinchilla 的三种方法(下包络、IsoFLOP、参数化拟合),以及 Kaplan 与 Chinchilla 结论不同的原因。
- 亲手完成一次”训练一组小模型 → 拟合 → 外推预测 → 验证”的 IsoFLOP 实验,并诚实地分析误差。
- 解释为什么今天的模型普遍”过度训练”(考虑推理成本后的最优)。
0.2 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 第 2 讲 | 全文 | 训练计算量 ;交叉熵损失;学习率调度 |
| 第 7、8 讲 | 第 5.4 节 | 批次大小与并行的关系 |
| 对数 | 全文 | , |
| 最小二乘拟合 | 第 3、7 节 | 知道”用直线拟合一组点”是什么意思 |
0.3 本讲地图
第1节 动机:给你一万块 GPU,训练多大的模型?
第2节 规模定律简史
第3节 幂律:是什么、为什么会出现
第4节 数据规模定律:数据量、数据组成、重复数据
第5节 用规模定律做模型工程:架构、优化器、深宽比、批次大小
第6节 数据 vs 模型:联合规模定律
第7节 Chinchilla:计算最优的模型大小(三种方法;与 Kaplan 的分歧)
第8节 实战:一个真实的小型 IsoFLOP 实验
第9节 训练最优 ≠ 实际最优:把推理算进去
1. 动机:给你一万块 GPU,训练多大的模型?
CS336 课件用这样一个场景开场:
朋友给了你一万块 B200、用一个月,请你训练一个最好的开源语言模型。你怎么做?
- 组建基础设施团队,搭好分布式训练框架(作业 2,第 5–8 讲)✓
- 准备好一份优秀的预训练数据集(作业 4,第 13–14 讲)✓
- 训练一个大模型——**但是哪一个?**多宽、多深?多少个头?用哪种激活函数?学习率、批次大小多少?训练多少个 token?
可以”照抄”已有模型(cargo cult),但它们最初又是怎么定下来的?
旧的做法(代价高昂):直接在大模型上调超参数。一次训练就要几百万美元,根本没法试错。
新的做法(也许有点过于乐观):在小模型上调,再外推到大模型。这需要一种”简单、可预测的规律”,告诉我们模型的表现如何随规模变化——这就是规模定律(scaling laws)。
规模定律的神奇之处在于:损失随数据量、参数量、计算量的变化,往往可以用一条幂律非常准确地描述,而且能外推好几个数量级。
2. 规模定律简史
理论界早就在思考”规模”。统计学习理论给出过各种泛化误差的上界,例如在 个假设中学习的误差 ,光滑密度估计的误差 ……但这些都是上界,不是实际观察到的损失值。
最早的数据规模定律论文(1993):Cortes, Vapnik 等人在 NeurIPS 上研究了学习曲线的渐近值和收敛速度,用小数据上的学习曲线预测大数据上的表现——和今天的思路一模一样。
对数线性的数据规模(Banko & Brill 2001):在一个自然语言消歧任务上,数据量从百万词增加到十亿词,准确率随 线性增长,而且”更多数据”比”更好的算法”重要。
幂律的函数形式(Kolachina et al. 2012):机器翻译的数据量与下游表现之间呈幂律关系。
第一个大规模神经网络的规模研究(Hestness et al. 2017,百度):在机器翻译、语言模型、语音识别、图像分类上,都观察到了可预测的幂律,并提出学习曲线的三段式形状(小数据区 → 幂律区 → 不可约误差区)。CS336 课件评价它”远远超前于时代”:它已经讨论了”涌现”、按计算量扩展、“速度就是准确率”等后来的热门话题。
Kaplan et al. 2020(OpenAI):系统地研究了 Transformer 语言模型的损失随参数量 、数据量 、计算量 的幂律,以及架构、形状、批次大小的影响。它直接影响了 GPT-3 的设计。
Rosenfeld et al. 2020、Hoffmann et al. 2022(Chinchilla,DeepMind):提出数据和模型的联合规模定律,Chinchilla 修正了 Kaplan 关于”模型与数据怎么配比”的结论(第 7 节)。
3. 幂律:是什么、为什么会出现
3.1 幂律与双对数坐标
幂律:
在”双对数坐标”(横轴 、纵轴 )下,幂律就是一条直线,斜率是 。01_power_laws.py 演示 1:, 每乘 10, 就减少 0.3。
直观含义:数据量每翻 10 倍,误差就乘以一个固定的比例(这里是 )。没有”拐点”,也没有”学完了”的那一刻,只是越降越慢。
CS336 课件(Kaplan 的图)展示了语言模型的测试损失与数据量在双对数坐标下惊人地呈直线——这种关系被称为”无标度”(scale-free)或”幂律”。它不只对数据量成立,对参数量、计算量也成立,甚至在一些非标准的设置下也成立。
3.2 最简单的规模定律:均值估计
**为什么会是幂律?**CS336 课件的回答是:**估计误差天然地以多项式速度下降。**看一个最简单的例子:
输入 ,用平均值 估计 。误差是多少?
标准的结论:。取对数:
这就是一个”规模定律”,斜率 。演示 2 实测拟合出的指数是 0.999。更一般地,任何 的多项式速率都是一个规模定律。
3.3 一个谜:神经网络的指数为什么这么小?
用类似的论证可以证明:大多数”经典”模型(参数个数固定的回归等)的误差都以 的速度下降,在双对数坐标下斜率是 。
可是 Hestness 等人发现,神经网络的斜率远没有这么陡:机器翻译、语音、语言模型的指数大约在 0.1 到 0.3 之间(Kaplan 的数据指数是 0.095)。为什么?
**一种解释:灵活的非参数学习,指数与维度有关。**CS336 课件的例子:在二维单位正方形里均匀采样 个点, 噪声,要估计 。把空间切成边长 的小格子,每个格子里取平均。大约有 个格子,每个格子有 个样本,误差 。
推广到 维:格子边长为 时,偏差,方差 ,两者平衡时 ,误差 。维度越高,斜率越平。(CS336 课件写成 ,结论相同:斜率随维度变平。)
演示 3 的实测:
| 维度 | 拟合的指数 | 理论 |
|---|---|---|
| 1 | 0.671 | 0.667 |
| 2 | 0.502 | 0.500 |
| 4 | 0.335 | 0.333 |
神经网络也能拟合几乎任意的函数。于是有人(Bahri et al. 2021)提出:规模定律的指数与数据的”内在维度”有关——图像、语言表面上维度很高,但真正变化的方向要少得多。CS336 课件的评价:这个理论很有启发性,但并不严密,因为内在维度本身很难准确估计。
3.4 另一种解释:长尾
语言有一个显著的特点:长尾。少数词、少数事实、少数语法现象非常常见,而绝大多数都很罕见——频率大致服从 Zipf 分布 。
设想模型只能学会”见过足够多次”的东西。看过 个样本后,“一次都没见过”的知识点的总概率(缺失质量)是多少?出现概率大于 的知识点大多已经见过,这样的知识点约有 个;剩下的缺失质量 。又是幂律,指数由尾巴的”胖瘦”决定。
演示 4 的实测:
| Zipf 指数 | 拟合的指数 | 理论 |
|---|---|---|
| 1.5 | 0.339 | 0.333 |
| 2.0 | 0.500 | 0.500 |
| 3.0 | 0.614 | 0.667 |
= 3 时略偏离理论值:尾巴很瘦时, 要非常大才进入渐近区域。这提醒我们,幂律通常只在一定范围内成立。
直觉:数据越多,见过的”稀有知识”越多;但知识的尾巴很长,永远有更稀有的东西没见过。于是误差一直在降,却越降越慢——这正是幂律的样子。(Hutter 2021、Michaud et al. 2023 的”量子化模型”就是沿着这个思路解释神经网络的规模定律。)
3.5 不可约损失
语言本身有不确定性:同一个上下文后面可以接很多种合理的词。所以损失有一个降不下去的下限 (不可约损失,大致是语言本身的熵)。真实的损失曲线是:
只有”可约部分” 才是幂律。演示 5:真实曲线 ,直接在双对数坐标下拟合 ,得到的指数是 0.044(错得离谱);先减去 再拟合,得到 0.300(正确)。相邻两点之间的局部斜率越来越平,最后趋于 0。这就是 Hestness 所说的”不可约误差区”。
实际拟合时,要么事先知道 ,要么把 作为一个参数一起拟合(第 7 节的方法 3)。后者很容易出问题,本讲会反复看到。
4. 数据规模定律
4.1 数据量
数据规模定律:一个把数据集大小 映射到误差的简单公式。CS336 课件总结:误差与数据量在双对数坐标下呈显著的线性关系,而且跨领域、跨模型都成立。理论上可以用”类似泛化界”的方式理解(第 3 节的均值估计);在应用上,它指导数据的收集和整理。
02_data_scaling.py 在玩具任务上做了一个真实的实验。
玩具任务(
toy_task.py):输入是 32 维随机向量(相当于”上下文”),一个固定的”老师”函数给出 64 个 token 上的概率分布,训练数据的”下一个 token”从这个分布中随机采样。老师由 512 个特征组成,第 个特征的重要性是 (长尾)。学生是一个两层 MLP,用交叉熵训练。测试损失 = 老师分布的熵(不可约损失 = 1.718)+ 学生还没学到的部分。数据可以无限生成。
两种模型大小下,可约损失随训练数据量的变化:
| 数据量 | 宽度 8(840 个参数) | 宽度 256(24,896 个参数) |
|---|---|---|
| 1 万 | 2.283 | 0.864 |
| 4 万 | 1.424 | 0.243 |
| 16 万 | 0.437 | 0.086 |
| 64 万 | 0.195 | 0.043 |
| 256 万 | 0.144 | 0.024 |
- 两条曲线开头都下降得很快(数据少时训练步数也少,模型还没训练充分);
- 宽度 8 的小模型:局部斜率从 0.85 一路降到 0.22,损失越来越接近被模型容量”卡住”的地板;
- 宽度 256 的大模型:最后的局部斜率仍有 0.42。
结论:损失同时受数据量和参数量的限制。只看一个变量时,另一个变量带来的”地板”会让曲线变平。这引出了第 6 节的联合规模定律。
4.2 数据组成:影响截距,不影响斜率
相关的问题:数据的组成(来自哪些领域、各占多少)怎样影响表现?Hashimoto 2021 的发现(CS336 课件):数据组成主要影响截距(偏移),不影响斜率。在双对数坐标下,用不同数据训练、在同一个目标上测试,得到的是一组平行的直线。
这类”分布偏移”的规模定律说明了收集多样化数据的重要性。但 CS336 课件也提醒,用规模定律选择数据配比在实践中很难:一个自然的想法是为每种配比建立数据规模定律,但在实证评估中,简单地”选小规模上最好的数据集”往往就够了。
4.3 重复数据
现实中高质量的数据是有限的。把同一批数据重复训练多轮(epoch),价值会打多少折扣?
Muennighoff et al. 2023(“Scaling Data-Constrained Language Models”)提出”有效数据量”:
其中 是唯一数据量, 是重复的次数(轮数 − 1), 是拟合出的常数。含义:第 1 轮是全新数据;之后每多重复一轮,价值按指数衰减;无限重复的总价值上限约为 16 倍唯一数据。他们发现:重复约 4 轮以内,几乎和全新数据一样好。
02_data_scaling.py 演示 2 在玩具任务上验证:4 万条唯一数据重复多轮,与同样多的全新数据对比(宽度 256):
| 轮数 | 全新数据 | 重复数据 | 等效全新数据量 / U | Muennighoff 公式 |
|---|---|---|---|---|
| 1 | 0.243 | 0.245 | 1.0 | 1.0 |
| 2 | 0.135 | 0.144 | 1.9 | 2.0 |
| 4 | 0.086 | 0.105 | 3.0 | 3.7 |
| 8 | 0.058 | 0.101 | 3.1 | 6.6 |
| 16 | 0.043 | 0.145 | 1.9 | 10.6 |
| 32 | 0.034 | 0.265 | < 1 | 14.3 |
趋势相同:重复 2 轮几乎和新数据一样好,之后收益越来越小。但我们的玩具衰减得更快,而且重复太多轮后损失反而上升(过拟合:这个学生相对于 4 万条数据来说很大,又没有正则化)。具体在第几轮开始不划算,取决于模型、数据和正则化,不能照搬。
CS336 课件还提醒两点:
- 规模定律如果被盲目套用,可能会”失效”——例如在数据无限重复的情况下;
- 规模定律描述的是某种做法的表现,并不是上限——换一种做法,也许能做得更好。
数据选择应该随规模调整(Goyal et al. 2024):既然重复数据的价值会衰减,最优的数据过滤策略就依赖于计算量——算力小时,只用最高质量的一小部分数据;算力大时,高质量数据会被重复太多次,不如放宽过滤标准,纳入更多”次优质”的新数据。
5. 用规模定律做模型工程
规模定律不只能回答”多少数据”。CS336 课件的核心动机是:怎样高效地设计巨大的语言模型?
- LSTM 还是 Transformer?Adam 还是 SGD?
- 把模型训练得更久,还是把模型做得更大?
- 多收集数据,还是多买 GPU?
规模定律提供了一个简单的流程来回答这些问题。下面以 Kaplan 的论文为主线。
5.1 架构:Transformer vs LSTM
暴力的做法:花几千万美元训练一个”LSTM 版的 GPT-3”。规模定律的做法:在一系列较小的规模上分别训练 Transformer 和 LSTM,画出损失随参数量的两条直线,看它们的关系。Kaplan 发现 Transformer 的直线整体在 LSTM 下方,而且在长上下文的后部位置优势更明显——LSTM 的差距是一个”常数倍”的效率差,不会随着规模消失。
Tay et al. 2022 用同样的方法比较了许多架构(各种注意力变体、MLP-Mixer、卷积……),发现很多在小规模上看起来不错的架构,扩展后不如标准 Transformer。
5.2 优化器:Adam vs SGD
Hestness et al. 2017 比较了 Adam 与 SGD 的规模曲线(在循环网络上):两条直线基本平行,Adam 的偏移更低。这样的比较在小规模上就能做,结论可以外推。
5.3 深度与宽度
Kaplan 的发现(CS336 课件):
- 1 层和 2 层之间差别巨大;但层数再多,在参数量一定时收益递减(参数少于约 时);
- 深宽比(宽度 / 层数)在很大范围内变化,损失只差几个百分点——形状不太重要,总参数量才重要;
- 但不是所有参数都一样:嵌入层的参数和其他参数的行为不同。Kaplan 因此只统计”非嵌入参数”,才得到了干净的幂律。(这个选择后来被证明是 Kaplan 与 Chinchilla 结论不同的重要原因,第 7.4 节。)
- 类似地,MoE 模型的”参数”价值也不同:激活的参数和总参数要分开看。
5.4 批次大小:临界批量
批次大小在超过某一点后收益迅速递减。临界批量大小(critical batch size)大致是”再增大就开始浪费”的那个点。更精确的定义(McCandlish et al. 2018,CS336 课件):
固定一个目标损失,扫描不同的批次大小 ,记录达到目标所需的步数 和样本数 。它们近似满足:
- :批次翻倍、步数减半,样本总数(计算量)几乎不变——“免费”的加速;
- :步数几乎不再减少,样本数却线性增加——浪费计算;
- :步数是最少步数的 2 倍、样本数是最少样本数的 2 倍,两边平衡。
McCandlish et al. 认为 接近梯度噪声尺度 :梯度噪声的方差与梯度信号之比。批次小于它时,噪声主导,加大批次很有用;大于它时,信号已经足够准了。
03_critical_batch_size.py 在一个带噪声的线性回归上用 SGD 实测(每个批次大小都选各自最好的学习率):
| 目标(初始超额损失的) | 达标点的 | ||
|---|---|---|---|
| 5% | 24.9 步 | 22 | 23 |
| 1% | 51.5 步 | 40 | 456 |
| 0.3% | 63.2 步 | 119 | 362 |
实测步数与 的拟合曲线大体吻合。两个结论:
- 目标损失越低,临界批量越大(22 → 40 → 119)。训练后期,梯度信号越来越弱,噪声相对越来越强,需要更大的批次来平均。CS336 课件:“损失目标越小,批次越大。“Kaplan 在语言模型上发现 随损失降低按幂律增长(, 个 token,)。这就是大模型训练常常逐步加大批次的原因(例如 Llama 3 从 400 万 token 逐步加到 1600 万 token)。
- 梯度噪声尺度在 5% 的目标下与 几乎相等;目标更低时,趋势相同但数值大好几倍。它只是在”达标的那一个点”上测的,而 反映的是整段训练。它是一个有用的估计,不是精确的答案。
这与第 7、8 讲直接相关:数据并行、流水线并行都希望批次大,但全局批次超过临界批量之后就是浪费。
5.5 学习率:随规模变化
如果只是简单地把模型变大,最优学习率会随规模变化(通常越大的模型,最优学习率越小)。于是在小模型上调好的学习率不能直接用在大模型上。解决办法是”感知规模”的初始化和学习率缩放,例如 μP(最大更新参数化,Yang et al. 2022)。这是第 11 讲的主题。
5.6 注意:下游任务不一定可预测
到目前为止,规模定律描述的都是损失(困惑度),它非常平滑、可预测。但 CS336 课件提醒:下游任务的表现往往没有这么可预测——有的任务随规模平稳提升,有的长时间停在随机水平、然后突然跃升(“涌现”),有的甚至随规模变差。用损失的规模定律预测具体的下游能力要格外小心(第 12 讲”评估”)。
5.7 基于规模定律的设计流程
CS336 课件的总结:超参数(优化器、深度、架构)对大模型的影响,可以在训练之前就预测出来:
- 训练几个较小的模型;
- 建立规模定律(例如 Adam 与 SGD 各一条);
- 根据规模定律的预测,选择最优的超参数。
6. 数据 vs 模型:联合规模定律
一个重要的问题:**应该要更多的数据,还是更大的模型?**显然,在小模型上用大量数据是浪费的(第 4.1 节的宽度 8 模型)。联合规模定律同时描述两者:
- Rosenfeld et al. 2020:(:数据量,:模型大小);
- Kaplan et al. 2020:(写法略有不同)。
它们对”模型 - 数据”联合误差的拟合出奇地好。Rosenfeld 在小数据、小模型上拟合出指数,就能预测其余配置的误差。有了这样的公式,就可以结合成本来优化:给定预算,数据和模型各花多少?
7. Chinchilla:计算最优的模型大小
7.1 问题
训练计算量 。给定 , 和 此消彼长:模型大一倍,只能少训练一半的 token。问题: 取多大,最终损失最低?
Kaplan 的答案:,。算力增加时,主要把模型做大,数据只增加一点——每参数的 token 数随算力增加而减少。GPT-3(1750 亿参数、3000 亿 token,每参数约 2 个 token)就是按这个思路设计的。
Chinchilla(Hoffmann et al. 2022)认为 Kaplan 的拟合差得很远,并给出了新的答案:,——模型和数据应该同比例增长。
7.2 损失公式与最优配比
Chinchilla 的参数化形式:
三项分别是:不可约损失、模型太小带来的损失、数据太少带来的损失。在约束 下最小化(代入 求导,或用拉格朗日乘子):
当 时,。Besiroglu et al. 2024 重新拟合的参数是 = 1.8172, = 482.01, = 2085.43, = 0.3478, = 0.3658,对应 = 0.513。代入 Chinchilla 的预算 (与 2800 亿参数的 Gopher 相同),最优约为 720 亿参数、每参数约 18 个 token——这就是”Chinchilla 70B 用 1.4 万亿 token 训练,每参数约 20 个 token”的由来。同样的计算量,Chinchilla 70B 比 Gopher 280B 好得多。
7.3 三种方法
Chinchilla 用三种方法拟合,结论(除方法 3 外)基本一致。04_chinchilla_three_methods.py 在一个”已知答案”的合成世界里演示了它们:真实损失取上面的 Besiroglu 参数,每次”实验”的结果加上 0.5% 的噪声。
方法 1:训练曲线的下包络。训练一批不同大小的模型,把每个模型的整条训练曲线画在”计算量 - 损失”图上。对每个计算量,取所有曲线中最低的点,它对应的模型大小就是这个计算量下的最优。这些最低点形成一个幂律。(注意:曲线上的每个点,都应该是”学习率调度与训练长度匹配”的结果。)
方法 2:IsoFLOP。选几个固定的计算预算(Chinchilla 用了 6e18 到 3e21 的 9 个),对每个预算训练不同大小的模型( 随之变化)。” - 损失”的曲线是一个山谷,用抛物线拟合找到谷底。谷底连起来形成一个幂律。CS336 课件:“这类方法很容易执行,结果通常也很干净。“扩散模型(Gulrajani et al. 2023)、MoE(Abnar et al. 2025)等后续研究都用了 IsoFLOP。
方法 3:参数化拟合。在”模型大小 × 数据量”的网格上训练一批模型,直接用最小二乘(Chinchilla 用的是对数空间里的 Huber 损失 + L-BFGS)拟合 的五个参数,再用 7.2 节的公式求最优。
合成世界里的结果(真实答案 ):
| 方法 | 拟合的指数 |
|---|---|
| 1:下包络 | 0.482 |
| 2:IsoFLOP(81 次实验) | 0.510 |
| 3:参数化拟合 | 0.512(=1.825,=0.349,=0.366) |
用 以下的实验外推到 ,预测的最优模型大小与真实值相差约 5%。在”世界真的服从这个公式、噪声又不大”的理想情况下,三种方法都很好用。
7.4 为什么 Kaplan 和 Chinchilla 差这么多?
两篇论文都拟合了联合规模定律,为什么结论差这么多?CS336 课件列出了后来研究找到的解释:
解释 1(Porian et al. 2024 等):
- Kaplan 计算量时没有算最后一层(输出层)的开销;
- 在很小的计算预算下,预热(warmup)太长了;
- Kaplan 对不同训练长度用同一个余弦调度周期,短训练的模型没有把学习率降下来,损失偏高(学习率衰减本身也许不关键,只要批次和学习率调得合适)。
解释 2(Pearce & Song 2024):“非嵌入参数 vs 总参数”的选择,加上小规模下的一点非线性。
05_kaplan_vs_chinchilla.py 复现了解释 2:在一个”本来是 Chinchilla 式”的世界里(损失按总参数计算),对 GPT-2 式的模型家族(词表 50257,层数 = 宽度 / 64),分别用两种方式计数,拟合 :
| 计算预算范围 | Kaplan 式计数(非嵌入参数) | Chinchilla 式计数(总参数) | 最优模型中嵌入参数的占比 |
|---|---|---|---|
| ~ | 0.93 | 0.49 | 99% → 40% |
| ~ | 0.60 | 0.51 | 40% → 4% |
| ~ | 0.80 | 0.50 | 99% → 4% |
| ~ | 0.52 | 0.51 | 2% → 0% |
在 Kaplan 做实验的计算量范围里,只数非嵌入参数,同一组最优模型就被拟合出了接近 0.73 的指数。原因是:小模型里嵌入层占了总参数的大部分;模型变大时嵌入的占比迅速下降,“非嵌入参数”比”总参数”增长得快得多。到了大规模,两种计数方式几乎没有区别。
启示:规模定律的结论对”怎么数参数、怎么数计算量、怎么设学习率”这些看似无关紧要的细节非常敏感。
7.5 一个插曲:Chinchilla 方法 3 的错误
Chinchilla 原论文中,方法 1、2 给出的指数约 0.50,方法 3 给出 0.46。而且原文方法 3 的参数(=1.69,=406.4,=410.7,=0.34,=0.28)算出的最优配比,在 的预算下是 320 亿参数、每参数约 93 个 token,与”约 20”明显不一致(04_chinchilla_three_methods.py 的最后一部分)。
Besiroglu et al. 2024 做了一次”数据考古”:从论文的图中复原出原始数据点,重新拟合,发现原文的拟合很可能有问题。重新拟合的结果(本讲一直在用的参数)与方法 1、2 一致。
启示:参数化拟合很灵活,但也最容易出错。要检查拟合是否收敛、参数的置信区间有多宽,并用其他方法交叉验证。第 8 节的真实实验会再次看到这一点。
8. 实战:一个真实的小型 IsoFLOP 实验
06_isoflop_experiment.py 在玩具任务上完整地走一遍规模定律的工作流程。这也是 CS336 作业 3 的核心流程。
8.1 第 1 步:训练 IsoFLOP 曲线
3 个计算预算(、、 次浮点运算),每个预算训练 6 个不同宽度的学生()。可约损失(测试损失 − ):
| 预算 | 各模型(参数量 : 可约损失) | 抛物线谷底 |
|---|---|---|
| 452 : 0.330 · 840 : 0.200 · 1616 : 0.179 · 3168 : 0.179 · 6272 : 0.257 · 12480 : 0.350 | ≈ 1786,0.174 | |
| 840 : 0.150 · 1616 : 0.089 · 3168 : 0.075 · 6272 : 0.088 · 12480 : 0.112 · 24896 : 0.156 | ≈ 3884,0.074 | |
| 1616 : 0.064 · 3168 : 0.047 · 6272 : 0.048 · 12480 : 0.058 · 24896 : 0.075 · 49728 : 0.101 | ≈ 4935,0.046 |
每一行都是一个山谷:模型太小,学不会;模型太大,数据不够。预算越大,谷底越往右移(最优模型越大),也越低。这就是规模定律的全部直觉。
8.2 第 2 步:拟合
- 方法 2:(与 Chinchilla 的约 0.5 接近);最优可约损失 。
- 方法 3(把 固定为已知的真实值 1.718): = 1.109, = 0.841。
- 方法 3( 也一起拟合): = 1.579——比真实的不可约损失还低!
注意:玩具任务的”每参数多少个样本”(这里是一两百个)与语言模型的 20 完全不同。具体的常数取决于任务,只有”怎么做”是通用的。
8.3 第 3 步:预测,然后验证
预测计算量大 3.3 倍()时的情况,然后真的训练三个模型来验证:
| 宽度 | 参数量 | 实测可约损失 | 方法 3( 固定)预测 | 方法 3( 拟合)预测 |
|---|---|---|---|---|
| 32 | 3,168 | 0.0357 | 0.0412 | 0.0009 |
| 64 | 6,272 | 0.0310 | 0.0267 | −0.0220 |
| 128 | 12,480 | 0.0356 | 0.0257 | −0.0266 |
- 方法 2 预测最优规模约 9,182,实测谷底约 6,314(相差 45%);预测的最优可约损失 0.0215,实测 0.0310,过于乐观。原因之一:最小的预算下训练步数太少,损失处在”掉得比规律快”的阶段,混进拟合后让幂律的斜率偏陡。这正是第 7.4 节说的小规模实验的难点。
- 方法 3( 固定):三个验证点的相对误差是 +16%、−14%、−28%。量级对了,但谷底的位置偏右。
- 方法 3( 拟合):外推出负的可约损失,完全不能用。真实世界里 是未知的——这就是方法 3”最灵活也最脆弱”的原因。
- **好消息:谷底很平。**按方法 2 预测的规模(9,182)训练,可约损失约 0.0323,只比实测最优(0.0310)高 4%。所以即使外推不完美,规模定律也足以帮我们”大致选对”模型大小——这是它最实际的用途。
**【边界】**所有模型用同一个学习率和批次大小(没有逐个调参),每个配置只训练一次(没有平均多个随机种子)。真实的规模定律研究会对这些做更仔细的处理,第 11 讲会讲超参数怎么随规模变化。
9. 训练最优 ≠ 实际最优:把推理算进去
Chinchilla 回答的是”训练计算量固定时,怎样得到最好的模型”。但 CS336 课件指出:**实际部署中,大部分计算花在推理上。**模型会被使用的次数越多,就越值得多花一些前期成本,训练一个更小的模型——也就是”过度训练”(over-training)。
公开模型的每参数 token 数(07_inference_aware_scaling.py 演示 1):
| 模型 | 参数 | 训练 token | 每参数 token |
|---|---|---|---|
| GPT-3(2020) | 175B | 0.3T | 2 |
| Chinchilla(2022) | 70B | 1.4T | 20 |
| LLaMA 65B(2023) | 65B | 1.4T | 22 |
| Llama 2 70B(2023) | 70B | 2T | 29 |
| Llama 3 70B(2024) | 70B | 15T | 214 |
| Llama 3 8B(2024) | 8B | 15T | 1875 |
(CS336 课件还列出了 Mistral 7B,约 110 token / 参数。)
把推理算进去(Sardana & Frankle 2023 的思路):固定目标损失,最小化 训练()+ 推理(每个 token 约 ,第 10 讲)的总计算量。以”训练预算 下 Chinchilla 最优模型的损失”为目标(该模型 96B 参数、1.7T token):
| 一生中的推理量(token) | 最优参数量 | 训练 token | 每参数 token | 总计算 | 比 Chinchilla 最优模型省 |
|---|---|---|---|---|---|
| 0(只算训练) | 96B | 1.7T | 18 | 0% | |
| 79B | 2.1T | 27 | 2% | ||
| 48B | 4.3T | 90 | 24% | ||
| 29B | 14.5T | 497 | 59% | ||
| 21B | 63.2T | 3008 | 74% |
推理量越大,最优模型越小、训练得越久。据 CS336 第 10 讲引用的数据,OpenAI 每天处理约 8.6 万亿 token, 只相当于它约 4 个月的量。所以今天的开源模型普遍”过度训练”:训练时”不划算”,部署时却便宜得多、能跑在更小的硬件上。
**【边界】**这里假设 Chinchilla 公式在每参数上千个 token 时依然成立,这是外推。Gadre et al. 2024 发现,在一定程度的过度训练下(每参数几百个 token),损失依然可以用规模定律预测。另外,数据是否够用(第 13、14 讲)是另一个现实的限制。
10. 本讲小结
- 动机:不能在大模型上试错,要在小模型上找规律、再外推。
- 幂律:,只有可约部分在双对数坐标下是直线。拟合时必须处理不可约损失 。
- 为什么是幂律:估计误差天然按多项式速度下降(均值估计:);灵活的非参数学习的指数依赖于维度();长尾的数据让”没学到的部分”按幂律减少。
- 数据规模定律:数据组成主要影响截距;重复数据约 4 轮以内接近新数据,之后价值迅速衰减;数据选择应随规模调整。
- 模型工程:用规模定律比较架构、优化器、形状;深宽比影响不大,嵌入参数要单独看;目标损失越低,临界批量越大。
- Chinchilla:,,约 20 token / 参数。三种方法:下包络、IsoFLOP、参数化拟合(最脆弱)。
- Kaplan vs Chinchilla:非嵌入参数的计数、小规模、学习率调度等细节,足以把 0.5 变成 0.73。
- 真实实验:外推有误差(小预算的实验偏离规律、 难以拟合),但 IsoFLOP 的谷底很平,“大致选对”已经足够有用。
- 过度训练:考虑推理成本后,最优模型更小、训练更久。
11. 与作业 3 的关系
作业 3(规模定律)的典型形式(以往年版本为例,具体数字以当年的作业说明为准):
- 你可以通过一个”训练 API”查询:给定模型配置(层数、宽度、学习率、批次大小等)和训练计算量,返回最终损失;
- 但查询是有预算的(例如一共只能花 FLOPs 的”实验费”);
- 目标:预测 FLOPs 预算下的最优模型大小、超参数,以及能达到的损失。
这正是本讲第 7、8 节的流程:设计 IsoFLOP 实验(选哪些预算、哪些模型大小,才能在有限预算下拟合得最准)→ 拟合 → 外推。06_isoflop_experiment.py 的经验可以直接用上:
- 小预算的点要小心(训练步数太少会偏离规律);
- 谷底附近要多放几个点(抛物线拟合才准);
- 参数化拟合要检查 是否合理;
- 预测时给出一个范围,而不是一个点。
12. 练习
练习 1(读幂律):某个规模定律是 。数据量从 增加到 ,可约损失变成原来的几倍?要让可约损失减半,数据要增加多少倍?
参考答案
,约变成原来的 52%。减半需要 增加 倍。幂律的”残酷”之处:每减半一次,都要付出同样倍数的代价。
练习 2(不可约损失):你测得三个点: 时,损失分别是 3.0、2.5、2.25。假设 ,求 和 。
参考答案
相邻两点的差:0.5 和 0.25。 每乘 10 倍 就乘以 ,所以 ,。 时可约部分 = (等比数列求和:以后每次再减少一半,总共还能减少 0.25),所以 。
练习 3(Chinchilla 最优):用本讲的 Besiroglu 参数,(a) 算出 时的 和 ;(b) 如果用这个预算训练一个 1750 亿参数的模型,损失会比最优高多少?
参考答案
(a) = 0.3658/0.7136 = 0.5126,。,(约 290 亿),,约 19 token / 参数,最优损失约 2.032。(b) = 1.75e11 时 = 9.5e10,损失约 2.077,比最优高约 0.045(可以用 07_inference_aware_scaling.py 里的 loss 函数验证)。关键是理解:大模型数据不够时,数据项 变大,超过了模型项减小的部分。
练习 4(临界批量):某个任务 = 10,000 步, = 2,000 个序列。(a) 用 = 500、2000、8000 训练,各需要多少步、多少样本?(b) 如果你有 1024 块 GPU、每块每步最多处理 4 个序列,用满所有 GPU 值得吗?
参考答案
(a) :B=500 → 50,000 步、2500 万样本;B=2000 → 20,000 步、4000 万样本;B=8000 → 12,500 步、1 亿样本。(b) 用满时 = 4096,约 14,900 步、约 6100 万样本。和 = 2000 相比,步数(时间)减少约 25%,计算量增加约 53%。是否值得取决于你更缺时间还是更缺算力。
练习 5(重复数据):用 Muennighoff 的公式( = 15.4),你有 5000 亿 token 的唯一数据。训练 2 万亿 token(4 轮)的有效数据量是多少?训练 10 万亿 token(20 轮)呢?
参考答案
4 轮: ≈ 1.87 万亿(几乎不打折)。20 轮: ≈ 5.96 万亿,远少于 10 万亿,价值打了约 4 折。
练习 6(Kaplan vs Chinchilla):用自己的话解释,为什么”只数非嵌入参数”会让小规模实验拟合出更大的 指数?
参考答案
同一组最优模型,从小到大,嵌入参数占总参数的比例从很高降到很低。所以它们的非嵌入参数增长得比总参数快得多——横轴不变(计算量),纵轴换成增长更快的量,拟合出的斜率自然更大。Kaplan 的计算量也不算嵌入部分,进一步放大了这个效应。
练习 7(过度训练):你要为一个预计一生会生成 个 token 的产品训练模型。根据第 9 节的表,你会训练多大的模型、用多少数据?如果手上只有 5 万亿 token 的数据呢?
参考答案
表中的最优是 29B 参数、14.5T token。如果只有 5T token(假设不重复),就不能那样过度训练:要么接受更大的模型(例如接近 那一行的 48B、4.3T),要么重复数据(第 4.3 节:3 轮以内损失不大)。数据约束会把最优解推回”更大的模型”方向。
练习 8(动手):
(a) 在 06_isoflop_experiment.py 中,为每个配置平均 2 个随机种子(运行时间翻倍),预测误差会变小吗?
(b) 把 FIT_BUDGETS 中最小的预算去掉、加入 ,重新做预测和验证。
(c) 在 04_chinchilla_three_methods.py 中把噪声加到 2%,看看哪种方法最先崩溃。
13. 延伸阅读
- CS336 Spring 2026 Lecture 9(
stanford-cs336/lectures中的lecture_09.pdf)。 - Kaplan et al.,Scaling Laws for Neural Language Models(2020)。
- Hoffmann et al.,Training Compute-Optimal Large Language Models(2022,Chinchilla)。
- Besiroglu et al.,Chinchilla Scaling: A Replication Attempt(2024)。
- Pearce & Song,Reconciling Kaplan and Chinchilla Scaling Laws(2024);Porian et al.,Resolving Discrepancies in Compute-Optimal Scaling of Language Models(2024)。
- Hestness et al.,Deep Learning Scaling is Predictable, Empirically(2017)。
- Rosenfeld et al.,A Constructive Prediction of the Generalization Error Across Scales(2020)。
- McCandlish et al.,An Empirical Model of Large-Batch Training(2018)。
- Muennighoff et al.,Scaling Data-Constrained Language Models(2023)。
- Bahri et al.,Explaining Neural Scaling Laws(2021);Michaud et al.,The Quantization Model of Neural Scaling(2023)。
- Sardana & Frankle,Beyond Chinchilla-Optimal: Accounting for Inference in Language Model Scaling Laws(2023)。
14. 下一讲预告
规模定律告诉我们:训练完的模型会被使用很多次,推理的成本可能远超训练。那么推理到底贵在哪里?
下一讲(推理)会回答:
- 生成文本为什么这么慢?为什么说预填充是计算受限的、解码是内存受限的?
- KV 缓存是什么、有多大?GQA、MLA、滑动窗口怎样把它变小?
- 量化、剪枝与蒸馏怎样让模型更便宜?
- 推测解码怎样在”输出分布完全不变”的前提下加速生成?
- 连续批处理和 PagedAttention 怎样应对”请求随时到来、长度各不相同”的真实负载?
之后的第 11 讲(规模定律 II)会继续本讲的话题:学习率、批次大小怎样随规模变化,μP 怎样让小模型上调好的超参数直接用在大模型上。
下一讲之前,建议你:跑通 code/lecture09/ 下的 7 个脚本,完成练习 1、2、3、5,并尝试练习 8(b)。