第 12 讲:扩大 LLM——规模定律

Large Language Models: Methods and Applications · Lecture 12。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

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

本篇目录

对应原课: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. 本讲导读

0.1 这一讲要回答的问题

slides 开头的两个问题:为什么每家公司都在追逐最大的 LLM?你只有一次机会训练一个 1 万亿参数的模型,怎样确保做对?

  • 把模型做大、数据加多,损失怎样变化?能不能在训练之前就预测出来?
  • 给定一笔算力预算,模型该多大、数据该多少?为什么 Kaplan 和 Chinchilla 的答案不同?
  • 哪些因素(形状、学习率、调度、数据重复)会影响结论?
  • “涌现能力”是真的突然学会,还是指标造成的错觉?

0.2 学完这一讲你应该能

  • 写出 L(N)L(N)、L(D)L(D) 的幂律形式和 Chinchilla 的 L(N,D)=E+A/Nα+B/DβL(N,D) = E + A/N^\alpha + B/D^\beta,解释不可约损失 EE;
  • 用 C≈6NDC \approx 6ND 做算力账;说出 Chinchilla 的三种方法,用 IsoFLOP 曲线找最优配置;
  • 解释 Kaplan(N∗∝C0.73N^* \propto C^{0.73})和 Chinchilla(N∗∝C0.5N^* \propto C^{0.5},约 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. 真实熵可以精确算出来:花园句子有第 1 讲的真实概率;百科条目的每个 token 的真实条件概率可以从 Zipf 权重和事实表直接算出。验证集(3000 篇新文档、41,978 个 token)上的真实交叉熵 E=1.231E = 1.231 nats/token——任何模型都不可能更低。按 token 类别:事实 0(知道这个人,答案就确定了)、名字 2.094、其他 1.159。真实研究只能靠拟合去估计 EE,这里可以检验拟合准不准。
  2. 长尾:要记住的 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 显存决定;在不发散的前提下用最大的学习率;上下文长度在复杂度和下游需要之间权衡。

三者的关系:训练一个 NN 参数的模型、看 DD 个 token,算力 C≈6NDC \approx 6ND(前向 2ND、反向 4ND;前置讲 P3 推导过)。


3. Kaplan 的规模定律:损失是 N、D、C 的幂律

3.1 Kaplan et al. (2020) 的设置与发现

设置:GPT 式的自回归模型,最大 15 亿个非嵌入参数;WebText2(Reddit 外链的网页),最多 230 亿 token;指标是测试集上的语言建模损失。发现:

  1. 网络形状没那么重要:只要在一个合理的范围内,深宽比对损失影响不大(§5.1);
  2. 从算力、数据量、参数量到测试损失,有一个清晰的映射:在双对数坐标上都是直线(幂律),跨越好几个数量级;
  3. 线性地提升准确率需要指数级地扩大;三个因素要一起扩大才能达到目标;
  4. 网络参数比嵌入参数重要:只数非嵌入参数时,趋势才干净(§3.5);
  5. 数据重复不到 4 遍还可以(Muennighoff et al. 2023,§6);语言建模损失和下游表现相关得很好(LLaMA 的图,§7.4)。

slides 的小结:规模定律给出从规模因素到语言建模准确率的清晰映射(前提是同一个模型族、同样的数据分布、同样的技术);它能降低风险——用小规模的观察决定大规模的最佳配置;它可靠,但回报递减。

3.2 实验:L(N)

代码 01 §2:D 固定为 200 万 token,只改变模型大小。

模型非嵌入参数 N总参数验证损失 LL − E事实名字其他
d81,7602,7521.59940.36842.5862.8131.354
d123,7925,2801.48090.24992.1332.6161.266
d166,5928,5761.48980.25882.0072.7491.262
d2414,49617,4721.41170.18072.0122.4471.215
d3225,47229,4401.35310.12221.5632.2201.204
d4856,64062,5921.34540.11451.4562.2001.204
d64100,096108,0321.33530.10441.3252.1701.203
d96223,872235,7761.33350.10261.2822.1311.210
d128396,800412,6721.32170.09081.1982.1461.197

(真实的熵:全部 1.231,事实 0,名字 2.094,其他 1.159。)

三种拟合(对数坐标上的最小二乘):

形式指数 α对数残差
L=AN−αL = A N^{-\alpha}(Kaplan 的形式,不留不可约项)0.0330.0239
L−E=AN−αL - E = A N^{-\alpha},E=1.231E = 1.231(已知的真实熵)0.2590.0170
L=E+AN−αL = E + A N^{-\alpha},EE 一起拟合0.549(EE = 1.307)0.0122

损失大体上随 N 下降,在双对数坐标上近似一条直线。Kaplan 那种不留不可约项的形式也能拟合——他们的模型离”地板”还很远,指数小(αN≈0.076\alpha_N \approx 0.076),不留 EE 问题不大。但看第三行:EE 一起拟合时,估出的”地板”是 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,4641.85670.62582.8933.0571.611
124,9281.63090.40002.6212.8161.390
249,8561.47000.23912.2522.5091.264
499,7121.39770.16681.8642.3271.225
999,4241.35520.12431.5172.2401.206
1,999,8721.32170.09081.1982.1461.197

拟合 L−E=BD−βL - E = B D^{-\beta}:β=0.557\beta = 0.557,对数残差 0.0142(不留 EE 时 β=0.095\beta = 0.095)。三类 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。每放大一倍,可约损失大约乘上一个固定的比例——这就是幂律的定义。按 L−E∝N−0.259L - E \propto N^{-0.259}:可约损失要减半,N 要乘 15 倍(前提是数据也跟上)。规模定律可靠,但回报递减。

3.5 参数量该不该算嵌入层

代码 01 §5:嵌入参数在 d8 里占总参数的 36.0%,在 d128 里只占 3.8%。用非嵌入参数拟合 α=0.259\alpha = 0.259(残差 0.0170),用总参数拟合 α=0.277\alpha = 0.277(残差 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) 的三种方法

  1. 固定模型大小、改变训练 token 数:每种大小训练到接近收敛,记录每个 FLOP 水平上最好的(模型大小, 数据量),即所有训练曲线的下包络,再估计规模定律。
  2. 固定总 FLOPs、训练不同大小的模型(IsoFLOP):每个大小训练到 D=C/6ND = C / 6N 个 token,记录最终损失;对每个预算找出最好的配置,再改变预算重复。
  3. 参数化拟合:用前两种方法收集的数据点拟合
L(N,D)=E+ANα+BDβL(N, D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}

三项分别是:不可约的熵(“自然文本的熵”)、模型有限造成的损失、数据有限造成的损失。给定 C=6NDC = 6ND,最优解是 N∗∝Cβ/(α+β)N^* \propto C^{\beta/(\alpha+\beta)}、D∗∝Cα/(α+β)D^* \propto C^{\alpha/(\alpha+\beta)}。

结论:N∗N^* 和 D∗D^* 都约 ∝C0.5\propto C^{0.5}——模型和数据同比例放大,每个参数约 20 个 token。Kaplan 当年的结论是 N∗∝C0.73N^* \propto C^{0.73}:算力主要该花在把模型做大上——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(每个点都是一个训练到 D=C/6ND = C/6N 的模型;只保留 10 万 ≤ D ≤ 800 万的大小):

C = 1e10NDD / N验证损失
d81,760946,176537.61.6530
d123,792439,296115.81.6202
d166,592251,90438.21.7114
d2414,496114,6887.91.7340
C = 3e11NDD / N验证损失
d166,5927,584,7681150.61.4015
d2414,4963,448,832237.91.3997
d3225,4721,961,98477.01.3576
d4856,640882,68815.61.3855
d64100,096498,6885.01.4004
d96223,872223,2321.01.4805
d128396,800125,9520.31.6243

(C = 3e10、1e11 的表见脚本输出。)曲线大体是 U 形(个别点有噪声):模型太小,参数装不下要学的东西;模型太大,在同样的算力下只能看很少的数据。像 Chinchilla 一样对每条曲线的 (log N, L) 拟合一条抛物线取最低点:

算力 CN*D*每参数 tokenL*
1e102,062808,288392.01.6436
3e107,990625,81878.31.5345
1e1112,7181,310,524103.01.4169
3e1126,3741,895,78671.91.3575

最优点随算力的变化:N∗∝C0.71N^* \propto C^{0.71}、D∗∝C0.29D^* \propto C^{0.29}。这个世界里最优的”每个参数配多少 token”是 72~392,远多于 Chinchilla 的 20:要学的东西主要是长尾的事实,“多看数据”比”加参数”划算得多。slides 的提醒正在于此:规模定律普遍存在,但具体的函数各不相同——数据的性质和分布、Transformer 结构、预训练任务、预处理细节都会改变它,不存在通用的规模函数。

4.4 实验:方法 3 的参数化拟合

代码 02 §2,用 IsoFLOP 的全部 22 个点拟合:

E=1.046,A=4.2,α=0.303,B=114.8,β=0.474E = 1.046,\quad A = 4.2,\quad \alpha = 0.303,\quad B = 114.8,\quad \beta = 0.474

平均绝对误差 0.0186;推出的最优分配 N∗∝C0.61N^* \propto C^{0.61}。两点值得注意:

  • 拟合的 E 比真实的熵低了 0.185。实验点离地板还远时,EE 和两个幂律项此消彼长(EE 小一点、幂律项衰减得慢一点,也能拟合得同样好),“地板”很难估准。Chinchilla 原文的拟合是 E=1.69E = 1.69、α=0.34\alpha = 0.34、β=0.28\beta = 0.28——那个 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),然后真的去训练:

