想象你是一家AI餐厅的主厨。餐厅的质量评分(Loss)取决于三样东西:设备复杂度(参数量 N)、食材储备(数据量 D)、以及每月的能源预算(算力 C)。2019年前后,OpenAI 来了一位叫 Kaplan 的餐饮顾问,他用了上万个“小厨房”做对照实验,把这三样投入与餐厅评分的关系画成了几条平滑的曲线,第一次告诉业界:大模型的“好吃程度”服从幂律——投入越多效果越好,但边际递减。最反直觉的发现是:在能源预算固定的前提下,升级设备(参数)比多囤食材(数据)更能提升评分。四年后,DeepMind 的 Chinchilla 顾问团队用更大规模的实验复核,却得出了“设备和食材同样重要”的修正结论。这篇文章就带你把这个故事讲透:从幂律直觉、实验方法论、参数量优先策略,到与 Chinchilla 的分歧,以及今天如何用这套规律规划大模型训练。
一句话价值:Kaplan定律是缩放定律的奠基之作,理解它能帮你科学规划算力预算、预测模型能力、判断“加数据还是加参数”,是所有大模型训练决策的第一块理论基石。
可视化演示
展示哈希表使用链地址法处理冲突的过程,通过哈希函数将键映射到桶中,冲突时在桶内构建链表。
本节配有交互动效(进入视口后自动加载,约 3KB)。
哈希表 - 链地址法 哈希函数 h(key)=key%10 将键映射到桶 冲突时在桶内构建链表存储 h(k)=k%10
缩放定律背景
一位经验丰富的主厨看到自家厨房的成绩单时,最想知道的是:再加一套设备或者再进一批食材,评分能提高多少?如果回报是直线上升,那砸钱就行;但Kaplan顾问通过多年“探店”发现,真实规律是一条越走越平缓的下坡路——一开始加大投入,评分蹭蹭涨;越往后,同样的投入换来的提升越少。这条曲线在数学上就叫幂律。
语言模型的训练也有同样的“成绩单”。这个成绩单上的分数叫 Loss(可以理解为菜品质量评分:模型预测下一个词的平均犯错程度,分数越低越好)。而厨房里的三大投入分别是:参数量 N(设备复杂度,决定模型“记住和推理”的能力上限)、数据量 D(食材储备,决定模型见过的世界有多广)、算力 C(能源预算,决定训练这顿饭总共要烧多少火)。Kaplan团队最重要的发现是:无论单独考察哪一个要素,Loss 都规规矩矩地沿着幂律下降。
如果把幂律写成公式,它会优雅得惊人:
所以“越大越好”并不精确,更准确的说法是“越大,越难继续变好”。这条厨房定律奠定了整篇文章的基调:规模化的收益是真实存在的,但它是一杯越冲越淡的糖水。
- 损失 L(x)x 是某一种投入要素(参数量、数据量或算力),L 是该投入规模下模型的预期 Loss,相当于餐厅的“质量逆评分”,越低越好。
- 参考常数 x_c拟合曲线时得到的一个正比例常数,可以理解为“资源投入的参考刻度”,它决定了曲线在坐标系里的左右位置。
- 幂指数 α_x控制曲线陡峭程度的核心参数;α_x 越大,损失随资源增加下降越快,这个指数正是后续所有争论的焦点。
实验方法论
厨房里做对照实验有一条铁律:想知道新设备有没有用,就只换设备,食材和火力原封不动;想知道新食材有没有用,就只换食材。Kaplan 团队把这条铁律搬进了深度学习训练场,通过严格的控制变量,让每个要素的单独贡献都被干净地分离出来。
但还有一个现实约束:训练一个千亿参数的模型极其昂贵,不可能把它当作实验小白鼠。Kaplan 的解决办法是“以小见大”——大量训练参数量从几万到几亿不等的小模型,在它们身上测量 Loss,把数据点连成曲线,再沿着曲线把规律延伸到千亿参数的区间。这个方法后来成为整个缩放定律研究的标准范式:小规模拟合、大规模外推。
当把所有小模型的实验结果画在取了对数的坐标纸上时,奇迹出现了:数据点几乎完美地排成一条直线。这说明 Loss 与参数量 N 之间是干净的幂律:
小厨房试出来的配方,能不能复制到大食堂?Kaplan 用大量后续实验证明了这条路走得通——只要你顺着同一条曲线放大,预测值和实际训练结果就惊人地吻合。这套“小推大”的预言能力,是缩放定律最迷人的地方。
- 参数量 N模型的权重总个数,可以理解为厨房里设备的“件数总和”,N 越大代表设备越齐全。
- 比例常数 N_c拟合出来的参考刻度,表示参数量得涨到某个量级后,损失才会进入快速下降的“甜区”。
- 幂指数 0.076损失随参数规模下降的速度;指数是 0.076 而不是 1,正是“收益递减”四个字的数学化身。
参数量优先
现在到了餐厅经营最核心的问题:燃气费(算力预算)是固定的,这笔钱该怎么花?一种方案是多买设备,让厨房更复杂、能处理更精细的菜式;另一种方案是多囤食材,让菜品更丰富。Kaplan 顾问给出的答案在当时相当反直觉:优先升级设备,食材够用就行。
为什么?因为设备决定了一座厨房的能力天花板。设备太少时,哪怕堆满山一样的食材,厨师也来不及处理和发挥——模型容量不够,数据喂进去也记不住规律。Kaplan 团队在每个算力预算水平上都做了扫描实验:固定总预算,遍历各种“设备-食材”组合,找到 Loss 最低的那个最优组合,然后把所有最优组合连成曲线。
这条曲线揭示了一个清晰的分工:
这就像燃气翻十倍时,聪明的做法是换五倍的新设备,食材只需再进约一倍半——设备带来的“精致度提升”远大于食材的“量变积累”。理解了这条分配规律,也就理解了为什么那个阶段的模型普遍“参数大、数据小”。
- 最优参数量 N_opt在给定算力预算 C 下,能让 Loss 达到最低的那个模型参数量;太大或太小都会浪费预算。
- 指数 0.73参数量对算力预算的响应速度。0.73 大于 0.5,说明 Kaplan 认为参数应该“多吃多占”。
- 数据量分配指数 0.27在算力预算增长时,数据量只需要以较慢的速度跟随,这就是“参数量优先”的数学表达。
数据与算力
设备固然优先,但食材和燃气也各有各的量价曲线。Kaplan 团队同样把注意力转向了另外两个要素,为它们单独画出了幂律曲线。
先看数据量 D:模型见识的文本越多,预测越准。再看算力 C:训练时烧的总火候越大,模型被磨得越精细。这两条曲线也都不折不扣地服从幂律,但斜率各不相同:
这解释了一个常见的反直觉现象:为什么“无脑堆算力”非常浪费。因为算力单变量的收益指数最小,而且算力只有转化为参数和数据的增长才真正起作用。主厨只开猛火,却既不换设备也不进货,菜品的提升自然微乎其微。
- 数据量幂律Loss 与数据量的关系写成幂律,指数约 0.095,是三个单变量中最大的——说明“见多识广”单独来看很有效。
- 算力量幂律Loss 与算力的关系指数约 0.050,是三者中最小的——直接堆算力的“粗放式”提升效率最低。
- 两个指数的含义它们都在 0 到 1 之间,都小于 1,意味着无论哪个要素,收益都会随着投入增加而递减。
Chinchilla差异
时间来到 2022 年,DeepMind 的 Chinchilla 顾问团队自带更充裕的实验预算来复核这套厨房定律。他们做了和 Kaplan 类似的扫描实验,却得到了一个让行业震动的不同结论:Kaplan 当年把参数的重要性高估了。
问题出在实验区域的选择上。Chinchilla 团队复盘发现,Kaplan 的多数实验点都集中在“设备偏多、食材偏少”的区域——也就是说,模型参数很大,但训练数据明显不足。在这种远离最优分配的区域里拟合曲线,设备(参数)的边际收益自然被抬高,食材(数据)的价值则被掩盖了。如果用更充足的预算、更均匀地覆盖各种分配比例,故事就会改写。
Chinchilla 重新拟合出的最优分配是:
所以,Kaplan“参数优先”不是错误,而是一份带有时代局限性的历史经验;Chinchilla 是对它的修正和超集。今天的工程师更倾向于把两者结合起来看:预算是燃气,配比才是决定菜品上限的菜谱。
- 均衡指数 0.50Chinchilla 认为算力预算增长时,参数和数据应该以相同速率扩张,各占一半功劳。
- 同等的另一半数据量的指数也是 0.50,与 Kaplan 的 0.27 形成鲜明对比,这是两个定律最核心的分歧点。
- 对比的意义0.50 对 0.73,说明 Kaplan 的结论是特定实验条件下的局部真理,而不是放之四海而皆准的常数。
实践指导
回到现实。你手里有 1000 张 GPU,预算两个月,该怎么规划模型?Kaplan 定律给我们的不只是几条曲线,而是一套“先算后做”的决策框架。
做规划前,需要先掌握一个工程上非常好用的近似公式:训练一次完整的前向+反向传播,总计算量约等于 6 倍参数量乘数据量。这个式子把三大要素焊在了一起,让你能闭着眼睛在“参数量、数据量、算力”三个旋钮之间换算。
Kaplan 定律还教会我们“用小实验预测大结果”:先训练一批百万到千万级参数的小模型,拟合出幂律的指数和常数,再外推预测目标规模下的 Loss 水平。这个能力让团队在烧掉巨资之前,就能预估投入产出是否划算。产业界看这条定律,也能理解大模型军备竞赛的本质——每一滴算力的边际收益都在递减,谁能用同样的电做出更好吃的菜,谁才是最后的赢家。
- 计算量 C以 FLOPs 计的训练总工作量,相当于厨房的燃气总表数。
- 系数 6一次前向传播约 2ND 次浮点运算,反向传播约 4ND 次,合计约 6ND;这来自 Transformer 前向与反向计算的常系数近似。
- 三者的约束关系N、D、C 不是独立的——参数变大、数据变多,需要的算力就成倍上升,所以预算规划本质上是解一个三元方程。
AI 应用场景
训练预算规划
阶段:模型训练规划
解决的问题:团队只有固定算力,不确定该训练多少参数、配多少数据。传统做法凭经验拍脑袋,容易造成“参数过大、数据不足”的失配浪费。AI 利用 Kaplan 幂律与最优分配公式,在训练前估算最优参数量 N_opt ∝ C^0.73,并用 Chinchilla 的均衡方案做对照,再结合 C ≈ 6ND 反推数据量,输出一份“预算—参数量—数据量”规划表。
具体案例:某团队以 1000 张 A100 训练一个月(约 2×10^22 FLOPs),先用 Kaplan 公式估算最优参数约 600 亿、数据约 1.2 万亿 tokens,再对比 Chinchilla 方案把数据配比上调,最终训练了一个 60B 参数 + 1.2T tokens 的模型,用更少的数据达到了比上一代更好的 Loss。
模型能力预测与立项评审
阶段:模型能力评估与立项决策
解决的问题:训练千亿模型成本极高,管理者需要提前知道投入产出比。传统方式只能参考同行结果,风险很大。AI 用缩放定律曲线,先在 7B/13B/33B 小模型上做标定实验,拟合 Loss-规模幂律,再外推预测 500B 模型的 Loss 区间,输出“预期收益曲线”辅助立项或放弃决策。
具体案例:某公司计划训练 500B 模型,先用三档小模型拟合外推,发现 500B 的预期 Loss 提升达不到产品门槛,于是改用“降参数量、增数据”的 Chinchilla 方案,节省了约 60% 的预算。
模型迭代方向判断
阶段:模型持续训练与迭代
解决的问题:模型已经训练完,效果略欠,该继续加数据继续训练,还是换更大模型?传统做法先加数据试一轮,费时费力。AI 通过将当前训练 Loss 与 L(N)、L(D) 幂律曲线对照,定位瓶颈:若数据量远超最优值而参数不足,则增大参数;若参数较大但 Loss 仍偏高,说明数据或训练步数不够。
具体案例:某团队训练 90B 模型后 Loss 停在 2.50,对照曲线发现数据量只有最优配比的 0.9 倍,于是把数据扩到 1.6 倍,Loss 降至 2.43;而盲目加参数只降了 0.02,避免了一次千卡级的浪费训练。
Python 演示
import numpy as np np.random.seed(42) SMALL_NS = np.array([1e4, 3e4, 1e5, 3e5, 1e6, 3e6, 1e7, 3e7])TRUE_NC = 8.8e9TRUE_ALPHA = 0.076 def run_small_experiments(): losses = (TRUE_NC / SMALL_NS) ** TRUE_ALPHA noise = np.random.normal(1.0, 0.01, size=losses.size) return losses * noise def fit_power_law(Ns, losses): log_n = np.log(Ns) log_l = np.log(losses) slope, intercept = np.polyfit(log_n, log_l, 1) alpha = -slope n_c = float(np.exp(intercept / alpha)) return alpha, n_c def predict_loss(alpha, n_c, n): return (n_c / n) ** alpha def allocation_exponents(model): if model == "kaplan": return 0.73, 0.27 return 0.50, 0.50 def main(): obs = run_small_experiments() alpha, n_c = fit_power_law(SMALL_NS, obs) pred = predict_loss(alpha, n_c, 7e9) real = (TRUE_NC / 7e9) ** TRUE_ALPHA print("fit alpha=%.3f, true alpha=%.3f" % (alpha, TRUE_ALPHA)) print("predict 7B loss=%.4f, true=%.4f" % (pred, real)) for name in ("kaplan", "chinchilla"): en, ed = allocation_exponents(name) print("%s: N exponent=%.2f, D exponent=%.2f" % (name, en, ed)) if __name__ == "__main__": main()
losses = (TRUE_NC / SMALL_NS) ** TRUE_ALPHA按真实幂律生成小模型的理想 Loss,模拟“实验的真值”noise = np.random.normal(1.0, 0.01, size=losses.size)给 Loss 乘上微小噪声,模拟真实实验中的随机波动slope, intercept = np.polyfit(log_n, log_l, 1)在取了对数的坐标空间做一阶线性回归,把幂律变成直线来拟合alpha = -slope直线的斜率取相反数,就是幂律的指数 α;斜率是负的,因为 Loss 随规模下降n_c = float(np.exp(intercept / alpha))从直线截距反推出参考常数 N_c,完成整条幂律曲线的重建pred = predict_loss(alpha, n_c, 7e9)把拟合好的曲线外推到 70 亿参数,预测大模型的 Lossallocation_exponents("kaplan")返回 Kaplan 的分配指数 (0.73, 0.27),与 Chinchilla 的 (0.50, 0.50) 对比
常见误区
误区Kaplan 定律说了参数量比数据量重要,那训练大模型就应该拼命加参数,数据差不多就行。反正参数越多越聪明,数据只是辅助。
正解Kaplan 的“参数优先”是建立在“给定算力预算、同时做最优分配”这个前提下的。它对应的是 N_opt ∝ C^0.73、D_opt ∝ C^0.27 的组合,而不是“数据随便给点就够”。Chinchilla 后来的实验更是指出,这个结论因为实验点多落在数据不足的区域而高估了参数的作用。现实中只在参数上猛冲、数据跟不上,模型会“见少识浅”,过拟合严重。
为何常见:媒体传播时往往会简化成“大力出奇迹”,让人只记住“参数优先”的结论,忘掉它成立的前提条件。
误区Loss 和规模是幂律关系,那我参数扩大 10 倍,Loss 就该降到原来的 1/10,效果立竿见影。
正解幂律的指数通常远小于 1。以 α_N = 0.076 为例,参数扩大 10 倍,Loss 只变为原来的 10^-0.076 ≈ 0.84,也就是降 16% 左右;而且这个降幅还会随着规模进一步增大而继续缩小。规模化是“有收益的缓慢爬坡”,不是“一夜暴富”。
为何常见:人脑对指数小于 1 的幂律缺乏直觉,容易把“幂律”误当成“正比例”,于是高估了投入回报。
误区既然 Kaplan 用几亿参数的小模型就拟合出了规律,那我随便在小模型上拟合一下,外推到千亿参数就万事大吉。
正解外推的可靠性依赖曲线在目标区域仍然成立,而现实中有很多因素会让规律失效:训练不足、数据分布变化、损失进入不可约下界、甚至是如 Chinchilla 发现的最优分配区域偏移。Kaplan 的结论被 Chinchilla 修正,本身就是一次外推翻车的案例。正确做法是小规模拟合后,用中规模模型验证曲线走向,再谨慎外推。
为何常见:看到拟合曲线漂亮就以为预测一定准,忽略了统计外推本质上是“假设经验规律延续”的冒险。
误区L(C) ∝ C^-0.050,那就是算力加得越多 Loss 越低,以后每次升级都租更多 GPU 就行了,其他什么都不用动。
正解这条 L(C) 曲线隐含了一个重要假设——算力被最优地分配给了参数量和数据量。如果只增加算力而不增加 N 和 D,模型的容量和数据见识都没变,多出来的算力只会空转或重复训练,Loss 根本不会沿曲线下降。这就像给厨房加了十倍燃气,设备不改、食材不加,菜的味道不会变好多少。
为何常见:把“全局最优路径上的规律”误读成“任意单变量的操作手册”,忽略了公式背后的前提条件。
面试题
Q1. 在 Kaplan 定律中,模型 Loss 与参数量 N 的关系是?
- A.按幂律下降,指数约 0.076← 正确答案
- B.按线性方式直接下降
- C.按对数方式缓慢下降
- D.按指数方式快速下降
答案:A。Kaplan 团队用大量小模型实验发现,L(N) = (Nc/N)^0.076 是典型的幂律关系。线性关系是直线下降,对数关系下降过慢,指数关系则下降太快,都不符合实验观测到的“收益递减”曲线。
Q2. Kaplan 定律的核心三大投入要素不包括以下哪一项?
- A.参数量 N
- B.数据量 D
- C.计算量 C
- D.网络层数 L← 正确答案
答案:D。Kaplan 定律把参数量、数据量、算力作为三大核心投入,分别与 Loss 建立幂律关系。网络层数虽然是模型结构的一部分,但并不是该定律独立考察的缩放要素,其影响被归并到参数量的整体效应中。
Q3. 在固定算力预算 C 下,Kaplan 定律给出的最优参数量 N_opt 与 C 的关系是?
- A.N_opt ∝ C^0.50
- B.N_opt ∝ C^0.73← 正确答案
- C.N_opt ∝ C^0.27
- D.N_opt ∝ C^0.05
答案:B。Kaplan 通过扫描各预算水平上的最优组合,拟合出 N_opt ∝ C^0.73,D_opt ∝ C^0.27。C^0.50 是 Chinchilla 的均衡结论,C^0.27 对应数据量分配指数,C^0.05 则是算力单变量的 Loss 幂律指数。
Q4. Kaplan 定律中 L(D) ≈ (Dc/D)^0.095 说明了什么?
- A.数据翻倍,损失直接减半
- B.数据翻倍,损失只降约 6%← 正确答案
- C.数据越多,损失线性下降
- D.数据多少不影响损失
答案:B。指数 0.095 意味着数据量 D 扩大 2 倍时,Loss 降为原来的 2^-0.095 ≈ 0.94,即只下降约 6%。这正是幂律“边际递减”的体现,数据量存在收益上限,而绝不是“翻倍减半”或“不相关”。
Q5. Kaplan 定律与 Chinchilla 定律最核心的差异是什么?
- A.参数量与数据的分配策略← 正确答案
- B.数据集的来源与清洗质量
- C.训练框架与分布式配置
- D.激活函数与模型结构选择
答案:A。两者本质上是对“算力预算如何在参数与数据之间分配”给出了不同答案:Kaplan 认为参数占 0.73 的优势地位,Chinchilla 认为参数和数据各占 0.50。数据和框架、激活函数等并不是这两个定律的分歧点。
Q6. 为什么 Chinchilla 团队认为 Kaplan 低估了数据的作用?
- A.Kaplan 实验的数据大多反复重用了多次
- B.Kaplan 实验点集中在数据不足的非最优区域← 正确答案
- C.Kaplan 用超大模型导致数据占比太小
- D.Kaplan 采用了不同的优化器与学习率
答案:B。Chinchilla 复盘发现,Kaplan 为在算力约束下做大量对照实验,训练的模型普遍“参数偏大、训练 token 偏少”,数据量没有达到最优配比。在这片区域拟合出的曲线,自然会把参数量的边际收益抬高、把数据的价值掩盖掉。优化器和数据重复不是主因。
Q7. 下列哪些属于 Kaplan 定律的实验方法论特点?
- A.控制变量,一次只改变一个因素← 正确答案
- B.用大量小模型拟合幂律曲线← 正确答案
- C.将拟合结果外推到超大模型← 正确答案
- D.只训练一个超大模型验证规律
答案:ABC。Kaplan 的方法论核心是“控制变量做对照、小模型拟合、大模型外推”。D 描述的做法与它完全相反——只训练一个超大模型既昂贵又无法获得幂律曲线的多个数据点,不是方法论的一部分。
Q8. 关于幂律关系 L(N) = (Nc/N)^α,以下说法正确的是?
- A.取对数后变成直线← 正确答案
- B.α 越大损失下降越快← 正确答案
- C.α 越小规模化收益越高
- D.说明损失随参数线性下降
答案:AB。对公式两边取对数得 logL = α·logNc − α·logN,在对数坐标系中是一条直线;α 是斜率绝对值,α 越大曲线越陡、收益越大,所以 C 错误。幂律不是线性关系,D 错误。
Q9. 给定算力预算 C ≈ 6ND,若 Kaplan 建议 N_opt 的分配指数为 0.73,则 D_opt 对应的分配指数是?
- A.参数量指数 0.50
- B.数据量指数 0.27← 正确答案
- C.损失指数 0.05
- D.参数量指数 0.73
答案:B。在 C ≈ 6ND 的约束下,算力预算的“增长份额”在参数与数据之间分配。Kaplan 拟合得到 N_opt ∝ C^0.73、D_opt ∝ C^0.27,两者指数之和约为 1。0.50 是 Chinchilla 的均衡方案,0.05 是算力单变量的 Loss 幂律指数。
Q10. 理解 Kaplan 定律对大模型训练的实践指导,以下做法正确的是?
- A.按预算估算最优参数量再训练← 正确答案
- B.无论预算多大只放大参数量即可
- C.用幂律曲线预测 Loss 辅助决策← 正确答案
- D.Kaplan 结论已完全被 Chinchilla 取代
答案:AC。Kaplan 定律的价值正在于把“预算→规模→效果”变成可计算映射,A 和 C 都是它的直接应用。B 违背最优分配原则——数据量必须同步增长。D 错误,Chinchilla 是对 Kaplan 的修正而非推翻,两者结合才能做出稳健的训练规划。