前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dreamcoder-arc:用于抽象和推理的神经网络 ARC-AGI

dreamcoder-arc:用于抽象和推理的神经网络 ARC-AGI

作者头像
CreateAMind
发布2024-06-21 16:36:18
1420
发布2024-06-21 16:36:18
举报
文章被收录于专栏:CreateAMindCreateAMind

Neural networks for abstraction and reasoning:Towards broad generalization in machines用于抽象和推理的神经网络:机器的广义泛化

https://arxiv.org/pdf/2402.03507

https://github.com/mxbi/dreamcoder-arc

背景:

千万级别的kaggle比赛,刚启动

定义智能,测量智能

相关:

AGI之 概率溯因推理超越人类水平

学习抽象规则进行视觉推理v2

摘要。

半个世纪以来,人工智能研究一直试图复制人类的抽象和推理能力——创建计算机系统,使其能够从最少的示例中学习新概念,在人类觉得容易的环境中。虽然特定的神经网络能够解决一系列令人印象深刻的问题,但在训练数据之外的情境中进行广泛的泛化已被证明是难以捉摸的。在这项工作中,我们研究了多种新颖的方法来解决抽象和推理语料库(ARC),这是一个抽象视觉推理任务的数据集,旨在测试算法在广泛泛化上的表现。尽管有三场国际比赛,奖金高达10万美元,但最好的算法仍然无法解决大多数ARC任务,而且依赖于复杂的手工规则,根本没有使用机器学习。我们重新审视最近的神经网络进展是否允许在这个任务上取得进展,或者是否需要一个完全不同的模型类别。首先,我们将DreamCoder神经符号推理求解器应用于ARC。DreamCoder自动编写定制的特定领域语言的程序来进行推理,使用神经网络来模拟人类的直觉。我们提出了感知抽象和推理语言(Perceptual Abstraction & Reasoning Language (PeARL)),它允许DreamCoder解决ARC任务,并提出了一种新的识别模型,使我们能够显著改进之前的最佳实现。我们还提出了一种新的编码和增强方案,允许大型语言模型(LLM)解决ARC任务,并发现最大的模型可以解决一些ARC任务。LLM能够解决与最先进的求解器不同的问题组,并提供了一种有趣的方式来补充其他方法。我们进行了集成分析,结合模型以获得比任何单独系统更好的结果。最后,我们发布了arckit Python库,以便于未来对ARC的研究。

1 引言

在过去的五十年里,人工智能(AI)领域的研究人员一直在努力复制人类的抽象和推理能力——开发计算机系统,使其能够从少量的示例中学习新概念,而这对人类来说相对容易[1]。虽然最近的AI研究主要集中在狭义智能(在给定大量数据的情况下解决特定任务),但我们重新审视新的进展是否可以让计算机推断出新的概念,而不仅仅是插值。这个概念被称为广泛泛化[2]:人类通过抽象和推理来实现这一点;将类比应用于以前的情况并进行逻辑思考。虽然像神经网络这样的AI系统在各种任务上表现出色,从蛋白质折叠[3]到围棋[4],但它们无法广泛泛化的能力阻碍了在现实世界中的部署,例如在自动驾驶汽车[?,5]中。为了使AI更安全,我们必须了解如何构建能够在不寻常情况下进行推理的系统。为了系统地构建和评估能够以类似人类的智能方式解决抽象推理问题的计算机系统,我们转向了一个具体的基准。2019年,抽象和推理语料库(ARC)被引入,作为一种尝试将智力基准编入法典[2]——一种针对AI的“智商测试”。ARC包含了一系列由人类设计的网格任务,这些任务需要从少量的演示中学习某种转换。尽管有三场国际比赛,奖金超过10万美元,但ARC的表现一直难以捉摸,没有一个单一系统的准确率超过ARC-Easy数据集的50%或测试集的20%[7]。由于每个ARC任务只有少量的训练示例,以及10900种可能的答案(其中只有一种可以获得积分),传统的需要大数据集的机器学习方法到目前为止还没有取得进展。目前最先进的ARC方法利用了基于暴力搜索的复杂手工算法,而没有利用任何ML[8]。这项工作着眼于关注抽象和推理的新型机器学习系统是否能够实现广泛泛化,以ARC为焦点。我们研究了两种新的ARC方法,专注于将神经网络纳入以构建更好的抽象和推理求解器的新方法。具体来说:

•我们调整了DreamCoder算法,这是一种最新的用于程序归纳的最先进算法,以解决ARC任务。DreamCoder用特定领域的语言编写程序;我们为此设计了感知抽象和推理语言(Perceptual Abstraction & Reasoning Language (PeARL))纯函数式语言。我们的DreamCoder实现比现有工作[9]多解决了3倍的任务。

•我们引入了一个新的框架,使用大型语言模型(LLM)来解决ARC任务,将这些视觉任务转化为文本领域。对三类模型[10-12]的详细评估表明,LLM可以在正确的增强和领域转换下达到与人工构建系统相当的性能。

•我们构建了一个由多个ARC求解器组成的集成,考虑到了异构性能。这种集成方法利用了多种互补技术,代表了当前最先进的[8]技术的改进。•我们发布了一个开源Python库,用于处理ARC,以刺激该领域的研究。

2背景

自从最早的人工智能研究以来,类比制作一直被认为是智能概念的核心。当面对新情况时(例如;打开一种新型的门,或谈论一个新话题),人类会通过创造与以往经验和概念的类比来轻松解决这些情况。1967年,米哈伊尔·邦加德在他的书《模式识别》[1]中首次尝试识别这种类比制作的概念。他指出,像艾伦·图灵这样的科学家长期以来一直提出思维机器的概念;但是,虽然可以制造机器来解决特定任务(如解二次方程或下棋),但在模仿甚至理解人类适应新情况的能力方面却没有取得进展。邦加德接着提出,模式识别,即将情境识别为物体和物体类别(概念)的能力,是人类智能能力的关键。邦加德引入了一组问题(现在称为邦加德问题)[1],其中展示了两组形状,任务是识别区分它们的共同因素。请注意,每个邦加德问题都有一个独特的转换,因此不能简单地训练一个分类模型来识别一组转换——系统必须能够“发明”它们。这排除了用于解决大多数AI任务的模型类别,这些任务依赖于大量训练数据来发现模式

在道格拉斯·霍夫施塔特的开创性著作《哥德尔、艾舍尔、巴赫》[13]中,他写道:“解决邦加德问题的技能非常接近‘纯粹’智能的核心,如果存在这样的事物的话”——这项工作使邦加德问题广为人知,并为解决这些问题提出了至今仍具有相关性的想法。