模型NDD / N预测损失实际损失
d3225,4726,542,336256.81.30801.3237
d4856,6402,941,95251.91.29721.3331
d64100,0961,665,02416.61.30351.3442
d96223,872744,4483.31.33561.3756
d128396,800419,8401.11.37851.4044

外推出的趋势是对的——U 形、最优点大致在哪——但数值偏乐观:每个点的实际损失都比预测高(平均 0.032),预测的最优大小比实际最好的大一档。原因之一:学习率是在 50 万 token 上调的,训练更久时不一定还是最优;外推的距离越远,这类”小规模上没暴露的问题”越多。

slides 的规模化流水线:

建模研究(找最好的预训练方法)→ 规模试验(在更大的规模上验证稳健性)→ 规模定律(用很多次运行估计规模函数)→ 扩大(百万 / 十亿美元的押注)
   ↑ 普通资源就能做(commodity scale)                                      ↑ 只有少数机构能做(privileged access)

研究与生产的不同:研究要快、迭代多、建立新知识、可以也应该冒险、没有保证的结果、靠人才;生产只有一次扩大的机会、要做出更好的产品、最好别搞砸、交付明确而短期、靠资源。上面那张表就是押注之前能做的检验——真实的团队会在中间加几个更大的规模试验来缩短外推的距离。


