什么是 Scaling Law?Chinchilla 给出了什么结论?
简化版
Scaling Law(缩放定律) 是一条经验规律:大模型的测试损失会随着参数量 N、数据量 D、算力 C 的增大而按幂律平滑下降——也就是「加规模就变强,且可预测」。Chinchilla(DeepMind 2022) 修正了早期结论,指出在固定算力预算下,参数量和数据量应当同比例增长,此前的大模型(如 GPT-3、Gopher)都训练数据不足、参数过多。它的经验法则是:每个参数大约配 20 个训练 token 才算「算力最优(compute-optimal)」。据此训练的 70B Chinchilla 用 1.4T token,反超了 280B 的 Gopher。
详细版
Scaling Law 说了什么
Kaplan 等人 2020 发现,语言模型的损失 L 与 N、D、C 之间存在幂律关系(在很大范围内平滑、可外推):
L(N) ≈ (N_c / N)^α_N # 损失随参数量幂律下降
L(D) ≈ (D_c / D)^α_D # 损失随数据量幂律下降
意义重大:可以用小模型的实验结果外推出大模型的表现,从而在真正烧钱训练前就预测效果、规划资源。
Chinchilla 的修正
Kaplan 的工作倾向于「优先加参数」,导致业界一窝蜂造大模型但喂的数据不够。Chinchilla 重新做实验,结论是:
- 给定算力 C(约等于
C ≈ 6ND),最优配置是让 N 和 D 同比例放大。 - 经验比例约为 D ≈ 20 × N(每参数约 20 token)。
- 实证:Chinchilla(70B, 1.4T token)全面优于 Gopher(280B, 300B token),用更小的模型 + 更多数据,在同等算力下效果更好、推理还更便宜。
对比
| 模型 | 参数量 | 训练 token | token/参数 | 是否算力最优 |
|---|---|---|---|---|
| GPT-3 | 175B | 300B | ~1.7 | 数据严重不足 |
| Gopher | 280B | 300B | ~1.1 | 数据严重不足 |
| Chinchilla | 70B | 1.4T | ~20 | 接近最优 |
| Llama 系 | 7B~70B | 1T~15T | 远超 20 | 为推理便宜”过度训练” |
完整版教学
一、Scaling Law 为什么是大模型时代的”底层信仰”
在 Scaling Law 出现之前,做深度学习靠调结构、试超参、拼技巧。Scaling Law 揭示了一件颠覆性的事:模型效果主要由规模(参数、数据、算力)决定,且这种关系是平滑、可预测的幂律。
这带来两个深远影响:
- 可预测性:可以先用一系列小模型跑实验,拟合出幂律曲线,外推预测「花 X 算力能达到什么损失」,把训练大模型从”赌博”变成”工程规划”。GPT-4 就公开说用了这种方法预测最终性能。
- 确定性路线:既然「加规模就变强」,那战略就清晰了——堆参数、堆数据、堆算力。这条信仰直接驱动了近年大模型的军备竞赛。
简要说把握:Scaling Law 让「变强」这件事从玄学变成了可外推的曲线——这是它最大的价值。
二、三个变量:N、D、C 的关系
- N(参数量):模型容量,决定能记多少、拟合多复杂的函数。
- D(数据量):训练 token 数,决定见过多少、学到多少。
- C(算力):训练总计算量,近似
C ≈ 6ND(6 倍于「参数 × token」的 FLOPs)。
三者互相制约:算力有限时,你只能在「更大模型 + 更少数据」和「更小模型 + 更多数据」之间权衡。Scaling Law 要回答的核心问题就是:给定算力预算 C,N 和 D 各分多少最划算? 这正是 Chinchilla 的贡献。
三、Kaplan vs Chinchilla:一次重要的观点修正
Kaplan(2020) 的实验暗示:算力增加时,应该把大部分投到参数量上,数据量增长可以慢一些。于是 GPT-3(175B)、Gopher(280B)等都造得很大,但只喂了约 300B token。
Chinchilla(2022) 重新、更严谨地扫描了 N 和 D 的组合,发现 Kaplan 的实验设置(如学习率调度)有偏差,真实的最优是:N 和 D 应当同比例增长——参数翻倍,数据也该翻倍。按此,GPT-3、Gopher 都是「参数过剩、数据饥饿」,它们的算力其实被浪费了:同样的算力,换成小一点但训得更充分的模型会更强。
Chinchilla(70B)用 1.4T token 训练,在几乎所有基准上超过了 4 倍大的 Gopher,有力地证明了这一点。这次修正让全行业意识到:盲目堆参数不如把数据喂够。
四、“每参数 20 token”怎么用
Chinchilla 的经验法则 D ≈ 20 × N 是「算力最优」的近似:如果你有固定算力,想让训练损失最低,就按这个比例分配。例如:
- 想训一个 10B 模型的算力最优版,应喂约 200B token;
- 有 1.4T token,算力最优的模型约 70B。
但要注意:「算力最优」是”训练”最优,不是”部署”最优。 Chinchilla 只考虑了训练成本,没算推理成本。而模型一旦部署,要服务海量请求,推理成本才是长期大头。
五、为什么 Llama 们”过度训练”小模型
Llama 系列(尤其 Llama 2/3)明显偏离 Chinchilla 最优:用 7B/8B 的小模型,却喂 1T~15T token,token/参数远超 20。这是”次优”吗?不,这是清醒的取舍:
- Chinchilla 最优追求的是「给定训练算力,损失最低」。
- 但工业界要的是「给定目标能力,部署最便宜」。
- 同样能力下,小模型推理更快、更省显存、更好部署。为此在训练时多喂数据(多花训练算力)把小模型「训到底」,是完全值得的——训练是一次性成本,推理是持续成本。
所以现代趋势是:为了推理效率,故意”过度训练”小模型,让它在小体积里榨出尽可能强的能力。理解「训练最优 ≠ 部署最优」这个分野,是这道题的高阶得分点。
六、面试拆解算例
预训练题最好落到预算账和稳定性账。假设训练一个 7B 模型,目标 token 数是 1T,按常见粗估 6 × 参数量 × token 数,训练计算量约为 6 × 7e9 × 1e12 = 4.2e22 FLOPs。如果有效集群算力是 1e18 FLOPs/s,理想情况下也要约 42,000 秒;现实还要扣通信、数据加载、checkpoint 和故障恢复的损耗。
training_flops ≈ 6 * N * D
N = 7e9 parameters
D = 1e12 tokens
training_flops ≈ 4.2e22
| 账本 | 关键变量 | 常见瓶颈 | 排查信号 |
|---|---|---|---|
| 数据账 | token 数、重复率、质量分 | 脏数据和污染 | eval 异常偏高 |
| 算力账 | GPU 数、利用率、通信 | MFU 低 | step time 抖动 |
| 显存账 | batch、序列长、优化器状态 | OOM | 激活占用过高 |
| 稳定性账 | 学习率、精度、梯度 | loss spike | overflow/NaN |
语料 -> 清洗去重 -> tokenization -> 分布式训练 -> checkpoint -> 评测
| | | | |
质量 覆盖率 吞吐 可恢复 能力验证
所以回答「什么是 Scaling Law?Chinchilla 给出了什么结论?」时,不能只说某个技巧“省显存”或“加速”。要说明它省的是哪一笔账、牺牲了什么、线上训练日志里应该观察哪个信号。
七、常见误区与追问
- 误区:Scaling Law 说模型越大越好。 更准确是「在数据/算力配比合理时,规模越大越好」;参数大但数据不足反而浪费算力(Chinchilla 的教训)。
- 误区:Chinchilla 说小模型更好。 它说的是给定算力下,N 与 D 要同比例增长,别把算力全砸参数上。
- 追问:C≈6ND 怎么来的? 前向约 2ND、反向约 4ND,合计每 token 每参数约 6 FLOPs。
- 追问:为什么 GPT-3 被认为训练不足? 175B 参数只配 300B token(~1.7 token/参数),远低于最优的 ~20。
- 追问:既然 20 token/参数最优,为什么 Llama 用几百 token/参数? 那是为推理便宜故意过度训练小模型;训练最优≠部署最优。
- 追问:Scaling Law 会一直成立吗? 幂律在很大范围内稳健,但存在数据枯竭、边际收益递减等隐忧,是否有极限仍是开放问题。
八、加强记忆
Scaling Law 记「加规模、幂律降、可外推」:损失随参数 N、数据 D、算力 C 幂律下降,且能用小模型外推大模型,把训练从赌博变成规划。 Chinchilla 记两句:「N 和 D 要同比例增长」「每参数约配 20 token 才算力最优」,据此 70B/1.4T 的 Chinchilla 反超 280B/300B 的 Gopher,证明 GPT-3/Gopher 都”参数过剩、数据饥饿”。最后钉死高阶认知——「训练算力最优(20 token/参数)≠ 部署最优」,所以 Llama 故意过度训练小模型以换取推理便宜。记住 C≈6ND 这个换算,整套账就能自己算。