在过去的50年里,人们在这些问题上做了大量的工作。原始的集合已经被各种作者扩展到近400个邦加德问题[14]。人们已经尝试过用计算机来解决邦加德问题,包括使用神经网络;然而,结果仍然非常有限[15-18]。除了任务本身的困难之外,邦加德问题并不适合计算机评估(在第2.3节中进一步讨论),因此近年来已经提出了基于邦加德思想的新基准。其中一个基准是抽象和推理语料库。

2.1抽象和推理语料库

2019年,Chollet发表了《论智力测量》[2],讨论了通用人工智能的过去和未来方法。Chollet指出,虽然在解决特定任务以达到或超越人类水平(如检测猫和下围棋)方面取得了卓越的进展,但这些模型通常需要大量的训练,并且仅限于在训练过的情境中表现良好。神经网络模型在训练数据之外进行外推时的失败已经被广泛探讨[?]。相比之下,人类具有出色的能力,可以在几乎没有训练数据的情况下解决高度新颖的情境中的任务,或者实际上是以前从未有人解决过的任务。虽然机器学习模型通常被认为具有“泛化”能力,但Chollet定义了三种类型的泛化:局部泛化,即系统可以对现有领域内的新示例做出响应(例如,图像分类器泛化到测试集);广泛泛化,即系统适应更广泛的情境,包括系统的创建者无法预见的示例;以及极端泛化,“适应未知范围的任务和领域的未知未知数”[2]。捕捉和比较系统执行这些类型的广泛泛化任务的能力本质上是困难的。尽管经过几十年的研究,关于如何衡量智力[20]仍没有达成共识,尽管心理测量学领域已经为人类提出了许多竞争性测试。Chollet在[2]中引入的抽象和推理语料库(ARC)试图为广泛泛化提供一个基准。通过制定一种具体的方式来衡量泛化能力,希望能像ImageNet改变图像分类[21]一样促进进步。ARC数据集由900个手工设计的任务组成,每个任务都需要求解器进行抽象推理。在每个任务中,求解器首先被呈现一些输入网格(通常是3-5个)和一组相应的输出网格。每个网格包含10种颜色之一的像素,用整数0-9表示,并以黑色“背景”为背景网格大小在每个任务之间以及在任务内部都有所不同。图2和图3显示了一些ARC任务的示例。

每个任务代表从输入到输出网格的一些常见转换。系统必须推理训练对之间的差异,并抽象出一个转换,以应用于新的输入网格以产生输出网格。然后,系统被呈现一个或多个测试输入网格,系统最多可以提供三个预测。如果一个任务中的三个预测中的任何一个与正确答案相同,则认为该任务已解决——对于接近的答案,不会给予部分分数。数据集分为三个子集:训练集、评估集和测试集。训练集和评估集各包含400个独特的任务,评估集包含的任务比训练集更难。私有测试集包含另外100个任务,这些任务不公开提供:要在测试集上评估系统,研究人员必须提交代码,以便在资源受限的离线系统上执行;因此,我们关注前两个数据集。值得注意的是,在这项工作中评估的算法使用无监督学习,并且不在标记数据上进行训练,这意味着我们专门使用这两个数据集进行评估。因此,我们在本工作中分别将这些数据集称为ARC-Easy和ARC-Hard。

2.2核心知识

每个任务都被设计成利用四种核心知识先验[2]中的一些;通过明确定义这些先验,ARC试图减少对算法是否具有足够的“习得知识”的依赖,而只关注推理能力

1. 对象性先验:处理对象及其相互作用。算法必须能够根据空间和颜色将网格分割成对象(同时考虑噪声和遮挡)。对象之间的物理接触是一个常见的主题(例如,“重力”变换和物体生长直到它们碰到其他物体)。

2. 目标导向性先验:许多任务涉及到“意图”的一般概念,找到某个“问题”的最简单解决方案(例如,绘制穿过迷宫的最短路径而不是更长的一条)。

3. 数字和计数先验:一些任务涉及计数和基本算术(如对10以下的数字进行加法和减法运算),以及基本集合操作(如根据某些属性(如大小)对对象进行排序)。

4. 基本几何和拓扑先验:许多ARC任务依赖于几何变换,如平移、旋转、形状缩放、复制对象和绘制线条。这些任务的一些例子也在补充图1中显示。

像邦加德问题一样,每个ARC任务本质上都是一个少样本学习问题。输出的高维性意味着在输入/输出对上训练传统的ML方法是不可行的;在10900个可能的输出网格中,只有一个能获得积分,而且只有三个训练示例。尽管ML问题具有难以置信的挑战性,但平均人类可以解决ARC中的大多数任务;这突出了我们以当今ML系统无法实现的方式进行广泛泛化的能力,并突出了当前AI系统中的一个重大差距。

2.3与邦加德问题的比较

虽然邦加德问题和ARC都是为了测试系统或人类在少数示例存在的情况下进行归纳推理的能力而设计的,但它们之间存在关键差异。ARC是为现代机器学习范式设计的。这使得它更适合于设计算法来解决它,并与为人类设计的邦加德问题和经典心理测验(如瑞文渐进矩阵[22])相比,更稳健地评估这些算法。

•评估:我们将如何明确地确定一个系统是否正确地识别了邦加德问题中的抽象转换?确定任何类比描述是否“正确”可能是主观的和耗时的。在ARC中,问题被修改了:系统被呈现几个转换的例子,并被要求将转换应用到新的输入。然后可以算法地对输出进行评分(如果模型产生了完美的像素输出,则被认为是成功的)。

•数据大小:虽然邦加德发布了他的100个问题,但ARC总共有900个任务。更多的任务意味着学习系统有更多的训练数据,并允许更精确的评估。此外,100个任务作为私人测试集保留:通过强制这些任务是看不见的,可以真正测试“开发者意识”的泛化[2]。

•问题格式:提炼逻辑推理问题(而不是解释或生成图像),ARC将任务呈现为可变大小网格上的彩色像素。这意味着系统不需要依赖计算机视觉形状检测器:问题被尽可能地提炼成一个推理问题。

这些特性使得ARC成为研究系统抽象和推理能力的优秀试验台。基准测试已经在其他人工智能研究领域取得了巨大进展,如ImageNet图像分类挑战赛。类似的抽象和推理基准可能会加速机器广泛泛化的研究。

2.4之前的工作