5. 那些会悄悄改变结论的因素

5.1 网络形状

代码 03 §1:参数量相近(约 10 万)、深宽比不同,训练 100 万 token:

宽度 d层数非嵌入参数d / 层数验证损失
328101,69641.3690
484113,184121.3672
642100,096321.3633
961112,032961.3681

宽高比从 4 变到 96,损失只差百分之一以内——形状的影响远小于参数总量(Kaplan et al. 的图)。实践中形状更多由硬件决定:宽而浅的模型并行度高、跑得快。(这个语料里连 1 层的模型都不吃亏:花园句子和百科条目不需要多步组合的推理;Kaplan et al. 也发现只有极端的形状才明显变差。)

5.2 学习率调度的长度

代码 03 §2:d64。A:一次训练 400 万 token(余弦调度按这个长度设定),在中途评估;B:每个 D 各训练一个模型,余弦调度刚好在 D 处降到底。

DA:长训练的中途B:按长度调度差距
250,0001.48361.45900.0245
500,0001.42841.39920.0292
1,000,0001.39301.36330.0297
2,000,0001.34581.33530.0105

长训练的中途,学习率还很高、还没”退火”,损失比调度恰好结束的模型高——用中途检查点画出的 L(D),每个点都被高估了。在这里各点被高估的幅度差不多,拟合出的指数几乎不受影响(β 0.370 vs 0.373);Hoffmann et al. 指出,Kaplan et al. 用固定的调度长度、取中途的结果,在 token 较少的点上高估得更多,于是低估了”多训练”的好处,得出”算力应该更多地花在把模型做大上”——这是两篇论文结论不同的主要原因之一(另一个是 Kaplan 的模型更小、并且不计嵌入参数)。

