一条推文,浏览量15.9万。
内容却让无数搞大模型的人后背发凉:那篇几乎奠定了整个LLM时代训练思路的论文,算错了。
算错的还是核心结论。这个错误,悄悄主导了行业整整两年的训练配置,直到DeepMind用四百多个模型把答案掀翻。
一条推文,炸出了藏了六年的锅
发这条推文的人叫Sander Dieleman,Google DeepMind研究员,昵称@sedielem。他写道:
"Here's a cool piece of LLM lore: the original scaling laws were wrong due to a bug, which probably led to a lot of wasted compute on oversized undertrained models 😱 (and that was before we even started properly accounting for inference cost!)"
「有一个很酷的LLM轶事:最初的scaling laws因为一个bug而错误,这可能导致大量算力浪费在体量过大但训练不足的模型上😱(而且那时候我们甚至还没开始正确核算推理成本!)」

▲ Sander Dieleman(Google DeepMind)的这条转发,15.9万次查看、947个赞,评论区吵成一片。
Dieleman转发的,是前OpenAI员工Diogo Almeida的一篇长文。这个人的履历分量不轻:他参与过RLHF和ChatGPT的早期工作,现在是typesafeai的CEO。
他捅出来的这件事,牵扯到整个行业最信奉的一条"铁律"。
OpenAI元老亲口承认:我当年也漏看了
Scaling laws,翻译过来是"规模定律",模型越大、数据越多、算力越足,效果就越好,而且这种提升是可以用公式预测出来的。
2020年,OpenAI的Jared Kaplan、Sam McCandlish、Dario Amodei等人发表了那篇后来被奉为圣经的论文《Scaling Laws for Neural Language Models》。它告诉整个行业一件事:给定同样的算力,把模型做得很大、数据喂得相对少一点,效果反而最好。
这个结论,成了GPT-3之后一整代大模型的设计指南。
Diogo Almeida在博客《Scaling Laws, Honestly》里把这段往事挑明了:
"TL;DR: The original scaling laws were wrong due to a bug."
「TL;DR:最初的scaling laws因为一个bug而错误。」


▲ Diogo Almeida(前OpenAI,现typesafeai CEO)的推文,22.9万次查看,拆出bug三要素。
更讽刺的是,他自己当年就在OpenAI做大模型优化,这篇论文出来的时候他也看过,却没意识到问题出在哪。他后来解释,学习率的那部分设置"看起来太像故意为之了",于是谁都没多想。
拆开bug:一场被精心设计出来的假象
问题出在Kaplan那篇论文的实验设计上,可以拆成三步。
第一步,论文里用来测试的模型,从7亿多到15亿参数不等,但所有模型都在完全相同的token数量上训练,固定25万步,batch为512条序列乘以1024 token,算下来大约1300亿token。
第二步,学习率调度用的是warmup之后余弦衰减到零。也就是说,不管模型大小,训练快结束时学习率都会被摁到接近0。
第三步,论文原文还补了一句:
"We found that results at convergence were largely independent of learning rate schedule."
「我们发现收敛时的结果在很大程度上独立于学习率调度。」

▲ arXiv:2001.08361,Kaplan等人(含Dario Amodei)2020年提出原始scaling laws。
这三步合在一起,会产生一个非常隐蔽的假象。小模型在1300亿token上正好训得差不多了,大模型本该从更多数据里继续吃到增益,却被学习率提前摁灭,性能自然见顶。
看上去,"数据喂多也没用",于是论文顺理成章地得出结论:算力应该优先砸向模型规模,数据量可以少加一些,训练还应该"显著提前停止"。按这套逻辑推算出来的最优模型规模,几乎是随着算力的0.73次方在增长,而数据量只跟着0.27次方慢慢爬。
一个本该验证"无限数据"极限规律的实验,却被自己设的天花板,反手做成了一个自证预言。
DeepMind用四百多个模型,把结论掀了个底朝天
两年后,2022年,DeepMind的Jordan Hoffmann、Sebastian Borgeaud等人交出了Chinchilla论文,训练了四百多个模型,参数从7000万铺到160多亿,token量从50亿一路铺到5000亿。
三种互相独立的方法,得出同一个结论:模型大小和数据量应该按几乎相同的比例扩展,把Kaplan那套悬殊比例彻底推翻。