人们已经尝试过用计算机来解决ARC,主要是通过2019年举办的Kaggle抽象和推理挑战赛[7],奖金池为20,000美元,目前最先进的算法是由Johan Sokrates Wind(又名Icecuber)[8]设置的。Icecuber实现了一个领域特定语言(DSL),包含142个针对网格的手工制作的一元函数。在运行时,这些函数在输入网格上贪婪地组合,生成的“片段”存储在有向无环图(DAG)中。最后,求解器结合来自DAG的片段,以尽可能接近匹配训练示例。图4显示了这种方法的概述;详细描述可在补充材料中找到。

xu 等人介绍了ARGA(基于图抽象的抽象推理)[23];他们通过将ARC网格转换为对象图表示,并操作这些表示来扩展DSL搜索。此外,从训练示例中导出了一系列约束来剪枝搜索空间,并且一个“禁忌列表”避免了搜索最近性能不佳的原语。总的来说,这种方法在涉及对象操作的小任务子集上实现了与Icecuber相当的性能。虽然ARC被设计为一个机器学习基准,但最先进的解决方案都依赖于类似于Icecuber的完全手工制作的方法。人们已经尝试使用ML,但这些尝试仅限于ARC数据集的一小部分。例如,Golubev等人解决了依赖于裁剪的任务,他们从网格中提取特征,并训练一个特定任务的决策树分类器来尝试预测任务测试示例的裁剪坐标(x,y,w,h)[24,25]。这种方法推广到解决了7%的私人测试集任务。

2021年,Alford等人[9,26]探索了将神经符号求解器DreamCoder[27]应用于ARC数据集的想法,这被认为比以前DreamCoder的应用更具挑战性。他们选择了36个涉及对称性和基本几何操作(如旋转、翻转和裁剪)的ARC-Easy任务的一个子集,并提供了一个包含5个基本原语的DSL。他们发现DreamCoder可以解决一些任务,并成功创建了新的原语。然而,这个解决方案仅限于ARC-Easy数据集的一小部分,并没有使用神经网络引导搜索。在下一节中,我们将详细回顾DreamCoder算法,然后重新审视是否可以通过利用更强大的DSL、神经网络和其他改进来扩展DreamCoder,以解决更多的ARC问题。

2.5使用Dreamcoder进行神经符号编程

在人工智能领域,归纳编程[28]描述了推导程序以解释一系列示例的算法。经过30年的研究,已经提出了许多算法和方法[29],涵盖了广泛的应用领域,但这一研究领域远未解决。总的来说,归纳编程为ARC提供了一个令人鼓舞的研究方向,因为它能够将搜索空间从“所有可能的网格”大幅缩减到仅由程序性转换可解释的那些。DreamCoder系统[27]是一种新颖的归纳编程方法,它使用神经网络来指导其编写程序的能力(神经符号编程)。DreamCoder算法可以分为多个阶段,可以被视为一种唤醒-睡眠算法。在唤醒阶段,一个生成模型用领域特定语言(DSL)编写尝试解决任务的程序。在两个睡眠阶段,编程语言被更新以巩固在唤醒阶段学到的新信息,并训练一个单独的识别模型,该模型学会引导搜索朝着有前景的程序发展。这些阶段在几次迭代中交替进行,以实现自我改进。结果是,DreamCoder可以在几个领域取得显著的性能,如列表处理、重现LOGO绘图和查找正则表达式[27]。在本节中,我们将详细解释DreamCoder算法,稍后在第3.1节中进行改编。

2.5.1 唤醒阶段

一般来说,DreamCoder试图编写程序来解决任务;我们必须首先定义这意味着什么。我们定义一个任务T(x, y) : p为一组由程序p定义的示例(x, y),使得p(x) = y。对于一个列表处理任务,(x, y)可以包含未排序和已排序列表的对,正确的程序p是一个排序算法。对于没有输入/输出对的任务(例如,生成一个重现绘画的程序),x可以为空。

DreamCoder的目标是对T中的示例进行归纳推理,以产生一个候选程序p',该程序与示例相匹配。重要的是,任务是可验证的:我们可以通过编程检查一个程序是否是任务的正确解决方案。在我们的列表处理示例中,我们可以计算p'(x) = y,即使p是未知的;这意味着我们可以将其应用于答案未知但可以验证的现实世界问题。DreamCoder从一个称为库的领域特定语言开始。就像任何编程语言一样,库包含一组在函数类型系统中定义的函数和值。利用类型系统,我们可以生成一个语法,递归地定义语言中类型正确的程序集。例如,考虑以下玩具语言:

在这种语言中,add 1 2是一个类型正确的程序,但add 1 'a'不是,尽管它在语法上是正确的。有了类型系统,人们可以将程序的搜索空间限制为有效程序:这是一个强大的工具,因为语法正确的程序集通常比类型正确的程序集大得多。DreamCoder的唤醒阶段充分利用了这个语法:对于每个任务T,我们枚举大量的候选程序p' ∈ L;对于每个采样程序,我们检查它是否解决了任务。由于可能存在无限多的程序,我们必须使用启发式方法来决定要采样的程序。DreamCoder使用最小描述长度(MDL)原则,通过计算每个程序的熵并按熵最小的顺序枚举程序。这种启发式方法基于这样一个观点:解决任务的最短程序最有可能成为正确的程序(通常与奥卡姆剃刀原理相比较)。就其本身而言,唤醒阶段可以被视为在强大且巧妙定义的搜索空间中进行暴力搜索

2.5.2 抽象睡眠

DreamCoder算法的强大之处在于两个睡眠阶段,即抽象睡眠和梦境睡眠。抽象睡眠考虑并操作在唤醒期间解决的任务的解决方案。首先,发现的解决方案程序(前沿)P被插入到一个版本空间中;一个有效地表示程序可能重构的数据结构。版本空间代表了一大组程序:例如,函数式程序(+ 1 1)可以被重构为((λ (x) (x 1 1)) +),这两个程序都会被包含在版本空间中。所有在n = 3步内重构的程序都被考虑在内。

通过在版本空间中表示所有前沿以及可能的重构,我们可以挑选出在多个程序中出现的共同概念作为新的原语。然后,这些原语可以被添加到我们的库中,用于下一次唤醒的迭代,将常见概念添加到DSL中(通过类比现有任务进行学习)。在每次迭代中,导致总描述长度减少最多的k个最常见概念被压缩成新的原语。抽象睡眠的效果是显著降低搜索深度(以略微增加广度为代价)。在实践中,这种抽象学习可以非常强大:在一个LOGO绘图任务中,学到的概念包括绘制边长为n、边长为l的多边形,或者绘制半径为r的圆[27]。学习的概念甚至可以包括高阶函数,如径向对称函数,它在不同角度多次重复一个函数。在下一次唤醒的迭代中,这些概念形成了比简单操作的DSL搜索更长的、更强大的程序。

