第 25 天 · 损失可以预测:规模定律把大模型变成工程
一句话
Kaplan 等人训练了从 768 到 15 亿非嵌入参数的 Transformer 语言模型,发现测试损失分别随参数量、数据量、算力按幂律下降,趋势跨越 6 个以上数量级。论文据此给出固定算力下分配模型大小和数据量的公式。
论文讲了什么
这篇论文回答一个工程问题:多花 10 倍算力,语言模型会好多少?作者在 WebText2 数据集上训练了一系列 Transformer 语言模型,上下文长度 1024 个 token。性能统一用测试集交叉熵损失衡量,单位是 nats。实验改变 3 个量:非嵌入参数量 N、训练 token 数 D、训练算力 C。
核心结论是 3 条幂律。在另外两个量不构成瓶颈时:
L(N) = (N_c / N)^0.076:参数量放大 10 倍,损失降到原来的约 84%。L(D) = (D_c / D)^0.095:数据量放大 10 倍,损失降到原来的约 80%。L(C) = (C_c / C)^0.050:按最优方式花算力,算力放大 10 倍,损失降到原来的约 89%。
在双对数坐标上,这 3 条关系都是直线。直线可以外推:用小模型的结果画线,就能在训练前预测大模型的损失。
论文还给出 5 个实用发现:
- 形状几乎不重要:非嵌入参数量固定时,层数和宽度在很大范围内变化,损失只差几个百分点。论文的说法是 “Performance depends strongly on scale, weakly on model shape”(Kaplan et al. 2020,第 1.1 节)。
- 过拟合可以预测:过拟合惩罚只取决于比值
N^0.74 / D。模型放大 8 倍,数据只需放大约 5 倍。 - 大模型更省样本:达到同一损失,大模型需要的优化步数和数据都更少。
- 算力优先给模型:最优分配满足
N ∝ C^0.73。算力增加时,大部分应该花在更大的模型上,并在收敛之前停止训练。 - 迁移随训练损失同步改善:换到其他分布的文本,损失与训练分布同步下降,只多一个大致恒定的差值。
论文用一个估算式把算力和模型联系起来:C ≈ 6NBS。B 是批量大小,S 是训练步数,B 与 S 的乘积就是 token 数 D。也就是说,每训练 1 个 token 约需 6N 次浮点运算:前向 2N 次,反向 4N 次。有了这个式子,任何人都能用一张纸估算一次训练的成本。
论文还测量了临界批量大小,并与 LSTM 做了对比。LSTM 在长上下文的后段 token 上明显落后于 Transformer。
关键概念
- 幂律(Power law)
- 形如 <code>y = a · x^(−α)</code> 的关系。在双对数坐标上是一条斜率为 −α 的直线。x 每放大固定倍数,y 按固定比例下降,没有突然的拐点。
- 非嵌入参数量(Non-embedding parameters)
- 不计词嵌入和位置嵌入的参数量,可按 <code>N ≈ 12 · n_layer · d_model²</code> 估算。用它做横轴时,不同层数的模型落在同一条曲线上;把嵌入算进去,曲线会分叉。
- 计算最优(Compute-optimal)
- 给定算力预算 C,选择模型大小 N 和训练 token 数 D,使最终损失最低。Kaplan 的答案是 <code>N ∝ C^0.73</code>。2022 年 Chinchilla 把它修正为 N 与 D 同比例增长。
- 临界批量大小(Critical batch size)
- 超过这个批量后,继续加大批量几乎不再减少所需步数。论文发现它只取决于当前损失:损失越低,临界批量越大,与模型大小基本无关。
- 6N 法则(6N rule)
- 训练 Transformer 时每个 token 约需 6N 次浮点运算,总算力约为 6ND。例如 10 亿参数模型训练 200 亿 token,约需 1.2 × 10^20 次浮点运算。
历史位置:为什么值得读
规模定律不是 Kaplan 首创。2017 年,百度的 Hestness 等人已经在机器翻译、语言模型、图像分类、语音识别 4 个领域测到误差随数据量按幂律下降。第 22 天的 Deep Speech 2 也展示了数据和模型规模带来的稳定收益。Kaplan 的贡献是把实验做全:同时考察参数、数据、算力 3 个变量,给出统一公式,并推出算力的分配方案。
这篇论文直接影响了 OpenAI 的决策。同年发布的 GPT-3 有 1750 亿参数,只训练了约 3000 亿 token,符合“模型优先、提前停止”的建议。2021 年,Kaplan、McCandlish 和末位作者 Dario Amodei 等人共同创立了 Anthropic。
2022 年,DeepMind 的 Chinchilla 论文修正了分配结论:参数和数据应该同比例增长,每个参数约配 20 个 token。700 亿参数的 Chinchilla 用 1.4 万亿 token 训练,超过了 2800 亿参数的 Gopher。Chinchilla 作者指出的第 1 个原因是:Kaplan 对所有模型使用同一套学习率调度,没有按训练长度调整。
在清单里,本篇连接了 3 天的内容。第 13–14 天的 Transformer 提供可扩展的架构。第 24 天的 GPipe 解决怎样把大模型放进多块加速器。本篇说明为什么值得放大,以及放大多少。
学前准备
- 会读双对数坐标图,知道直线斜率代表幂律指数
- 先看第 13–14 天,知道 Transformer 的参数集中在哪些层
- 理解交叉熵损失,知道 nats 和 bits 相差 ln 2 倍
- 会用 numpy 或 scipy 做线性回归和曲线拟合
在原仓库怎么学
- README.md:看本日的内容安排和文件清单。
- setup.py:运行它,检查 Python 版本并安装依赖。
- implementation.py:读 3 个核心类。KaplanTransformer 是被放大的模型,MasterFitter 拟合幂律,ComputeEconomy 做算力估算。
- train_minimal.py:训练多个尺寸递增的模型,得到损失随参数量变化的数据点。训练文本在 data/,只有约 340 字节,所以结果只用于演示方法,不能复现论文数值。
- visualization.py:生成规模定律仪表板,可对照目录里的 scaling_dashboard.png 和 scaling_laws_plot.png。
- notebook.ipynb:在笔记本里交互式地重走一遍拟合流程。
- exercises/:做 5 个练习,依次是幂律拟合器、6N 算力估算、过拟合检测、GPT-3 损失预测、最小规模 Transformer。先自己做,再对照 exercises/solutions/。
- CHEATSHEET.md:复习时用来查公式。
今天再看
规模定律的方法活了下来:先用小模型拟合曲线,再决定大模型怎么训练。2026 年,各家实验室都把这一步当作标准流程。
具体的指数和分配方案被改写了 3 次:
- Chinchilla(2022)推翻了“参数优先”,改为参数和数据同比例增长。
- 推理成本改变了目标。模型要服务大量用户,推理费用超过训练费用,所以团队故意用远多于 20 倍参数的数据训练较小的模型。Llama 3 的 80 亿参数模型用了约 15 万亿 token。
- 测试时算力(test-time compute)成为新的规模维度。2024 年起,OpenAI o1 和 DeepSeek-R1 这类推理模型显示:推理时让模型生成更长的思考过程,准确率也随算力稳定上升。
数据端也出现了新约束。高质量公开文本接近用尽,合成数据和数据筛选成为规模定律里的新变量。
容易卡住的地方
- 把总参数量当 N:论文的 N 不含嵌入层。小模型里嵌入层占比很大,算进去会让曲线弯曲。先用 12 · n_layer · d_model² 估算非嵌入参数,再拟合。
- 在线性坐标上拟合幂律:直接最小二乘会被数值大的点主导。先对 x 和 y 都取对数,再做线性回归,斜率的相反数就是指数。
- 在小数据上找不到直线:仓库示例文本只有几百字节,模型很快过拟合,数据点会偏离幂律。这正是过拟合检测练习要观察的现象,不是代码错误。
- 觉得 0.076 太小没意义:指数作用在数量级上。参数每放大 10 倍,损失降约 16%;跨越 4 个数量级,损失累计降约 50%。
延伸阅读
- 原论文:Scaling Laws for Neural Language Models
- 原仓库第 25 天目录:25_scaling_laws/ —— 代码、笔记本、练习与答案(英文)
- Training Compute-Optimal Large Language Models(Chinchilla) —— DeepMind 2022:参数与数据应同比例增长
- Deep Learning Scaling is Predictable, Empirically —— 百度 2017:4 个领域的早期幂律测量
- Scaling Laws for Autoregressive Generative Modeling —— 同团队把规模定律扩展到图像、视频和数学