5.3 学习率

代码 03 §3:训练 50 万 token,峰值学习率扫一遍:

模型N3e-31e-23e-26e-2选用
d81,7602.26161.88111.76231.73970.06
d166,5921.84661.61061.58091.58480.03
d3225,4721.57861.46211.42691.51060.03
d64100,0961.47031.39921.41021.46920.01
d128396,8001.40581.39771.42701.91210.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新数据重复数据差距
1200,0001.54031.54030
2400,0001.44071.4370−0.0038
4800,0001.38771.39550.0078
81,600,0001.35511.36030.0052
163,200,0001.32851.33920.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 条,全对才得分。

模型Nk = 1k = 4k = 16 精确匹配k = 16 部分得分正确答案的平均概率
d81,7607.0%0.0%0.0%6.9%0.085
d123,79221.0%0.1%0.0%19.8%0.141
d166,59228.6%0.5%0.0%27.9%0.172
d2414,49630.1%0.9%0.0%29.7%0.193
d3225,47263.0%15.5%0.1%63.3%0.373
d4856,64075.9%34.5%1.6%76.9%0.468
d64100,09684.9%50.6%6.5%84.7%0.568
d96223,87289.2%62.3%15.4%88.8%0.592
d128396,80094.5%79.4%40.5%94.5%0.698

k = 16 的那一列:前六个模型几乎全是 0,到了最大的几个模型才”突然”冒出来——看起来就是一种涌现能力。可是部分得分(答对的比例,就是单个事实的准确率 p)一直在平稳上升;精确匹配约等于 p16p^{16}——p 从 0.5 涨到 0.8,p16p^{16} 只从 0.00002 涨到 0.03;p 再涨到 0.95,p16p^{16} 才到 0.44。能力本身在平滑地进步,是”全对才算对”这个指标把它变成了一道陡峭的台阶。