2.5.3 梦境睡眠

算法的最后阶段是梦境睡眠。在这个阶段,我们通过智能地引导每个任务的生成语法来减少搜索的广度。为了做到这一点,我们训练一个神经网络识别模型,该模型可以直接执行溯因abductive推理并推断T(x, y) → p。在设计这样一个模型时需要克服两个挑战。

首先,程序的空间呈指数级增长,任务非常困难;即使是人类也经常在得出正确解决方案之前考虑并丢弃多个候选假设。因此,直接预测答案的神经网络可能会失败。

相反,神经网络被训练以产生一个语法,在该语法下,正确的解决方案p具有低熵。由于程序是按照熵的顺序枚举的(使用迭代加深),这意味着由识别网络引导的搜索可以更快地找到正确的解决方案。

神经网络由一个特征提取器组成,它将任务转换为固定宽度的特征向量,以及一个GrammarNet,它接受特征向量并产生一个volumeQ,其中Qijk(x)是原语i作为原语j的第k个参数的概率。从Q中,我们可以构建一个上下文语法,为程序分配可能性,并在唤醒期间从这个新语法中采样。如图5所示。

第二个问题是训练数据:只有800个任务可用,而且没有任何一个任务有标记的解决方案(p),我们无法在数据上训练一个复杂的神经网络。为了解决这个问题,DreamCoder使用梦境来生成新的训练任务(也称为Helmholtz枚举,灵感来自Helmholtz机器[30])。为了构思一个有标签的训练任务,我们从现有的概率语法中随机采样一个程序p,并从我们任务的经验分布中采样一些输入网格x;我们现在可以构建一个新的梦想任务T(x, p(x)) : p。为了训练识别模型,可以使用不断产生的梦想任务和相关正确程序进行反向传播。DreamCoder中识别模型的作用与其他作品中“策略网络”的使用非常相似,例如AlphaGo[4],它在棋盘游戏围棋中取得了超越人类的性能。在AlphaGo中,蒙特卡洛树搜索(MCTS)用于评估棋盘上可能的位置,策略网络建议评估潜在有用的移动:神经网络的作用是大幅削减搜索空间并使搜索变得可行。在DreamCoder中,枚举引擎充当MCTS(评估匹配递归语法的程序),而识别模型为语法分配权重,以便首先评估更有“前景”的程序。这些网络试图模仿人类的直觉能力:当一个人解决ARC任务或玩围棋时,绝大多数有效操作会立即被丢弃,因为它们毫无意义。

3. 方法 3.1 DreamCoder的适应性

我们将DreamCoder作为一个ARC求解器,结合了DSL搜索和神经网络的力量。我们在Ellis等人[31]的Python/OCaml参考实现以及Alford等人[32]的工作基础上进行构建。为了让DreamCoder有效地解决ARC任务,我们引入了一个新的识别模型和用于操作网格的领域特定语言(PeARL),如下所述。还实现了其他适应性,如新的评估模块和多核搜索,并随这项工作开源(第3.6节)。我们在下面详细描述了对DreamCoder架构的两个主要修改;补充图2还给出了从参考DreamCoder实现修改的模块的顶层视图。

3.2 ARC识别模型

DreamCoder架构的一个核心组件是识别模型。由于我们的模型有许多可用的原语,暴力搜索成本高昂,无法深入到足以在搜索空间中找到所有解决方案。识别模型是一个神经网络,它试图通过在枚举之前估计哪些程序最有可能解决任务来指导搜索。它在梦境睡眠期间进行训练,并为每个任务生成一个上下文语法,为正确的解决方案分配高概率(第2.5.3节)。识别模型从一个特征提取器模块开始,该模块将任务转换为固定宽度的特征向量。这允许为不同的应用程序(如LOGO绘图或列表处理[27])使用不同的特征提取器。同时,一个通用的语法网络学会根据提取的特征为每个任务诱导语法。通过使特征提取器可微分,可以使用梯度下降优化端到端网络。ARC任务与DreamCoder之前的应用格式有很大不同,因此需要一个新的特征提取器设计。我们的网格的二维图像特性意味着我们将图像识别网络作为一个基础,但有几个设计挑战需要克服。我们将依次讨论这些问题。最终选择的架构如图6所示。

首先,高度可变的网格大小排除了卷积神经网络(CNN)的使用,CNN依赖于固定大小的图像输入,或者至少在使用自适应或全局池化层时有一个最小大小的输入[33,34]。在我们的例子中,我们需要一个能够有效地处理小到1×1网格的网络。一种选择是将所有网格填充到一个足够大的固定大小,如30×30。然而,当大部分图像是填充时,这可能会损害对微小网格的性能(大多数输入远小于30×30)。因此,我们的网络受到全卷积网络(FCN)[35]的启发,后者消除了这些限制。我们使用了一系列卷积层;每一层都有内部填充,使其输出大小等于其输入大小。我们没有使用CNN和FCN通常采用的降采样操作来提取更大尺度的特征(这强制了最小输入大小),而是在网络的后续层中使用膨胀卷积[36]。膨胀卷积在采样的像素之间留下间隙;结果行为类似于在下采样的图像上的卷积。这些层使得可以在没有与大卷积相关的参数爆炸的情况下整合多个尺度的上下文信息。膨胀卷积的输出作为残差添加到特征向量中,这意味着网络可以选择不使用它们(例如,在小网格上)。ARC的另一个独特属性是我们有输入和输出网格;解决方案不仅取决于单个网格的特征,还取决于两个可能大小不同的网格之间的关系。为了为一个任务生成一组单一的特征,我们将网络应用于每个网格,然后应用自适应平均池化层生成两个64×3×3的特征图M(y),M(x)。这两个特征图之间的差异M(y)−M(x)然后被传递给一个线性层,并在训练示例中取平均值,为整个任务创建一个单一的256维特征向量。使用空间自适应层允许网络检测对象在输入和输出网格之间何时被平移;这被发现可以提高性能。

3.2.1 模型训练

