30u30 中文导读 / 30 天目录 / 第 25 天

第 25 天 · 损失可以预测:规模定律把大模型变成工程

第 5 单元Scaling Laws for Neural Language ModelsJared Kaplan, Sam McCandlish, Tom Henighan et al.arXiv · 2020
这是导读,不是翻译。先用 10 分钟拿到这篇论文的思想地图,再去读 原论文 →,去原仓库的 25_scaling_laws/ 目录 → 动手写代码。
给孩子讲:这一天有 10 岁孩子能听懂的讲义,带猜字游戏和动手活动,可打印。打开儿童讲义 → · PDF 简体 · PDF 繁體

一句话

Kaplan 等人训练了从 768 到 15 亿非嵌入参数的 Transformer 语言模型,发现测试损失分别随参数量、数据量、算力按幂律下降,趋势跨越 6 个以上数量级。论文据此给出固定算力下分配模型大小和数据量的公式。

论文讲了什么

这篇论文回答一个工程问题:多花 10 倍算力,语言模型会好多少?作者在 WebText2 数据集上训练了一系列 Transformer 语言模型,上下文长度 1024 个 token。性能统一用测试集交叉熵损失衡量,单位是 nats。实验改变 3 个量:非嵌入参数量 N、训练 token 数 D、训练算力 C。

核心结论是 3 条幂律。在另外两个量不构成瓶颈时:

在双对数坐标上,这 3 条关系都是直线。直线可以外推:用小模型的结果画线,就能在训练前预测大模型的损失。

论文还给出 5 个实用发现:

论文用一个估算式把算力和模型联系起来: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 解决怎样把大模型放进多块加速器。本篇说明为什么值得放大,以及放大多少。

学前准备

在原仓库怎么学

  1. README.md:看本日的内容安排和文件清单。
  2. setup.py:运行它,检查 Python 版本并安装依赖。
  3. implementation.py:读 3 个核心类。KaplanTransformer 是被放大的模型,MasterFitter 拟合幂律,ComputeEconomy 做算力估算。
  4. train_minimal.py:训练多个尺寸递增的模型,得到损失随参数量变化的数据点。训练文本在 data/,只有约 340 字节,所以结果只用于演示方法,不能复现论文数值。
  5. visualization.py:生成规模定律仪表板,可对照目录里的 scaling_dashboard.png 和 scaling_laws_plot.png。
  6. notebook.ipynb:在笔记本里交互式地重走一遍拟合流程。
  7. exercises/:做 5 个练习,依次是幂律拟合器、6N 算力估算、过拟合检测、GPT-3 损失预测、最小规模 Transformer。先自己做,再对照 exercises/solutions/。
  8. CHEATSHEET.md:复习时用来查公式。

今天再看

规模定律的方法活了下来:先用小模型拟合曲线,再决定大模型怎么训练。2026 年,各家实验室都把这一步当作标准流程。

具体的指数和分配方案被改写了 3 次:

数据端也出现了新约束。高质量公开文本接近用尽,合成数据和数据筛选成为规模定律里的新变量。

容易卡住的地方

延伸阅读