第一版问的是全部 3000 位人物:最大的模型单个准确率也只有一成多,p16p^{16} 永远是 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 换算成 p16p^{16}30.4% / 15.4%51.2% / 40.5%
  • 精确匹配在小模型上一直贴着 0,直接外推几乎得不到信息——这就是”不可预测”;
  • 准确率有上限,直接线性外推会冲过 100%;在 logit 空间里外推,它会自然地趋近 1;
  • 先预测平滑的量(p,或者损失),再按”全对的概率 ≈ p16p^{16}“换算,才能大致预见精确匹配的”涌现”(p16p^{16} 对 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 小结

  1. 为什么扩大:几乎有保证的收益;decoder-only + 自回归 LM 成为主流(预训练后就能零样本、训练信号多、稳定、先行者优势)。
  2. Kaplan:损失随 N、D、C 呈幂律下降,形状不太重要,只数非嵌入参数;线性的进步需要指数级的代价。实验:L(N) 和 L(D) 都近似幂律;固定 D 时大模型撞上数据的限制,拟合出的地板(1.307)高于真实的熵(1.231)。
  3. Chinchilla:给定算力,用 IsoFLOP 和参数化拟合 L=E+A/Nα+B/DβL = E + A/N^\alpha + B/D^\beta 找最优配置;原文结论是 N 和 D 同比例放大、约 20 token / 参数。实验:U 形的 IsoFLOP 曲线;这个世界的最优比例是 72~392(不存在通用的规模函数);拟合的 E 偏低 0.185;外推的趋势对、数值偏乐观。
  4. 会悄悄改变结论的因素:形状几乎不影响;调度长度要和训练长度匹配;每个规模都要调学习率(第一版没调,结论全错)。
  5. 数据受限:重复几遍几乎和新数据一样好,差距主要在长尾知识上。
  6. 涌现:要求很多 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 的算力约 5.76×10235.76 \times 10^{23} FLOPs。按 C=6NDC = 6ND 和”每参数 20 个 token”,算出最优的 N 和 D,和 Chinchilla 的实际配置比较。

参考答案

C=6N⋅20N=120N2C = 6N \cdot 20N = 120N^2,N=5.76×1023/120=6.93×1010N = \sqrt{5.76 \times 10^{23} / 120} = 6.93 \times 10^{10},约 69B 参数;D=20N≈1.39×1012D = 20N \approx 1.39 \times 10^{12},约 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 计算)
CN*D*D* / N*预测损失
1e1256,0342,974,36253.11.2972
1e13228,1927,303,78832.01.2102
1e14929,27917,935,04519.31.1534

D∗/N∗∝C(α−β)/(α+β)=C−0.22D^*/N^* \propto C^{(\alpha-\beta)/(\alpha+\beta)} = C^{-0.22}:因为 β > α(数据项衰减得比参数项快),算力越大,越应该把多出来的算力花在参数上,比例逐渐下降。只有 α = β 时比例才是常数(Chinchilla 原文的 α = 0.34、β = 0.28 很接近,所以”20”在很大的范围内近似成立)。另外注意 1e14 的预测损失 1.1534 低于真实的熵 1.231——这暴露了拟合的 E 偏低:外推越远,这个错误越明显。

练习 3(幂律的算术):可约损失 L−E∝N−0.259L - E \propto N^{-0.259}。(a) 每把 N 翻一倍,可约损失降低百分之几?(b) 要把可约损失降到十分之一,N 要乘多少?

参考答案

(a) 1−2−0.259=16.4%1 - 2^{-0.259} = 16.4\%。(b) 101/0.259≈7,26110^{1/0.259} \approx 7{,}261 倍。这就是”线性的进步需要指数级的代价”:每一点点改进的价格都按倍数上涨。真实 LLM 的指数更小(Kaplan 的 αN≈0.076\alpha_N \approx 0.076:可约损失降到十分之一要 N 乘 101310^{13}),所以单靠放大参数改善得非常慢,必须同时增加数据、改进方法。

练习 4(精确匹配的台阶):单个子任务的准确率 p 分别是 0.5、0.8、0.9、0.95、0.99 时,k = 4、16、64 个子任务全对的概率是多少(假设独立)?如果一个”能力”需要 64 步推理都对,它看起来会怎样”涌现”?

参考答案
pk = 4k = 16k = 64
0.50.0630.0000155e-20
0.80.410.0286e-7
0.90.660.190.0012
0.950.810.440.038
0.990.960.850.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 约要 2N2N 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 + 推理 2×56,034×2.97×107≈3.3×10122 \times 56{,}034 \times 2.97\times 10^7 \approx 3.3\times 10^{12},共 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 上模拟多卡训练,验证每种并行方式都和单卡训练逐位一致。

← 返回课程目录