由于模型大小较小,我们在CPU上进行所有训练。在每个醒睡周期,识别模型在Helmholtz采样的任务上训练360秒;大约3000个随机任务。Adam优化器[37]优化了两个损失函数的总和:熵损失,即给定生成语法的程序的总体对数似然,以及一个分类损失,将语法网络视为一个N分类器,其中N是原语的数量,并最小化二元交叉熵。在训练过程中,我们逐渐将学习率降低10倍以提高收敛性。最初,虽然模型收敛到了相对较低的损失,但它的预测在实际ARC任务上并不有用。经过检查,梦想中的程序非常复杂,对于人类来说过于模糊,无法解决生成的任务。为了解决这个问题,Helmholtz采样过程被修改为将任何采样程序的最大深度限制为3个原语,从而大大降低了损失。

图7显示了识别模型的训练行为。我们看到,当使用神经网络导出的语法时,发现解决方案的熵(描述长度)比所有任务的先验语法减少了约30%。具有较低描述长度的解决方案找到的时间呈指数级减少,因此这种改进是显著的。我们还看到,识别模型学会了分类哪些原语可能被用来解决给定的任务。我们凭经验发现,我们的识别模型在找到解决方案之前编写的程序数量减少了大约10倍。

3.3 PeARL语言

DreamCoder的目标是在某种定义良好的语言中进行程序归纳,使用引导搜索提高效率。原则上,DreamCoder可以用来编写任何具有递归语法的语言的程序(甚至是Python[38])。如第3.5节所讨论的,寻找所有可能的Python程序(即使是引导的)来发现ARC任务的解决方案将是非常困难和低效的。因此,我们改为构建一个领域特定语言(DSL),在这种语言中,更高比例的枚举程序可能是有用的。事实上,目前最先进的ARC方法大多涉及某种能力的DSL(见第2.4节)。遵循现有的针对其他领域的DreamCoder DSL,我们设计了感知抽象和推理语言(PeARL),这是一种专门为表示ARC任务中的转换而设计的定制DSL。PeARL有两种结构:类型和原语。类型代表数据类型,原语可以代表一个值或一个n元函数。

我们在PeARL中定义了以下类型:grid:一个由彩色像素组成的二维网格。每个网格包含一个大小和位置,其中位置是该片段的原始位置(例如,如果网格已经被裁剪)。size、pos:网格的大小或位置,由整数元组(x,y)表示。当一个子网格被裁剪时,它会保留一个位置,这个位置可以在重新组合子网格时用于对齐。colour:像素颜色,由整数0-9表示,其中0是黑色。count:一个整数。这种类型可以用于网格属性的算术运算,这对于某些任务很有用。PeARL中的一个有效程序是任何类型检查的lambda表达式,类型为grid -grid。遵循现有的DreamCoder DSL,PeARL程序可以使用任意数量的原语、列表和高阶函数。该语言完全由一系列Python函数(每个原语一个)定义,其中Python类型注释隐式生成相应的语法。为了方便起见,实现了一个DSL类,允许在Python定义和PeARL之间进行一对一映射,消除了额外的样板代码。这使得快速原型设计和实验成为可能。例如,这里是一个带有两种类型和两种原语的PeARL子集的实现:

在这个DSL中,一个有效的程序示例是λ: filterCol 0 (topCol 0),它表示“从网格中移除所有颜色,除了最常见的颜色”。参数

给定的程序f是正确的,如果对于任务中的所有(x, y)对,f(x) = y(这样的程序被称为给定任务的边界)。因此,DreamCoder的目标是为每个任务找到边界,这些边界可以用来生成测试示例的预测。

3.4 大型语言模型框架

语言模型是一类旨在统计建模自然语言的模型,经过训练以预测训练语料库中的下一个标记(例如单词)。大型语言模型(LLM)的特点是它们的大小(包含数百亿个参数)和在大量文本语料库(通常是从互联网上抓取的)上进行训练。当使用人类反馈的强化学习进行微调时,“聊天”模型可以被条件化为以对话格式响应指令[39]。自从2020年GPT-3的发展以来[10],LLM已经以地震般的速度获得了普及,并且LLM编写代码[40]或解决文字游戏的能力令人印象深刻。微软的研究人员表示,GPT-4[11]“可以合理地被视为一个人工通用智能(AGI)系统的早期(但仍不完整)版本”,并发现它可以解决一些推理任务。此外,Webb等人最近的工作[41]表明,“像GPT-3这样的大型语言模型已经获得了一种新兴的能力,可以找到广泛类比问题的零样本解决方案”。为了证明这一点,他们创建了一个受Raven渐进矩阵启发的数字矩阵问题集。每个问题都由一组转换规则控制,这些规则可以堆叠到深度3,他们发现GPT-3的性能在很大程度上超过了人类的性能。许多研究人员也反驳这些说法,认为这些例子不能准确评估推理[42],LLM甚至不能解决30年前Copycat计算机程序攻击的字母串类比[43,44],并且它们仍然“对现实的理解很差”[45]。鉴于这场辩论,评估这些模型以及它们是否已经可以用来解决ARC是很重要的,与现有的推理任务相比,ARC提出了一个巨大的挑战,例如[41]。为了做到这一点,我们通过一种新的方案将ARC任务转换为文本领域,对几种最先进的大型语言模型进行了实验。然后,我们在与我们的DreamCoder解决方案和现有工作相同的框架中评估它们。

3.4.1 实验设置

我们在一个通用的测试框架上评估了几个大型语言模型,旨在与现有的ARC解决方案进行公平比较。我们通过API测试了OpenAI GPT系列模型以及Meta的LLaMA模型系列。对于LLaMA模型,我们使用GPTQ[46,47]将模型量化为4位精度,使用128的组大小。这可能会略微降低标准基准上的性能,但允许最大的模型在NVIDIA A100 GPU上执行。为了以文本格式编码ARC任务,我们将每个网格转换为整数数字(表示颜色),用换行符分隔网格中的行。选择的格式与每个LLM使用的标记化相匹配[48],这意味着每个网格单元格对应于模型中的一个标记。如图8所示。LLM接收一个解释问题的提示,然后是训练任务的输入和输出,最后必须完成表示测试任务的网格。一些LLM经过微调,适用于聊天界面而不是文本补全;对于这些模型,我们将输入和输出网格表示为一系列用户/助手消息,其中包含描述问题的整体系统消息。请注意,只有适合2048个标记(大多数测试模型的上下文窗口)的问题才会尝试;实际上,我们发现最大的问题对于LLM来说非常困难,因此这可能只会略微降低性能。关于标记化和提示的详细信息请参见补充材料。

为了解决一维序列模型在二维任务格式上必然存在的劣势,我们为每个任务增加了转置版本和90度旋转版本。这允许LLM尝试以行主序和列主序格式执行每个任务,从而显著提高整体性能。

