Y Combinator合伙人Ankit Gupta与Anthropic预训练负责人Nick Joseph最近进行了一次深度对话。
Nick从Vicarious到OpenAI再到Anthropic,见证了大语言模型从实验室概念到改变世界的全过程。在这场访谈中,他详细分享了预训练的工程本质、扩展定律的验证过程、早期如何用有限资源挑战巨头,以及为什么AI最难的问题往往不是机器学习问题,而是基础设施问题。
"我环顾四周,发现自己是世界上大约30个正在做这件最重要技术的人之一。"Nick回忆起Anthropic早期时说。那时GPT-3的训练成本公开估计是500万美元,对个人来说是天文数字,但对公司而言并不算多。更让人惊讶的是,当时大多数人对计算资源的使用效率很低,"我们可以通过极致的效率获得巨大领先优势"。这个判断最终被证明是对的——Anthropic用更少的资源训练出了可以与OpenAI竞争的模型。
以防太长不看(TL;DR),三个结论写在前边:
Q: 扩展定律为什么能在如此多数量级上成立?
A: Nick的答案出人意料地简单:因为我们还远未触及极限。当原始扩展定律论文展示11个数量级的数据时,人们在激烈辩论是否能再延续一个数量级。他当时的想法是:"有大概11分之1的概率,规则会在在这里失效。"更关键的是,这创造了一个正反馈循环:更好的模型→更多收入→更多计算→更好的模型。这个循环在过去5年里不断重复,而且远未结束。困难不在于扩展定律本身,而在于如何正确实现它——这是工程问题,不是理论问题。
Q: 为什么AI领域最缺的不是研究员而是工程师?
A: "投入更多计算,东西基本会奏效。"Nick的这句话道出了本质。实际的模型架构已经相当简单,你甚至不需要完全理解数学就能实现。真正的挑战是在数千个GPU上正确实现它,并行化所有东西,检查它是正确的。更令人惊讶的是,最难的问题往往不是算法,而更可能是一个深藏在某个kernel里的精度转换bug,它会在一个月后让你的大规模训练崩溃——或者永远不会被发现。这需要能够深入整个堆栈的工程师,从理解ML动态到理解字节如何在机器间移动。
Q: 未来最大的风险是什么?
A: 因此,不是缺乏算法创新,不是数据耗尽,甚至不是计算资源限制。Nick最担心的是"一个真正难解决的bug"。当模型需要几个月训练,单个bug可以让你失去整整一代。更糟的是,你可能永远不会发现它。随着系统变得越来越复杂——从芯片物理布局到网络协议到数千行代码——任何一层都可能出问题。这就是为什么能够深入整个堆栈调试的能力是"令人惊讶地困难且很少人能做的事情"。在这个规模上,计算机自身可能会犯错,而你需要证明这一点。
1、预训练的本质:为什么"下一个词预测"赢了
预训练到底是什么?这个问题的答案,比大多数人想象的要简单得多。
从根本上说,让AI模型变得更好的一个关键要素是规模(scale)——投入大量计算资源。如果要最大化计算投入,就需要一个有海量数据支撑的目标函数。互联网是人类创造的最大单一数据源,而且不需要人工标注。预训练的核心想法是:拿一段文本,预测下一个词。比如给出"the",预测"cat";再给"the cat",预测下一个词。这意味着每个词都是一个新样本,信号密度极高。
这个简单的方法为什么能胜出?在2017-2021年期间,AI社区其实在尝试各种预训练目标。有BERT和BART这样的遮蔽语言模型(masked language modeling),也有GPT系列的自回归建模(autoregressive modeling)。最终自回归的下一个词预测成为主流范式。
Nick认为答案主要是经验性的(empirical),而不是第一性原理推导。但下一个词预测确实有一个巨大优势:你可以直接从模型中采样生成文本,这为产品化提供了非常直接的路径。更重要的是,这个损失函数(loss,衡量模型预测准确度的指标)本身就是你关心的目标——如果你能完美地预测语言,理论上就能像人类一样写作。给模型一个论文标题,它应该能输出整篇论文。而其他一些方法没有这种特质。
当然,你也可以先做大规模预训练,然后针对一百个特定任务微调。这种方法也能work。Nick的一般性直觉是:计算才是最重要的东西。只要向任何一个目标投入足够多的计算,都可能得到相当好的结果,并能微调到其他任务上。令人惊讶的是,与投入更多计算相比,这些细节影响有多么小。
2、扩展定律的11个数量级:一个被低估的确定性
扩展定律(scaling laws)是预训练领域最重要的发现之一,它揭示了一个几乎反直觉的规律。
它的核心洞察是:随着投入更多计算、更多数据、更多参数,模型的损失(loss)会以非常可预测的方式下降——遵循幂律(power law,一种数学规律,意味着性能提升是可以精确预测的)。
但这个发现在当时引发了激烈争论。Nick回忆说:"原始的扩展定律论文展示了大约11个数量级的数据,但人们还在激烈辩论它是否会继续延续哪怕一个数量级。"他当时的想法很直接:"11分之1大概是它在这里失效的概率,那我们为什么不继续试试呢?"
更关键的是扩展定律带来的正反馈循环:训练一个模型→用它做出有用的产品→卖出产品获得收入→用收入购买更多计算→训练更好的模型。这个循环在过去5年里不断重复。Nick直言,很多人在当时并没有预见到这一点,"Dario(Anthropic CEO)确实预见到了,我想很多人都预见到了,但这并不明显。"
在谈到为什么其他实验室没有更激进地押注扩展定律时,Nick给出了一个有趣的观察:不同实验室有不同的文化。比如Facebook AI Research(FAIR)更像是博士风格的独立研究——每个人有自己的想法,各自争取计算资源。而训练大型语言模型需要很多人在复杂的基础设施上协作,这不会产出论文。"你不会因为'我的效率提高了5%'就发表论文",在那些文化中这也不受尊重。这可能是部分原因。
3、早期Anthropic:当30人挑战科技巨头
Anthropic成立初期的故事,几乎像是硅谷版的"大卫战歌利亚"。只不过,这一次武器不是投石索,而是对计算效率的极致追求。
Nick说他当时有一种强烈的认知失调:"我的心态是'我们在做AGI,这是有史以来最重要的技术',然后环顾四周发现,世界上大概只有30个人在做这件事。我是个相当初级的人,其他人都知道怎么做并且之前做过,但我还是有点惊讶——居然这么容易。"
GPT-3的公开训练成本估计是500万美元。从个人角度看这是一大笔钱,但从公司角度看其实不算多。Anthropic完全可以购买足够的计算资源来训练类似规模的模型。
他们使用云计算提供商,但需要理解到硬件的物理布局层面。Nick记得有一次,一位同事运行聚类算法来识别所有芯片在哪些机房里,因为他们怀疑芯片分布在不同机房导致了网络延迟问题——你可以反向工程出来,"很明显这里有两个集群,它们内部连接更好,它们之间的连接有些问题。我们在尽可能地压榨硬件极限。"
早期Anthropic的核心优势是效率。大多数人对计算资源的使用效率很低,"我们的资金远少于其他人,所以必须通过效率获得巨大领先。"这主要体现在正确实现分布式框架上。
训练需要在大量芯片上进行,有多种并行化方法:数据并行(把数据分散到不同芯片)、流水线(把模型不同层分配到不同芯片)、模型分片(tensor sharding,把单个操作切分到多个芯片)等。当时没有很好的开源包可以直接使用。Nick记得他们在做数据并行时,有人说"现在我们要写all-reduce了"(一种让所有芯片同步计算结果的算法),他当时想"我们真的要自己写吗?没有现成的包吗?"答案是:"我们会想要修改它的。我们不想依赖某个包,因为(a)我们要去的规模比Facebook用过的更大,(b)你不想依赖一个你需要不断修改的包。"
这句话在当时听起来很反直觉——比Facebook规模还大。Facebook AI Research在当时被认为是最好的机器学习研究机构之一,和DeepMind一起从博士项目中招聘大量人才。"你的心态是什么,当你说'这个非常成熟的实验室和优秀人才,我们的运营规模对他们不相关'?"Nick坦诚地说,也许他只是太自负了,"但我环顾四周想,这些人都在错过大局。我认为扩展定律已经很清楚了,而反对的论点我觉得有点荒谬。"
4、从PyTorch到CUDA:工程的深度决定上限
在大型AI模型的训练中,代码的抽象层次就像一座高楼的不同楼层。站在高层可以看到全景,但要修复地基问题,就必须一路向下深入。Nick和他的团队,经常需要在这座楼里上下穿梭。
Nick主要在PyTorch的抽象层面工作——PyTorch是一个流行的深度学习框架,它提供了torch.matmul(矩阵乘法)这样的高级操作。在这一层,他不需要思考如何让矩阵乘法在GPU上高效运行。"我假设PyTorch已经搞清楚如何让矩阵乘法尽可能高效了。"但有些操作,特别是注意力机制(attention,Transformer模型的核心组件),有很多不同变体,而且在GPU上做高效实现真的很复杂很困难,对于这些就需要深入到更底层——甚至要用CUDA(NVIDIA的GPU编程语言)直接编程。
这里有一个有趣的流程,是Nick之前没想过的:首先在纸面上建模你要做的事情,想出一个并行化策略,能达到很好的效率。这里的效率指标是MFU(模型浮点运算利用率,Model FLOPs Utilization,衡量GPU算力被实际使用的百分比)。你实际上可以用纸笔算出能达到什么效率。你知道所有约束条件——不能达到好的MFU的原因可能是HBM带宽受限(HBM是高带宽内存,GPU访问数据的通道),可能是主机到CPU的传输受限,有很多不同因素,但相关的数字其实只有大约六个。
所以你可以完全建模出来,理解约束在哪里,然后实现一个能达到那个效率的东西。当然刚实现时会非常低效,下一步是拿出profiler(性能分析器,一种可以精确测量每段代码运行时间的工具)——你需要能够分析作业,查看每个操作花了多长时间,在脑海中有一个模型知道每个操作应该花多长时间,然后让这两个东西一致。
在网络拓扑优化方面,单GPU的PyTorch profiler其实一直挺好用。但如果要在数百上千个GPU上分析作业,那就没什么人真正做过了。"这更多是我们黑进profiler,搞清楚如何把所有trace(执行轨迹)合并在一起。"
Nick是如何学会这些的?他坦诚在加入Anthropic之前并没有做过很多这方面的工作。"加入Anthropic时有一点特别好——那时东西真的不多。我第一天就把我们所有的Slack消息和整个内部数据库都读完了,从中学到了很多。那种感觉很棒,就是所有东西都与我相关。"
然后主要是通过结对编程(pair programming,两个程序员共用一台电脑写代码)学习。Tom Brown之前做过所有这些,所以他很了解这些东西。Nick的经理Sam McCandlish也做过很多。"我一开始就和他们大量结对编程。我真的很喜欢结对作为一种学习方式——你学到了你想做的事情。如果你和比你强的人结对,他们可以直接做,所以你大部分时间只是在看。但你也学到了人们是怎么做的。"
像如何使用profiler这种东西,你永远不会从别人在Slack上的最终报告或PR(代码提交)中学到。你只会看到"他们找到了这些问题,改了这行特定代码,就赢了。"你需要看一个4小时的YouTube视频看某人摆弄profiler来自学,或者实际和人结对。
有一件事Nick现在回想起来觉得尴尬:"我在加入Anthropic之前从没真正用过调试器。人们谈论PDB(Python调试器),我知道那是人们用的东西,但print语句对我来说挺好的。然后我看到某人用调试器,意识到'哦不,调试器是个超级有用的工具',这个人调试东西快得多,特别是当代码启动需要很长时间的时候。"学习这种东西最好还是通过结对,当然还有显而易见的通过实践学习——最终亲自启动profiler盯着看很多很多小时。
5、规模带来的变化:从全能到专精
当你手里的GPU从几百个变成几千个,再变成几万个,不只是数量在膨胀,整个团队的组织方式也在发生根本性转变。
Nick强调最核心的东西其实没变:"让我震惊的是,从某些方面看,我在第一天就在优化的指标和现在还是完全一样的。有一个损失函数,让损失下降。你可以拿我训练的第一个模型用同样的指标跑一下,画出团队随时间进展的曲线。"
在谈到OKR(目标与关键结果,Objectives and Key Results,一种目标管理方法)时,Nick说这对他的团队来说总感觉有点奇怪:"当然,我可以选一个损失值,但答案就是'越低越好'。我们会永远做下去。"这个单一的北极星指标一直未变。
最大的变化是专业化程度提高了。早期Nick试图阅读代码库中的每一个PR,这很棒,他了解所有部分。随着团队成长,一切都变得更加精确。人们真正深入研究注意力机制应该如何工作,或者真正深入研究并行化策略。最终团队里都是在各个领域的深度专家,这很好,因为这意味着可以在这些方面做得很深入。
但作为管理者,有时需要思考的一件事是确保更大的图景有意义,同时确保有足够多的人真正理解整个大图景,不会有单点故障。
这里有个有趣的权衡。Nick发现人们在这方面真的有偏好——有些人真的想成为通才,理解一切,轻触各个方面;有些人想选一个领域,通常他们已经选好了那个领域,他们是某个领域的深度专家,比如整个博士都在研究精度(precision,指计算机表示数字的准确程度)问题,就只想思考那个。你需要在这之间取得平衡。
早期有一段时间,他们雇了很多通才型的人,因为加入早期创业公司的人就是会做所有事情的那种人。结果是每个人都在做所有事情,没人真正深入理解某一件事。这是一种失败模式。但如果有太多专家,"很多工作就得由管理者或者技术负责人来连接一切",以及注意到"如果我们在这里改架构,会让那边的效率考虑变得容易很多"这样的事情。
Nick特别喜欢早期的一点是效率工作方式:"我可以直接说'如果我们改变这个特定步骤的做法会怎样',别人会说'应该没问题,简单改一下',然后你就避免了整个复杂项目,不用把某个很难的操作做高效,因为你可以把它改成一个更容易高效实现的操作。"
6、当芯片本身就是错的:从Python程序员到硬件调试
计算机科学课上,老师总会说:"相信电脑,是你的代码错了。"但在AI训练的前沿,这条铁律不再适用。有时候,真的是电脑错了。
随着计算规模越来越大,出现了哪些非显而易见的挑战?
连接所有芯片是一个特别困难的问题。随着接入越来越多芯片,标准的并行化方式是整个系统作为一个故障域——一个芯片失败,整件事就会崩溃。
举个例子,如果你分布式地部署模型,比如把每一层放在不同的芯片上,如果你丢了第7层,"你不会跳过第7层——那会是个很奇怪的模型训练过程。"这会导致一些有趣的情况:随着规模扩大,有越来越多的芯片,故障率可能越来越大。另一方面,重启其实挺快的,没什么需要做的,只需要重新加载回来。
但更令人惊讶的是整个堆栈的新颖程度。从芯片在数据中心的物理布局到芯片本身,基本上所有东西都很新。GPU的迭代代数还不多。
Nick学计算机科学时,代码不work他会想"电脑坏了"。他记得老师说"你可以相信电脑没坏——是你搞砸了。"他在AI早期遇到的最令人沮丧的事情之一是,正在做某件事然后完全卡住了,"我不知道哪里错了"。他的经理看了看说:"嗯,可能是电脑错了。"Nick想"这不太可能吧"。结果确实是电脑错了——那个GPU坏了,他们得换一个新的。
"必须考虑GPU可能是错的、GPU可能慢了、电源可能坏了——这些问题的层次比你作为Python程序员期望需要考虑的要深得多。"
在早期,他们用的GPU数量大概是数千个规模。"几千个能装进这个房间吗?""能,几千个。你可以有一堆机架,能装进一个房间。"Nick说当时不确定需要都在一个房间还是可以分散在多个房间。"我们有这些理论模型,会说我们需要A点到B点有这么多带宽。但你永远不知道要往下走多深——比如我们需要多少电力?如果有一个电容器在处理所有这些,我们同时启动整个作业会不会让系统崩溃?"
7、多芯片时代:TPU vs GPU的真实差异
在AI训练的世界里,芯片不只是芯片。Google的TPU和NVIDIA的GPU,就像两种不同方言——表面上都在"说"矩阵乘法,但底层实现方式天差地别。
Anthropic与各种云服务提供商合作,使用不同类型的芯片。从工程师角度看,这些只是计算来源,还是需要区别对待?
从根本上说,它们都在做同样的事情——都在计算相同的操作,矩阵乘法等等。但它们的实现方式很不同,编程方式也很不同,实际规格也很不同。有些可能有很多浮点运算能力但内存不多,有些可能有很多内存带宽但内存容量不大。
有多个芯片的一个优势是可以针对性分配任务。不同工作负载适合不同芯片。比如推理(inference,模型部署后给用户生成回答的过程)作为一种工作负载通常需要更多HBM带宽。最简单的采样形式是一次生成一个token(词或子词单元),每个token都要加载所有权重,这意味着需要大量HBM带宽。而预训练实际上通常更密集于浮点运算,因为batch size(批处理大小,一次处理的数据量)更大。所以可以针对不同目的专门化使用哪些芯片。
缺点是必须把东西写多次。理论上可以有跨芯片的抽象层,但它们差异足够大,很难做到。如果在所有芯片上做所有工作负载,工作量就会乘以芯片数量。
Nick回忆了一个有趣的轶事。当时Ankit的公司在用Google TPU遇到一些神秘的段错误(segmentation fault,一种程序崩溃错误),Nick说"你应该在六个月前用,那时我们帮他们修复了一半的问题。"和这些非常新的芯片打交道,确实会遇到很多问题,需要和提供商密切合作解决。
提供商在修复问题方面其实很出色。Nick认为搞清楚正确的合作方式很有趣,"他们有强烈的动机修复问题——他们希望芯片对我们运行良好,希望将来卖给我们更多芯片。我们显然也有非常强烈的动机让芯片工作,因为我们很早就买了它们,一切都押在让这些集群工作上。"
但并非所有信息都能共享。一个有效的策略是制作小规模的可复现问题。通常情况是在训练某个巨大的运行时遇到问题,比如段错误,然后说"嗨,你的集群上出了段错误",他们不知道怎么修。所以需要能从代码库中抽取出来,在单个芯片上、用可以发过去的单个文件复现问题。
大多数情况是通过共享的Slack沟通,偶尔面对面会更好。这是相当常见的沟通方式。
8、预训练vs后训练:平衡的艺术
AI的进化路径,正在从单一跑道变成双引擎驱动。预训练提供智力基础,后训练雕琢个性和能力,两者如何分配资源成了新的战略问题。
过去几年,AI领域出现了明显的转变。以前基本只关注预训练,现在在很多公司,焦点分散到了预训练和后训练(post-training),后者包括强化学习、精巧的微调以及各种安全调整。从公众视角看,预训练似乎不再像推理型模型那样受关注,而推理型模型看起来主要是后训练的产物。
Nick指出原来"预训练"这个名字就暗示它是个小事情,在做"大训练"之前做的。实际上已经有过一次转变,就是"不,你做大量预训练,在相当长时间里用大部分计算做预训练,这才是主导性的东西。"
现在人们说"你可以从RL(强化学习,Reinforcement Learning)得到相当大的收益",这是另一套扩展定律——向RL投入越来越多计算,可以得到越来越好的模型。所以有个问题是如何平衡这两者,各做多少,它们如何叠加?是一个替代另一个,还是两者都要做且会相乘?这些问题都还在早期阶段,尚未得到解答。
Nick认为这些在很大程度上是经验性问题。几乎所有事情最终都必须凭经验做出。"你可以想出理论,但实际上你要做的第一件事就是测试理论,而且大多数时候理论都是错的。所以应该直接收集数据看看。"
一个重要的事情是真正凭经验解决问题对做出好决策至关重要,而这在组织中其实很难做到。比如Nick管理预训练,他不应该说"预训练必须赢"。Ankit问是否两个团队之间有某种竞争。Nick说他们设法避免了这一点,相当协作,"我们基本上都在产出一个模型,可以协作。"但他确实认为在其他地方,从听说的情况看,团队之间有一些摩擦。"这是个有趣的组织设计问题——如何设置才能不让科学问题与人们对团队的认知绑定在一起。"
9、数据困境:互联网到底有多大?
关于数据的讨论,充满了确定性的断言和不确定的真相。当Nick被问到"我们是否已经用完了互联网数据"时,他的回答揭示了这个问题的复杂性。
关于高质量预训练数据的可获得性,有一种流行的说法:我们已经用完了互联网上的数据。Nick怎么看?
"我觉得有点奇怪,在数据问题上我看到太多非常自信的论断"——"我们用完了互联网""规模化已经结束"。Nick几乎有点不确定人们到底用了多少数据。总会有质量-数量的权衡等等要考虑。
但有个根本性的点:数据是如此之多。数据增长的速度比我们获得更多计算的速度慢。不过Nick不想说得太自信,"我不完全确定。你怎么知道呢?"
一个有趣的问题是:如果你问某人互联网有多大,答案是无限大。有很多页面你可以滚动,它会自动生成更多文本,永远继续下去。所以互联网是无限的。那"有用的互联网"有多大?没人知道。做网页时你不会把它加到某个巨大的计数器里说"我今天给互联网添加了50个词"。所以这个角度有很多不确定性。
Ankit提到可以用PageRank(Google的原始排名算法,根据网页被链接的次数评估重要性)找到有用的互联网。Nick不同意:"我认为不够好。从模型角度看,有用的互联网和从人的角度看很不一样。我认为有很多东西可能不值得你去读,PageRank得分也不高,但对AI来说实际上很有用。PageRank主要是基于链接的系统,是原始Google算法,基于链接和哪些链接被访问最多。我认为它是个质量指标,但不明显是AI的正确质量指标。"
标记链很多不一定意味着那里没有有用数据,可能只是意味着没东西链接到它。而且可能那些数据最终更有价值,因为所有被大量链接的东西你已经有了。在某个点上,你可能在寻找尾部——那些只在一个地方被链接过的东西,但它是个有用的小知识块,会帮助解决最后10%的困难查询。
10、合成数据的悖论:能否用Claude训练更好的Claude?
如果让AI生成数据来训练AI,会发生什么?这个看似简单的问题,藏着深刻的哲学困境。
关于合成数据(synthetic data,由AI模型生成的训练数据)的讨论特别有意思。Nick提到了几种不同的思考方式。
一种是蒸馏(distillation)类型的方法:可以拿一个聪明的模型,让它生成一堆数据,在那些数据上训练,大概能得到接近那个智能水平的模型。我们在很多开源模型中看到这一点,比如较小的Qwen推理模型从较大的Qwen模型蒸馏出来,DeepSeek也类似。这完全可行。
**然后有个独立的问题:能否用当前模型训练出更好的模型?**这里有个有趣的点。如果让模型生成数据,比如对Claude说"给我写些很棒的文本",然后看一下,和互联网上的平均内容比,看起来挺好。"但另一方面,我知道如果我只是生成——创建生成尽可能多的文本——理论上我不应该能训练出比那更好的模型。我只会得到同样的东西。"
原因主要是因为模型有某个分布,你要学习建模那个准确的分布,但如果那个分布是错的,你不会学到真相。可以想象如果模型认为5+5是11,每次看到字符串"5+5",它都会输出11,你的新模型会学到5+5是11。
这是个很难研究的领域,因为有个问题。如前所述,范式之一是在小规模研究东西然后在大规模运行。如果你的计划是"我们有很多来自最佳模型的数据",你要如何测试训练更好的模型?这是有意为之时的情况。
还有个独立的事情:**如果是意外呢?**如Nick所说,现在很多互联网是由LLM生成的。这挺有趣因为检测不容易。可以搞清楚哪些是LLM写的,但不是微不足道的。然后也很难思考影响是什么——如果互联网的1%是LLM生成的,那会浪费1%的计算,还是会毁掉模型?如果是5%?10%?
甚至不清楚这是否一定是坏事。如果把训练想象成从模型当前分布移向某个真实分布。如果某些东西在互联网上是因为人们认为它有用,那么实际发布出来的东西,希望是那些不是"5+5=11"的东西,而是"5+5=10"的东西。所以希望平均来说它确实把你推向好的方向,但显然你无法真正区分这两者。
当然还有极端情况:有人真的想破坏你的模型。有人试图放出尽可能对模型有害的东西——如何通过过滤器进入模型但完全暗中无用。
11、评估的三个标准:损失为什么如此好用
在AI的世界里,如何知道你的模型真的变好了?这个看似简单的问题,其实比训练模型本身更难回答。
在评估(evaluation)方面,Nick强调:损失(loss)这个指标真的很好(也就是用"预测准确度"这个最基础的指标来评估模型,比设计复杂的测试题更可靠有效)。
Nick喜欢的评估指标有三个特质:
• 第一,它真的在衡量你关心的东西吗? 靠谱的指标并不容易,因为我们很快就会在评估上饱和(达到满分或接近满分)。AI整体有个模式:人们设定一个目标,达到目标,然后意识到目标不是你以为的那样。Nick过去认为如果AI能解决编程面试题,可能就是AGI了,"因为那是我找工作要做的,大概就能做这份工作了。"结果是"不,你解决了那些,它狭窄得令人震惊,做不了大多数其他事情。"所以评估需要真正捕捉你关心的东西。
• 第二,需要低噪音(low noise),这出人意料地困难。低噪音(low noise)指评估结果稳定可靠,不会因随机因素大幅波动,能清楚区分模型的真实能力差异。如果有100个问题,在上面评估模型,会非常嘈杂,很难做决策,因为最终会是"哦,置信区间很宽,很多东西统计上不显著"。所以想要即使评估上相对小的差异实际上也重要的东西,基本上可以朝着任何有效的方向下降。原始GPT-4在MMLU(一个测试多学科知识的基准)上得分86.4%。Nick认为超过它的下一个模型是Gemini,90%。"那是个很大的差异,你完全能知道那些是不同的分数。"这挺有价值。
• 第三,真的想要快速且容易运行。这些是主要标准。想出满足所有这些的评估挺难的。第一个最难。(a)必须回答你关心什么,(b)对你关心的东西的常见答案,真的很难得到另外两个。
比如Nick很想让Claude真的擅长他的工作——它能否擅长管理团队?"那我怎么评估一个计划?比如一个六个月的计划?"他不知道。
Ankit提到AI医生的例子。部分可以是回答考试题,答案可能是能在医生考试上得100%或接近。但更难的评估是在与病人的长对话中,能否区分病人告诉你的信号和噪音,提取正确信息,然后用它做诊断。这不只是诊断部分——它擅长那部分——而是这个噪音提取部分。为此需要有真实病人和它交谈一段时间,不明显如何真正做出好的评估。
Nick同意这很难,但强调损失真的很好:"如果你有一堆你认为很棒的医生与病人交谈的记录,然后看模型在预测记录上做得多好。如果你有100份记录,会得到很多token,可以求平均,得到相当低的噪音。如果你把它降到很低,理论上你的模型就不如医生生成记录了。"
他认为这是个好创业想法。"所以我想让你们去做。"
12、对齐的两个维度:从理论到个性
对齐(alignment)这个词在AI社区被反复提及,但它到底意味着什么?Nick的解释,从AGI的本质开始。
什么是对齐(alignment)?Nick退后一步解释了他们在做什么。
"我们在尝试做AGI,我的意思是某种程度上能做人类能做的一切的AI。"人们有时看了很多科幻片,那会让他们想到这些科幻电影,但Nick认为科幻电影实际上低估了它的影响。"总是有一个机器人像人类一样。我想的是,你不会有十亿个吗?你可以到处复制它们。所以应该想象当你得到这个,突然每个人都能启动一个有十亿个和他们一样聪明、在大多数事情上比他们聪明得多的公司。"
**他认为这对世界真的很有变革性,可以用很多方式使用。一个担忧是:当你这样做时,AI实际上在试图做什么?它的目标是什么?**前面谈了很多下一个词预测——它在试图预测下一个词。那有点奇怪,不是我们真正想要的。那不是人类的目标。
对齐是如何让模型分享你的目标,特别是一旦到达比你聪明的模型时尤其有趣。这是个困难的问题。可以从理论角度处理,也可以从经验角度处理——拿现有模型说"它们在做我们想让它们做的事吗?"结果往往不是,所以有很多事情可以做,试图搞清楚。
对齐还有另一个角度:实际上现在我们有模型,真的想让它们做我们想做的事情,出于各种原因。所以另一个角度是控制模型的个性——说训练这个模型时我们想让它不是平均互联网用户,我们想让它以非常特定的方式与人互动,这同样很难编码到代码里。有很多不同技术来让模型做到这一点。可以谈谈宪法AI(Constitutional AI),可以写一套模型应该遵循的规则宪法。
这(模型应该遵循的规则)基本上是个提示词(prompt),对吧?是说"这是我要附加到每一个——这是模型本身的系统提示,而不是在训练时做的事情让它产生不同结果,还是在后训练时主动做?"两者都是。宪法可以在训练时用,但也会放在系统提示中。取决于——如果训练到模型里会得到不同程度的鲁棒性,相比在提示中可以添加、删除或说"忽略所有之前的指令"之类的。
**如何思考在这些模型中体现谁的价值观?**假设我们相信我们都有一些共同价值观,或者也许我们都相信应该有。但也有很多合理的价值观多样性。如何思考AGI应该有什么?甚至选哪些?
Nick认为这是个非常困难的问题,实际上有点下游于能够选择任何价值观。"我几乎把它想成——我听到的一个我喜欢的类比是给车装方向盘。如果没有方向盘,你可能想先装上方向盘,然后再搞清楚谁来开以及要去哪里。把方向盘装上真的很重要。"
另一个答案可能是你希望这些东西处于某种形式的民主控制之下。不想要一个人的价值观——那似乎在走向反乌托邦。所以真正想要的是基本上能和很多人交谈、从不同视角接受他们价值观的东西,或者有某种非常通用的、明显是好的价值观,涉及在特定情况下征求人们建议,而不是做那些,或者就是征求人们在某些情况下应该做什么,而不是像做那些。
或者也许就是随着这些模型变得真的很强大,你可能希望它们做得更少——有时可能希望它们退后一步,而不是——而不是有模型对事物拥有大量控制的风险,你不想要它们。
13、预训练中的对齐:一个权衡
在对齐策略的选择上,有个有趣的时间维度问题。是在预训练阶段就嵌入价值观,还是留到后训练阶段再精心雕琢?答案揭示了AI开发的一个核心权衡。
在思考如何实际做当前版本的对齐时,Nick提到大部分是后训练的工作,应该是这样。
"我通常这样想:任何可以在后训练做的事情你可能都应该做,因为迭代循环、取得进展的能力真的很快。可以尝试一些东西,再试一次,可以试很多次。"在几天或几小时内就能迭代。
而要放到预训练,必须做所有细致的科学工作来降低风险,必须放到下一次运行,等几个月,然后得到一个东西,如果错了就真的很糟糕。另一个优势是如果想做真的是复杂模型行为的干预,在预训练时测试小模型的范式不work。小模型几乎不能把句子组织好,完全不能。所以如果想让它有确切想要的个性,你需要在足够好的模型上——必须在聪明模型上。
但话说回来,在某个点,确实会有一些对齐的部分想要导出回预训练,因为那可能是一种用更强的力量放进去的方法,更鲁棒,或者更到智能里。如果把预训练想成教模型变聪明,后训练是调整个性,可以想象有些调整你实际上希望它成为如何学习的一部分,成为智能的一部分,也许需要为此创造更多。
**在预训练中融入对齐会是什么样?**是早点添加你想要它采纳的领域类型的额外数据吗?基本上是。有篇论文叫《基于人类反馈的预训练》(Pre-training on Human Feedback),可以把人类反馈特性融入预训练来测试。基本上可以给它在后训练给的所有信息,混入预训练,看有什么效果。
这样做失去的是灵活性。有时训练这些然后和它们交谈,然后做一个大量人和它交谈并找到某些问题的广泛过程。比如模型说"你绝对正确"太多,你想回去做那个。
Ankit认为迭代循环的点感觉是真正关键的点——在三个月后得到模型好坏的信息,还是在一天或几天后得到,有巨大差异。可以做很多这样的,可能那也意味着计算少得多。可以并行尝试各种后训练策略。
Nick同意这是预训练所有东西困难的一般原因:预训练的一切都很难,因为有这种多个月的一次性机会。
14、未来的挑战:不是范式转变,而是那个该死的bug
当被问及未来几年最大的挑战时,Nick的答案出人意料。不是算法突破,不是计算瓶颈,而是一个可能深藏在代码某处的bug。
在展望未来几年要建设的东西时,Nick被问到有哪些已知要面对的问题,以及有哪些更模糊的、即将出现但不确定如何显现的问题。
对Nick来说最重要的可能是范式转变。"向更多RL的转变是一个范式转变,我认为可能还会有更多。很多人争论当前范式是否足以让我们到达AGI,我觉得我不知道,也许可能,但肯定还会有更多。如果答案就是你继续规模化,在增长许多数量级的过程中没有意识到任何东西,那会是个非常令人惊讶的转折。"
但实际上让Nick感到最紧张的是真正难解决的bug。"这也许对我来说有点意外,但单个bug可以让你脱轨好几个月。当你想到,模型要花几个月训练,你可能因为某个看起来很奇怪的东西失去整整一代——结果是你的代码这部分不正确,你检测不出来。"
在机器学习中找bug真的很难。但一些规模化的问题即使你知道它们在那里也真的很难解决。比如如何为这种网络架构编写单元测试?甚至接近测试的任何东西?
"我是说可以通过它发一个数据包确认是一样的,可以在上面训练一个小模型。"但即使在上面训练小模型也不明显。有个非常经典、非常简单的ML bug是早期人们职业生涯会遇到的:他们网络里有10层,第7层连接到第9层而不是8到9,所以有些不正确的连接集,技术上模型仍然训练,所有权重更新,所以是个有效模型,但不是正确的。那是个非常深奥奇怪的bug,实际上会很难找到。"那是你指的这种随机bug吗?"
"对,但你知道,乘以一百万。"随着东西变得更复杂,可能在某个kernel(内核,GPU上执行的最小计算单元)深处转换了错误的精度(比如本该用32位浮点数计算却用了16位,导致精度损失),导致模型在大规模爆炸,一个月后发现。"或者永远发现不了。"
"我是说当然,如果它爆炸了,有几万行代码,你怎么可能追踪下来?"所以那些是可能最让Nick感到害怕的事情——某个微妙棘手的bug。"可能还有你确实知道的情况——它崩溃了,训练模型时崩溃了,或者变慢了很多。作业慢了很多。那些东西也可能非常难调试。"
Nelson Elhage写了一篇博客讲一个我们早期遇到的被诅咒的bug,Nick很清楚地记得那个,因为他相当早遇到了,觉得"这看起来很难,能让别人看看吗?"一个月后他想"天哪,真高兴我把那个交出去了,我永远不可能——"
一个真正有用的能力是能够深入任何事物到任何深度层次。但那是个相当稀有的技能。对Nick来说,他之前在torch.matmul层面工作(这是PyTorch框架提供的矩阵乘法函数),但不懂CUDA(NVIDIA的GPU编程语言),所以如果torch.matmul坏了,他无法深入torch.matmul搞清楚。通信也类似——他可以从A发送字节到B,但不了解底层网络协议(比如TCP/IP协议栈,控制数据如何在网络中传输的规则),所以如果底层网络协议坏了,他需要学习整个领域,需要理解数据包(packet,网络传输的基本单位)、TCP(传输控制协议)等所有这些不同的东西来调试。
令人惊讶地困难且很少人能做的一件事是拥有从理解ML应该如何工作、学习动态应该是什么,一直到知道字节、理解字节应该如何在机器间移动的整个堆栈。
15、团队构成:工程师永远短缺
当话题转向团队组成时,Nick的回答打破了很多人对AI实验室的刻板印象。外界以为这里都是博士扎堆,事实却大相径庭。
在谈到团队不同背景的人时,Nick给出了一个可能让人意外的答案。
"这是个混合,我认为我们最需要的是工程师。几乎在这个领域的整个历史中一直如此。事实就是你投入更多计算,东西基本会奏效。研究人员就像'酷,不错'。而让它正确是真正的挑战——让它正确其实不是ML问题。实际的架构非常简单,你甚至不需要理解数学就能实现它。只需要得到正确的实现,然后就有了一个工程问题:如何在大规模实现这个,并行化所有东西,并检查它是正确的。"
Nick认为还有另一种工程角度,他认为是在网站或什么东西上真正快速迭代,"我认为那是个重要技能集,可能对创业很重要,必须快速失败,尝试一堆不同的东西,没有一个技术上特别困难。"但我们最需要或寻找的技能集是这种能够解决真正困难工程问题的。
他们是在快速成长的公司工作过、有类似经验的人,还是学术界的人,还是从哪里来?"此时我们其实只是从其他地方雇了一堆之前做过这个的人,那是简单的答案。"但这里的"做过这个"是指必须在AI公司,还是也包括比如在Meta工作的人,不是AI团队,但他们运营某个其他分布式系统,在5-10年前达到了互联网规模?
"更像是我们心里有个特定角色。比如我想让运行在Jax上高效训练(Jax是Google开发的一个机器学习框架),雇一个做过Jax的人会很棒,或者在另一家公司优化Jax堆栈让它非常高效的人。"现在我们到了Anthropic足够知名、能雇到这些人的点,而且领域足够大,有有专业知识的人。
早期有趣的一件事是我们从各种背景雇了很多人,Nick认为聪明且工作真的很努力的人可以学得相当快,但必须想要持续学习。"我们雇了很多物理学家,比如理论物理学家,他们来做residency(类似实习项目),学习编程,他们真的很聪明,可以做真正出色的工作。"
好文章,需要你的鼓励
IBM Spyre加速器将于本月晚些时候正式推出,为z17大型机、LinuxONE 5和Power11系统等企业级硬件的AI能力提供显著提升。该加速器基于定制芯片的PCIe卡,配备32个独立加速器核心,专为处理AI工作负载需求而设计。系统最多可配置48张Spyre卡,支持多模型AI处理,包括生成式AI和大语言模型,主要应用于金融交易欺诈检测等关键业务场景。
加拿大女王大学研究团队首次对开源AI生态系统进行端到端许可证合规审计,发现35.5%的AI模型在集成到应用时存在许可证违规。他们开发的LicenseRec系统能自动检测冲突并修复86.4%的违规问题,揭示了AI供应链中系统性的"许可证漂移"现象及其法律风险。
意大利初创公司Ganiga开发了AI驱动的智能垃圾分拣机器人Hoooly,能自动识别并分类垃圾和可回收物。该公司产品包括机器人垃圾桶、智能盖子和废物追踪软件,旨在解决全球塑料回收率不足10%的问题。2024年公司收入50万美元,已向谷歌和多个机场销售超120台设备,计划融资300万美元并拓展美国市场。
这项由剑桥大学、清华大学和伊利诺伊大学合作的研究首次将扩散大语言模型引入语音识别领域,开发出Whisper-LLaDA系统。该系统具备双向理解能力,能够同时考虑语音的前后文信息,在LibriSpeech数据集上实现了12.3%的错误率相对改进,同时在大多数配置下提供了更快的推理速度,为语音识别技术开辟了新的发展方向。