假设你手里有一笔预算,够训一个模型。你会做什么?
大部分人第一反应:堆参数。模型越大越聪明,常识如此。GPT-3 搞了 1750 亿参数,人们觉得 GPT-4 肯定两万亿起步。
但 Chinchilla 这篇论文用 400 多次实验告诉你一件反常识的事:别把钱全砸参数上,一半给数据。
Chinchilla 70B(700 亿参数)用 1.4 万亿 token 训练,在几乎所有指标上碾压了 Gopher 280B(2800 亿参数,只喂了 3000 亿 token)。四分之一大小,四倍数据,全面胜出。
<!-- diagram:chinchilla-vs-gopher -->
在固定算力预算 C 下,最优参数量 N 和最优数据量 D 的关系是数学上干净的——
N_opt ∝ C^0.5,D_opt ∝ C^0.5。各一半。算力翻倍,参数翻倍的同时数据也得翻倍。
单看这个结论,你可能会想:好,记住了,以后训模型参数和数据 1:1。
但真正该追问的是:为什么这样一个结论,整个行业晚了两年才接受?
2020 年 Kaplan 团队提出 scaling laws 时,给的建议是 N ∝ C^0.73——让参数增长速度远快于数据。10× 算力下,参数增 5.5×,数据只增 1.8×。这条建议直接影响了后续几年大量模型的训练策略。
为什么偏这么多?
核心原因藏在实验设计里。Kaplan 的实验覆盖的参数量级是 768M 到 1.5B——在今天看来都是小模型。在这个区间内,embedding 层参数占比不小,数不数 embedding 会直接影响拟合出的指数。2024 年 Pearce & Song 做了个推导证明:如果用 Kaplan 当年的实验范围重新拟合,那个 0.73 的指数在那个区间局部是对的。
换句话说,Kaplan 并没有算错——他只是在一个会给出错误外推结论的实验范围里做了拟合。从 1B 模型推到 100B 模型,0.73 和 0.50 这两个指数的差距被外推距离放大了几十倍。
这件事的教训远比"谁对谁错"重要:scaling law 是外推工具。你把小实验上拟合的公式拿去指导大预算的花法,中间只隔了几个小数点。而那几个小数点,会随着外推距离放大成完全相反的行动指令。
2024 年 Besiroglu 等人尝试复现 Chinchilla 论文的方法三(参数化拟合),发现了一个具体到不能再具体的 bug:原作者在计算 Huber loss 时做了平均而不是求和。这个差异让优化器提前停止——它以为自己收敛了,其实还差得远。同时,论文里把拟合出的 α 和 β 只保留了两位小数,这让推导出的 A 和 B 看起来比实际更离谱。
修完这两个问题后,方法三的结论和其他两种方法完美吻合。一个求平均还是求和的区别,差点让一篇里程碑论文的核心结果被自己打脸。
所以下次听到"我们按 scaling law 规划的训练预算",你该追问的不是公式本身,是:拟合数据量多大?外推距离多远?参数怎么数的?
还有一个更隐蔽的前提——以上所有讨论都假设你有无限的不重复高质量数据。现实中你大概率没有。
当数据不够用时,scaling law 要改写。重复喂同样的 token 给模型,它的价值不是线性递减,是指数衰减——每次重复都在折损上一次剩余价值的一个固定比例。而且,大模型对重复数据更敏感:参数越大,重复的伤害越深。这倒逼出一个反直觉结论:当数据有限时,宁可多跑几轮 epoch 也不要盲目堆参数。
回到开头那个问题。你的训练预算分配,本质上是一个参数拟合问题。你信哪个 scaling law,就会把钱往哪个方向堆。但真正该记住的不是 Chinchilla 的 0.5 指数——那个数字随时可能被下一轮实验修正。该记住的是:你选的拟合方法、你数的参数口径、你外推的距离,每一项都在替你做预算决策,只是你没意识到。
下次有人说"模型越大越好"时,问三个问题:你的数据量跟上参数增长了吗?你数参数的时候包没包括 embedding?你的结论是从多大实验外推来的?
这三个问题问完,大多数"越大越好"的断言就站不住了。