3.5 理解ARC中的错误案例

现有的ARC方法主要依赖于程序归纳的原则:一般来说,DSL定义了算法可能产生的所有可能解决方案的空间,而某种搜索过程试图归纳出程序。虽然DreamCoders明确地模拟了这两个组件,但这个原则适用于几乎所有当前解决ARC的尝试,以及类似的推理算法,如Copycat[44]。

此外,当一个人尝试一个ARC任务时,我们看到了一个类似的过程:一个人试图将训练任务抽象为一个“程序”(通常是在头脑中以自然语言的形式,例如“旋转90度”);人类的直觉就是搜索过程。为了指导我们寻找改进的算法,我们设计了一个分析现有算法缺点的框架。在程序归纳算法的背景下,我们提出了三类失败案例:• 第一类:算法没有找到解决方案,因为解决方案不在搜索空间中。为了解决这个问题,我们需要通过扩展算法知道(或可以构造)的操作类型来增加算法的能力。

• 第二类:算法没有找到解决方案,即使它在搜索空间中。长时间的搜索可能会找到正确的答案,但计算限制意味着它没有找到。在这种情况下,我们可以增加可用的计算量或找到一种方法来引导搜索走向有希望的途径。• 第三类:算法找到了一个候选解决方案,但它没有泛化。这表现为发现了一些解决训练示例但在测试示例上产生错误答案的规则——本质上是一个假阳性。这可能是最难的情况,因为它不能通过使算法更完整来解决——相反,我们需要要么减少搜索,要么设计某种概念来衡量给定解决方案的可信度,以便对它们进行排序。作为一个极端的例子,我们可以考虑一个枚举随机Python代码来解决ARC任务的算法。这种方法永远不会出现第一类错误,因为所有的ARC任务都可以用Python解决。然而,它可能会出现许多第三类错误(例如,生成直接返回训练答案的程序)。在实践中,我们会遇到第二类错误,因为当前的计算机无法枚举足够的程序来“偶然”找到一个正确的程序。因此,虽然在原则上设计一个足够强大的搜索算法来解决ARC任务是容易的(就像设计一个图灵完备的编程语言一样容易)——困难在于如何有效地修剪和引导搜索,使其“朝着正确的方向搜索”并能在合理的时间内解决问题。这或许近似于人类的直觉;当面对一个ARC任务时,人类并不会机械地尝试所有可能的转换。

3.6 软件

在这项工作中,能够快速分析和迭代ARC任务是非常重要的。为此,我们构建了arckit python库,其中包含加载和管理ARC以及评估不同算法的工具。该库附带了ARC数据集,可以通过一行代码快速加载:

每个数据集包括一个包含400个任务的TaskSet,允许通过索引或ID进行查找。Task类实现了许多功能,例如对解决方案进行评分和为大型语言模型(LLM)生成提示。

ARCkit的主要优点是快速可视化以理解数据集和算法失败的地方;ARCkit可以自动产生显示网格或任务的矢量图形,以PDF或SVG格式导出,并排列网格以适应指定的图形尺寸。这项功能被大量用于生成本文中的图形。此外,任何任务都可以在使用arctask命令或Python的接口中可视化。

ARCkit库可以通过命令pip install arckit安装,并且文档可以在https://github.com/mxbi/arckit上找到。此外,我们使我们的DreamCoder实现代码可以从以下存储库获得:https://github.com/mxbi/dreamcoder-arc。

4个结果

4.1 原始设计PeARL(第3.3节)的原始设计对系统的性能有很大影响,可能是最关键的实现细节。如果原语过于专门化或不够强大,任务可能无法解决。相反,如果原语过于基础或存在太多无用的原语,解决方案可能过于复杂,无法通过搜索找到。我们的设计必须在这些方面取得平衡,以实现最佳性能(平衡第3.5节中描述的第一类和第二类错误)。

在DreamCoder的现有应用中,作者使用了相对基础的原语,强调了抽象睡眠发现高阶行为的能力[27]。例如,给定列表处理任务(如排序列表或获取最大元素),定义了基本的功能结构,如map、fold、cons、>,从这些结构中,DreamCoder能够学习像maximum这样的基本结构,并最终进行排序。

考虑到ARC任务的难度,这可能会限制抽象睡眠发现操作的能力,因此在PeARL中实现了一系列广泛的原语。我们的领域特定语言(DSL)源于对现有最先进的DSL的分析,以及努力对ARC任务进行分类(见补充图1)。这为“强大”的原语提供了一个很好的起点,这些原语可能编码核心知识先验(第2.2节)。此外,PeARL提供了一些基本的原语,如列表处理、组合和旋转,这些原语允许DreamCoder在抽象睡眠期间构建新概念。

PeARL有77个独特的原语;下面,我们将详细介绍一些广泛的类别。完整的列表在补充材料中给出。

刚性变换和裁剪 任意旋转、翻转和转置都是可用的,以及裁剪和取消裁剪操作。网格可以沿着轴切片(例如,righthalf),并且可以被重复或镜像以解决对称任务(这些原语受到Alford等人的启发[9])。

组合 网格可以按任意顺序堆叠,也可以考虑原始位置。像素级操作可以对网格对进行操作(e.g., pixelwise_and).

对象操作 一个网格可以以5种不同的方式分割成一个列表[grid]:4/8连通性和基于行、列和颜色。PeARL可以使用高阶函数mapSplit8对图像中的每个对象应用任意函数。可以以“俄罗斯方块式”的方式模拟重力,并且可以在对象之间绘制线条。

受Icecuber的启发,可以根据许多属性选择一个对象:大小、频率、密度、颜色和位置。对象列表可以按大小顺序组成(composeGrowing),PeARL可以定义和扩展功能列表(mklist,lcons)。

颜色操作 PeARL可以擦除、过滤和重新映射颜色:既针对特定颜色(c{1-9}),也动态({top,rarest}colour)。

形态学 PeARL可以在对象周围绘制边框,填充对象内的空洞,压缩空白空间和重复的行/列。

计数 PeARL可以计算网格中的颜色、像素或对象的数量(count{Pixels,Colours,Components}),并使用数量来构建指定大小的新的网格(countTo{X,Y,XY})。

4.2 评估DreamCoder

为了评估我们的DreamCoder解决方案,我们在ARC-Easy和ARC-Hard上进行了两个实验。我们运行DreamCoder进行一个单一的唤醒-睡眠周期,训练识别模型40分钟,并尝试每个任务1个CPU小时。

