2. Kaplan Scaling Law
所属专题:Scaling Law · 第 3 章引语索引信源台账
专题章节
2. 现在(上):OpenAI Scaling Law
本章拆解 Kaplan et al. 2020 [1]《Scaling Laws for Neural Language Models》。
2.1 三条核心幂律
Kaplan 论文的核心就是下面这张经典的图:
图:Kaplan 2020 论文 Figure 1。横轴从左到右分别是算力 (C) 、数据量 (D) 、参数量 (N) ;纵轴都是 test loss。在 log-log 坐标下,三条曲线都是笔直的直线 —— 这就是”幂律”的视觉定义。Source: Kaplan et al., arXiv:2001.08361
对着这张图,Kaplan 的核心发现就是三条边际幂律:
(1) 只看参数量 (N) ( (D) 不是瓶颈时): [ L(N) = \left(\frac{N_c}{N}\right)^{\alpha_N}, \quad \alpha_N \approx 0.076,\ N_c \approx 8.8 \times 10^{13} \tag{1} ]
(2) 只看数据量 (D) ( (N) 不是瓶颈时): [ L(D) = \left(\frac{D_c}{D}\right)^{\alpha_D}, \quad \alpha_D \approx 0.095,\ D_c \approx 5.4 \times 10^{13} \tag{2} ]
(3) 只看算力 (C) (沿计算最优路径): [ L(C) = \left(\frac{C_c}{C}\right)^{\alpha_C}, \quad \alpha_C \approx 0.050,\ C_c \approx 3.1 \times 10^{8}\ \text{PF-days} \tag{3} ]
loss 和 (N) 、 (D) 、 (C) 三个维度都是幂律关系。这张图也是”越大越好、越多越好”这一流行认知的主要来源。
但这三条公式并不是”一次实验拟合出来的”。每一条都对应一个专门的”隔离变量实验” —— Kaplan 的核心手法是:每次只让一个维度当短板,把另外两个维度推到远离瓶颈的区域,然后观察短板如何拖住 loss。
三条公式各自的实验 setting
① (L(N)):让 (D) 不是瓶颈
-
数据:整个 WebText2 训练集(约 22B tokens)。按原文的默认设置,每个模型固定训 (2.5\times10^5) 步、每步 512 条 × 1024 token,合计约 (1.3\times10^{11}) token,相当于把训练集过了约 6 遍 —— 这组实验并不是单 epoch。按原文的防过拟合判据 (D \gtrsim 5\times10^3,N^{0.74})(原文式 4.4),(10^9) 参数以下的模型在这个数据量下过拟合很轻,最大的几个模型会有轻微过拟合;
-
训练时长:训到接近收敛(原文 §3.2:“trained to near convergence on the full WebText2 dataset and observe no overfitting (except possibly for the very largest models)”),让 val loss 不再下降;
-
变量:在 ((n_{\text{layer}}, d_{\text{model}})) 的网格上扫 (N) ,从极小 toy model 到 (\sim 10^9) 级非 embedding 参数;
-
固定:batch size((2^{19} \approx 0.5)M token)、LR 调度的形状与长度(3000 步线性 warmup,再 cosine 衰减到 0)、context length = 1024;峰值学习率则按模型规模设定,模型越大学习率越小(原文附录 D.6)。
这样整条曲线里唯一还在动的瓶颈就是 (N) 自己,(L(N) \propto N^{-\alpha_N}) 就只反映”容量对 loss 的约束”。
② (L(D)):让 (N) 不是瓶颈
-
模型:固定一个相对足够大的模型 —— Kaplan 用 ((n_{\text{layer}}, d_{\text{model}}) = (36, 1280) \approx 708\text{M}) 非 embedding 参数(GPT-2 Large 体量),使其在该实验设计下尽量不成为主要瓶颈;
-
数据:把 WebText2 截成不同大小的子集 (D) ,从 (\sim 10^7) 到 (\sim 10^{10}) tokens;
-
训练时长:使用 early stopping(因为数据有限、再训会 overfit),取 val loss 最低的那一步;
-
固定:同上。
这样唯一的瓶颈就是 (D) ,(L(D) \propto D^{-\alpha_D}) 反映”数据量对 loss 的约束”。
③ (L(C)):沿 compute-efficient frontier
最微妙的一条,不是单次实验,而是一大堆 ((N, S)) 组合画出的 Pareto 前沿(batch 固定为 (2^{19}) token,事后再按临界 batch 折算,见下):
-
对每一档算力预算 (C) ,在各个模型的学习曲线上取第 (S = C/(6NB)) 步的 loss,比较不同的 (N),找能达到最低 loss 的那个。注意:第 (S) 步的 loss 取自同一批 (2.5\times10^5) 步长跑(约 130B token)的中间 checkpoint,学习率仍按全长 cosine 走,没有针对 (S) 单独衰减 —— Hoffmann 后来批评的正是这一点(3.1 节);
-
把每档的最低 loss 连起来,就是 “envelope curve”;
-
拟合 envelope 得到 (L(C) \propto C^{-\alpha_C}) 。
-
注意公式里的 (C) 用的是 (C_{\min}):在 batch 远小于临界值((B \ll B_{\text{crit}}))的极限下达到同一 loss 所需的最小算力,(C_{\min} = C/(1 + B/B_{\text{crit}}(L)))(原文式 5.5)。batch 越超过临界值,实际花的 (C) 比 (C_{\min}) 浪费得越多;原文建议用 (C_{\min}) 的趋势做预测。
这条曲线工程上最有用:给你 (C) PF-days,最优配比能打到多低 loss。
关于 (N, D, C, L) 的物理意义和单位
-
(N):去掉 embedding、positional embedding、unembedding 层后的参数量。Kaplan 的一个重要发现是:真正决定 loss 的是非 embedding 参数,embedding 参数的贡献很小。口径提醒:和 Chinchilla 的 (N) 定义不同(Chinchilla 含 embedding)。
-
(D):token 数(不是样本数、不是字节数)。口径提醒:Kaplan 符号表里的 (D) 是数据集大小(dataset size,以 token 计);训练中累计处理的 token 数是 (B \times S)(Kaplan 的 batch size (B) 以 token 计,与 (C \approx 6NBS) 一致;若 (B) 按序列数计则是 (B \times S \times n_{ctx}))。二者只有在单 epoch、无重复时才相等,2.3 节会用到这个区别。同一批文本换一个 tokenizer,对应的 (D) 也会变。
-
(C):单位 PF-days(PetaFLOP-days) (= 10^{15} \times 86400) FLOP (\approx 8.64 \times 10^{19}) FLOP。
-
(L):每 token 的 cross-entropy,以 nats(自然对数)为单位。Kaplan 原文 [1] §1.3 的符号表写的是:“(L) – the cross entropy loss in nats. Typically it will be averaged over the tokens in a context …”
-
单位转换:1 nat = (1/\ln 2 \approx 1.443) bits,perplexity (= e^L)。
选 nats 是因为主流框架的交叉熵默认取自然对数;换成 bits 相当于整条曲线乘一个常数,只改 (N_c, D_c, C_c) 这类常数、不改指数;换词表或分词则不只是换单位 —— Kaplan 原文 [1] §4.1 只把”只让 loss 差一个整体因子”列为建模前提,跨 tokenizer 比 loss 要先换成 bpb(6.5 节)。
2.2 联合公式:两个瓶颈的叠加
Kaplan 给出的 (N) - (D) 联合公式: [ L(N, D) = \left[\left(\frac{N_c}{N}\right)^{\alpha_N/\alpha_D} + \frac{D_c}{D}\right]^{\alpha_D} \tag{4} ]
这个形式其实很符合直觉。看两个极限:
-
当 (D \to \infty) (数据不是瓶颈): (L \to (N_c/N)^{\alpha_N}) ,退化回 (1) 式;
-
当 (N \to \infty) (参数不是瓶颈): (L \to (D_c/D)^{\alpha_D}) ,退化回 (2) 式。
图:Kaplan et al. 2020 [1] Figure 4。左图是在不同 dataset size (D) 下 early-stopped 的 test loss 与本文公式 (4) 的 (L(N,D)) 联合拟合(对应 Kaplan 原文的 (1.5) 式);右图是不同模型大小在不同训练 steps 下的 learning curve 与 (L(N,S)) 的拟合。两边拟合效果都非常好 —— 幂律叠加这一简单形式抓住了主要的两维联合关系。Source: Kaplan et al., arXiv:2001.08361
2.3 从 L(N, D) 到最优分配:Lagrange 乘子法
最有意思的部分来了。如果你手上有固定的算力预算 (C) ,应该怎么分配 (N) 和 (D) ?
我们用一个工程近似:训练一个 Transformer 模型处理一个 token 大约需要 6N FLOPs(forward 2N + backward 4N): [ C \approx 6 N D \tag{5} ]
目标:在 (C) 固定约束下最小化 (L(N, D)) 。这是经典的 Lagrange 乘子法问题。
为了推导干净,换成一个更简单的加法形式。它和 (4) 并不等价,但在最优点给出相同的指数((4) 是两项之和的单调函数,对它求最优与对下式求最优,得到的都是 (D \propto N^{\alpha_N/\alpha_D})): [ L(N, D) \approx \left(\frac{N_c}{N}\right)^{\alpha_N} + \left(\frac{D_c}{D}\right)^{\alpha_D} \tag{6} ]
构造 Lagrangian: [ \mathcal{L} = \left(\frac{N_c}{N}\right)^{\alpha_N} + \left(\frac{D_c}{D}\right)^{\alpha_D} + \lambda (6 N D - C) \tag{7} ]
对 (N) 求偏导: [ \frac{\partial \mathcal{L}}{\partial N} = -\alpha_N \frac{N_c^{\alpha_N}}{N^{\alpha_N + 1}} + 6 \lambda D = 0 \tag{8} ]
对 (D) 求偏导: [ \frac{\partial \mathcal{L}}{\partial D} = -\alpha_D \frac{D_c^{\alpha_D}}{D^{\alpha_D + 1}} + 6 \lambda N = 0 \tag{9} ]
把 (8)(9) 两式各自乘过去再相除消掉 (6\lambda) ,整理得到 (N) 和 (D) 在最优点上的比例关系: [ \alpha_N \cdot L_N(N) = \alpha_D \cdot L_D(D) \tag{10} ]
((L_N \equiv (N_c/N)^{\alpha_N})、(L_D \equiv (D_c/D)^{\alpha_D}) 是 (6) 式的两项。“两个瓶颈各自的边际收益”在最优点上相等 —— 这是 Lagrange 的一般直觉:每多花一份算力,不论是投到 (N) 还是 (D) 上,带来的 loss 下降都必须一样,否则你就应该把算力重新挪一点过去。)
代回 (C \approx 6 N D) ,解出: [ N_{opt} \propto C^{\frac{\alpha_D}{\alpha_N + \alpha_D}}, \quad D_{opt} \propto C^{\frac{\alpha_N}{\alpha_N + \alpha_D}} \tag{11} ]
代入 Kaplan 单独拟合 (1)(2) 得到的 (\alpha_N = 0.076)、(\alpha_D = 0.095),得 (N_{opt} \propto C^{0.56})、(D_{opt} \propto C^{0.44})(若用 (4) 式联合拟合的 (\alpha_D = 0.103),则是 0.58 / 0.42)。
但这只是一个练习,不是 Kaplan 的结论:(4) 里的 (D) 是 early stopping 下的数据集大小(小数据集会被重复训练很多遍,约 (2\times10^7) token 的子集一个 epoch 只有 40 步),(5) 里的 (D) 却是累计处理的 token 数,两者只在单 epoch 时相等(见 2.1 节的口径提醒)。把两者代进同一个优化问题,等于换了前提,得到的是另一个结果。
Kaplan 的最优分配走的是另一条路:不在 (L(N,D)) 上求解,而是用没有训到收敛的学习曲线 (L(N, S_{\min}))(原文式 1.6,即 2.2 节那张图的右半幅),加上临界 batch size (B_{\text{crit}}(L) \propto L^{-1/\alpha_B}),在固定算力下对 (N) 求最小。理论上它给出 (N \propto C_{\min}^{\alpha_C^{\min}/\alpha_N}),其中 [ \alpha_C^{\min} = \dfrac{1}{1/\alpha_S + 1/\alpha_B + 1/\alpha_N} \tag{12} ]
((\alpha_S \approx 0.76) 是学习曲线里步数项的指数,(\alpha_B \approx 0.21);原文由此算得 (\alpha_C^{\min} \approx 0.054)(与 (3) 式直接拟合的 0.050 吻合),于是 (N) 的指数约 0.71,见原文式 1.7–1.8、6.4–6.5。)实测上,Kaplan 直接拟合各算力档的最优模型大小,得到 (N \propto C_{\min}^{0.73})(原文式 6.1),再由临界 batch 的拟合推出 (B \propto C_{\min}^{0.24})、(S \propto C_{\min}^{0.03})(式 6.2),理论与实测相差不过几个百分点。由 (D = B \cdot S),Kaplan 报告的最优分配是: [ N_{opt} \propto C^{0.73}, \quad D_{opt} \propto C^{0.27} \tag{13} ]
这就是 Kaplan 著名的”模型重于数据”结论:算力每增加 10 倍,参数量要增加 (10^{0.73} \approx 5.4) 倍,而数据量只需增加 (10^{0.27} \approx 1.9) 倍。它背后是原文的另一条结论”收敛是低效的”(convergence is inefficient):固定算力下,应该训更大的模型,并在远未收敛时就停下。注意 (13) 里的 (C) 是按临界 batch 折算的 (C_{\min});0.73 是沿学习曲线加临界 batch 这条路实测出来的,并不是在 (L(N,D)) 上”加入 (B)、(S)“推出来的,也不能和上面那个 0.56 直接比。
图:Kaplan et al. 2020 [1] Figure 3。横轴覆盖约 (10^{-8}) 到 (10^1) PF-days,即约 10 亿倍( (10^9) ) 的算力增量,Kaplan 给的最优分配建议是 参数量涨 >100 万倍、batch size 涨约 100 倍、serial steps 基本不动(<10×)。视觉上非常清楚:模型大小吃掉了算力增量的绝大部分。这是后来被 Chinchilla 翻盘的”重模型轻数据”结论的最直观图示。Source: Kaplan et al., arXiv:2001.08361
Kaplan 在原文 §6.3 自己也指出了这组趋势里的矛盾:为防过拟合,数据应按 (D \propto N^{0.74} \propto C_{\min}^{0.54}) 增长,而算力最优训练用到的数据只按约 (C_{\min}^{0.26}) 增长(原文式 6.7 的写法;(13) 取 0.27,差在舍入);照此外推,沿算力最优路径的 (L(C_{\min}) \propto C_{\min}^{-0.050}) 迟早会撞上数据受限时的 (L \propto C_{\min}^{-0.03}),交点约在 (C^* \sim 10^4) PF-days、(N^* \sim 10^{12}) 参数、(D^* \sim 10^{12}) token、(L^* \sim 1.7) nats/token(原文说这些数值上下可差一个数量级),“our scaling laws must break down before this point”。原文同一节还写道:自然语言的熵不为零,这些趋势终究要走平 —— 这正是下一章 Chinchilla 显式加入的 (E) 项所刻画的东西(原文还猜测交点处的 (L^*) 大致就是自然语言每 token 的熵;它与 Chinchilla 的 (E \approx 1.69) 数值相近,但两者的语料与分词都不同,不能互相印证,见 6.5 节)。后来 Chinchilla 把”重模型”的结论翻转了过来,原因不止一个(3.1 节、7.1.2 节)。先继续讲 insight。
2.4 Kaplan 的 4 大 insight
Insight 1:性能主要取决于 scale,不取决于架构形状。
深度 / 宽度比、attention head 数、FFN 比例 —— 只要 scale 相同,loss 差别通常不超过几个百分点。这个结论对”靠调整模型结构形状取得显著收益”是一个很强的否定信号,也是 Bitter Lesson 在语言模型上最直接的体现之一。
Insight 2:平滑幂律跨越多个数量级。
按原文的说法,这组关系在算力 (C_{\min}) 上跨 8 个数量级、(N) 上跨 6 个(约 (10^3) 到 (10^9))、(D) 上跨两个多(2,200 万到 230 亿 token),数据点基本落在同一条直线上(原文单独指出的例外很少:层数少于 2 或深宽比极端的模型、约 (2\times10^7) token 的最小数据集)。这是它能被当作经验定律来外推的关键证据。
Insight 3:大模型 sample-efficient。
同样的 (D) ,大模型比小模型 loss 低更多。这反直觉但很关键 —— 大模型不是”需要更多数据”,而是能更好地利用同样的数据。
为什么说”反直觉”:这条结论和 2020 年前主流教科书与工程经验的直觉相反(2019 年 Belkin 等人的双下降已在过参数化、能插值训练集的模型上指出”越大越过拟合”不成立,但 LLM 预训练不在那个区间,见 9.7 节)。过去的固有认知叠加了三个来源:
-
VC 维理论(9.2 节):泛化误差上界 (R(f) \leq \hat R(f) + O(\sqrt{d_{\text{VC}}/n}))(略去对数因子,完整形式见 9.2 节)。样本量 (n) 固定时,参数越多上界越大。直接推论:“小数据只能用小模型,大模型必须配大数据”。
-
偏差-方差权衡的 U 形曲线:模型复杂度太高 → 方差爆炸 → overfitting。存在一个”适配数据量的最优复杂度”。
-
深度学习早期的工程经验:ResNet 原文 [2] 里,CIFAR-10 上 1202 层(19.4M 参数)的测试误差 7.93%,反而高于 110 层(1.7M 参数)的 6.43%,作者归因于过拟合;ImageNet 数据规模和模型规模需要”匹配”。“数据不够先缩模型” 是工程师的本能反应。
旧直觉为什么不适用:在 LLM 上,这条经验规律可以直接从加性拟合式读出 —— 固定 (N) 时,数据轴曲线的平台是 (E + A/N^{\alpha})(6.1 节);大模型把 (A/N^{\alpha}) 这一项压小,平台随之降低,达到同一 loss 所需的 token 就更少。
图:Kaplan 2020 [1] Figure 2。每条曲线是一个不同大小的模型(非 embedding 参数量从 (10^3) 到 (10^9))。左图横轴是已处理 token 数:同样的 token 数下,大模型(黄色)的 loss 更低,达到同一 loss 所需的样本更少,“大模型吃数据更高效”这句反直觉的话有了视觉证据。右图横轴是算力,结论并不相同:算力很小时反而是小模型(紫色)先降下来;每一档算力都有一个最优的模型大小,它随算力平滑变大,而算力最优的训练会在远未收敛时停下(图中箭头标注)。所以”大模型更快到达目标 loss”只在 token 轴上成立。Source: Kaplan et al., arXiv:2001.08361
Insight 4:换一个文本分布,loss 也同步改善。
只在 WebText2 上训练的模型,在 Books Corpus、Common Crawl、英文 Wikipedia、Internet Books 这些其他文本分布上的 test loss 也随模型规模平滑下降,与 WebText2 验证 loss 只差一个大致恒定的偏移(原文 §3.2.2)。Kaplan 所说的 transfer 指的是这种分布外 loss 的可预测,不是下游任务表现的可预测 —— 原文并没有评测下游任务。loss 能在多大程度上预测下游能力,见 8.1 节。
2.5 Takeaway
Kaplan 2020 用一组隔离变量实验,把 loss 对 (N) 、 (D) 、 (C) 的依赖拟合成可跨多个数量级外推的幂律,并沿学习曲线与临界 batch 实测出”算力优先扩模型”的最优分配((N_{opt} \propto C^{0.73}))—— 这是 Scaling Law 的第一版定量答案。
两年后,Chinchilla 得出了相反的结论:参数与数据应等比放大(第 3 章)。分歧的主因后来查清 [3][4],是参数与 FLOP 的计数口径、warmup 时长和随规模的优化器调参;Hoffmann 最初点名的学习率调度(算力前沿取自同一批固定长度 cosine 长跑的中间 loss,见 2.1 节③)只是软肋之一(7.1.2 节)。
暗线回扣:暗线①(可预测性)在这一章第一次被系统地建立;暗线②(数据约束)的起点也在这里 —— 按 0.73 / 0.27 的分配,数据增长远慢于参数,下一章正是从这里翻盘。
参考来源
- [1][1] Kaplan J, McCandlish S, Henighan T, et al. Scaling Laws for Neural Language Models . arXiv:2001.08361, 2020.(在新窗口打开)官方 · 非本人原话↩
- [2][172] He K, Zhang X, Ren S, Sun J. Deep Residual Learning for Image Recognition . CVPR 2016 (arXiv:1512.03385).(在新窗口打开)官方 · 非本人原话↩
- [3][77] Pearce T, Song J. Reconciling Kaplan and Chinchilla Scaling Laws . TMLR 2024 (arXiv:2406.12907).(在新窗口打开)官方 · 非本人原话↩
- [4][104] Porian T, Wortsman M, Jitsev J, Schmidt L, Carmon Y. Resolving Discrepancies in Compute-Optimal Scaling of Language Models . NeurIPS 2024 (Spotlight) (arXiv:2406.19146).(在新窗口打开)官方 · 非本人原话↩