Francois Chollet: 弗朗索瓦·肖莱:为什么最大的 AI 模型也解不开简单谜题
Francois Chollet — Why the biggest AI models can't solve simple puzzles
Guests: Francois Chollet
Full transcript · Read the full conversation in order, with its original context.
§01ARC 基准测试
今天我很高兴能与弗朗索瓦·肖莱交谈。他是 Google 的 AI 研究员,也是 Keras 的创作者。他正在与 Zapier 联合创始人迈克·克努普合作推出一项奖金,我们稍后也会谈到迈克。这是一项百万美元奖金,奖励解出他创建的 ARC 基准测试。
第一个问题:ARC 基准测试是什么?为什么需要设立这项奖金?为什么我们明年拥有的最大语言模型不能直接把它的题目全部做对?
ARC 的设计初衷是作为机器智能的智商测试。它与大多数大语言模型基准测试的不同之处在于,它旨在抵抗记忆式作答。大语言模型的运作方式,基本上就像一座庞大的插值记忆库。扩展它们能力的方式,是尽可能往模型中塞进知识和模式。
相比之下,ARC 几乎不需要什么知识。它只需要所谓的核心知识,也就是关于基础物理、物体属性、计数等方面的基本常识。这类知识是任何四五岁孩子都具备的。
有意思的是,ARC 中的每道谜题都是新颖的。即使你把整个互联网都记下来,也很可能从未遇到过这些题。这正是 ARC 对大语言模型具有挑战性的原因。到目前为止,大语言模型在这方面表现并不好。实际上,目前有效的方法更接近离散程序搜索和程序合成。
首先我想说,作为一个对大语言模型持怀疑态度的人,你自己提出了基准测试,我很高兴。能否这样理解:如果我们明年的最大模型在这项测试中达到80%,你就会认为我们正走在用大语言模型实现通用人工智能的道路上?你会怎么判断?
我相当怀疑我们能在一年内看到大语言模型达到80%。话虽如此,如果真达到了,你还得看它是怎么做到的。如果你用数百万甚至数十亿道类似 ARC 的谜题训练模型,那么训练任务和测试任务之间可能有重叠;你仍在依赖记忆。
这种方法也许行得通。希望 ARC 足以抵抗这种蛮力尝试,但谁也说不准,也许真的会发生。我并不是说这绝无可能。ARC 不是完美的基准测试,可能有缺陷,也可能被这样的方法钻空子。
GPT-5 得做到什么程度,才能让你非常确信它正走在通往通用人工智能的道路上?
这就是能让我改变对大语言模型看法的事情:我需要看到足够多这样的案例,模型遇到训练数据中从未出现过的任务,也就是从训练数据角度看真正新颖的任务,仍然能够当场适应。
这不仅适用于大语言模型,对任何 AI 技术来说都一样。如果我能看到它们当场适应新情况、高效掌握新技能的能力,我就会非常感兴趣,并认为它们正在走向通用人工智能。
它们的优势在于,确实能看到一切。我可能会质疑它们在多大程度上依赖了这些数据,但显然它们比人类更多地依赖这些数据。它们接触到大量训练分布内的内容,所以我们很难区分一个例子到底是否处于分布之内。
如果一切都在它们的训练分布之内,它们就能做到我们能做的一切;也许对我们来说不在分布内。为什么对它们而言,任务必须处于分布外才重要?我们为什么不能充分利用它们确实见过一切这个事实?
你基本上是在问,真正的智能,也就是适应未准备过的新事物的能力,与纯粹记忆、复述见过的内容之间有什么区别。
这不只是语义差异。最大的区别是,你永远不可能针对测试时可能遇到的一切进行预训练,因为世界一直在变化。问题不只是可能任务的空间无限大。如果你在数百万个任务上训练,也只见过总空间的百分之零;更重要的是,世界每天都在变化。
人类之所以进化出智能,就是因为如此。如果世界、宇宙或我们的生活存在某种固定分布,那么我们根本不需要智能。事实上,许多生物,比如昆虫,并不具备智能。它们的神经连接组和基因中存在硬编码程序,将某些刺激映射到适当反应。它们无需学习,也能以符合进化适应性的方式在生活和环境中行动。
如果我们的环境足够静态、足够可预测,进化最终就会找到完美的行为程序:一套写进基因的静态硬编码程序。我们会拥有硬编码的大脑神经连接组,并靠它运作。但实际并非如此。
相反,我们拥有通用智能。我们出生时对世界几乎一无所知,但具备高效学习、面对从未见过的事物时调整适应的能力。这就是人类独特之处,也是机器最难复现的能力。
在深入讨论之前,我想先给 YouTube 观众展示一些 ARC 类挑战的例子。对于听音频的观众,你能描述一道 ARC 样题是什么样的吗?
一道 ARC 谜题看起来有点像智商测试题。你会看到几组输入输出示例,每组由两个网格构成。一个网格展示输入,另一个网格展示你应该对输入作出的回应。
你会看到几组这样的示例,用来说明任务是什么,以及你应该如何处理输入。然后你会得到一个新的测试输入。你的任务是产生对应的测试输出。你需要从示例中推断应该做什么,并在新的测试题上展示你已理解任务。
重要的是,完成这些挑战只需要核心知识,包括物体、计数、几何、拓扑、对称性等基本概念。这些都是非常基础的知识。大语言模型肯定具备它们,任何孩子也具备。
真正有意思的是,每道谜题都是新的,不会在互联网上其他地方找到。无论你是人还是机器,都必须从头处理每道题,自己推理。不能直接从记忆中取出答案。
有一种观点认为,我们现在才开始得到多模态模型,它们通过训练数据学会空间推理。而人类及其祖先在数十亿年的进化过程中,已经学会理解抽象的物理和空间属性,并识别其中的模式。
一种看法是,明年我们会得到原生具备多模态能力、而不是把多模态当作附加功能的模型;它们会理解这些模式,因为这类模式本来就是它们原生能看到的。目前,ARC 接收的是像 100100 这样的 JSON 字符串,并要求模型识别其中模式。即使给人看一串这样的数字,他们也可能很难理解你在问什么。
为什么我们不能认为,眼下正在开发的多模态模型,一旦问世,就能大幅提升 ARC 类空间推理能力?
这是个经验问题,几个月内大概就能看到答案。我的回应是,我们的网格只是离散的二维符号网格,而且很小。举例来说,如果把图像展平成像素序列,解析起来确实会非常困难。
ARC 不是这样,因为网格很小,最多只有10种符号。二维网格很容易展平成序列。Transformer,也就是大语言模型,非常擅长处理序列。
事实上,你可以证明大语言模型处理 ARC 类数据没问题:只要在部分任务上对大语言模型进行微调,再测试它对这些任务的小幅变体的表现。你会看到,对于见过的任务,大语言模型能很好地编码解题程序。解析输入或找出程序,对它们来说并不困难。
大语言模型在 ARC 上表现不佳,真正的原因是任务陌生。每道新题都与其他题不同,无法提前记住解题程序。你必须针对每道新题,当场合成一个新的解题程序。这才是大语言模型真正吃力的地方。
在继续扮演反方之前,我想先退一步,解释一下我为什么特别感兴趣。我当然关注这项百万美元 ARC 奖金,也很期待亲自试试。
‘维苏威挑战’是纳特·弗里德曼发起的奖金计划,目标是解读被火山埋在赫库兰尼姆图书馆中的卷轴。获胜者是22岁的卢克·法里托,他之前听过这个播客。希望听众中有人也觉得这项挑战很有意思,并找到解决方案。
§02为什么大语言模型难以解决 ARC
最近我邀请了许多看好大语言模型的人。在采访你之前,我也和他们讨论过:如何解释大语言模型在 ARC 上原生表现似乎不太好?
我觉得他们给出的解释有些牵强。一个确实令人好奇的事实是,有些问题人类理解起来相当直接,但如果只是原样输入给模型,模型却会很吃力。
这些题对人类都很容易。任何聪明人都应该能在 ARC 上拿到90%到95%。即使是一个几乎没学过什么知识的五岁孩子,也肯定能超过50%。
我同意聪明人会在这项测试上表现很好,但普通人可能会表现平平。
不完全是。我们确实测试过普通人,他们的得分大约是85%。
测试对象是亚马逊 Mechanical Turk 的工人,对吧?我确实不知道他们的人口统计特征。想象他们在亚马逊的远程工作平台上做任务,我猜他们不代表全世界人口的中位水平。
更广泛地说,人类内部也存在能力光谱。人类显然具有通用人工智能,但有些人的能力相对较弱,在智商测试上会得分更低。
例如瑞文渐进矩阵。看看普通人的表现就知道。如果某种题目正好是一半人答对、一半人答错,我们可能会觉得这种题目很简单。
人类具备通用人工智能,但只需很小的变化,就可能从答错这类基础智商测试题的人,变成全部答对的人。我们会谈谈模型过去的一些表现。
例如,杰克·科尔用一个2.4亿参数模型拿到35%。这难道不说明模型正处于人类内部同样存在的能力光谱上,而且很快就会达到饱和吗?
这里有好几个值得讨论的点。确实,杰克·科尔主导的一类大语言模型方法表现相当不错,事实上已经达到当前最先进水平。但要看清其中发生了什么,有两点。
第一,要取得这些分数,你需要用数百万道生成的 ARC 任务预训练大语言模型。当然,这和一个第一次看到 ARC 的五岁孩子完全不同。这个孩子以前没有做过智商测试,也从未见过类似 ARC 的测试。
孩子已有知识与测试要求之间,唯一的重叠就是核心知识:知道如何计数、理解物体、对称性等等。即便如此,他们依然表现很好,远胜过一个用数百万道类似任务训练过的大语言模型。
第二点是,杰克·科尔的方法要让模型真正奏效,测试时微调至关重要。顺便说,这正是大语言模型方法目前缺少的东西。多数时候使用大语言模型时,它只做静态推理:模型被冻结,我们只是给提示并得到答案。模型实际上并没有即时学习,内部状态也没有针对当前任务进行适应。
杰克·科尔实际上对每一道测试题,都会当场微调一个大语言模型版本来处理该题。这才是真正解锁表现的因素。如果不这样做,得分只有1%到2%,几乎微不足道。加入测试时微调,再加上一系列技巧,就能得到有意思的性能数据。
这种方法是在解决大语言模型的一项关键局限:缺少主动推理。它实际上为大语言模型加入了主动推理,而且效果极好。我觉得这非常有意思。
这里有很多有意思的延伸话题。许多极度看好规模扩展的人也认同你的总体看法:我们必须解锁自适应或测试时计算能力。他们认为,除了扩展模型之外,还需要自适应计算或某种强化学习,来启动系统2推理。他们的看法是,在规模更大的模型已经具备的表征能力基础上,再加入这些能力相对直接。
这不只是技术细节,也不是一件简单的事。这就是全部问题,是关键所在。极度看好规模扩展的人会谈缩放定律,也就是训练模型投入的计算量与基准测试表现之间的经验关系。
当然,关键问题是如何衡量表现。增加计算量和数据量,究竟让什么变好了?衡量标准就是基准测试表现。
如何衡量表现并非技术细节,也不是事后才考虑的问题,因为它会缩小你提出的问题范围,进而缩小你寻找答案的范围。
我们用于大语言模型的基准测试,都是基于记忆的。有些甚至就是知识测试,比如学校考试。即使是明确测试推理的题目,仔细观察也会发现,只要记住一组有限的推理模式并重新应用,就足以解题。它们像静态程序。
大语言模型很擅长记忆小型静态程序。它们有一套解题程序库。你给它一道新谜题时,它可以取出合适的程序并应用。看起来像是在推理,但它并没有当场合成程序,只是在检索程序。
你完全可以靠记忆解决所有这些基准测试。看看模型本身以及你正在扩展的东西:它们是根据数据分布拟合出来的大型参数曲线,基本上是大型插值数据库、插值记忆。当然,如果你扩大数据库、塞进更多知识与模式,它在记忆型基准测试上的表现就会提高。
这其实很明显。但这样做并没有丝毫提高系统的智能,只提高了它的技能:提升了它的实用性和适用范围,却没有提升智能,因为技能不等于智能。这就是人们根本性的混淆之处,他们把技能和智能混为一谈。
§03技能与智能
这里有很多有意思的问题:技能、智能、插值。我们先谈把输入数据映射到某个流形这个说法。用还原论的方式描述人脑,可以说它只是神经轴突互相触发。但我们真正关心的不是这种还原论解释,而是这些东西组合起来后在宏观层面会产生什么。
我们来看一个基准测试。有个测试考小学数学,问题的难度相当于聪明的高中生能解的题,叫 GSM8K。这些模型的得分达到95%,几乎总能答对。
没错,这是记忆型基准测试。
我们来具体看看这意味着什么。这是其中一道题:
‘一个班有30名学生。其中五分之一是12岁,三分之一是13岁,十分之一是11岁。有多少人不是11岁、12岁或13岁?’
我同意这不是什么高深问题。你可以在纸上写出解题步骤,一个聪明的高中生应该能解出来。但说到记忆,模型仍然必须推理分数、理解问题整体语境,并把不同计算组合起来,得出最终答案。
这取决于你如何定义推理。可以用两种定义。一种是:我有一组程序模板,它们对应谜题的结构,也能生成解答。我从记忆中找出正确模板,把新数值放进去,运行程序,得到答案。你可以说这就是推理。我会说,‘好吧,也行。’
还有另一种推理定义:面对一道谜题,如果记忆中没有现成程序可解,你能用已有程序的零碎部分当场合成一个新程序。这需要实时进行程序合成。它比取出记住的程序再重复应用,要难得多。
也许我们高估了人类在样本效率方面的优势。人类同样需要这样训练,也必须练习这些推理路径,处理某些类型的问题。
以数学为例。你不能只给婴儿看一遍集合论公理,他们就会数学。成长过程中,你要教他们好几年预代数,然后花一年时间做题、反复练习相同类型的代数问题,接下来学几何、预微积分、微积分。
这不就是同一种情况吗?你不能只看一个例子就掌握程序,你确实得反复练习。模型也必须通过大量预训练数据来练习。
当然。要进行现场程序合成,你确实需要可供使用的构件。知识和记忆在这个过程中极其重要。我不是在说记忆和推理只能二选一;要有效推理,你需要记忆。
但这听起来与你的观点并不矛盾。通过看过各种例子,这些模型可以在这些例子的范围内学会推理。随着模型越来越大,我们也能看到这种能力。
刚才是一个高中水平的数学题。假设一个比 GPT-3 小的模型完全做不了。模型越大,似乎越能掌握更复杂的模式。
这里主要不是模型尺寸的问题,而是训练数据的问题。
但大模型能学会这些电路式模式。即使给小模型同样的数据训练,它们似乎也做不好。这难道不说明,模型越大,就越能掌握更长的推理路径或更通用的推理方式吗?
完全正确。
但那不就是智能吗?
不是。如果你扩大数据库,不断增加知识和程序模板,它当然会变得越来越有技能,能处理越来越多任务。但通用智能不是将特定任务技能扩大到许多任务上,因为可能技能的空间是无限的。
通用智能是面对任何问题、任何技能时,都能用很少的数据迅速掌握它的能力。这让你能面对未来遇到的一切。一般性不是把具体能力累加到足够多,而是把心智应用于任何事情、任意事情的能力。这从根本上需要高效地适应和即时学习。
我的观点是,通过用越来越大的模型进行预训练,你确实在获得高效泛化的能力。举个例子,你所在的 Google 在 Gemini 1.5 的论文中展示了一个有意思的案例:把一本语法书和一本词典放进上下文,提供一种使用者不到200人的语言。这种语言不在预训练数据里。模型只看词典,就基本学会了这种语言,也能翻译,甚至掌握语言结构中复杂而自然的规律。
如果给我一本英西词典,我并不能因此就学会如何组织句子、如何说西班牙语。但因为预训练获得的表征,模型能够非常高效地学会新语言。这不正说明这种预训练确实提升了学习新任务的能力吗?
如果你说得对,大语言模型在 ARC 谜题上就应该表现很好,因为 ARC 的谜题并不复杂。每道题只需要很少知识,复杂度很低,不需要花太多心思。对人类来说它们其实非常直观。
连孩子都能做,但大语言模型做不到。即便大语言模型掌握的知识比你多10万倍,也仍然做不到。ARC 唯一特殊之处是它被设计为抵抗记忆,这是阻碍大语言模型表现的主要因素。
仔细观察大语言模型就会发现,它们并没有真正当场合成新程序来解决眼前任务,而是在重复应用记忆中的内容。比如大语言模型能解凯撒密码,也就是通过移位字母给消息编码。这是很复杂的算法,但它在互联网上很常见,所以模型基本上记住了它。
有趣的是,移位长度为3或5时它们能解,因为这两种数字在网上例子中很常见。如果你换成任意数字,比如9,它就会失败。它没有编码算法的一般形式,只记住算法的特定例子。如果它真的能当场合成解题算法,n 的取值就不该有影响,因为它不会增加问题复杂度。
我认为人类也有这种情况。
当然,人类也会一直使用记忆和模式匹配,但人类并不局限于此。我们拥有一种非常独特的能力,能在新情境中即时适应。这正是我们每天都能应对新生活的原因。
有研究发现,国际象棋特级大师会非常擅长……
这是个很好的例子,因为顶级国际象棋基本上全靠记忆,靠记棋谱。
你如何解释 Gemini 1.5 在上下文中学会一种语言,包括复杂语法结构这个现象?这难道不说明它们能掌握新知识吗?
我猜它只是从极其庞大、难以想象的训练数据中找出了所需模板,然后重复使用。我们知道,大语言模型当场合成新的程序模板,或调整现有模板的能力非常弱。它们很大程度上局限于检索。
§04要自动化大多数工作,是否需要通用人工智能?
假设 Google 有一名程序员早上去办公室。她什么时候会做出一件百分之百不可能通过检索模板完成的事情?
假设这个程序员是个大语言模型。如果它只能从程序库中检索模板,它有什么事做不了?到什么时候它必须使用所谓的极强泛化能力?
别只看 Google 的软件开发者。每个人每天都会遇到自己从未准备过的新事物。你的生活不可能只靠记忆过下去,这不现实。
听起来你也同意它们不只是‘记忆’,而是认为它们的泛化能力较弱。我只是想知道它们具体具备哪种泛化能力。
你如果到了办公室,试图用那种泛化方式工作,就会丢掉饭碗。假设你是程序员,最早到什么时候会因为缺乏极强泛化能力而失业?
就拿现在这个情境来说。你以前从没来过这间屋子,也许只来过这座城市几次。这里有很多新鲜事,你以前也从未采访过我。你生活的每一天、每一个小时都充满新情况,而且总体而言,这些新情况超过任何大语言模型能应对的范围。把大语言模型放进机器人,它根本无法完成你今天做过的所有事情。
以自动驾驶汽车为例。假设一辆自动驾驶汽车在湾区运行。你能把它直接放到纽约市,或放到靠左侧行驶的伦敦吗?不行,它会失败。它不但无法泛化到驾驶规则发生变化的情况,甚至无法适应一座新城市。每个具体环境都需要单独训练。
我同意自动驾驶汽车不等于通用人工智能。
但它们是同一种模型,也都是 Transformer,架构相同。
我不知道。猿类的大脑也有神经元,但它们的智力较低,因为大脑更小。
我们可以继续讨论这个问题。我还是不明白这个具体例子。人类也需要训练,这就是教育存在的原因。我们人生最初18年要花大量时间练习。
我们有记忆,但我们不等于记忆。我们并不局限于记忆。
我不同意它们必然只是在做这一件事——检索记忆。
假设你把远程工作的程序员换成大语言模型。你什么时候会发现这不是人类,而是大语言模型?
我给它一道 ARC 谜题,不就知道了吗?
不,我是说作为工作的一部分。
你总是得应对新情况。
有没有这样一种情况:所有程序员都被替代了,但大家仍然说:‘啊,他们只是在做需要大量记忆的编程任务。’在那种情况下,他们还能产出价值一万亿美元的代码吗?
软件开发其实是一个很好的例子,说明工作中总会遇到新情况。如果你没有遇到,我不确定你到底在做什么。
我自己在软件开发工作中很少使用生成式 AI。在大语言模型出现之前,我也很少用 Stack Overflow。有些人可能会从 Stack Overflow 复制粘贴代码,现在则从大语言模型复制粘贴。
我个人尽量专注于解决问题。语法只是技术细节,真正重要的是解决问题。编程的本质,是为你要解决的问题构建心智模型和表征。
很多人可以自己使用这些系统。你可以打开 ChatGPT,说:‘这是我想要的程序规格。’它就会替你构建程序。
只要 GitHub、Stack Overflow 等网站上有很多这种程序的例子,那当然,它们会从记忆中帮你找出程序。
但你可以任意修改细节,比如说:‘我需要它在另一种服务器上运行。’
如果这是真的,那现在就不该还有软件工程师。
我同意我们还没有完整的通用人工智能。这些模型的参数不到一万亿,而人脑大约有10到30万亿个突触。如果做一个粗略计算,模型至少少了10倍。我同意我们还没到那个阶段,但我不明白为什么我们不处于同一条能力光谱上。
我同意它们有很多种泛化能力还做不到。但它们似乎处于我们在人类内部也能看到的平滑能力光谱上。有些人做 ARC 类测试会比较吃力,我们可以从他们在瑞文渐进矩阵这类智商测试上的表现看出来。
我不太喜欢智商测试,因为大部分情况下,你可以通过练习智商测试题来提高成绩。它们很大程度上基于记忆。事实上,这正是 ARC 试图避免的主要陷阱。
假设未来五年内,所有远程工作都自动化了。我的意思是,至少那些不需要提供人与人服务的远程工作可以自动化,比如销售岗位仍希望由人亲自与客户沟通。我说的是编程这类工作。
那种情况下,你会认为这不可能发生,因为程序员必须做很多事情,所需能力肯定不在任何预训练语料里吗?
当然不会。五年后,软件工程师会比现在更多,而不是更少。
我还是不确定。我学过计算机科学。假设我大学毕业后当了一个只会写代码的程序员,我每天上班,老板告诉我做一件事。老板什么时候会发现我是个大语言模型,而不是人?
大概第一天就会发现。再说一次,如果大语言模型真的能泛化到这种新问题,能开发软件解决从未见过的问题,那就不再需要软件工程师了。
看看今天人们在软件工程工作中如何使用大语言模型:他们把它当作 Stack Overflow 的替代品,当作复制粘贴常见代码片段的工具。实际上他们需要的只是一个代码片段数据库,而不是软件工程师真正需要的能力。
我们回到插值。为什么创造力不能被视为更高维度上的插值?按照机器学习的说法,更大的模型可以学到更复杂的流形,为什么不行?
读一位科学家的传记,你会发现科学家并非凭空提出全新理论。他们会摆弄已有想法,在头脑中把不同概念并置起来。他们像是沿着思想传承的树尝试不同的演化路径,最后可能通过发表论文之类的方式检验想法。
这似乎和人类做的事情相似,只不过泛化层次更高。模型越大,似乎就能达到越高层次的泛化。GPT-2 做不了需要更多泛化能力的小学数学题,GPT-3 和 GPT-4 却能做。
不完全是。GPT-4 的技能更多、技能范围更广,但它的泛化能力没有提高。
我不想在语义上纠缠。为什么创造力不能就是更高维度上的插值?
插值当然可能具有创造性。你说得对,我认为人类在某种程度上也常常依赖记忆、复述、模式匹配和插值。模式匹配与真正推理之间确实存在一条光谱。人类通常不会处于光谱任何一端,既不会纯粹地模式匹配,也不会纯粹地推理;大多数时候两者兼有。
即使你做一件看起来很依赖推理的事,例如证明数学定理,也是如此。你一边在头脑中进行不少离散搜索和真正推理,一边也受直觉和模式匹配引导,依据见过的证明形式和已有数学知识来思考。
我们所有的思想和行为,都是基于插值、记忆的第一系统思维,以及第二系统思维的混合。
为什么大模型的样本效率更高?
因为它们拥有更多可重复使用的构件,可以依靠这些构件从训练数据中掌握新模式。
随着模型越来越大,这种趋势会持续吗?
只要你给模型的新模式与它之前学到的内容匹配,趋势就会持续。如果你呈现的是实际上非常新颖、不服从稳定分布的东西,比如 ARC 谜题,它就会失败。
我来提出一个说法。程序合成是个很有用的思维工具。为什么 Transformer 里面发生的事情就不可能是这样?
早期层负责表示输入 token,中间层进行某种程序搜索和程序合成,并组合模型中各电路的输入。从底层表征逐渐过渡到模型中间附近的高层表征,再使用这些程序、组合这些概念。最后得到的就是基于高层智能的推理。
也许吧,为什么不可能呢?但如果这些模型真的能合成新程序,即使是非常简单的程序,它们也应该能做 ARC。因为对每个 ARC 任务,你都可以用 Python 写出解题程序,而且程序并不复杂,非常简单,人类能找出答案。为什么大语言模型做不到?
这是个合理的问题。换个角度问你:假设一年后,多模态模型能解 ARC,得分达到80%左右,或者达到普通人平均水平。那是否意味着我们走在通往通用人工智能的路上?
很有可能。说实话,我希望看到类似大语言模型的系统在 ARC 上达到80%,但训练数据只有核心知识相关内容。
但人类孩子接受的训练,肯定也只包括他们基因中的内容……
让我重新表述一下。我希望它只接受那些没有明确试图预判 ARC 测试集内容的信息训练。
ARC 的核心不就是这一点吗?每次都是一种全新的智能测试?
是的,这正是 ARC 的设计初衷。如果 ARC 是完美无缺的基准测试,就不可能预判测试集内容。ARC 发布已经四年多了,目前仍能抵抗记忆式作答,在某种程度上经受住了时间考验,但它并不完美。
假设你手工制作几十万道 ARC 任务,再用程序生成变体,把数量扩大到几亿道。通过蛮力覆盖任务空间,训练集与测试集之间就会有足够多重叠,使你取得很高分。规模足够大时,总能作弊。
如果所有号称需要智能的事情都能这样处理,那智能又有什么用?难道你只要蛮力就能解决智能问题?
如果世界、生活是静态分布,那当然可以蛮力搜索行为的整个空间。我喜欢用几个比喻解释智能。其中一个是:把智能想成未来情境空间中的寻路算法。
不知道你是否熟悉即时战略游戏开发。你有一张二维地图,但只知道其中一部分。地图上有战争迷雾,某些地区你尚未探索,对那里一无所知。还有一些地区你以前探索过,只知道它们过去的样子,不知道现在是什么情况。
现在不要把它想成二维地图,而是想象所有可能遇到的未来情境,以及这些情境之间如何连接。智能就是一种寻路算法。你设定目标后,它会告诉你如何以最佳方式到达。当然,这受到已有信息的限制;对一无所知的区域无法寻路,也无法预见变化。
如果你对地图拥有完整信息,就可以记住所有可能路径,以及从 A 点到 B 点的每一种映射,从而解决寻路问题。完全可以只靠记忆解决。现实生活中做不到这一点,是因为你并不知道未来会发生什么,生活一直在变化。
我觉得你一直在用‘记忆’这个词,但我们从来不会用它来描述人类孩子。如果孩子学会代数、再学会微积分,你不会说他只是记住了微积分。如果他能解任何一道代数题,你不会说他只是记住了代数;你会说他学会了代数。
人类从来都不是纯粹依靠记忆或纯粹依靠推理。
你只是语义上把人类做的事情称为‘技能’,但大语言模型做同一种技能时,你就称之为‘记忆’,而这些基准测试可以测量这种差异。你可以随便代入任何一道数学题。
有时人类确实和大语言模型做的是同一件事。比如学会加法时,你是在记住一种算法,记住一个程序,然后重新应用;你并不是当场合成加法程序。
显然,总得有某个人曾经想出加法。孩子不会从集合论公理开始,一步步推导出加法。
在学校学的东西,大部分都是记忆。
我的观点是,与人脑能执行的浮点运算、所含参数相比,这些模型的参数量还远远不足。所以它们提出新定理的能力不如最聪明的人类是合理的,大多数人类也做不到这一点。但普通人做的大多数事情听起来确实很像你说的记忆,也就是记住自己学过的技能或方法。所以这完全可以和你的观点相容。
如果我说错了请告诉我:是否有可能所有远程工作都被自动化,但它们仍然是在做那些我们可以生成合成数据的技能?我们记录每个远程工作者的屏幕,理解他们在做什么技能,然后训练出能做这些工作的模型。所有远程工作者都失业了,但 AI 远程工作者创造了数万亿美元的经济活动。那种情况下,我们仍然处于记忆模式吗?
当然。只要分布是静态的、你不需要应对变化,靠记忆几乎可以自动化一切。
大多数工作都属于这种静态分布吗?
也许很多事情都可以自动化。大语言模型是很好的自动化工具,但你必须明白,自动化不等于智能。我不是说大语言模型毫无用处。我多年来一直非常支持深度学习。
多年来我一直说两件事:继续扩大深度学习的规模会不断带来回报;但继续扩大深度学习的规模不会带来通用人工智能。
我们可以自动化越来越多的事情。这确实有经济价值,也可能取代许多工作。但你仍然没有获得智能。
于是你可以问:如果我们能创造这么多经济价值,智能又有什么用?当你必须应对变化、新颖事物和不确定性时,才需要智能。
只要你处在一个可以预先精确描述的空间里,就能完全依赖记忆。事实上,只要能非常精确地描述问题和解答,你就总能解决问题,也能在任何任务上展现任意高的技能,而完全不需要利用智能。
它们遇到新情况时,你又把它叫作插值。
不,插值不足以应付所有新情况。如果够用,大语言模型早就是通用人工智能了。
我同意它们还不是通用人工智能。我只是想弄清楚我们是否走在通往 AGI 的路上。关键问题是,在我看来它们处于一条能力光谱上,而大语言模型显然覆盖了这条光谱的最初阶段。
我也这么认为。
好,有意思。还有一点可以作为证据:顿悟现象。
显然,即使在深度学习内部,记忆阶段与泛化阶段也有区别。起初模型只会记住数据集,比如做模运算加法时记住如何加数字。如果你继续在这些数据上训练,最终它们会学会这项技能。
这种区别说明,对于深度学习能够学到的通用电路,如果模型参数过多,就会出现能够泛化的阶段。与目前希望模型完成的所有任务相比,我们的模型还没有大到那个程度。
顿悟是一种非常古老的现象,我们已经观察了几十年。它基本上是最小描述长度原则的一种体现。面对一个问题,你可以只记住逐点的输入输出映射,这会严重过拟合。
它完全无法泛化,但能在训练数据上解决问题。之后,你可以持续剪枝、简化和压缩映射,到某个阶段,它就会开始泛化。
这就是所谓的最小描述长度原则:能够最好泛化的程序,是最短的程序。这并不意味着你做的不是记忆,而是记忆加正则化。
也就是说,泛化?
对,这确实会带来泛化。
所以你是在一种技能内部实现这件事。元学习中的模式是,与其存储一个只能完成一种技能的程序,不如存一个能完成许多技能的程序。我们可以把它称为流体智能。模型越来越大时,你会预期它沿着泛化层级不断上升:先泛化到一项技能,再跨技能泛化。
没错。大语言模型不是无限大的,它们只有固定数量的参数,所以必须尽量压缩知识。实际上,大语言模型主要存储可重复使用的程序片段,比如向量程序。为了压缩,每次学习新程序时,它们都会尝试用已经学过的程序片段来表达新程序。
这难道不是泛化吗?
当然是。大语言模型显然具备一定程度的泛化,原因正是它们必须压缩。
为什么这种能力会有内在限制?总有一天它必须学会更高一层、再更高一层的泛化,最后达到流体智能。
§05AI 进展的未来:深度学习与程序合成
限制来自模型的基础结构:一条大型参数曲线。你只能用它实现局部泛化。如果要进一步实现更广泛甚至极端的泛化,就必须换一种模型。我倾向的范式是离散程序搜索和程序合成。
可以把这种方法和深度学习对比。深度学习模型是一条可微的参数曲线;程序合成模型则是由算子构成的离散图。你有一套逻辑算子,比如某种特定领域语言,然后选择其中的实例,把它们组成程序图。这很像用 Python 或 C++ 写的程序。我们仍是在做机器学习,试图自动学会这些模型。
深度学习使用梯度下降作为学习引擎。由于它能获得信息量很大的反馈信号,明确指示解在哪里,因此计算效率很高,可以很快找到解,但数据效率很低。要让它奏效,你需要对运行空间和数据分布进行密集采样。这样一来,模型只能在该数据分布内部泛化。原因在于模型本身是一条曲线。
相比之下,离散程序搜索使用组合搜索作为学习引擎。你不断尝试程序,直到找到符合规格的程序。这个过程的数据效率极高,仅凭一个或两个例子,就能学会一个可泛化的程序。这也是它在 ARC 上表现很好的原因。主要限制是计算效率极低,因为会遇到组合爆炸。
由此可以看出,深度学习与离散程序搜索的优势和局限性正好互补。深度学习的每项局限,对应着程序合成的一项优势,反之亦然。未来的方向是把两者结合起来。
还可以这样理解:用梯度下降训练的参数曲线擅长系统1思维,比如模式识别、直觉和记忆;离散程序搜索则适合系统2思维,比如规划和推理。它能快速找出一个可泛化模型,用一两个例子解决问题,比如 ARC 谜题。
人类从来不会只用系统1或系统2,而是一直混合运用。目前我们已经拥有各种系统1工具,但几乎没有系统2工具。未来的方向是创造混合系统。
这种系统的主体结构将主要是系统2,也就是离散程序搜索。通过深度学习解决离散程序搜索的根本局限:组合爆炸。你可以利用深度学习在程序空间中提供直觉、引导搜索。
下棋或证明定理时就有类似过程。主要依靠推理,但一开始会有一种对解题形状的直觉。这种能力可以由深度学习模型提供。深度学习模型很像直觉机器、模式匹配机器。
先根据对解题形状的直觉开始,然后进行明确的离散程序搜索。但你不会靠蛮力、随机尝试,而会询问另一个深度学习模型的建议:‘最可能的下一步是什么?下一步应该走到图中的哪个位置?’你还可以让另一个深度学习模型提供反馈:‘目前为止的结果如何?看起来对吗?该不该回溯,尝试别的方法?’离散程序搜索会是核心,但要借助深度学习让它的效率提高几个数量级。
顺便说,深度学习还可用于常识和一般知识。最终你会得到一种能在现场合成、适应新情况的引擎。
这种适应能力来自模式库:模型可以取出各种模块,其中一些可能是可微参数曲线,另一些可能是算法模块;再通过直觉引导的过程将它们组合起来。面对每一种新情境,它都会用非常少的数据合成出一个可泛化模型。这样的系统能够解决 ARC。
这确实是个很有意思的提示。这里有个关键分歧。我和一些极度看好大语言模型、预期两年内出现通用人工智能的朋友聊天。他们在某种程度上也认为只靠规模扩展还不够,但其他进展都建立在规模扩展之上。他们仍认为必须在这些模型上添加系统2推理和测试时计算能力。
他们认为这相对直接,因为预训练已经建立了一套表征库,就像浏览教材。你需要用更有目的的方式让模型处理所学内容。上下文学习的样本效率极高。要将它真正蒸馏到权重里,就需要让模型讲述它看到的内容,再把这些知识加回权重。
至于系统2,他们会谈到添加某种强化学习机制,鼓励模型沿着最终正确的推理轨迹继续前进。他们认为这件事相对直接,未来两年内就能实现。
这是个经验问题,我们拭目以待。
我猜你直觉并非如此。我想知道为什么。
我的直觉是,整个系统2架构才是困难部分,难度极高,也很难直接想到。扩展插值记忆反而容易,本质上只是一条大曲线,只需要更多数据。容易的是这部分。
困难在于智能架构。记忆和智能是不同的组成部分。我们有记忆,但还没有智能。我同意,记忆非常有用。如果你有智能却没有连接到广泛记忆,就无法从足够多素材中学习,也不会特别有用。
前一位嘉宾特伦顿·布里肯提出过另一种假设:智能就是以层级方式关联起来的记忆。福尔摩斯进入犯罪现场时样本效率极高,看几个线索就能判断凶手,因为他学会了更高层次的关联。这从根本上说就是记忆。
我们换个角度提问。大脑据说会做程序合成,但它只是互相连接的突触。从物理上看,不就是查询正确的电路吗?
是的。某种意义上,这只是程度上的差别。
在人类祖先经历过的环境中训练,就会学会这些电路。如果你用人类产生的各种输出训练模型(要复制这些输出,就需要这些电路),难道这不会训练出与人类拥有的东西相同的能力吗?
这是程度上的问题。如果一个系统只有记忆、只能进行局部泛化,就不会有很强的适应能力。要做到真正普遍的泛化,你需要记忆,还要能够进行足够深入的搜索,从而实现更广泛、乃至极端的泛化。
我最喜欢的心理学家之一是发展心理学的创始人让·皮亚杰。他有一句很好的话来定义智能:‘当你不知道该怎么做时,你所用的就是智能。’作为一个人,大多数情况下你知道该怎么做,因为以前遇到过类似情境,已经知道答案。
只有遇到新情况、意想不到的事情时,你才需要动用智能。这些事既不是由个人生活经验准备的,也不是由进化史准备的。你今天经历的一天,在某些重要方面与过去每一天都不同,也与祖先经历过的任何一天不同;但你依然能够正常应对。这是怎么做到的?
我不是否认泛化极其重要、是智能的基础。那不是争论点。真正的问题是:这些模型究竟在多大程度上具备这种能力?
好,我换个问题谈人类之间的智能差异。也许智商测试无法很好地测量你提到的能力,但不同人之间显然存在智能差异。
你如何解释这种差异?它似乎与我的说法相容:存在一条通用性光谱,这些模型正沿着它爬升到人类水平。有些人也没有达到爱因斯坦或弗朗索瓦·肖莱的水平。
这是个很好的问题。有大量证据表明,智能差异主要来自基因。这意味着你可以让一个不太聪明的人接触再多训练数据,也无法让他变成爱因斯坦。这说明你真正需要的是更好的架构、更好的算法。光有更多训练数据并不够。
我认为我同意。或许可以这样表述:聪明的人用机器学习术语来说,拥有更好的初始化。如果看神经线路,它们更加高效,可能神经元放电密度也更高。
规模扩展的故事有一部分是这样的:大脑大小与智能存在一定相关性。在大语言模型的‘规模扩展’讨论中,人们也会谈架构改进。比如 Gemini 1.5 Flash 的表现与一年前 GPT-4 发布时相当,但输出成本便宜57倍。规模扩展的故事中,有一部分是目前的架构改进还处于极其容易获得的阶段。
§06迈克·克努普如何被 ARC 深深吸引
我们现在请来 Zapier 联合创始人迈克·克努普。你正在与弗朗索瓦共同资助和运营这项奖金。告诉我这件事是怎么开始的?是什么促使你们设立这项奖金?
我对 AI 感兴趣已经13年了。我共同创办了 Zapier,也经营了它13年。
新冠疫情期间我第一次接触你的研究。当时我有很多空闲时间,就深入研究了一番。那时你刚发表《智能的度量》这篇论文,提出通用人工智能的概念,并认为技能获取效率是正确的定义,还介绍了 ARC 谜题。
我记得第一届 Kaggle 竞赛当时还没结束。它很有意思,但我暂时搁置了这个想法。当时 Zapier 还有更重要的事情要做,我们正忙于一次重大转型,努力推出第二款产品。
2022年1月,思维链论文发表。这让我真正意识到进展有多大。我甚至在 Zapier 为 GPT-3 论文做过一次完整分享。我原以为自己已经预估了大语言模型能做到的一切,但那篇论文让我非常震惊,因为模型拥有许多我没想到的潜在能力。
当时我甚至辞去了高管团队的职务。我原本管理公司的一半业务,后来转为个人贡献者,与联合创始人布莱恩一起专门做 AI 研究。这最终让我重新关注 ARC。我重新查看进展,本以为它会像 MMLU 和 GSM8K 一样很快饱和。
看到过去四年的分数和进步时,我非常震惊:针对 ARC 的客观进展几乎没有。这似乎是一项非常重要的评估。在过去一年里,我问了圈子和社区里很多人,发现几乎没人知道 ARC。如果它确实是全球独一无二的通用人工智能评估,与其他更狭义衡量 AI 技能的测试不同,那么更多人应该了解它。
我自己也有一些攻克 ARC 的想法,晚上和周末都在研究。今年年初我飞去见弗朗索瓦,向他请教并展示自己的想法。最后我问他,为什么更多人不知道 ARC?你应该回答一下,这个问题很有意思。你觉得为什么大家都不知道 ARC?
在研究社区中广受关注的基准测试,往往是已经相当容易攻克的测试。通常某个研究团队先取得突破,这会引起其他人的注意。随后就会有后续论文,其他团队尝试超越第一支队伍,诸如此类。
ARC 没有出现这种情况,因为现有 AI 技术很难解决它。ARC 要求你尝试新想法,这正是它的意义所在。我们不希望人们只是应用现有技术就能解决 ARC。它的意义是现有技术已经遇到瓶颈。如果想再进一步,开始解决那些没有记住、以前没见过的问题,就必须尝试新想法。
ARC 不只是用来衡量我们距离通用人工智能还有多远,也旨在启发研究人员。我希望他们看到这些谜题后会想:‘这些题明明这么简单,大多数人很快就能做出来。为什么现有 AI 系统这么难?为什么大语言模型这么难?’
这对大语言模型确实如此,但 ARC 在大语言模型成为主流之前就发布了。当时它的特殊之处仅在于它被设计成抵抗记忆。它在大语言模型和生成式 AI 浪潮中依然经受住了时间考验,说明它确实能抵抗记忆式作答。
这就是 ARC 深深吸引我的地方。我自己做了不少题,也给所有朋友和家人看过。他们都说:‘这很简单啊,你确定 AI 做不了吗?’我当初也有同样的反应。但深入研究后会发现,过去四年的经验数据表明它仍未被攻克,而且背后还有理论原因。我现在完全赞同,解决 ARC 需要新的想法。
世界上很多当前趋势实际上都不利于新想法出现。我们现在反而更不容易产生新想法。一个趋势是前沿研究越来越封闭。例如 OpenAI 的 GPT-4 论文没有公布技术细节,Gemini 的论文也没有公布技术细节,比如长上下文功能的实现。
但最初让 Transformer 诞生的,正是开放创新、进步和分享;大语言模型也是这样发展出来的。因此,很多前沿研究变得封闭,确实有些令人失望。这相当于押注个别实验室会取得突破,而不是依靠整个生态系统。互联网和开源已经证明,它可能是全世界有史以来最强大的创新生态系统。
前沿研究不再发表,实在令人难过。四年前,所有内容都会公开分享,所有最先进成果都会发表,现在已经不是这样了。
OpenAI 一手改变了局面。它大概让通用人工智能的进展倒退了好几年,可能有5到10年,原因有两个。首先,它导致前沿研究发表全面收紧。
它还引发了最初那波大语言模型炒作浪潮。现在大语言模型占据了所有注意力,大家都在做大语言模型。实际上,我认为大语言模型像是通往通用人工智能道路上的一条岔路。新增的资源都流向了大语言模型,而不是其他可能的方向。
回看更早的2015或2016年,那时做 AI 的人数只有现在的千分之一左右,但进展速度更快,因为人们探索了更多方向。世界显得更开放,人们可以提出新想法、亲自尝试并取得有意思的结果。那时充满活力。现在大家基本都在做同一件事的各种变体。
大型实验室也测试过 ARC,但成绩不好,所以没有发表结果。人们通常只发表正面结果。
我想知道大家花了多少力气,尝试通过提示、脚手架或类似 Devin 的方案,让前沿模型在 ARC 上产出好答案。我指的是现在的前沿模型,而不是一年前的模型。它们经过了大量后训练,像 Claude 3 Opus 或 GPT-4o。
我希望这期节目能让人们尝试这项开放竞赛。参加比赛必须提交开源模型,但我们也可以研究能力是否已经潜藏在 Claude 中,再看看能否展示出来。这会非常有意思。
§07百万美元 ARC 奖金
我们来谈谈奖金。解出来能赢多少?假设你在 ARC 上得了某个分数。如果你取得最好成绩但没有彻底攻克它,能得多少?
奖金池略高于100万美元。比赛每年举办一次,从今天开始持续到11月中旬。目标是达到85%,这是前面说过的人类平均水平下限。第一个达到85%基准的团队可以获得50万美元。
我们不指望今年就能实现。Zapier 早期有位统计学家跟我说过一句话,我一直记得:‘需要的时间越长,之后还需要的时间就越长。’我原本就觉得 ARC 需要几年才能解决。今年还会设立阶段性进步奖。
阶段性进步奖总额10万美元,发给成绩最高的团队。今年 Kaggle 排行榜上客观分数最高的团队可拿5万美元,我们会在 Kaggle 举办比赛。另有5万美元奖励最佳论文,要求从概念上解释团队取得这些成绩的方法。
有意思的是,获奖者要领取奖金,必须把解决方案或论文公开发布。通常比赛中,人们会保密成果,在比赛期间不愿公开分享,想把自己的优势留在手里。
我们预计这项工作需要好几年,所以希望做成一个互动式活动。计划在11月底颁发10万美元的阶段性进步奖。12月至次年2月的休赛期,我们会公开分享最高分的解题知识和大家采用的方法,让社区达到当前最先进水平,然后明年再次举办比赛。我们会每年继续举办,直到有人达到85%。
§08如何抵抗基准测试饱和
我来解释一下为什么我觉得这项奖金很有意思。我和非常相信现有模型的朋友们聊天时,发现一件有趣的事:他们根本不知道 ARC。这些都是有经验的机器学习研究人员。
这事就发生在几天前。我们一起吃晚饭,我给他们看了一道样题。他们说:‘大语言模型当然能解这种题。’我们截了图,直接输入 ChatGPT 应用,它却没能识别模式。
所以这件事很有意思,是一个值得注意的事实。我刚才在这些问题上和你唱反调,但这确实是一个非常引人注目的现象。这项奖金尤其有意思,因为无论结果如何,我们都能学到很有趣的东西。
至于85%这个目标,撇开这项奖金,我很想知道能否复现这个结果。心理学及其他类似领域中,用小样本进行测试时,结果往往很难复现。
我很想知道,如果你试着复现测试,普通人在 ARC 上的平均表现如何。我也很好奇攻克这项基准需要多久。把它和已经完全饱和的 MMLU、MATH 等其他基准相比,很有意思。设计 MMLU 和 MATH 的丹·亨德里克斯和科林·伯恩斯,当时还是研究生或本科生。
他们几年前设计测试时,目标是衡量通用人工智能。当然后来这些测试都彻底饱和了。我知道你会说它们只是在测试记忆,但我们看到了一个反复出现的模式。Epoch AI 有张很有意思的图,曲线几乎呈指数增长:随着模型算力增加,分数从5%、10%、30%升到40%,然后突然飙升。
GPT-4 技术报告中有张 HumanEval 题集的图,很有意思。它包含22道编程题,报告使用平均对数通过率曲线来绘制。训练初期,甚至较小的模型,可能已经有了解题思路。
但要确保它能持续按步骤走完并解出整题,需要很高的可靠性。你希望提高模型偶尔做对时的训练信号权重,哪怕只有百分之一或千分之一的成功率。它们先从千分之一提升到百分之一,再到十分之一,然后就能完全饱和。
最终的问题是:为什么 ARC 不会出现同样的情况?人们必须在更大模型上付出很多努力。现在他们找到了杰克·科尔的技术,只用2.4亿参数语言模型就能达到35%。
我们难道不该预期它会像其他基准那样发展吗?起初你慢慢提高成绩;一旦找到大致思路,就会一路冲到100%?
这是个经验问题,实践中会见分晓。杰克·科尔做的事情很独特,并不是预训练一个大语言模型后再提示它,而是在尝试主动推理。
他在做测试时计算,对吧?测试时微调。
没错,他在做测试时微调。这是在试图克服大语言模型的一项关键限制:推理阶段它们无法学习新东西,也不能根据眼前内容即时适应。他在尝试让模型学习。
他的做法本质上是一种程序合成。大语言模型中有很多有用的构件,也就是编程构件。在测试时针对任务微调,就等于尝试把这些构件组装成符合任务的模式。这正是程序合成的本质。
我会把这种方法与离散程序搜索作比较。离散程序搜索试图从一组原语中组合程序。原语很少。比如,在 ARC 上进行离散程序搜索的人,通常使用包含100到200个原始程序的特定领域语言。这种语言很小,却试图把原语组合成非常复杂的程序,搜索深度很深。
而杰克·科尔的大语言模型方法不同:他有一个包含数百万个构件的向量程序数据库语言,这些构件存储在大语言模型中。它们是通过预训练模型获得的,不仅训练了大量编程问题,还训练了数百万道生成的 ARC 类任务。于是你得到一个极大的程序语言,而微调只是对这些原语进行浅层重组。
离散程序搜索用很小的一组原语进行深度重组;大语言模型方法与之相同,但处于光谱的另一端:大幅扩展记忆,只做很浅的搜索。两者本质相同,只是位于光谱两端。
我认为,计算资源最有价值的用法会在两者之间。你要利用记忆建立更丰富、更有用的原语程序库,但不希望把这些程序像典型即时战略游戏一样硬编码,而是希望从例子中学到它们。你还需要一定程度的深度搜索。只要搜索很浅,你就只能进行局部泛化;如果要更广泛地泛化,搜索深度就至关重要。
我也许会说,他之所以严重依赖合成数据,是因为用的是2.4亿参数模型。当时 Kaggle 比赛要求使用 P100 GPU,其算力大概只有 H100 的十分之一。
给听众一点背景:现在的前沿模型规模实际上比它大一千倍。你们的比赛不允许提交方调用 API 或联网,必须在 NVIDIA Tesla P100 上运行,性能要弱得多。
此外,程序总运行时间大约限制在12小时。评测过程中,效率是硬性要求。
不过有一点:测试任务只有100道。平均分到每道题的计算量其实相当大,尤其是和每道题本身很简单相比。
也就是说,每道题大概有7分钟。有人估算过人脑有多少 FLOP,结果姑且听之,但作为参照,大约相当于一块 H100 的算力。
也许你会说,人脑能在7.2分钟内解出这题。即使只有十分之一算力,也应该能在七分钟内解决。当然,人脑没有 PB 级快速存取内存,而 H100 有大约29 GB内存之类的。
§09前沿模型与开源模型的 ARC 成绩
更广泛地说,我希望能有一种方法,使用某种脚手架来测试最大的模型,让我们了解规模扩展是否是解决 ARC 的道路。
当然。比赛的目标是看看在资源有限的情况下能取得多少进展。但你说得完全正确:最大的模型目前在 ARC 上究竟能做到什么,是个非常有意思的开放问题。
我们还想开放一个仅举办一次的私人赛道,参赛者可以提交一个虚拟机,里面装任何想用的模型。你可以拿一个最大的开源模型进行微调,做任何处理,然后提交镜像。我们会用 H100 运行它24小时左右,看看成绩如何。
值得指出,ARC 有两套测试集。公开测试集在公开的 GitHub 仓库里,任何人都可以用来训练,也可以调用开放的 API,想做什么都行。还有一套私有测试集,包含100道题,用于实际衡量最先进水平。
公开测试集的开放性和趣味性很高,大家至少可以试着使用它。分数上有个注意事项:因为测试集是公开的,它可能已经通过某种方式泄漏到了训练数据里。
其实已经有人这么做了。你现在可以拿公开评测集中的题目提示最新 Gemini 或 GPT-4 等最好的模型。问题在于,这些任务作为 JSON 文件放在 GitHub 上,而模型也在 GitHub 内容上训练,所以它们确实训练过这些任务。
这就产生了不确定性。如果模型解出了一些题,究竟是因为记住了答案还是别的原因?也许更好的办法是自己创建一个私有的、类似 ARC、非常新颖的测试集。不要把题弄难、弄复杂,而是让人类一看就懂,同时尽可能原创、独特且不同,再看看 GPT-4 或 GPT-5 在上面的表现。
已经有人测试这些模型是否在基准测试上过拟合。
Scale 最近在 GSM8K 上做了这件事。他们基本上复刻了基准测试,但换了一批题目。有些模型在基准测试上明显过拟合,比如 Mistral 等。而 Claude 和 GPT 这类前沿模型在新题集上的表现,和在原有公开题目上的表现一样好。
我对模型只是训练过这些 JSON 文件这件事相对乐观。我跟迈克开玩笑说,允许 API 访问,但再留一套更加私密的 ARC 验证集。这样可以开放 API,让大家尝试用 GPT-4 和各种脚手架参赛。之后再通过 API 对验证集进行测试。如果验证集的成绩比原先允许 API 访问的测试集差,就说明 OpenAI 在用 API 调用训练模型。你可以公开指出这件事,告诉他们:‘天啊,他们把你的数据泄漏了。’
我们确实希望不断更新 ARC 数据集。这是目标之一。弗朗索瓦也提过,它并不完美。
是的,ARC 不是完美的基准测试。我四年多前、差不多五年前创建了它,当时还没有大语言模型。后来我们了解到它可能有哪些缺陷。任务集合中存在一定冗余,这显然违背了基准的设计目标;实际上,每道题都应该独一无二,但并非完全如此。每道题也应该足够新颖,但实际可能并不新颖,或许与网上能找到的某些内容在结构上相似。
所以我们希望继续迭代,并在今年晚些时候发布 ARC 2.0。届时我们会开放旧的私有测试集。也许不会公开发布,但可以建一个测试服务器,用户查询一道题并提交答案。当然,你可以使用任何前沿模型。
因为你必须通过 API 查询,就能避免有人意外地用这批数据训练模型。这与当前公开的 ARC 数据不同;它就在 GitHub 上,因此模型确实在 GitHub 数据上训练过,其中当然包括 ARC。
用 API 管理访问权限,就能避免这个问题。想尝试自己设想的技术、使用自己想用的资源的人,也可以通过这种方式获得测试结果。
我想知道最终会发生什么。我不确定。一种可能是人们提出一种全新算法,显式加入程序合成,于是我们进入一条新道路。另一种可能是人们用现有模型做出某种巧妙且有效的方法,这说明智能或许更多是让模型进入分布中的正确区域,然后才能推理。
如果是这样,那会很有意思。也许这说明必须用某种巧妙方法来改造现有模型,但等模型变强后就不再需要这种办法。我也很好奇,多模态模型原生处理 ARC 类测试时,表现是否会好很多。
如果 ARC 三个月后仍未被攻克,我们就提高奖金。我们即将面对一个非常重要的现实检验:大幅提高奖金池。这能让我们很快知道,是否存在大量容易取得的突破。
再说一次,我认为需要新想法。听众中也许有人已经想到了解法,我鼓励大家试一试。随着时间推移,如果 ARC 仍未被攻克,就会加强这样的论证:进展已经停滞,必须有新想法才能解决 ARC。
没错,奖金的意义就在于吸引更多人来尝试解决问题。如果有一种简单办法能钻基准测试的空子,就能揭示这个测试有缺陷。到时候我们会知道。事实上,2020年最初那场 ARC Kaggle 比赛的目的就是这样:我发布数据集后举办比赛,是想知道它能否被破解、能否作弊。
当时有一笔小奖金,大约2万美元。那时 GPT-3 刚刚发布。人们当然用 GPT-3 测试了公开数据,结果得分为零。第一场比赛让我们知道,没有显而易见的捷径。现在奖金更高,研究的人也更多,很快就会知道这个基准测试能否经受考验。
假设最后有人提出一种解决方案,不是蛮力搜索所有可能的 ARC 任务,而是只用核心知识训练。我不认为这本身就等同于通用人工智能,但它可能是通往通用人工智能路上的重要里程碑。它代表一种新能力:只凭两三个例子就合成出一个解题程序。这本身就是一种新的编程方式。
这会成为一种全新的软件开发范式,能编写相当复杂且泛化能力很强的程序。你不必在脑海中构思程序结构再把它敲出来,而是只要向计算机展示想要的输出,由计算机自己找出解法。这非常强大。
§10ARC 奖金的可能解法
我想进一步讨论可能的解法,以及哪些会违背 ARC 的初衷、哪些是合理的。
我先举个例子。我的朋友瑞安和巴克昨晚熬夜研究这件事,因为我告诉了他们。他们说:‘大语言模型当然能解这个。’
很好,谢谢你帮忙传播消息。
他们尝试用 Claude Opus 做提示,声称在公开 ARC 测试上得到了25%。他们给模型看一些 ARC 题目的例子,并在上下文中解释从一个输入输出到另一个输入输出的推理过程,最后再给出当前问题。我记得他们还把 JSON 换成更适合 tokenizer 处理的表达方式。
另一种方法是用代码解释器。随着模型越来越聪明,代码解释器也越来越好。你认为代码解释器本身就是程序合成吗?他们让代码解释器输出网格中的实际结果,也就是 JSON,然后说:‘写一个能得到正确输出的 Python 程序。’
你说的程序合成研究,最后会不会只是大语言模型加代码解释器?
我认为不管最终出现什么高分解法,都可能需要利用深度学习模型,尤其是大语言模型。我们已经知道大语言模型可以表现得相当好,杰克·科尔的方法基本上就是这样。
我们也知道,纯粹基于小型特定领域语言的离散程序搜索效果很好。在杰克·科尔之前,它就是最先进的水平。事实上,它目前仍非常接近最先进水平,而且完全没有在模型中使用深度学习。
我们有两种彼此几乎没有重叠的方法,都表现得很好,也正好位于光谱两端。一端是数百万个向量程序构成的超大程序库,但重组非常浅、非常简单;另一端是非常简单的特定领域语言,只有100到200个原语,却进行非常深入、复杂的程序搜索。
解决方案会在两者之间。赢得 ARC 比赛、推动通用人工智能近期进展最多的人,会是那些能把深度学习和离散程序搜索两种范式优雅结合起来的人。
你问什么做法合理、什么算作弊。如果你给系统加一个代码解释器,我认为很好,完全合理。作弊的做法是试图预判测试会出现什么任务,蛮力搜索整个可能任务空间,再用这些数据训练记忆系统。你生成了数百万甚至数千万道题,必然会与测试集有一些重叠。
这样就违背了基准测试的初衷,因为模型只要检索记住的解答就能过关。希望 ARC 能抵抗这种方法,但没有基准测试是完美的,也许确实存在破解办法。很快我们就会知道。
不过一定程度的微调是合理的,因为参赛者必须使用开源语言模型,而它们本来就是语言模型。它们需要学会用 ARC 的方式思考。
是的。你要把核心知识、ARC 类的核心知识输入模型,但显然不需要数千万道任务。核心知识非常基础。
我看一些 ARC 类题目时,确实觉得它们依赖我生活中见过的事物。例如,一个物体撞到墙后反弹回来,题目里出现这种模式。我玩过街机游戏,也见过 Pong 之类的游戏。
例如观察弗林效应以及人们在瑞文渐进矩阵这类测试上的得分提高。背后可能是类似原因:从小到大,我们在电视等媒体上看到越来越多这种空间模式。
所以我认为这不算核心知识。这其实也是人类成长过程中的‘微调’:见过不同空间模式,并尝试对它们进行模式匹配。
我肯定会把这归入核心知识。核心知识包括基础物理,比如反弹或轨迹。
不过你说得完全正确。人类之所以能迅速找出解法,是因为心中有一套可以重新组合的构件和模式。
核心知识是获得智能所必需的吗?任何算法都必须在某种意义上把核心知识硬编码进去吗?还是说,核心知识本身也能通过智能学出来?
核心知识可以学会。以人类为例,有些核心知识是与生俱来的。我们出生时就对将要生活的世界掌握少量知识,因此我们并非一张白纸。
但大部分核心知识是通过经验获得的。核心知识并不是在学校里学到的,而是在生命最初三四年里获得。到四岁时,你就具备成年后所需的所有核心知识。
有意思。回到奖金本身,我很期待看到开源版本,也许用 Llama 70B 之类的模型参赛,看看大家能拿多少分。我还想专门测试规模扩展假设,并很好奇能否通过提示来解公开版 ARC。
你不能把这种结果提交到这场比赛里,但我很想知道大家能否攻克公开版 ARC、让它正常工作。这会不会改变你对通用人工智能的看法?
这确实会很有激励作用。我们会一直举办比赛,直到有人把可复现的开源版本公开发布。即使有人私下攻克了 ARC 评测,只要没有人能复现并公开发布,我们就会继续保留奖金。
没错。我们的目标是加快通用人工智能的进展。关键是任何有意义的进步都必须共享、公开,让所有人都知道并尝试在此基础上继续改进。不分享,就不会有进步。
我尤其想把不同的技术路线区分开:能否做出开源版本,还是只有规模扩展才能做到?我们可以分别用公开版和私有版来测试这两种可能。
这也是一次与现实碰面的机会,我们会了解计算资源的实际限制。如果有人出现并说:‘看,这是一个闭源模型,使用它后成绩提高了50%。’那大概会改变我们的看法。我们会想:‘好,也许应该增加私有测试集可用的计算量来平衡这一点。’
一开始有些决定多少是随意的,目的是了解大家希望怎样进步、什么才算进步。我们两人都承诺会不断改进这项活动,尽可能让它做到最好、最接近完美。
太好了。大家去哪里可以了解更多奖金详情,或者亲自试一试?
Arcprize.org。网站现在已经上线。
今天就开始。各位,一百万美元正在等着你们!
感谢两位来参加播客。讨论智能的各种关键分歧、听到不同观点,并在这里宣布奖金,都非常有意思。太棒了。
谢谢你帮我们公布消息。
感谢邀请我们。