总的来说,DreamCoder为800个任务枚举了31亿个程序,分别在ARC-Easy和ARC-Hard中发现了75个和23个任务的前沿。在这些前沿中,分别解决了70个和18个任务,第三类错误率(假阳性解决方案——见第3.5节)为1.25%。这些结果大大改进了迄今为止DreamCoder所取得的成果(Alford等人[9]解决了23个和4个任务)。

总的来说,我们的DreamCoder实现在ARC-Easy上的准确率为16.5%,在ARC-Hard上的准确率为4.5%,优于其他最近的系统,如ARGA[23]。然而,DreamCoder与最好的手工解决方案(如Icecuber)之间仍然存在很大的差距。

图9展示了三个由DreamCoder编写的PeARL解决方案的例子。DreamCoder可以有效地使用高阶函数、类型并以有趣的方式组合原语来发现新功能。在下一节中,我们将研究这种性能是否可以通过对PeARL进行蛮力DSL搜索来实现,或者梦想和抽象睡眠是否带来了改进。

4.3 消融研究

DreamCoder算法依赖于良好的静态DSL和通过抽象和梦想睡眠进行的动态学习。我们进行了消融研究,以了解每个学习阶段的影响。我们进行了三个实验:(i)禁用识别模型,(ii)使用一个更简单的上下文无关识别模型,该模型仅对每个原语的概率进行建模,以及(iii)使用完整的上下文识别模型。上下文无关模型预测单个原语f(·)出现在解决方案中的概率,而上下文识别模型还预测每个原语在每个上下文中的概率,如g(·, f(·)) 我们允许每个任务有2分钟的枚举时间和10分钟的识别模型训练时间。第一个DreamCoder迭代显示了抽象睡眠运行前算法的行为,随后的迭代包含了压缩。

图10显示了启用压缩和/或识别引擎对解决ARC-Easy任务的影响。压缩(抽象睡眠)通过添加更强大的原语,允许搜索解决更多的任务,但效果小于预期。一种解释是,与原始的DreamCoder问题不同,PeARL并非有意设计为仅包含压缩可以构建的基本原语,这限制了组合可以带来的收益。

另一方面,启用识别模型显著改善了结果,几乎使在相同时间内可解决的任务数量翻了一番。这表明神经网络可以为这个问题带来好处。我们看到完整模型和上下文无关模型的表现相似;直接从输入网格预测原语的组合可能很困难。

仔细观察抽象睡眠的行为,我们可以确定为什么性能有时在后续迭代中会降低。压缩引擎发出结合现有功能的新原语:由于这些新原语在解决方案中的频繁使用,它们被分配了较低的熵,因此最终取代了解决相同解决方案的更简单对应物——结果是,随着时间的推移,相同任务的解决方案往往会变得更长、更复杂,出现更多的第三类错误。

这表明,用于对解决方案进行排名的最小描述长度(MDL)原则可以修改以提高性能。

4.4 大型语言模型结果

我们在ARC上测试了各种大型语言模型(LLM)。表1显示了某些流行LLM在ARC上的结果。图11显示了每个LLM在每个ARC数据集上达到的准确率,分为三种准确率:初始准确率显示了第一次尝试时解决问题的比例;增强准确率允许根据我们的增强方案进行三次尝试,包括旋转和转置任务。最后,我们考虑了一个“尺寸准确率”,它显示了LLM是否输出了正确尺寸的网格(即使内容不正确)。

从这些结果中可以得出几个广泛的结论。首先,我们看到随着模型大小的增加,性能显著提高,特别是在LLaMA模型中,类似地训练了越来越大的模型。这种趋势可能会持续到目前可用的模型之外,但这种趋势持续的程度尚不清楚,这是一个开放的研究问题[50]。我们还看到,ARC-Hard数据集更具挑战性,小型模型几乎无法解决任何任务。

总的来说,OpenAI的GPT-4模型的性能远远超过所有其他LLM,解决了21%的简单任务和8%的困难任务。我们看到,在所有模型中,我们的增强可以使准确率翻倍或更多(图11)。较小的GPT-3模型表现严重不佳,而大型LLaMA模型表现中等。

最后,我们看到尺寸准确率提供了一个更容易的指标,与整体性能相关:可以通过尺寸准确率比较解决很少任务的模型。图12和13从质量上显示了表现不佳的LLM所犯的错误类型。

总的来说,我们看到,通过我们的编码和增强方案,GPT-4的准确率略高于我们的DreamCoder解决方案(见第4.2节)。

4.4.1 LLM在ARC问题上的适用性

对ARC上的LLM能力进行评估的一个合理的批评是,这些模型被设计为基于文本的;它们读取一串标记。然而,我们认为这仍然提供了一个有用的比较点:目前还没有已知的等价于LLM的方法,可以支持对视觉输入和输出数据进行推理。这是因为LLM的能力来自于其训练数据中显示的庞大任务多样性(通常包含数万亿个代码、科学论文、论坛等的标记),而且性能已被证明非常依赖于训练数据[12]。在视觉领域,显示广泛人类推理能力的等价数据集更难收集,尽管一些关于大型视觉模型的有前景的工作已经显示了在其他推理任务上的能力[51]。还有一些使用LLM的替代方法值得研究。我们在第5节讨论其中的一些。

4.5 集成方法

在这项工作中,我们评估了一些非常不同的系统作为ARC求解器。当观察这些系统之间的差异时,出现了一个有趣的问题:它们是在解决相同的任务,还是每个系统都有不同的优势?

机器学习研究已经研究了集成方法,其中多个模型被组合起来产生比任何单个模型都更好的预测。这些方法的成功依赖于模型的多样性[52],通常通过查看预测的相关性来衡量。更多样化的模型会产生更强大的集成,即使个体准确率有很大差异。由于我们无法直接测量预测之间的相关性,我们提出了两种方法来衡量尝试ARC的系统之间的相似性,即使模型的头条性能有很大差异。首先,每个系统解决的任务集之间的重叠(Szymkiewicz-Simpson系数[53])

告诉我们较弱模型中由较强模型解决的任务比例。当一个模型解决了另一个模型的部分任务时,重叠为1。这可以看作是一个性能标准化的相似性度量:它忽略了模型之间的总体准确率差异,让我们确定一个系统是否是另一个系统的更强大版本,或者它们是否解决了互补类型的任务(与更常见的度量标准,如Jaccard指数相对)。我们还提出了非对称增益度量,

它给出了通过将一个模型添加到另一个模型中可以解决的额外任务——因此,它反映了每个模型的独特技能;这对中另一个模型无法解决的任务。不对称性意味着我们可以看到哪个模型表现最好。

