时长 7 小时:§1 LLM 的定义与 decoder-only(1h)· §2 Kaplan 缩放律(1.5h)· §3 Chinchilla 与计算最优(2h)· §4 过度训练(0.5h)· §5 涌现与度量(0.5h)· §A–§C(1.5h)
对应正课 Lecture 3 开头(LLM 的定义与架构)。学习计划把 GPT-3、Kaplan、Chinchilla 三篇列为本周必读,缩放律也是 Lecture 4”预训练”的理论底座,所以放在第一天。
配套代码
w2day1_checks.py(纯 numpy):幂律与外推、从噪声数据拟合指数、Chinchilla 参数化损失的解析最优、等算力 U 形曲线、Chinchilla vs Gopher、Kaplan vs Chinchilla 的配比、过度训练的代价、“涌现”的度量效应§B 参考实现(
code/目录):w2d1_scaling.py(Chinchilla 计算器、带不可约项的幂律拟合、在 mini-GPT 上做缩放扫描和等算力实验)。今天的目标:能说清现代 LLM 为什么全是 decoder-only;能推出 Chinchilla 的最优配比公式,并用它解释 Chinchilla 为什么打败了 Gopher、Llama 3 为什么”违反”了它。
§0 这一周在做什么
第 1 周造出了模型。第 2 周回答两个问题:
- Lecture 3:把这个模型做大、在海量文本上训练之后,它是什么、能怎么用?(Day 1–3:缩放律、MoE、解码与提示)
- Lecture 4:怎么把它训出来、改造它?(Day 4–6:预训练与分布式、量化、SFT 与 LoRA)
今天是连接两者的一天:缩放律既解释了”为什么要做大”,也决定了”训练预算怎么花”。
今天要用到的旧结论
| 旧结论 | 出处 |
|---|---|
| 三种架构;decoder-only 胜出的常见理由 | Week 1 Day 2 §4.3 |
| 精确参数量;训练 ,推理每 token | Week 1 Day 2 §5.1–5.2 |
| 语言建模即压缩;loss 就是码长 | Week 0 Day 5 §1.4 |
| 最大似然 = 最小 KL;损失的下限是数据的熵 | Week 0 Day 5 §1.2 |
§1 LLM 是什么
1.1 定义
今天说”大语言模型”,几乎总是指:
- 一个 decoder-only 的 Transformer(Week 1 的现代版 mini-GPT,只是大得多);
- 用”预测下一个 token”在海量文本上预训练(万亿级 token);
- 参数量从十亿到万亿级。
之后的 SFT、偏好对齐、推理训练(Lecture 4–6)都在这个预训练模型上做。所有能力的底子来自预训练。
一条时间线:GPT-1(2018,117M,证明”预训练 + 微调”有效)→ GPT-2(2019,1.5B,零样本就能做很多任务)→ GPT-3(2020,175B,少样本上下文学习,Day 3 §3)→ Chinchilla(2022,重新校准”该训多大”,§3)→ Llama 系列(2023 起,开放权重,小模型、多数据,§4)。
1.2 为什么是 decoder-only:展开 Week 1 的四条理由
Week 1 Day 2 §4.3 列过四条。现在可以说得更具体:
一、监督信号的密度。 下一个 token 预测在每个位置都有损失。BERT 的 MLM 只在 15% 的位置上有(Week 1 Day 6 §4.2);T5 的跨度破坏目标也只预测被遮住的那部分。同样的数据,decoder-only 拿到的训练信号最多。
二、一个目标覆盖所有任务。 翻译、摘要、问答、写代码,都可以写成”给定前文,续写后文”。不需要为每类任务设计输出头。这让规模化变得简单:只有一种模型、一种损失、一种数据格式。
三、上下文学习随规模出现。 GPT-3 发现,足够大的 decoder-only 模型不需要微调,只要在提示里给几个例子就能做新任务(Day 3 §3)。这把”适配新任务”从训练时挪到了推理时。
四、推理结构简单。 只有一份 KV Cache(Week 1 Day 4),没有编码器-解码器之间的交叉注意力要管理。
一个诚实的补充:这些理由都不是”证明”。有研究在控制变量的比较里发现,纯语言建模预训练后做零样本,因果 decoder 最好;但如果之后还要做多任务微调,encoder-decoder 可能更好(Wang et al. 2022)。行业收敛到 decoder-only,是”简单 + 能规模化 + 上下文学习”共同作用的结果,而不是某一条压倒性的定理。
§2 Kaplan 缩放律:损失随规模的幂律
2.1 发现
Kaplan et al.(2020)训练了跨越七个数量级的模型,发现测试损失(交叉熵,nats/token)与三个量都呈幂律关系:
是非嵌入参数量, 是训练 token 数, 是训练算力。论文报告 、、。前提是另外两个因素不成为瓶颈。
幂律在双对数坐标下是直线:。w2day1_checks.py 第 1 组:参数每乘 10,损失乘 ,每个数量级降约 16%。
直觉:指数很小,意味着收益递减得很厉害:想把损失降一半,参数要放大约 9000 倍(第 1 组)。但它极其稳定、可预测:Kaplan 的模型从不到一千到约 15 亿(非嵌入)参数,都落在同一条直线上。
2.2 为什么这很有用:用小模型预测大模型
缩放律的工程价值在于外推。第 2 组模拟了这件事:用 1M–100M 参数的 6 个”小模型”(带 1% 的噪声)拟合指数,外推到 10B(比最大的拟合点大 100 倍):
- 拟合的 均值 0.0754(真值 0.076),标准差 0.0025
- 外推误差中位数 1.47%,最大 3.30%(20 个种子)
这就是今天大模型训练的标准流程:先用小规模实验拟合缩放曲线,再决定花几千万美元的那次训练怎么配置。
2.3 局限
- 不可约项:纯幂律 当 ,但语言本身有熵(Week 0 Day 5 §1.2:最大似然的损失下限是数据的熵),损失不会降到 0。§3.2 的参数化形式补上了这一项 。
- 损失 ≠ 能力:幂律描述的是平均交叉熵。下游任务的表现不一定平滑(§5)。
- 只在”其他因素不是瓶颈”时成立:模型大了数据不够,或者数据多了模型太小,都会偏离直线。这恰好引出了下一个问题:固定预算下,模型和数据怎么分配?
§3 Chinchilla:算力该怎么分
3.1 问题与直觉:等算力曲线
你有固定的训练算力 。由 Week 1 Day 2 §5.2,。可以训一个大模型、少喂数据,也可以训一个小模型、多喂数据。哪个更好?
直觉:两个极端都不好。模型太小,数据再多它也装不下;模型太大,每个参数见到的数据太少,没学充分。中间应该有个最优点。
Hoffmann et al.(2022)的方法 2 就是直接做实验:固定几个算力预算,每个预算下训练一串不同大小的模型,画出”损失 vs 模型大小”,找最低点。w2day1_checks.py 第 4 组用他们拟合的公式重现了这条等算力曲线(,Chinchilla 论文给 Gopher 用的算力预算;按 算 Gopher 本身是 ,§3.3):
| 5B | 10B | 20B | 40B | 70B | 140B | 280B | 560B | |
|---|---|---|---|---|---|---|---|---|
| 损失 | 1.973 | 1.947 | 1.933 | 1.931 | 1.938 | 1.955 | 1.984 | 2.025 |
U 形。 Gopher 用这个算力训了 280B 参数,落在右侧上坡上。
3.2 推导:参数化损失与最优配比
Chinchilla 的方法 3 用一个参数化形式拟合全部实验:
三项各有含义: 是数据本身的熵(无限大模型、无限数据也降不下去的部分); 是”模型不够大”造成的额外损失; 是”训练不够充分”造成的额外损失。论文的拟合值:、、、、。
求最优。 约束 ,把 代进去,变成单变量问题:
对 求导令其为零:
读这个结果:最优参数量和最优数据量都是算力的幂,指数分别是 和 ,两者之和为 1。 时两个指数都接近 0.5:算力翻倍,参数和数据各放大 倍。这是 Chinchilla 的核心结论。三种方法给出的参数指数分别约 0.50、0.49、0.46(论文报告值;用方法 3 的四舍五入常数算出来是 0.452,第 3 组)。
意义:谁的指数大,谁的收益递减得慢,就该多给它资源。 和 差不多,所以两者该同比例放大。
3.3 Chinchilla 打败 Gopher
DeepMind 用和 Gopher 相近的算力训练了 Chinchilla:参数小 4 倍,数据多 4.7 倍。第 5 组:
| 模型 | 算力 | 参数化损失预测 | |||
|---|---|---|---|---|---|
| Gopher | 280B | 300B | 1.1 | 1.993 | |
| Chinchilla | 70B | 1.4T | 20.0 | 1.937 |
论文报告 Chinchilla 在绝大多数下游任务上超过了 Gopher。而且推理成本只有 Gopher 的 1/4(每 token FLOPs)。
“每个参数约 20 个 token” 这条流传最广的经验法则,就来自这里。
3.4 为什么 Kaplan 当年得出了不同的结论
Kaplan 的配比是 、:算力增加时,大部分应该花在更大的模型上。第 6 组对比了算力放大 100 倍时的分配:
| 参数 | 数据 | |
|---|---|---|
| Kaplan | ×28.8 | ×3.5 |
| Chinchilla | ×10.0 | ×10.0 |
这个差别塑造了一个时代:GPT-3(175B 参数只训了 300B token)、Gopher(280B / 300B)都是按 Kaplan 的思路配置的,严重训练不足。
Chinchilla 论文指出了一个主要原因:Kaplan 的实验对所有模型用了同样长度的学习率调度,没有按每次实际训练的步数调整余弦衰减。训练步数少于调度长度的模型,学习率还没降下来就停了,损失被高估;这种偏差对”大模型 + 少数据”的配置最有利,于是结论偏向了大模型。一个超参设置上的细节,改变了整个领域的方向。
3.5 一个需要知道的修正
用方法 3 的原始拟合值算出来的最优点,与方法 1、2 并不一致。第 3 组:它给出的最优模型偏小、 远高于 20( FLOPs 时约 63,Gopher 算力时约 93),而且随算力变化。Epoch AI 的复现(Besiroglu et al. 2024)重新拟合了论文的数据,认为原始的方法 3 拟合有问题;用他们修正后的常数(、、), 回到 17–21 之间(第 3 组),与方法 1、2 及 Chinchilla 本身的配比一致。
教训:缩放律的定性结论(参数和数据同比例放大)很稳健,具体常数则要谨慎使用。今天的 w2d1_scaling.py --calc 两组常数都给。
§4 超越 Chinchilla:过度训练
4.1 Chinchilla 最优只对”训练”最优
Chinchilla 回答的问题是:给定训练算力,怎样得到最低的损失。 但模型训完之后要部署,被调用成千上万亿次。推理成本每 token ,与训练用了多少数据无关。
如果推理量足够大,宁可多花训练算力,也要一个更小的模型。 这就是 Llama 系列的思路。
4.2 Llama 3 8B:每个参数 1875 个 token
w2day1_checks.py 第 7 组(用 Epoch 修正常数):
- Llama 3 8B 训了 15T token,,训练算力 。
- 同样算力下的”最优”模型约 81B 参数、1.5T token。
- 预测损失:8B 为 2.022,81B 最优为 1.968,只差 0.054。
- 推理成本:8B 只有 81B 的 1/10。
继续加数据,8B 的损失仍在缓慢下降:0.16T token(Chinchilla 配比)时 2.157,1T 时 2.076,15T 时 2.022,60T 时 2.010。收益递减,但一直有。
4.3 数据用完了怎么办
过度训练需要海量数据,而高质量文本是有限的。Muennighoff et al.(2023)研究了数据受限时的缩放:同一份数据重复训练约 4 个 epoch,效果几乎和同样多的全新数据一样;更多轮次后收益迅速下降。这也是为什么 Lecture 4 会花大量篇幅讲数据清洗与合成(Day 4 §1):当数据成为瓶颈,数据质量就是新的缩放维度。
§5 涌现,以及度量的陷阱
Wei et al.(2022)报告了一些”涌现能力”:小模型完全不会,过了某个规模突然会了(比如多位数算术)。这常被用来论证”规模会带来质变”。
Schaeffer et al.(2023)提出了另一种解释:很多涌现来自评估指标的非线性。 w2day1_checks.py 第 8 组构造了一个例子:逐 token 准确率 随 平滑上升(0.05 → 0.95),但如果任务要求 个 token 全对,整题准确率是 :
| 8.0 | 9.0 | 10.0 | 11.0 | 12.0 | |
|---|---|---|---|---|---|
| 逐 token | 0.142 | 0.354 | 0.646 | 0.858 | 0.953 |
| 5 个 token 全对 | 0.000 | 0.006 | 0.112 | 0.465 | 0.784 |
| 10 个 token 全对 | 0.000 | 0.000 | 0.013 | 0.217 | 0.615 |
同一个平滑提升的能力,用”整题全对”来量,看起来像在 附近突然出现。
怎么看待这件事:它不否认规模带来新能力,但提醒你看到”突变”时先问度量是什么。这对 Lecture 8 的评估设计很重要:选指标时要知道它会怎样放大或掩盖变化。
§A 工具:数参数、估算力
A.1 不下载权重就数参数
from transformers import AutoConfig, AutoModelForCausalLM
from accelerate import init_empty_weights
cfg = AutoConfig.from_pretrained("meta-llama/Llama-3.1-8B") # 只下载几 KB 的 config.json
with init_empty_weights(): # 参数放在 meta 设备上,不占内存
model = AutoModelForCausalLM.from_config(cfg)
print(sum(p.numel() for p in model.parameters()))
init_empty_weights与 Week 1 Day 2 用过的torch.device("meta")是同一个原理。- 绑定的权重只数一次:
parameters()默认去重。自己按state_dict()数会把绑定的矩阵数两遍。 - 一些受限模型(如 Llama)要先在 Hugging Face 上同意协议,
from_pretrained才能下载 config。
A.2 估算 FLOPs
- 公式估算:训练 ,推理每 token (Week 1 Day 2 §5.2),再加注意力的 相关项。这是规划实验时最常用的。
- 实测:
torch.utils.flop_counter.FlopCounterMode可以统计一次前向 / 反向实际执行的 FLOPs,用来核对公式:
from torch.utils.flop_counter import FlopCounterMode
with FlopCounterMode(display=False) as fc:
model(x).sum().backward()
print(fc.get_total_flops())
- MFU(模型 FLOPs 利用率)= 实际吞吐 × ÷ 硬件峰值。大规模训练的 MFU 常在 40%–60%,小模型、小 batch 会低得多(Week 1 Day 3 §4.2)。
A.3 读别人的缩放实验
- 是否包含嵌入参数? Kaplan 用非嵌入参数,Chinchilla 用总参数。小模型上差别很大(GPT-2 small 的嵌入占 31%,Week 1 Day 2 §6.4)。
- 损失是什么单位? nats/token 还是 bits/byte?不同分词器的 per-token 损失不可比(Week 0 Day 5 §1.3)。
- 学习率调度是否按每次训练的长度调整? §3.4 的教训。
§B 实操
- 跑通
w2day1_checks.py,8 组结论都看懂。第 3、4 组放在一起看:U 形曲线的最低点,就是解析公式给出的 。 - 推导(1h,纸笔):(a) 从 和 推出 与 ;(b) 证明两个指数之和为 1;(c) 用经验法则 ,算出 、、 FLOPs 下的最优 。
- 计算器(0.5h):
python code/w2d1_scaling.py --calc --flops 1e23,比较两组常数与 法则的差别。 - 亲手测一条缩放曲线(3h,边跑边读论文):
--sweep --small训练 6 个不同大小的 mini-GPT(固定 token 数),拟合 。再跑--isoflop --small,看能不能在字符级数据上复现 U 形。写下你的 ,以及最大的几个模型是否开始过拟合(Tiny Shakespeare 只有 1M 字符,数据会先成为瓶颈)。 - 数参数(0.5h):用 §A.1 的方法数出 Llama 3.1 8B、Qwen2.5-7B 的参数量,再按 §3.2 算它们的 (训练 token 数查模型卡)。
参考实现:code/w2d1_scaling.py(--selftest 和 --calc 只需 numpy,已实际运行通过;--sweep 和 --isoflop 需要 torch)。
§C 自测
动机与直觉层
- 今天说的”LLM”具体指什么?它的能力主要来自哪个阶段?
- decoder-only 胜出的四条理由是什么?为什么说它们不是”证明”?
- 缩放律为什么有工程价值?它有哪些局限?
- 固定算力下,为什么模型太大、太小都不好?
- 为什么 Llama 3 要”违反” Chinchilla 配比?它换来了什么、付出了什么?
- “涌现能力”的度量解释是什么?它否定了规模的作用吗?
推导与估算层
- 从 和 推出 与 。
- 为什么 时”参数和数据应同比例放大”?
- 用 估算: FLOPs 该训多大的模型、多少 token?
- Kaplan 和 Chinchilla 的结论为什么不同?
- Chinchilla 和 Gopher 的算力、参数、数据、推理成本各是多少?
工程层
- 怎样不下载权重就数出一个 HF 模型的参数量?绑定权重会不会数重?
- 读缩放实验时要注意哪三个口径问题?
- MFU 怎么算?
出关标准
- 能说出 LLM 的定义和 decoder-only 胜出的理由,并知道它们的局限
- 能写出 Kaplan 的幂律形式,解释小指数的含义,说出缩放律的工程用途
- 能推出 Chinchilla 的 、,并说清”同比例放大”的来由
- 能用 Chinchilla vs Gopher 的数字说明计算最优配比
- 能解释 Kaplan 与 Chinchilla 差异的原因,以及方法 3 常数的修正
- 能讲清过度训练的动机与代价
- 能用度量效应解释”涌现”
- 在 mini-GPT 上完成一次缩放扫描并拟合出指数