▲ Chinchilla Figure 1:黑色虚线是Kaplan的旧预测,青色星标是Chinchilla给出的推荐规模,差了整整一个数量级。
为了验证,DeepMind干脆训了一个按新规律配置的70B模型,取名Chinchilla,喂了1.4万亿token,拿去跟同样算力预算训出来的280B Gopher模型正面对刚。
结果?70B打赢了280B,顺带还刷爆了GPT-3、Jurassic-1这些当红模型。

▲ arXiv:2203.15556,Chinchilla论文摘要开门见山点名"current large language models are significantly undertrained"(当前的大语言模型明显训练不足)。
论文里那句话写得毫不留情面:Kaplan团队"use a fixed number of training tokens and learning rate schedule for all models",用固定的训练token数和学习率调度套在所有模型身上,这正是问题的根子。
GPT-3成了最典型的受害者
按Chinchilla标准倒推回去看,175B参数的GPT-3只喂了大约3000亿token,远远没吃饱。换句话说,同样这笔算力,本可以训一个更小但吃得更饱的模型,效果反而更好,推理成本还更低。
Gopher的280B也是同样命运,被体量只有四分之一的Chinchilla反超。

▲ Digg科技板块的总结报道:一个历史遗留bug,让整个AI行业训出了一批体量过大、训练不足的模型。
浪费掉的算力具体是多少GPU小时,至今没有人公开算过总账。但有意思的是,评论区里冒出了一位曾在Google工作过的技术人士,账号是@pirroh,他说自己在Google内部时就已经在讨论这个bug了,只是直到现在才第一次看到有人把它公开写出来。
也就是说,这件事在业内小圈子里,或许早已经算得上公开的秘密,只是从来没人把它摆到台面上。
一个bug,照出了整个研究方法的脆弱
这场讨论没有停留在"论文出错"这么简单。它牵出了更多值得琢磨的细节。
Kaplan论文当年用的是非嵌入参数计数,排除了embedding矩阵。这个选择在小模型上占比很大,拿去外推到千亿级大模型时,偏差被指数级放大。2024年Pearce和Song发表的调和论文里做了模拟,证实按Kaplan那套非嵌入参数、小规模外推的条件,确实会算出接近0.73这个偏差系数。
也有人不认同"bug"这个说法。评论区里有工程师反驳,认为这很难被称为bug,顶多是特定实验条件下的局部结论,被过度泛化成了普适规律。

▲ Hacker News上一篇相关技术长文下的讨论,有人回忆自己十年前第一次见到scaling laws时的震惊,也有人质疑"衰减"到底意味着什么。
还有个挺有意思的旁支发现:评论区有人做过实验,同样架构的模型,在法语语料上语法能力涌现所需的token数,比英语少15到100倍,英语形态贫乏,模型得看更多样本才能猜出规律。这意味着,过去这些年被当成金科玉律的scaling laws,某种程度上其实是"English scaling laws"。换成信息密度更高的语言,最优配比可能完全是另一回事。
尾声:圣经也会出错
知名AI研究者Lilian Weng今年6月发过一篇长文,标题叫《Scaling Laws, Carefully》,"careful"这个词,现在读起来格外意味深长。
一篇被引用了成千上万次、指导了GPT-3那一代模型训练配置的论文,里面的实验设置本身就带着一个足以扭转结论方向的漏洞。这道漏洞躲过了所有审稿人的眼睛,直到两年后另一个实验室用完全不同的方法,训了四百多个模型,才把真相撞出来。
连当年亲手参与相关工作的OpenAI老兵,事后回看都要承认自己"当时也没看出来"。
Scaling laws依然成立,这一点没人否认。只是它曾经指向的方向,错了整整两年,直到有人愿意把这件事,老老实实地写清楚。
夜雨聆风