图14显示了我们的系统在ARC-Easy集合上的预测的两个度量,从中我们可以得出一些关键结论。

首先,我们看到LLM倾向于解决与基于DSL的解决方案不同的任务:这些模型之间的重叠相对较低。特别是,我们的DreamCoder和GPT-4解决方案,它们的独立准确率相当,但在它们能解决的任务之间只有37%的重叠——这表明一个可以有效选择方法的集成可能会导致性能几乎翻倍。相反,我们看到不同的LLM倾向于有类似的预测(较大的模型倾向于解决较小模型解决的超集问题)。同样,我们看到DreamCoder和Icecuber解决了类似类型的任务:DreamCoder独特地解决了4个任务,它们之间的重叠率为94%。

4.6 构建异构高性能集成

对于分类和回归任务,可以通过加权平均每个系统的预测来有效地构建集成[52]。在我们的情况下,只有精确的解决方案才能获得分数,插值解决方案不太可能奏效。相反,我们构建了一个系统的投票集成:在每个任务上,每个系统可以提出一些它们“投票”的输出网格,添加到优先级队列中。当多个系统生成相同的预测时,投票被累加,提高了它们的优先级。由于ARC允许三次猜测,我们选择投票最多的三个输出网格。另一个需要克服的困难是我们系统的异构性。例如,DreamCoder只有在解决所有训练任务时才产生预测:DreamCoder的预测应该在最终列表中被优先考虑。另一方面,在组合LLM时,我们希望为性能更好的LLM提供更高的权重。我们为每个算法分配不同的权重以构建我们的集成:DreamCoder为20,每个GPT-4预测为3,每个任务的三个IceCuber预测为[8, 4, 4](基于对上述图表的检查并进行最小手动调整)。此外,我们丢弃任何不是网格的LLM预测,这是Icecuber的默认预测(在未找到解决方案时预测),并删除DreamCoder的重复预测(因为它倾向于找到等价的程序:例如,当函数在组合下是可交换的,我们有f(g(x))和g(f(x)))。这个过程允许我们从多达9个中选择三个最有希望的预测。我们集成的性能将在下一节讨论。

4.7 所有方法的定量结果

现在我们来总结一下本报告中讨论的每个系统,看看在两个ARC数据集上的主要性能。为了公平起见,所有系统都使用通用框架从头开始评估,遵循官方ARC评估程序。每个系统都可以访问训练示例,并且最多可以为每个测试示例创建三个预测。如果三次尝试中有一次完全正确,则任务被视为已解决。图15和表2显示了这些结果。

我们的新方法GPT-4和DreamCoder取得了不错的性能,超过了ARGA[23]。值得注意的是,DreamCoder解决方案解决的ARC-Easy和ARC-Hard任务分别是Alford等人[9]现有最佳实现的3倍和9倍。

我们的投票集成可以结合不同算法的优势,DreamCoder和GPT-4集成在一起,比单独使用任何一个系统多解决50%的任务。此外,这些系统成功地解决了让Icecuber(之前的最先进解决方案)束手无策的任务。我们的最终集成,结合了Icecuber、DreamCoder和GPT-4,成功解决了ARC-Easy和ARC-Hard数据集中57%和40%的任务。

总的来说,ARC-Easy上的性能与ARC-Hard上的性能密切相关,大多数系统解决的简单任务是困难任务的两到四倍——这里的明显异常值是Icecuber,它解决了160个困难任务。这可能部分归因于这样一个事实:Icecuber DSL是基于手工解决100个困难任务而构建的[8],这意味着开发者设计了这种语言在这些任务上表现良好。

总的来说,这些结果展示了两种有前景的使用神经网络进行抽象和推理的方法。我们强调需要多样化和互补的方法,当这些方法结合在一起时,可以实现卓越的性能。虽然Icecuber(当前最先进的技术,使用手工暴力搜索)在基于神经网络的解决方案上保持了领先地位,但我们大大缩小了差距。

5 讨论 5.1 概述在这项工作中,我们将现代机器学习的视角应用于人工智能中的一个试金石问题:寻找能够对抽象和推理任务进行广泛泛化的系统。总的来说,我们发现基于特定领域语言(DSL)搜索的复杂人工解决方案仍然提供了已知最好的单系统性能。然而,我们展示了两项有前景的基于机器学习的解决方案,为制造更强大的学习机器提供了一个具体的研究方向。

5.2 我们方法的局限性

我们的DreamCoder改编无法解决几种类型的ARC任务。例如,复制粘贴任务,依赖于将训练输出中的模式复制到测试输出中,无法解决。这是因为DreamCoder孤立地考虑每个输入/输出对,无法将对象从一个网格复制到另一个网格。填充任务可能可以通过专门的算法更有效地解决,该算法试图识别填充缺失像素所需的平铺或对称模式。

我们使大型语言模型适应ARC的方法也是探索性的,使用不同的模型、不同的提示技术(例如,允许LLM解决比其上下文窗口更大的问题)或将机械推理与LLM相结合的系统可能会带来显著的收益。我们在下一节讨论一些途径。

5.3 未来工作关于计算抽象和推理的研究还远未完成,因此我们考虑了一些由我们的结论所建议的未来方向。• 虽然我们提高了DreamCoder的准确性,但它仍然远远落后于手工制作的Icecuber DSL搜索[8]。一种未来的方法是将DreamCoder与Icecuber的独特功能相结合,例如颜色标准化,特别是贪婪堆叠器,它从输出网格向后结合中间解决方案。执行引导的程序综合将是实现类似效果的一种方法,其中中间解决方案根据它们与最终输出的相似性进行评分,并用于指导搜索,取代全有或全无的评估。• 有几个研究途径可以提高LLM的性能。我们只评估了LLM的上下文学习性能;低秩自适应微调(LoRA)[54]等进步可以进一步预处理具有ARC先验的模型。此外,思维链提示,即首先要求LLM解释训练示例,然后再将其应用于测试示例,也可能提高性能[55]。• 已经对大型视觉模型进行了早期实验[51],这表明视觉数据集足以训练具有可用于ARC的新兴推理能力的模型。虽然这些模型值得研究,但挑战可能包括对像素完美输出的需求以及收集合适的训练数据混合。• Chollet和Lab42正在开发ARC2数据集[56],目标是众包5000个任务。ARC2的目标是更加多样化,“没有特定的任务类型被重复使用超过一次”。这可能会使ARC变得更加困难,需要更强的泛化能力。

https://github.com/mxbi/dreamcoder-arc

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档