对应原课:CMU 11-667 Fall 2025 · Lecture 12 · Thu 2-Oct-2025 · Scaling Up: Scaling Law of Large Language Models(Jaromir Savelka、Yubin Kim) 原课 slides:Scaling Up: Scaling Law of Large Language Models(课表上标为 scaling laws) 阅读材料:Kaplan et al. (2020), Scaling Laws for Neural Language Models;Hoffmann et al. (2022), Training Compute-Optimal Large Language Models(Chinchilla) 配套代码:code/lecture12/(1 个模块 + 5 个演示脚本;要训练约 90 个小模型,首次运行共约 15 分钟,每个脚本都有
--quick冒烟测试;结果缓存后只要几秒) 本讲的写法:骨架来自原课 slides(为什么扩大 → 扩大哪种模型 → 哪些因素重要 → 怎样配置 → 涌现能力)。“花园年鉴”是补充的:一个真实熵已知的语料,让我们能检验拟合出的”不可约损失”准不准。所有数字都来自配套代码的实际输出。
目录
- 0. 本讲导读
- 1. 为什么要扩大,扩大哪种模型
- 2. 哪些因素重要
- 3. Kaplan 的规模定律:损失是 N、D、C 的幂律
- 4. Chinchilla:给定算力,N 和 D 怎么分
- 5. 那些会悄悄改变结论的因素
- 6. 数据不够了:重复的数据
- 7. 涌现能力
- 8. 小结、常见误区、练习
0. 本讲导读
0.1 这一讲要回答的问题
slides 开头的两个问题:为什么每家公司都在追逐最大的 LLM?你只有一次机会训练一个 1 万亿参数的模型,怎样确保做对?
- 把模型做大、数据加多,损失怎样变化?能不能在训练之前就预测出来?
- 给定一笔算力预算,模型该多大、数据该多少?为什么 Kaplan 和 Chinchilla 的答案不同?
- 哪些因素(形状、学习率、调度、数据重复)会影响结论?
- “涌现能力”是真的突然学会,还是指标造成的错觉?
0.2 学完这一讲你应该能
- 写出 、 的幂律形式和 Chinchilla 的 ,解释不可约损失 ;
- 用 做算力账;说出 Chinchilla 的三种方法,用 IsoFLOP 曲线找最优配置;
- 解释 Kaplan()和 Chinchilla(,约 20 token / 参数)结论不同的原因;
- 说出调学习率、匹配调度长度、数据重复对规模试验的影响;
- 区分”涌现”的两种解释,并说明怎样用平滑的指标预测它。
0.3 本讲的实验平台:花园年鉴
scaling.py 的语料是两种文档的混合,每篇独立采样、取之不尽:
花园句子(40%):she picks her ripe plum . <eos> ← 第 1 讲的花园世界
百科条目(60%):du ri nu grows lilac . <eos> ← 3000 位人物,一篇一条事实
人物的名字由 3 个音节组成(从 16 个音节里选),被提到的频率服从 Zipf 定律(指数 1.0);每人有住址、种植、宠物三条事实。设计的用意:
- 真实熵可以精确算出来:花园句子有第 1 讲的真实概率;百科条目的每个 token 的真实条件概率可以从 Zipf 权重和事实表直接算出。验证集(3000 篇新文档、41,978 个 token)上的真实交叉熵 nats/token——任何模型都不可能更低。按 token 类别:事实 0(知道这个人,答案就确定了)、名字 2.094、其他 1.159。真实研究只能靠拟合去估计 ,这里可以检验拟合准不准。
- 长尾:要记住的 9000 条事实和人物的频率都服从 Zipf 分布——这是对”为什么损失随规模呈幂律下降”的一种流行解释(Hutter 2021;Michaud et al. 2023 的”量子化模型”:能力被拆成很多小块,它们的使用频率服从幂律,越大越多的模型一块一块地”解锁”它们)。
模型族是第 2 讲的因果 Transformer,2 层,宽度 d = 8、12、16、24、32、48、64、96、128,非嵌入参数从 1,760 到 396,800。每种宽度用学习率扫描里最好的学习率(§5.3)。
1. 为什么要扩大,扩大哪种模型
1.1 几乎有保证的收益
slides 的第一张图:Turing-NLR v5 在 MNLI 上,模型越大、预训练步数越多,微调后的准确率越高;第二张图:截至 2022 年 LLM 的参数量增长曲线(Megatron-Turing NLG 530B)。扩大几乎总是带来下游任务的提升——这是每家公司都在追逐最大模型的原因。
1.2 扩大哪种模型
**decoder 还是 encoder-decoder?**encoder-only 被排除在外:encoder-decoder 覆盖了 encoder 的功能,而 encoder-only 很难做生成。
**哪种预训练任务?**自回归(因果)LM、前缀 LM、去噪的掩码 LM(第 2 讲的三种目标)。Wang et al. (2022) 在同样的配置(T5 式的预训练、T0 式的多任务微调)下做了系统的比较:
- 预训练之后直接零样本:decoder-only + 自回归语言建模明显最好;
- 多任务微调之后:encoder-decoder + MLM 最好。
结论:流行的选择是 decoder-only + 自回归 LM——
- 经验上:预训练之后就有更好的泛化,不需要多任务的监督学习;
- 容易扩大:每条序列的训练信号多(100% 的 token 都有损失,MLM 只有 15%)、收敛更快(经验观察)、更稳定(实际操作的观察);
- OpenAI 的选择:最大的 LLM 也许只有一个位置;GPT-3 在那个时刻赢了、占据了这个位置;其他人跟随,没有证据值得拿巨额资金去赌另一条路。
2. 哪些因素重要
slides 列出扩大一次预训练时要定的配置:
- 模型大小(参数量)
- 预训练数据量
- 预训练算力(FLOPs,或 TPU / GPU 小时)
- 网络形状(参数在各部分怎样分配)
- 有效批大小
- 学习率与学习率调度
- 上下文长度
主要研究前三个;其余的有经验法则:批大小由 GPU 显存决定;在不发散的前提下用最大的学习率;上下文长度在复杂度和下游需要之间权衡。
三者的关系:训练一个 参数的模型、看 个 token,算力 (前向 2ND、反向 4ND;前置讲 P3 推导过)。
3. Kaplan 的规模定律:损失是 N、D、C 的幂律
3.1 Kaplan et al. (2020) 的设置与发现
设置:GPT 式的自回归模型,最大 15 亿个非嵌入参数;WebText2(Reddit 外链的网页),最多 230 亿 token;指标是测试集上的语言建模损失。发现:
- 网络形状没那么重要:只要在一个合理的范围内,深宽比对损失影响不大(§5.1);
- 从算力、数据量、参数量到测试损失,有一个清晰的映射:在双对数坐标上都是直线(幂律),跨越好几个数量级;
- 线性地提升准确率需要指数级地扩大;三个因素要一起扩大才能达到目标;
- 网络参数比嵌入参数重要:只数非嵌入参数时,趋势才干净(§3.5);
- 数据重复不到 4 遍还可以(Muennighoff et al. 2023,§6);语言建模损失和下游表现相关得很好(LLaMA 的图,§7.4)。
slides 的小结:规模定律给出从规模因素到语言建模准确率的清晰映射(前提是同一个模型族、同样的数据分布、同样的技术);它能降低风险——用小规模的观察决定大规模的最佳配置;它可靠,但回报递减。
3.2 实验:L(N)
代码 01 §2:D 固定为 200 万 token,只改变模型大小。
| 模型 | 非嵌入参数 N | 总参数 | 验证损失 L | L − E | 事实 | 名字 | 其他 |
|---|---|---|---|---|---|---|---|
| d8 | 1,760 | 2,752 | 1.5994 | 0.3684 | 2.586 | 2.813 | 1.354 |
| d12 | 3,792 | 5,280 | 1.4809 | 0.2499 | 2.133 | 2.616 | 1.266 |
| d16 | 6,592 | 8,576 | 1.4898 | 0.2588 | 2.007 | 2.749 | 1.262 |
| d24 | 14,496 | 17,472 | 1.4117 | 0.1807 | 2.012 | 2.447 | 1.215 |
| d32 | 25,472 | 29,440 | 1.3531 | 0.1222 | 1.563 | 2.220 | 1.204 |
| d48 | 56,640 | 62,592 | 1.3454 | 0.1145 | 1.456 | 2.200 | 1.204 |
| d64 | 100,096 | 108,032 | 1.3353 | 0.1044 | 1.325 | 2.170 | 1.203 |
| d96 | 223,872 | 235,776 | 1.3335 | 0.1026 | 1.282 | 2.131 | 1.210 |
| d128 | 396,800 | 412,672 | 1.3217 | 0.0908 | 1.198 | 2.146 | 1.197 |
(真实的熵:全部 1.231,事实 0,名字 2.094,其他 1.159。)
三种拟合(对数坐标上的最小二乘):
| 形式 | 指数 α | 对数残差 |
|---|---|---|
| (Kaplan 的形式,不留不可约项) | 0.033 | 0.0239 |
| ,(已知的真实熵) | 0.259 | 0.0170 |
| , 一起拟合 | 0.549( = 1.307) | 0.0122 |
损失大体上随 N 下降,在双对数坐标上近似一条直线。Kaplan 那种不留不可约项的形式也能拟合——他们的模型离”地板”还很远,指数小(),不留 问题不大。但看第三行: 一起拟合时,估出的”地板”是 1.307,比真实的熵 1.231 高了一截。原因在表的下半部分:d128 每个参数只分到 5 个训练 token,而 d16 有 1136 个——模型越大越是数据不够,曲线弯向的不是真实的熵,而是”这么多数据最多能学到的程度”(d64 之后,“名字”和”其他”两列几乎不再下降)。Kaplan et al. 用 230 亿 token 训练最大 15 亿参数的模型(每参数 15 个以上),才让 L(N) 基本不受数据限制。损失应当写成 N 和 D 两项之和——这正是 §4 Chinchilla 的公式。
(d16 比 d12 略差:学习率是在 50 万 token 上调的,训练 200 万 token 时不一定最优——真实的规模试验里也到处是这种噪声。)
3.3 实验:L(D)
代码 01 §3:模型固定为 d128,只改变数据量。
| 训练 token D | 验证损失 | L − E | 事实 | 名字 | 其他 |
|---|---|---|---|---|---|
| 62,464 | 1.8567 | 0.6258 | 2.893 | 3.057 | 1.611 |
| 124,928 | 1.6309 | 0.4000 | 2.621 | 2.816 | 1.390 |
| 249,856 | 1.4700 | 0.2391 | 2.252 | 2.509 | 1.264 |
| 499,712 | 1.3977 | 0.1668 | 1.864 | 2.327 | 1.225 |
| 999,424 | 1.3552 | 0.1243 | 1.517 | 2.240 | 1.206 |
| 1,999,872 | 1.3217 | 0.0908 | 1.198 | 2.146 | 1.197 |
拟合 :,对数残差 0.0142(不留 时 )。三类 token 的进步速度很不一样:“其他”(花园句子的语法)很快就接近它的熵 1.159;“名字”和”事实”一直在降——数据越多,认识的冷门人物越多。长尾上一点一点”解锁”的知识,叠加起来就是一条平滑的幂律。
3.4 线性的进步,指数级的代价
代码 01 §4(只看测量值):参数从 1,760 放大到 396,800(225 倍),损失 1.599 → 1.322,只降了 17.4%(可约部分 L − E 降了 75.4%);数据从 6.2 万放大到 200 万(32 倍),损失 1.857 → 1.322。每放大一倍,可约损失大约乘上一个固定的比例——这就是幂律的定义。按 :可约损失要减半,N 要乘 15 倍(前提是数据也跟上)。规模定律可靠,但回报递减。
3.5 参数量该不该算嵌入层
代码 01 §5:嵌入参数在 d8 里占总参数的 36.0%,在 d128 里只占 3.8%。用非嵌入参数拟合 (残差 0.0170),用总参数拟合 (残差 0.0182)。嵌入层只是一张查找表(每个 token 一行),它的大小由词表决定,和模型”能算多少”关系不大;在小模型里它占的比例大,算进 N 会把小模型”算大了”。Kaplan et al. 发现只数非嵌入参数时,不同深度、宽度的模型落在同一条线上(slides 第 29 页)。在我们的实验里两者差别不大,但非嵌入参数的拟合略好。
4. Chinchilla:给定算力,N 和 D 怎么分
4.1 问题
slides:给定一笔算力预算和一个候选模型结构,选出最优的扩大配置——例如”100 万 H100 小时,预训练最好的 LLaMA 式 LLM”。要选的是模型大小和预训练 token 数。
- 算力预算是最大的约束;
- 在目标规模上没有探索的余地;
- 预算上、时间上都只允许一次大规模的预训练。
解决办法:在小规模上做很多实验,拟合规模定律,再外推到目标算力。
4.2 Hoffmann et al. (2022) 的三种方法
- 固定模型大小、改变训练 token 数:每种大小训练到接近收敛,记录每个 FLOP 水平上最好的(模型大小, 数据量),即所有训练曲线的下包络,再估计规模定律。
- 固定总 FLOPs、训练不同大小的模型(IsoFLOP):每个大小训练到 个 token,记录最终损失;对每个预算找出最好的配置,再改变预算重复。
- 参数化拟合:用前两种方法收集的数据点拟合
三项分别是:不可约的熵(“自然文本的熵”)、模型有限造成的损失、数据有限造成的损失。给定 ,最优解是 、。
结论: 和 都约 ——模型和数据同比例放大,每个参数约 20 个 token。Kaplan 当年的结论是 :算力主要该花在把模型做大上——GPT-3(1750 亿参数、3000 亿 token,每参数不到 2 个)和 Gopher 都是按这个思路训练的。
Chinchilla vs Gopher:同样的算力,Chinchilla(预测的最优:70B 参数、1.4T token)对 Gopher(凭经验的配置:280B 参数、300B token)——Chinchilla 在 Pile 的各个子集上的语言建模损失全面更好,在 MMLU、BIG-bench、闭卷问答等下游任务上也全面提升。模型小了 4 倍,推理也便宜 4 倍。
4.3 实验:IsoFLOP 曲线
代码 02 §1(每个点都是一个训练到 的模型;只保留 10 万 ≤ D ≤ 800 万的大小):
| C = 1e10 | N | D | D / N | 验证损失 |
|---|---|---|---|---|
| d8 | 1,760 | 946,176 | 537.6 | 1.6530 |
| d12 | 3,792 | 439,296 | 115.8 | 1.6202 |
| d16 | 6,592 | 251,904 | 38.2 | 1.7114 |
| d24 | 14,496 | 114,688 | 7.9 | 1.7340 |
| C = 3e11 | N | D | D / N | 验证损失 |
|---|---|---|---|---|
| d16 | 6,592 | 7,584,768 | 1150.6 | 1.4015 |
| d24 | 14,496 | 3,448,832 | 237.9 | 1.3997 |
| d32 | 25,472 | 1,961,984 | 77.0 | 1.3576 |
| d48 | 56,640 | 882,688 | 15.6 | 1.3855 |
| d64 | 100,096 | 498,688 | 5.0 | 1.4004 |
| d96 | 223,872 | 223,232 | 1.0 | 1.4805 |
| d128 | 396,800 | 125,952 | 0.3 | 1.6243 |
(C = 3e10、1e11 的表见脚本输出。)曲线大体是 U 形(个别点有噪声):模型太小,参数装不下要学的东西;模型太大,在同样的算力下只能看很少的数据。像 Chinchilla 一样对每条曲线的 (log N, L) 拟合一条抛物线取最低点:
| 算力 C | N* | D* | 每参数 token | L* |
|---|---|---|---|---|
| 1e10 | 2,062 | 808,288 | 392.0 | 1.6436 |
| 3e10 | 7,990 | 625,818 | 78.3 | 1.5345 |
| 1e11 | 12,718 | 1,310,524 | 103.0 | 1.4169 |
| 3e11 | 26,374 | 1,895,786 | 71.9 | 1.3575 |
最优点随算力的变化:、。这个世界里最优的”每个参数配多少 token”是 72~392,远多于 Chinchilla 的 20:要学的东西主要是长尾的事实,“多看数据”比”加参数”划算得多。slides 的提醒正在于此:规模定律普遍存在,但具体的函数各不相同——数据的性质和分布、Transformer 结构、预训练任务、预处理细节都会改变它,不存在通用的规模函数。
4.4 实验:方法 3 的参数化拟合
代码 02 §2,用 IsoFLOP 的全部 22 个点拟合:
平均绝对误差 0.0186;推出的最优分配 。两点值得注意:
- 拟合的 E 比真实的熵低了 0.185。实验点离地板还远时, 和两个幂律项此消彼长( 小一点、幂律项衰减得慢一点,也能拟合得同样好),“地板”很难估准。Chinchilla 原文的拟合是 、、——那个 1.69 同样是”估计”,没有人知道自然文本真正的熵。
- 两种方法给出的分配指数不一致(0.71 vs 0.61)——Chinchilla 原文的三种方法同样给出了略有差别的结果(0.50、0.49、0.46)。
4.5 实验:只有一次机会
代码 02 §3:用 1e10~3e11 的结果预测 C = 1e12 的最优配置(方法 2 外推 N* ≈ 67,584;方法 3 N* ≈ 56,034、预测损失 1.2972),然后真的去训练:
| 模型 | N | D | D / N | 预测损失 | 实际损失 |
|---|---|---|---|---|---|
| d32 | 25,472 | 6,542,336 | 256.8 | 1.3080 | 1.3237 |
| d48 | 56,640 | 2,941,952 | 51.9 | 1.2972 | 1.3331 |
| d64 | 100,096 | 1,665,024 | 16.6 | 1.3035 | 1.3442 |
| d96 | 223,872 | 744,448 | 3.3 | 1.3356 | 1.3756 |
| d128 | 396,800 | 419,840 | 1.1 | 1.3785 | 1.4044 |
外推出的趋势是对的——U 形、最优点大致在哪——但数值偏乐观:每个点的实际损失都比预测高(平均 0.032),预测的最优大小比实际最好的大一档。原因之一:学习率是在 50 万 token 上调的,训练更久时不一定还是最优;外推的距离越远,这类”小规模上没暴露的问题”越多。
slides 的规模化流水线:
建模研究(找最好的预训练方法)→ 规模试验(在更大的规模上验证稳健性)→ 规模定律(用很多次运行估计规模函数)→ 扩大(百万 / 十亿美元的押注)
↑ 普通资源就能做(commodity scale) ↑ 只有少数机构能做(privileged access)
研究与生产的不同:研究要快、迭代多、建立新知识、可以也应该冒险、没有保证的结果、靠人才;生产只有一次扩大的机会、要做出更好的产品、最好别搞砸、交付明确而短期、靠资源。上面那张表就是押注之前能做的检验——真实的团队会在中间加几个更大的规模试验来缩短外推的距离。
5. 那些会悄悄改变结论的因素
5.1 网络形状
代码 03 §1:参数量相近(约 10 万)、深宽比不同,训练 100 万 token:
| 宽度 d | 层数 | 非嵌入参数 | d / 层数 | 验证损失 |
|---|---|---|---|---|
| 32 | 8 | 101,696 | 4 | 1.3690 |
| 48 | 4 | 113,184 | 12 | 1.3672 |
| 64 | 2 | 100,096 | 32 | 1.3633 |
| 96 | 1 | 112,032 | 96 | 1.3681 |
宽高比从 4 变到 96,损失只差百分之一以内——形状的影响远小于参数总量(Kaplan et al. 的图)。实践中形状更多由硬件决定:宽而浅的模型并行度高、跑得快。(这个语料里连 1 层的模型都不吃亏:花园句子和百科条目不需要多步组合的推理;Kaplan et al. 也发现只有极端的形状才明显变差。)
5.2 学习率调度的长度
代码 03 §2:d64。A:一次训练 400 万 token(余弦调度按这个长度设定),在中途评估;B:每个 D 各训练一个模型,余弦调度刚好在 D 处降到底。
| D | A:长训练的中途 | B:按长度调度 | 差距 |
|---|---|---|---|
| 250,000 | 1.4836 | 1.4590 | 0.0245 |
| 500,000 | 1.4284 | 1.3992 | 0.0292 |
| 1,000,000 | 1.3930 | 1.3633 | 0.0297 |
| 2,000,000 | 1.3458 | 1.3353 | 0.0105 |
长训练的中途,学习率还很高、还没”退火”,损失比调度恰好结束的模型高——用中途检查点画出的 L(D),每个点都被高估了。在这里各点被高估的幅度差不多,拟合出的指数几乎不受影响(β 0.370 vs 0.373);Hoffmann et al. 指出,Kaplan et al. 用固定的调度长度、取中途的结果,在 token 较少的点上高估得更多,于是低估了”多训练”的好处,得出”算力应该更多地花在把模型做大上”——这是两篇论文结论不同的主要原因之一(另一个是 Kaplan 的模型更小、并且不计嵌入参数)。
5.3 学习率
代码 03 §3:训练 50 万 token,峰值学习率扫一遍:
| 模型 | N | 3e-3 | 1e-2 | 3e-2 | 6e-2 | 选用 |
|---|---|---|---|---|---|---|
| d8 | 1,760 | 2.2616 | 1.8811 | 1.7623 | 1.7397 | 0.06 |
| d16 | 6,592 | 1.8466 | 1.6106 | 1.5809 | 1.5848 | 0.03 |
| d32 | 25,472 | 1.5786 | 1.4621 | 1.4269 | 1.5106 | 0.03 |
| d64 | 100,096 | 1.4703 | 1.3992 | 1.4102 | 1.4692 | 0.01 |
| d128 | 396,800 | 1.4058 | 1.3977 | 1.4270 | 1.9121 | 0.01 |
(完整的 9 行见脚本输出。)小模型需要大得多的学习率;大模型的最佳学习率更小,再大就迅速变差。
我的第一版实验所有大小都用 3e-3:对大模型差不多合适,对小模型却小了 10 倍(d16:1.85 vs 1.58)。结果小模型被系统地拖累,IsoFLOP 的最低点全挤在最小的模型上,参数化拟合得出 E = 0,外推完全错误。(代码 README 第 1 条)每个规模都要调学习率(或者用 μP 这类参数化,让最佳学习率不随宽度变化)——没调好学习率的规模试验,得出的指数也不可信。slides 的经验法则”在不发散的前提下用最大的学习率”说的是同一件事:最佳点往往就在发散的边缘附近。
6. 数据不够了:重复的数据
Chinchilla 说模型和数据要同比例放大,可是高质量的文本是有限的(第 3 讲)。slides:“语料越大,重复越少。最好多收集数据:重复不到 4 遍还可以,再多回报递减”(Muennighoff et al. 2023)。
代码 04:d48,“数据受限”时只有 20 万个不重复的 token:
| 遍数 | 训练 token D | 新数据 | 重复数据 | 差距 |
|---|---|---|---|---|
| 1 | 200,000 | 1.5403 | 1.5403 | 0 |
| 2 | 400,000 | 1.4407 | 1.4370 | −0.0038 |
| 4 | 800,000 | 1.3877 | 1.3955 | 0.0078 |
| 8 | 1,600,000 | 1.3551 | 1.3603 | 0.0052 |
| 16 | 3,200,000 | 1.3285 | 1.3392 | 0.0107 |
前几遍重复几乎和新数据一样好;遍数再多差距慢慢拉大——但在这个小实验里,即使重复 16 遍也只差 0.01 左右(Muennighoff et al. 在大得多的规模上发现,重复到 40 遍左右,额外的训练就几乎毫无价值)。16 遍时按类别看:差距几乎全在”事实”上(新数据 1.229、重复数据 1.294),“名字”和”其他”差不多。新数据会不断带来新的冷门人物和事实,重复数据带不来——长尾知识最依赖”新”数据。这也是第 23 讲”合成数据”的动机之一。
7. 涌现能力
7.1 观察
Wei et al. (2022):涌现能力是”在小规模时没有(随机水平)、在大规模时突然出现”的能力,特点是
- 陡峭:恰好在某个规模上,从随机水平跳到合理的表现;
- 不可预测:小规模和大规模的能力之间没有清楚的映射。
例如 MMLU 的零样本能力在某个规模突然出现;不同的能力在不同的规模上出现,很难把”能力的复杂程度”和”出现的规模”对应起来。
7.2 反方:指标的错觉?
Schaeffer et al. (2023):“涌现”是不是指数型指标造成的?例如精确匹配要求所有 token 都对才算 1。他们在 BIG-Bench 上发现,涌现只在 39 种指标中的 5 种上出现,而这些指标都是更细粒度预测的指数型函数;换成连续的指标(例如 token 级别的编辑距离),曲线就是平滑的。
slides 的回应:然而用户的体验是非线性的——选择题要选对、代码要能运行、一段话要整体通顺;真实系统的渐进改进,也会带来”涌现”的用法。而且这些能力(零样本解题、遵循指令、使用工具)正是 LLM 了不起、充满潜力的地方。
7.3 实验:同样的进步,不同的指标
代码 05:用 §3.2 的 9 个模型(都训练了 200 万 token)做”常识题”:只问最热门的 50 位人物(150 条事实),每道题随机问其中 k 条,全对才得分。
| 模型 | N | k = 1 | k = 4 | k = 16 精确匹配 | k = 16 部分得分 | 正确答案的平均概率 |
|---|---|---|---|---|---|---|
| d8 | 1,760 | 7.0% | 0.0% | 0.0% | 6.9% | 0.085 |
| d12 | 3,792 | 21.0% | 0.1% | 0.0% | 19.8% | 0.141 |
| d16 | 6,592 | 28.6% | 0.5% | 0.0% | 27.9% | 0.172 |
| d24 | 14,496 | 30.1% | 0.9% | 0.0% | 29.7% | 0.193 |
| d32 | 25,472 | 63.0% | 15.5% | 0.1% | 63.3% | 0.373 |
| d48 | 56,640 | 75.9% | 34.5% | 1.6% | 76.9% | 0.468 |
| d64 | 100,096 | 84.9% | 50.6% | 6.5% | 84.7% | 0.568 |
| d96 | 223,872 | 89.2% | 62.3% | 15.4% | 88.8% | 0.592 |
| d128 | 396,800 | 94.5% | 79.4% | 40.5% | 94.5% | 0.698 |
k = 16 的那一列:前六个模型几乎全是 0,到了最大的几个模型才”突然”冒出来——看起来就是一种涌现能力。可是部分得分(答对的比例,就是单个事实的准确率 p)一直在平稳上升;精确匹配约等于 ——p 从 0.5 涨到 0.8, 只从 0.00002 涨到 0.03;p 再涨到 0.95, 才到 0.44。能力本身在平滑地进步,是”全对才算对”这个指标把它变成了一道陡峭的台阶。
第一版问的是全部 3000 位人物:最大的模型单个准确率也只有一成多, 永远是 0,什么也”涌现”不出来。(代码 README 第 6 条)
7.4 实验:能提前预测吗?
代码 05 §3:只看 d8~d64 这 7 个模型,预测 d96、d128(横轴都是 log N):
| 方法 | d96 预测 / 实际 | d128 预测 / 实际 |
|---|---|---|
| 精确匹配:直接线性外推 | 4.5% / 15.4% | 5.1% / 40.5% |
| 单个事实的准确率 p:直接线性外推 | 100.6% / 88.8% | 112.2% / 94.5% |
| p:在 logit 空间里线性外推 | 92.8% / 88.8% | 95.9% / 94.5% |
| 精确匹配:由外推的 p 换算成 | 30.4% / 15.4% | 51.2% / 40.5% |
- 精确匹配在小模型上一直贴着 0,直接外推几乎得不到信息——这就是”不可预测”;
- 准确率有上限,直接线性外推会冲过 100%;在 logit 空间里外推,它会自然地趋近 1;
- 先预测平滑的量(p,或者损失),再按”全对的概率 ≈ “换算,才能大致预见精确匹配的”涌现”( 对 p 的误差极其敏感,所以只能”大致”)。
规模试验要盯着平滑的指标(损失、对数概率、部分得分),而不是盯着精确匹配。
损失和下游(代码 05 §4):把”改变模型大小”和”改变数据量”的 14 个模型放在一起,验证损失和常识题准确率的相关系数 −0.788。更重要的是它们落在同一条曲线上:d128 训练 100 万 token 和 d32 训练 200 万 token 的损失几乎一样(1.3552 vs 1.3531),准确率也几乎一样(63.3% vs 62.7%)——LLaMA 论文里”训练损失 vs 零样本准确率”的图说的就是这个。这正是规模定律有用的原因:损失可以从小规模外推,下游能力再从损失推出来。这条曲线不是直线:损失降到 1.36 附近以下,准确率才快速上升——又是一种”涌现”的样子。
7.5 slides 的最后一点:垄断
这些能力往往在大多数人够不着的规模上才出现:技术和知识的垄断——只有少数几个地方能做;科学方法的巨大负担——在大规模上做受控的科学实验几乎不可能。这也是这门课坚持”在可控的小世界里做实验”的原因之一。
8. 小结、常见误区、练习
8.1 小结
- 为什么扩大:几乎有保证的收益;decoder-only + 自回归 LM 成为主流(预训练后就能零样本、训练信号多、稳定、先行者优势)。
- Kaplan:损失随 N、D、C 呈幂律下降,形状不太重要,只数非嵌入参数;线性的进步需要指数级的代价。实验:L(N) 和 L(D) 都近似幂律;固定 D 时大模型撞上数据的限制,拟合出的地板(1.307)高于真实的熵(1.231)。
- Chinchilla:给定算力,用 IsoFLOP 和参数化拟合 找最优配置;原文结论是 N 和 D 同比例放大、约 20 token / 参数。实验:U 形的 IsoFLOP 曲线;这个世界的最优比例是 72~392(不存在通用的规模函数);拟合的 E 偏低 0.185;外推的趋势对、数值偏乐观。
- 会悄悄改变结论的因素:形状几乎不影响;调度长度要和训练长度匹配;每个规模都要调学习率(第一版没调,结论全错)。
- 数据受限:重复几遍几乎和新数据一样好,差距主要在长尾知识上。
- 涌现:要求很多 token 同时正确的指标会把平滑的进步变成台阶;外推平滑的量再换算才能预见它;但用户体验本来就是非线性的。损失和下游准确率落在同一条曲线上。
8.2 常见误区
- “规模定律说损失可以无限降低”:有不可约的熵 E;而且固定 N 或 D 时,另一项会成为瓶颈(§3.2)。
- “拟合出的 E 就是语言的真实熵”:E 和幂律项此消彼长,离地板远时很难估准,这里偏低了 0.185(§4.4)。
- “Chinchilla 的 20 token / 参数是普适常数”:它依赖数据、结构、训练方法;这个世界是 72~392(§4.3)。
- “规模试验里所有模型用同一套超参数才公平”:不调学习率会系统地拖累一部分模型,结论随之偏斜(§5.3)。
- “一次长训练的中途检查点 = 训练那么长的模型”:中途的学习率还没退火,损失被高估(§5.2)。
- “涌现说明模型在某个规模上质变了”:常常是指标的非线性;底层的能力在平滑进步(§7.3)。
- “既然能外推,就不用中间规模的试验了”:外推得越远越不准(§4.5)。
8.3 练习
练习 1(Chinchilla 的配比):Gopher 的算力约 FLOPs。按 和”每参数 20 个 token”,算出最优的 N 和 D,和 Chinchilla 的实际配置比较。
参考答案
,,约 69B 参数;,约 1.4T token。这正是 Chinchilla(70B、1.4T)。Gopher 用同样的算力训练了 280B 参数、300B token——每参数只有约 1 个 token,“模型太大、数据太少”。
练习 2(用我们的拟合做配置):用 §4.4 的拟合(E = 1.046、A = 4.218、α = 0.303、B = 114.84、β = 0.474),算出 C = 1e12、1e13、1e14 时的最优 N*、D* 和每参数的 token 数。随着算力增大,这个比例怎样变化?为什么?
参考答案(用 chinchilla_optimum 计算)
| C | N* | D* | D* / N* | 预测损失 |
|---|---|---|---|---|
| 1e12 | 56,034 | 2,974,362 | 53.1 | 1.2972 |
| 1e13 | 228,192 | 7,303,788 | 32.0 | 1.2102 |
| 1e14 | 929,279 | 17,935,045 | 19.3 | 1.1534 |
:因为 β > α(数据项衰减得比参数项快),算力越大,越应该把多出来的算力花在参数上,比例逐渐下降。只有 α = β 时比例才是常数(Chinchilla 原文的 α = 0.34、β = 0.28 很接近,所以”20”在很大的范围内近似成立)。另外注意 1e14 的预测损失 1.1534 低于真实的熵 1.231——这暴露了拟合的 E 偏低:外推越远,这个错误越明显。
练习 3(幂律的算术):可约损失 。(a) 每把 N 翻一倍,可约损失降低百分之几?(b) 要把可约损失降到十分之一,N 要乘多少?
参考答案
(a) 。(b) 倍。这就是”线性的进步需要指数级的代价”:每一点点改进的价格都按倍数上涨。真实 LLM 的指数更小(Kaplan 的 :可约损失降到十分之一要 N 乘 ),所以单靠放大参数改善得非常慢,必须同时增加数据、改进方法。
练习 4(精确匹配的台阶):单个子任务的准确率 p 分别是 0.5、0.8、0.9、0.95、0.99 时,k = 4、16、64 个子任务全对的概率是多少(假设独立)?如果一个”能力”需要 64 步推理都对,它看起来会怎样”涌现”?
参考答案
| p | k = 4 | k = 16 | k = 64 |
|---|---|---|---|
| 0.5 | 0.063 | 0.000015 | 5e-20 |
| 0.8 | 0.41 | 0.028 | 6e-7 |
| 0.9 | 0.66 | 0.19 | 0.0012 |
| 0.95 | 0.81 | 0.44 | 0.038 |
| 0.99 | 0.96 | 0.85 | 0.53 |
k 越大,台阶越陡、出现得越晚:64 步的任务在 p = 0.95 时还只有 3.8%,到 p = 0.99 才过半——在 p 平滑地从 0.9 涨到 0.99 的那一段规模里,这个能力会从”几乎为 0”跳到”一半以上”。这也说明了为什么长链条的推理、长代码的生成,看起来总是”突然变得可用”。
练习 5(数据快用完了):你有 1T 个不重复的高质量 token。(a) 按每参数 20 个 token,想训练一个 70B 的模型够不够?400B 呢?(b) 如果不够,有哪些选择?各自的代价是什么?
参考答案
(a) 70B 需要 1.4T,重复 1.4 遍,按 Muennighoff et al. 几乎和新数据一样好;400B 需要 8T,要重复 8 遍,回报已经明显递减。(b) 选择:① 训练更小的模型、多看几遍(偏离计算最优,但推理也更便宜,见练习 6);② 降低过滤门槛、引入更多领域的数据(代码、多语言、学术论文;第 3 讲的质量—数量权衡);③ 合成数据(第 23 讲;有模型坍塌、多样性不足的风险);④ 接受重复,用更强的正则化(dropout、权重衰减)减轻过拟合;⑤ 把一部分知识放进检索的文档库(第 11 讲),减轻参数需要记住的量。
练习 6(考虑推理成本):Chinchilla 只最小化训练算力。模型上线后,每生成一个 token 约要 FLOPs。用练习 2 的拟合,设目标损失 = C = 1e12 时的最优损失(1.2972,对应 N = 56,034、D = 2,974,362),如果模型一生要处理 10 倍于训练数据的 token(约 3000 万),训练 + 推理的总算力最小的配置是什么?100 倍呢?
参考答案(代码里在 iso-loss 曲线上搜索)
只考虑训练:N = 55,830、D = 2,985,272(约 53 token / 参数),总算力 1.0e12。推理 10 倍:最优 N = 26,367、D = 8,785,343(333 token / 参数),总算力 2.96e12——如果仍用计算最优的模型,训练 1e12 + 推理 ,共 4.3e12,小模型省了约 32%。推理 100 倍:最优 N = 17,352、D = 3.0e7(1748 token / 参数),总算力 1.35e13,比计算最优的模型(约 3.4e13)便宜 2.5 倍。这就是 LLaMA 系列”过度训练”小模型(例如 8B 模型训练 15T token)的道理:模型要被大量使用时,最优点往小模型、多数据的方向移动(Sardana & Frankle 2023)。
练习 7(思考:为什么是 decoder-only):§1.2 说 decoder-only + 自回归 LM 成为主流,原因之一是”每条序列 100% vs 15% 的训练信号”。(a) 解释这个比较;(b) Wang et al. 发现多任务微调之后 encoder-decoder + MLM 更好——为什么大家仍然选 decoder-only?
参考答案
(a) 自回归 LM 在每个位置都预测下一个 token,序列里每个 token 都贡献损失;MLM 只遮住 15% 的位置、只在那里算损失,同样的计算量得到的监督信号少得多(第 2 讲 04 号脚本也看到了这一点)。(b) ① 规模化之后,预训练本身就让模型能零样本 / 少样本地完成任务,不再依赖多任务微调这一步;② 生成是统一的接口,所有任务都能写成续写;③ 结构简单、易于扩展和优化(KV 缓存、推理系统都围绕它);④ 路径依赖:GPT-3 成功之后,生态(数据、工具、经验、规模定律)都建立在 decoder-only 上,再去赌另一条路的代价巨大——slides 所说的”没有证据值得拿巨额资金去赌”。
练习 8(思考:什么决定了最优的 token / 参数比):这个世界的最优比例是 72~392,Chinchilla 是 20。从”语料里要学的东西是什么”的角度解释。如果把花园年鉴的人物从 3000 人减到 300 人,你预期最优比例会怎样变?
参考答案
最优比例反映”多看一些数据”和”多一些参数”哪个更能降低损失。这个语料的可约损失主要来自长尾事实:一条冷门事实只有被见到才可能学会,而记住 9000 条事实需要的容量并不大——所以数据比参数值钱,比例很高。真实文本里,既有大量需要容量的复杂规律(语法、推理、风格),也有长尾知识,两者平衡在 20 左右。人物减到 300 人:长尾变短,较少的数据就能看全所有人物,“见到”不再是瓶颈,记住它们需要的容量也更小——整个可约损失会更快饱和,最优比例应当下降,而且规模定律的有效范围变窄(很快就撞上 E)。这说明规模定律刻画的是”数据分布 × 模型族 × 训练方法”的组合,换了数据就要重新拟合。
练习 9(思考:只有一次机会):你负责一次预算 1000 万美元的预训练。根据本讲,列出押注之前你会做的小规模实验,以及你会怎样判断”外推是否可信”。
参考答案(一种方案)
① 在目标数据和最终结构上,跑一组跨 2~3 个数量级算力的 IsoFLOP 实验(每个大小都扫学习率,调度长度和训练长度匹配);② 用方法 2 和方法 3 分别拟合,比较两者的分配指数和预测(不一致说明还没进入稳定的幂律区);③ 留出最大的一两个预算做回测:只用更小的预算拟合,预测它们,看误差(本讲 §4.5 的误差是 0.03);④ 在目标规模的 1/10~1/100 做一次”规模试验”,检查训练是否稳定(损失尖峰、发散),并校准外推;⑤ 除了损失,再跟踪几个平滑的下游指标(对数概率、部分得分),预测关心的能力(§7.4);⑥ 预留应对故障和不稳定的预算(第 13 讲:检查点、回滚)。判断外推可信的信号:回测误差小且稳定、两种方法一致、拟合的指数在不同的预算子集上稳定、训练动态在规模试验中没有新的问题。
8.4 延伸阅读
- 原课阅读:Kaplan et al. (2020), Scaling Laws for Neural Language Models;Hoffmann et al. (2022), Training Compute-Optimal Large Language Models
- 结构与目标:Wang et al. (2022), What Language Model Architecture and Pretraining Objective Work Best for Zero-Shot Generalization?;Tay et al. (2022), Scaling Laws vs Model Architectures
- 数据与推理:Muennighoff et al. (2023), Scaling Data-Constrained Language Models;Sardana & Frankle (2023), Beyond Chinchilla-Optimal: Accounting for Inference in Language Model Scaling Laws;Touvron et al. (2023), LLaMA
- 为什么是幂律:Hutter (2021), Learning Curve Theory;Michaud et al. (2023), The Quantization Model of Neural Scaling;Bahri et al. (2021), Explaining Neural Scaling Laws
- 涌现:Wei et al. (2022), Emergent Abilities of Large Language Models;Schaeffer et al. (2023), Are Emergent Abilities of Large Language Models a Mirage?;Du et al. (2024), Understanding Emergent Abilities of Language Models from the Loss Perspective
- 超参数的迁移:Yang et al. (2022), Tensor Programs V: Tuning Large Neural Networks via Zero-Shot Hyperparameter Transfer(μP);Besiroglu et al. (2024), Chinchilla Scaling: A replication attempt
- 本仓库的相关内容:前置讲 P3(6ND 与 GPU 小时);第 3 讲(数据质量与数量);第 5 讲(评估指标);第 11 讲(检索 vs 参数);CS336 的规模定律讲次
8.5 下一讲预告
规模定律告诉我们该训练多大的模型、用多少数据。可是 1 万亿参数的模型,一块 GPU 既放不下也算不完。第 13 讲:优化与并行训练——为什么几乎所有 LLM 都用 Adam;FP16、BF16 和混合精度;数据并行、张量并行、流水线并行和 ZeRO 各自切的是什么、要通信什么。我们会在一台 CPU 上模拟多卡训练,验证每种并行方式都和单卡训练逐位一致。