ArcGIS 基准测试,即抽象和弹性语料库 (Abstraction and Resilience Corpus),是一个程序合成基准测试,其目标是评估 AI 系统当前如何适应新颖性。如果我们知道测试集中任务的分布类型,并且你可以在其上微调大型语言模型 (LLM),那么你就能解决它。转换任务的问题在于,没有一个潜在空间点对应于你的转换任务,因为根据定义,这里不需要归纳。
它们在指数上不具有创造性。因此,你需要指数级更多的样本才能使它们具有创造性。我解决一个任务,在一秒钟的十分之一时间内对任务可能是什么样子有一些直觉。我很快就能看到结构,看到规律性。然后我意识到,哦,不,这不像看起来那么容易。直觉发生在大角度模型中,它们具有这种非常
错综复杂的,你知道,非常虚假的高维向量函数,可以以某种狭窄的方式重新组合。我非常相信寻找能够解释你的输出的小型表示。现在,你如何构建这些空间?你如何搜索它们?我的真名是克莱门特·博内 (Clement Bonnet),我叫克莱姆 (Clem)。
所以,克莱门特 (Clement),克莱姆 (Clem),博内 (Bonnet),无论哪个对你来说更容易。克莱姆 (Clem),欢迎来到 MLST。很高兴你来到这里。非常感谢你邀请我。我一直在阅读你的论文,Cholet 昨天告诉我,这是他对 Arc 挑战最喜欢的方案之一。你能告诉听众你的方案吗?ArcAGM 基准测试,即抽象和弹性语料库 (Abstraction and Resilience Corpus),是一个程序合成基准测试,其目标是评估
AI 系统如何在测试时适应新颖性。这是一个非常有趣的基准测试,因为预训练的 LLM 在其上的表现非常差,因为在测试时看到的任务与它们的训练集非常不同。因此,我们对这个我将要介绍的架构的全部假设是,在架构中构建搜索,以便你将在测试时进行搜索。
我们这样做的方法是将程序嵌入到我们训练的潜在空间中,以便在其中进行良好的搜索。
Tufalabs 是一个新的 AI 研究实验室。我正在苏黎世启动它。它由 PASS Ventures 资助,也涉及 AI。所以我们是 DeepSeq 的瑞士版本。一小群人,非常非常有动力,非常努力工作。我们尝试进行一些 AI 研究,从 LLM 和 O1 风格的模型开始。我们现在正在寻找首席科学家和研究工程师。你可以在 tufalabs.ai 上查看职位。
Arc 挑战有很多方法。即使追溯到 Dreamcoder 的时代,也有 Kevin Ellis,他拥有这个 DSL。也许甚至在那之前,我们只需搜索一个 DSL,这需要指数时间。Ellis 进行了神经引导搜索,我们训练了一个神经网络。而如今,每个人都在采用这种 Greenblatt 方法,你只需
你只需让 LLM 生成程序,而你的方法与所有其他类型的测试时自适应完全不同。你就像……
你将程序嵌入到潜在空间中,然后搜索该潜在空间,而你实际上并没有创建程序,而是直接生成解决方案。-是的,完全正确。所以我们真正的假设是,我们想在此时进行搜索,并且想在程序空间中进行搜索。为了有效地做到这一点,我们尝试嵌入,你知道,
商业上难以处理的程序到一个连续的潜在空间中,然后我们可以使用任何我们想要的搜索方法来搜索它。因此,通过将程序的流形学习到单个连贯的潜在空间中,我们允许高效的测试时自适应。有很多方法。性能最佳的方法是使用测试时训练。
这是在给定新的测试输入的情况下进行参数高效微调。你在参数空间中搜索能够在你的测试输入上更好地执行的参数。这是一种非常有效的方法,可以在测试时进行这种重组合成。我们认为这是一种非常低效的方法。
因为参数空间巨大,并且并非显而易见的是你可以以组合的方式重新组合低级原语。
所以,我的意思是,是的,这些方法能否解决 Arc AGI 还有待观察。但我们相信,通过将程序嵌入到更连贯和压缩的表示中,我们可以进行更容易、更高效的搜索。也许值得花一秒钟的时间思考一下为什么 Arc 挑战对神经网络如此具有抵抗力。我的意思是,Cholet 想让它成为那样。这是为什么呢?哦,Cholet 设计它是为了……
对记忆具有鲁棒性。它对记忆具有鲁棒性的原因是,输入输出任务与训练分布中看到的任何内容都大相径庭。可以肯定的是,它们在互联网上任何地方都不存在。这是一个私有的测试集,你知道,完全保密。
因此,有人认为任务相似度不够高,无法让 LLM 进行少样本泛化。不过,我只想再深入一点。我们在这个对话中刚刚说过的许多句子在互联网上也不存在。那么这与 ARC 程序有什么区别呢?
我相信我们的讨论可以嵌入到一个相当小的潜在空间中,LLM 已经学会了实际模拟并以某种方式组合。ArcGIS 任务的
确实是新颖的。它们仅基于核心人类知识先验,但它们以任意方式组合这些先验,我相信这些先验在互联网上任何地方都不存在,并且预训练的大规模模型无法理解。否则,你会得到零样本泛化,而我们没有。这是一件有趣的事情,值得我们细细品味。
你是说神经网络无法学习 ARC 的原因仅仅是因为互联网上没有大量的类似 ARC 的数据吗?因为我认为在某些时候人们可能认为 ARC 本身存在一些内在的东西,你知道,因为它是一个离散的
程序,你知道,分布或其他什么,它,你知道,神经网络无法学习它,但你说它们可以学习它。只是因为那里没有数据。如果我们知道测试集中任务的分布类型,并且你,你知道,在其上微调 LLM,如果你在包含测试集数据的分布上发现任何转换的、任何神经网络架构,你就能解决它。这是机器学习训练,但我们无法解决的原因是,我们无法
我们无法解决这个测试任务,是因为测试分布与训练解决方案相差甚远。因此,它无法进行极端泛化,并尝试提出这种真正新颖的知识组合方式来执行任务。
MLST 由 Sentinel 赞助,Sentinel 是一个专门针对 AI 工作负载优化的计算平台。它们开箱即用地支持所有最新的开源语言模型,例如 Lama。你可以按需付费,或者你可以拥有一个始终运行的模型,或者在你不用时可以冷冻它。
他们部署的所有模型都开箱即用地支持 OpenAI API 规范,这意味着只需更改应用程序中的一行代码即可切换到 Sentinel,开始节省资金并使你的应用程序运行得更快。这引出了下一个有趣的部分。所以我想几年前如果你问我原则上是否可能学习 ARC,我可能会说不行,因为
许多人,例如 Kevin Ellis,他喜欢生成程序的想法,这就是 Greenblatt 所做的。我们直觉上认为我们应该生成一个程序,因为当它在计算机上运行时,程序可以进行这种组合性和各种形式的泛化等等。所以直觉上,我们认为如果我们不通过程序中介直接生成答案,那么它就不会那么好。但事实并非如此吗?
所以我假设你指的是进行转换与归纳。所以通过压缩程序旋转,这将是基于归纳的,而不是直接尝试预测答案。是的,也许我们应该定义归纳和转换,因为我认为甚至在你开始转换之前……
你可以训练一个神经网络直接生成解决方案?是的。甚至不使用转换?如果你直接从读取输入来预测输出数据,那将是使用转换。对我来说,我将转换定义为直接从数据生成预测,而不是关于使用解决方案空间的陈述。
例如,Jonas Hobbiter 的东西是转换,因为给定一些输入示例,他进行一些检索,然后微调模型,然后进行预测。所以他为接收到的每个数据都构建了一个新模型。
但我们可以构建一个巨大的神经网络,直接预测解决方案空间,这仍然是一个归纳模型。-是的,我认为这就是归纳和转换之间的细微差别所在。此外,你还有核技巧,它可以将任何归纳方法转换为转换方法。
我不知道归纳和转换之间的区别是否真的重要。我认为对我来说重要的是你是否压缩了报告站。因此,显然,当你有一个归纳方法提出时,无论是模式程序还是某种潜在程序,一个应该模拟你的输出的小型报告站。我会称之为归纳方法,因为存在这种报告压缩瓶颈。
如果你不尝试这样做,如果你尝试对转换测试时训练进行某种浅层重组,那么我会将其归入转换方法组。对我来说,这都是关于压缩的。
因为压缩允许你进行更有效的搜索。在架构中,我们构建了程序的这种非常压缩的表示,我们可以在其中有效地进行搜索。我相信当你使用方法生成 Python 程序时,我相信这些方法与生成非常压缩的 L 位 Python 程序非常相似,该程序可以生成输出。我本来想问你为什么核方法不是
线性回归的目标是提出这个线性函数,它最能解释你的数据。然后,一旦你有了这个函数,你就可以使用新的输入输出对、新的输入来进行推理。当你求解 y=ax 形状的线性回归时,
你有一个 xt、xt、某些东西形式的解。因此,你可以通过简单的矩阵相乘来将输出实际写成训练数据和你的新输入的纯函数。我认为这是核技巧的一种表示。虽然你具有这种非常低的表示
函数,在这里是线性函数,但你实际上可以将整个内容重写为一次计算。你可以,但核矩阵就像,你知道,训练数据,它基本上是数据的内积,给你这个正半定矩阵。那么这不是归纳函数吗?是的。所以它本质上就像说擦除所有效应,然后,你知道,如果你写出来,就像,
它展开你拥有的任何计算图,那么整个东西就像一张图表。我认为这就是转换和归纳之间等价性的体现,至少在我看来是这样。这就是为什么我认为这在这里不是一个非常有用的区别。我不知道。我真的很喜欢这种区别。对我来说,这是关于从数据中创建模型,而不是重用我现有的模型……例如,我们可以使你的模型具有转换性
如果我们根据数据的某些增强来微调编码器。但我认为你的系统现在不是归纳的,因为我们正在通过模型进行某种梯度优化,但我们没有改变模型,因此它是归纳的。-是的,我们没有改变模型,这就是重点。尽管我认为,所以我们的潜在程序网络 (LPN) 搜索,
实际上我认为它符合测试时训练方法的范围。如果你将潜在空间视为已知的输入条件参数空间,那么我们正在训练这个空间,你知道,我们正在使用零阶或一阶优化方法搜索这个空间,以找到你的数据的更好解释,它与你在测试时搜索参数空间进行参数微调非常相似
在测试时。所以我认为它们属于同一范围。我很想探索测试时这种自适应尽可能高效的方法,如果我们想创建在线非常高效地自适应的系统。
所以我真的很喜欢 SAM 训练。我认为这可能是一种非常次优的方法,在广阔的参数空间中进行搜索。你能向我介绍一下架构吗?正如我所说,我们想将程序嵌入到潜在空间中。为此,我们首先有一个编码器,它独立地获取输入输出对,然后将它们嵌入到类似于 VAE 架构的程序中,实际上是一个变分自动编码器 (VAE)。
但是如果你仔细想想,输入输出实际上可以用无限多个程序来解释,对吧,具有不同的描述长度或复杂性。所以我们想找到一个最小描述长度的程序。但是,由于你可以用无限数量的程序来解释输入输出对,因此我们使用变分框架。所以我们将这些程序编码成一个分布,实际上是书面程序的分布。所以我们将这些输入输出对嵌入到程序分布中。
然后我们在中间有一个搜索组件,我稍后会解释。然后,一旦,这都是为了改进这个延迟,使其更好一些。然后,一旦你有了更好的延迟,你就可以用你的解码器来解码它。
所以你的解码器实际上会接收一个新的输入,它会接收这个潜在程序,然后为它生成一个输出,所以它实际上是在应用一个程序,所以我在此处说程序,但我指的是几何空间中的潜在向量,并且……并且这个……所以我认为这个架构的真正新颖之处在于这个中间阶段
以及它的工作方式,我们期望编码器实际输出程序看起来像什么的第一个猜测,有点像人类在解决 Arc 任务时的直觉,哦,我相信这里有一些关于形状的东西,就像我们应该移动它们,以便你知道,这是一个初步猜测,然后我们使用优化方法来细化这个潜在变量,以找到……
实际上是潜在空间中不同的点,在你的潜在程序空间中,这将更好地解释你的数据。因此,你有了这种内部循环,使用解码器和输入输出对,即你的规范,来细化,找到潜在空间中更好的潜在变量,这实际上对于你的输入输出对中的每一个,都会生成正确的输出。
一旦你找到了潜在空间中更远的一个点,它能更好地解释这些输入输出对,你就会相当有信心可以将其应用于你的新测试输入。我认为这就是归纳部分的体现,因为我们真的试图找到这个小型远程站,小型潜在程序,来解释你的整个任务。
Arc 通常包含大约三个……当我们说规范时,我们的意思是……你会得到一些输入示例对,你可以将它们全部通过编码器,编码器会在潜在空间中给你三个不同的点,你将它们平均在一起,然后执行一些梯度步骤来改进
潜在变量到一个你能为所有三个示例获得良好解决方案的点,诸如此类。是的,是的,就是这样。所以我们必须找到一种方法来重新组合这些不同输入输出对的不同潜在分布。理想情况下,每个输入输出对实际上应该通过编码器生成大致相似的潜在分布,因为它们实际上对应于相同的内在任务。
所以这样做的普通方法是实际计算潜在空间中的均值,然后将其用作搜索的起点。我相信有更好的方法可以做到这一点。我们可以将整个聚合视为分布的混合,可能就像,我不知道,也许用一个小温度进行采样或其他什么。我相信有更好的方法来聚合这些类型的分布,你知道,首先
我们所做的概念验证是这种均值聚合,它最终运行得相当好。所以这个架构的好处在于它是使用 VARCHAL VAE 损失(即 ELBO 损失)端到端训练的。这意味着它分解为两项,重构损失。所以给定一个经过细化的潜在程序,尝试根据规范中的所有其他输入输出对来重现你的输入输出对。
所以你有一个重构损失,然后你有一个先验损失。确保你的潜在空间看起来大致是高斯的。这是来自 VAE 的经典先验损失,它实际上鼓励潜在空间具有非常结构化的特性。
我们确实尝试过没有 VA 框架,所以是纯自动编码框架。对潜在空间应该是什么样子没有先验。我们最终得到了非常无结构的、尖锐的空间,其中大多数程序倾向于彼此尽可能远离,使得搜索变得不可能,并且使整个潜在空间变得相当无用。所以我认为它的变分方面非常重要。
试图保持程序空间的高斯压缩表示。是的,我们应该详细讨论一下。所以我们想要一个不会退化并且不会记住解决方案的良好空间。我认为你还使用了 KL 散度。在这里稍微阅读一下你的论文。所以你说你想防止直接在潜在空间中编码输出。所以你将输入输出对编码到潜在空间中,但是训练这种表示来解码不同输入输出的输出
对以防止记忆。这是你使用的一个技巧。是的,实际上这并不是一个技巧。所以对于大多数这些潜在空间的想法,通常当它们不
在像 Arc 这样的程序敏感基准上执行它们时。通常存在这个问题,你想要学习输入/输出空间的压缩旋转,然后尝试解码它。但显而易见的是,你实际上最终可能会压缩你的输出到你的空间中。你会将你的输出泄漏到该空间中,因此更容易重构。这将是 ML 训练会导致的捷径。
它将非常无用,因为你不会学习任何将输入与输出连接起来的东西。你只会学习将输出映射到潜在空间。我们处理这个问题的方法是,我们在训练期间考虑使用与测试期间非常相似的设置。
也就是说,我们可以访问 n 个输入输出对,并且我们想要预测 n+1 个输出,所以实际上在训练期间,如果我们有……如果我们假设每个输入输出对有 n 个输入输出对,我们将……将 n-1 个其他对嵌入到潜在空间中以预测该对,并且
并对所有对并行执行此操作。非常酷。现在,你使用的另一个好技巧是,你实际上执行梯度步骤,所以在训练过程中进行搜索步骤,因为它实际上使最终的潜在空间在推理时更容易搜索。这是你直觉上想到的事情,还是你这样做是为了帮助它,因为它不起作用?
我们一直想使用搜索进行训练。我们想要这样做的原因是
如果你在训练期间仔细想想,你的编码器会,即使在训练结束时,你的编码器也不是完美的。整个假设是它提供了一个,你知道,对任务是什么的最佳猜测。因此,如果你不允许改进这个猜测,那么解码器可以与编码器的猜测一样好。所以你最终得到了一个潜在空间。好吧,你最终会得到一个潜在空间,它不能真正编码许多程序。
它只会编码对编码器最佳猜测分布的回归。所以我们最终做的是,我们实际上在训练期间激活了这种搜索方法。这在训练时带来了很大的开销。因此,我们实际上提出了一种无需它进行预训练,然后用它进行微调的方法。
但这并不重要。重点是你,通过在训练期间打开它,使用某种随机局部搜索或梯度上升一阶优化搜索,我们训练潜在空间使其擅长被搜索。所以最佳猜测最终实际上相当糟糕,但非常接近非常好的猜测。这是像 MAML 这样的元学习方法背后的全部意义。
定性地告诉我一下潜在空间。所以你看过了。你是否发现不同的方向对应于不同类型的 Arc 问题或其他什么?你看到了什么?我们还没有通过比较不同的 Arc 任务来对潜在空间进行太多分析。我认为这是一件非常有趣的事情。我认为在论文中,我们确实提出了一种关于学习的不同程序的 TSA 新分区图。
我们,所以在训练期间,我们确实看到了这种类型的斑点,就像所有,所以所有没有被解码器或编码器很好地理解的输入输出对,最终都落入这种类型的包中,你知道,未学习的程序和开始学习的程序开始像,你知道,聚类,并且,好吧。
占据空间。所以我们最近对 Arc 的这个架构进行了扩展。我们得到了一些非零但非最先进的结果。我认为这很有趣,因为尽管我们没有获得非常非常高的性能,但我们确实在没有任何先验的情况下获得了它,也就是说,没有使用任何预训练的 LLM,没有查看评估集或其他任何东西,只是在 400 个训练测试分布上进行训练。
所以在评估集上获得大约 10% 的结果,这本身实际上是一个更难的任务分布,我认为从我们最初的缩放曲线来看,这是相当令人印象深刻的。
你能更详细地解释一下吗?所以你有一个编码器和一个解码器,它们是 Transformer 模型。你有没有,是 Michael Hoddle 的 re-arc 任务吗?它们是什么类型的 Transformer,你做了什么类型的训练?是的,LPN 架构假设这个编码器和解码器弧形模块。为了训练这个架构和弧形,我们确实从头开始使用了普通的 Transformer 来编码输入输出网格。
所以实际上你可以使用任何生成的模型,任何序列模型。
我们决定使用自注意力 Transformer 将输入输出网格展平成 900 个值的序列,因为这些都是 30x30 网格。我们使用某种粗略的智能 2D 位置编码来理解空间结构,但这大致就是这样。然后我们训练了相当小的 Transformer,我认为它们每个大约有 2000 万个参数,
总共大约 4000 万个参数,用于编码,然后自回归地生成这些输入输出对。我们没有对架构进行太多调整。我们必须在位置编码方面做一些事情才能理解。但除此之外,这是一个非常普通的 Transformer,非常普通的架构。我们真的专注于尝试获得
一个良好的程序潜在空间,以及如何在训练期间和测试时有效地搜索它。我们首先尝试了 Transformer 架构,我们想,好吧,我们可以开始了。让我们专注于我们认为有趣的东西。这让我大吃一惊,因为大多数使用 Transformer 的人都对其进行了微调。
他们采用在互联网数据上进行过训练的 Transformer,并对其进行微调。我想这样做的直觉是,我们被告知训练 Transformer 非常困难,只有在你用大量数据训练它们很长时间后,它们才会开始做一些好事。所以你从头开始。我认为你说你甚至没有用 Michael Hoddle 的 RE-ARC 数据集将其训练到收敛。所以几乎什么都没有,它仍然运行得相当好。是的。我们训练的重点是
将这 400 个训练任务学习到你的潜在空间中。如果我们以相当结构化的方式这样做,那么我们希望通过在此时搜索时对这个潜在空间进行插值,例如,给出一个新的输入输出对,给出一个新的任务,那么你将找到在训练期间没有看到但代表某种插值的程序,
可能是训练期间看到的程序的叠加。在来自单个程序的单个输入输出对上找到一个 Transformer 是一个非常糟糕的主意。Transformer 没有足够的数据来理解,你知道,位置、相对位置等等。
所以我们使用了 Michael Hoddle 的非常有用的 react 转换库。Michael Hoddle 创建的数据只是……对于这 400 个任务中的每一个,它都是遵循该程序的输入输出对的分布。
所以程序是恒定的,所以我们提取的信息不多。实际上,程序是恒定的。只是输入分布现在是一个相当广泛的分布,而不是单个输入。因此,这允许训练 Transformer 以它们从头开始初始化时无法理解的方式理解 2D 网格。我们确实展示了一些关于
re:ARC 的训练曲线。我们实际上没有足够的计算能力来训练到收敛,但我们展示了训练集上准确率的一些提高。我们确实相信架构中存在一些瓶颈,这些瓶颈使学习非常缓慢或不会收敛到 100%。所以是的,我们正在解决这个问题。
在这个 RE-ARC 数据集中,所以用 Michael 做的数据集生成扩充的 400 个任务,你有多少个程序示例?
大约有一亿个数据点。哦,那很多吗?很多。是的。我们确实对这些程序进行了大量采样。我认为 Transformer 真的不擅长理解随机像素序列,就像它们从头开始训练时一样,当然。这就是为什么我们真的必须进行这种密集的训练,以理解这些输入输出网格,这是一件有点愚蠢的事情,但我们相信 RKGI 实际上,正如 François Souleil 所说,是一个开发人员感知的。
基准测试。因此,我们真的希望互联网上没有任何人的先验知识。所以不要使用任何预训练的LLM,而是在非常少量的数据上训练架构,这些数据对任务很重要。re:Arc数据集生成器难道不是一个先验吗?就像一个相当大的……我的意思是,对我来说,这会使开发人员感知的泛化失效。re:Arc中包含的先验
都是关于当您实际上有一对具有两个对象的输入输出时,而您可以用三个对象拥有相同的输入输出。例如,您具有计数的先验。我相信在这个任务中,您还有其他关于客观性的先验等等。对我们来说,在RearCAD中使用的先验非常有助于教会transformer如何理解二维网格,因为二维网格空间非常大。每个网格都是10的900次方。
显然,大多数这些10的900次方的网格没有任何意义。它们有点像白噪声。我们使用这种分布将一些人类先验融入架构中。
我相信这符合开发人员感知的泛化假设。是的,我们可以就此进行辩论。它如何泛化到不同的网格大小?我的意思是,当然你使用的是Transformer,所以你只是把它转换成一个序列,对吧?但是你有没有注意到任何奇怪的序列大小过拟合现象?没有。我们处理形状的方式非常简单。我们实际上首先预测形状。
比如说你有一个10×10、10×11的网格。我们实际上预测它将是10行,11列。然后我们有900个标记对应于填充的30×30网格,其中大部分实际上是填充的,并且忽略了transformer。但因此我们最终得到每个网格实际上有902个标记值的序列。这就是我们预测形状的方式。是的,我认为很多……
关于如何优化这一点的内容。我们认为这不是最佳方法,但对于Arc来说可能足够了,或者鉴于您有大量数据可供训练,也足够了。是的,我认为这可能是一个例子,说明为什么生成显式的Python程序可能更好,因为它可以泛化到不同的网格大小。绝对的。因此,Python程序,基于程序,由解释器执行。
将理解所有未包含在随机初始化的transformer中的这些先验。所以是的,我的意思是,我相信真正的程序也是一种非常聪明的归纳方法,可以压缩你的旋转。当然,程序搜索的一个问题是组合
扩展,搜索程序空间的组合爆炸。因此,我们真的试图通过学习我们希望更容易搜索的程序流形来压缩它。但显然,这有一些警告,并且你可能无法将所有程序表示到这个潜在空间中。所以是的,我认为有一些有趣的方法可以尝试考虑结合这两种想法。
但我相信程序搜索和潜在程序搜索各有优缺点。是的,我只是在回想几年前我第一次采访Chole时的情景。他总是说有两类问题,第二类问题不是内插的。但我们认为这实际上是内插的。所以我们有这个潜在空间,它包含所有这些模式,我们在测试时进行计算。我们进行的测试时间计算越多,结果越好。
目前,如果我理解正确的话,你使用的是某种一阶梯度搜索。
首先,向我解释一下。你在推理时进行更多搜索,你会得到更好的结果。是的,但在那之前,我相信第二类问题不适用于我们的方法。所以我相信学习连续潜在空间的一个很大的局限性是,你实际上无法在其中拟合任意复杂的交换子问题,对不起,程序。我认为你可以做一些像程序叠加之类的事情,但我认为你不能做程序组合。
这显然是我们正在尝试作为后续工作进行研究的。所以是的,我相信你将无法通过搜索这个潜在空间来获得组合。我认为你可以得到一些组合,比如可能只是几步组合,但归根结底这是一个固定的连续潜在空间,所以不清楚你是否真的可以用它来组合对象。
现在,回到搜索——好吧,在我们开始之前,你确实触及了一个有趣的点。这关系到问题的核心。像Gary Marcus和Sholay直觉到的那样,缺乏组合性。你说,“好吧,潜在空间中没有组合性,但我们实际上可以提出某种
一种组合推理时间方法,为我们提供组合性。所以如果你仔细想想,我们可以通过潜在空间进行多线程搜索,我们可以有一些系统二程序将这些东西组合在一起,我们可以得到组合性,但仍然可以使用你的方法。你说的意思是不是这样?我认为这是一个有前景的方法,一种有前景的思考方式。我相信在这个单一潜在空间中进行单线程搜索永远不会给你带来组合。
但正如你所说,像拥有多个线程,或者同时发生某种多件事,然后合成,可能是一种获得组合的方法。所以我认为我们想做的是一个概念验证,看看如何将尽可能多的程序拟合到Slaydon空间中。我认为现在它为进一步扩展打开了大量可能性。然后我们有这个问题
如果我们生成符号程序,感觉我们可以将它们组合在一起。例如,我们可以学习一些迭代步骤或函数,这些步骤或函数只是组合在一起。而在这里,我们直接得到解决方案预测。所以现在假设……
我找到了三个解决方案,它们代表某种需要组合在一起的三种不同类型的转换。所以现在我们需要一个函数,它可以以某种方式将这三个解决方案组合在一起。是的,所以我认为你需要某种
一个展开的计算图。所以我认为你不能轻易地查看这三个解决方案并一次性合成它们。直觉上,这等同于实际上只有一个更好的线程或类似的东西。
所以如果你想尝试探索你空间的不同区域,然后尝试将它们组合起来,你可能需要进行多次前向传播或类似的操作。所以也许一个线程给你某种原始程序,然后你将第二个线程应用于第一个原始程序的输出,依此类推。通过这种方式,你将得到一个递归展开的计算图。
我的意思是,是的,我认为这取决于,这是一个研究问题,如何考虑这些事情。是的,或者如何训练这将是困难的。甚至可能像你可以有一个中间阶段,解码器可以接收多个输入,它可以学习将它们组合到一个固定的深度,因为,你知道,像语言一样,
它实际上并不是那么具有组合性,你知道,我们只在某些语言中使用深度,但不用深度,但你知道英语的深度最多是三到四或五,所以你可能会发现我们想要解决的大多数口语Arc问题都具有固定的深度,我们可以以某种方式将其编码到神经网络中,是的,实际上,使用蛮力程序搜索的Arc解决方案的深度从一到
通常是12、15,有时甚至高达50。但对于大多数任务来说,实际上你可以使用相当短的长度来解决它们。所以是的,非常……是的。我们是务实的人。我喜欢关于组合性和符号AI等的理论论证。但在现实世界中,我们实际上并不需要这种无限的……
回到搜索方法,我们的假设是,在你的潜在空间中存在一个比你的第一个猜测更好的潜在程序。问题是,你如何找到那个程序?
所以这只是一个问题,现在是一个搜索问题。我们实际上尝试了两件事。我们尝试了一种零阶随机搜索,你知道,对你的第一个程序进行局部搜索。然后我们意识到,在训练过程中学习到的潜在空间本身最终非常平滑。所以当我说平滑时,它是关于解码正确输入的解码器似然的平滑。
所以你想最大化获取正确输出的可能性。所以这个潜在空间最终非常平滑,这使我们能够使用一阶方法。但我相信,你知道,对于不同的任务,或者如果我们训练更长时间,你可能会有一些更大的差异,并且,你知道,在这个空间中有一些局部最优解。
这可能会带来诸如进化策略、零阶方法,或者两者结合的方法。但对于我们的用例来说,使用梯度下降效果非常好。我认为这不是最好的方法,但是。好的。所以目前,它相当平滑。它非常适合简单的梯度上升方法或其他方法。这都很酷。
关于它的弹性,我不知道你是否尝试过输入噪声,或者另一件事是你可以几乎对架构进行欠训练,但你知道,进行更多搜索。你是否探索过这种关系?所以我们没有尝试过,你知道,加入噪声并自讨苦吃。也许我们应该,但我们确实尝试过扫描架构大小。
所以很明显,如果你的transformer太小,那么当然它们无法很好地表示你的输出,它们无法很好地解码你的输出。所以是的,有一个,有一个
存在一种权衡,或者至少它会随着架构大小和潜在空间大小而变化,所以是的,我们确实看到,当架构大小太小时,你甚至无法很好地理解序列,因此无论你的搜索空间有多大,你都无法很好地解码你的程序,所以我们需要在训练这个架构时,没有足够的调整要做,但我们需要确保解码器
你知道,解码器的容量足够高,这样你的潜在空间就足够大,这样潜在空间中就存在一个点,它对应于正确的程序。并且给定该点,你具有执行该程序的足够能力。
这在使用Python程序时并非如此,你可以确定你的解释器会很好地执行它,你只需要找到它,所以是的,你在这里有这个像秒一样的约束,确保解码器可以学习该程序,我们实际上有一些初步结果,实际上没有在论文中,但表明
解码器实际上能否学习所有任务并不明显。还有一篇论文提到了这个问题。所以它归结于你在架构中拟合了多少关于二维空间表示等的先验。所以是的,这是一个权衡,你想花多少时间优化你的架构来解决特定的基准测试,以及你想花多少时间来
改进方法本身,即像搜索潜在程序一样。非常酷。所以Ellis和Wending刚刚发布了这篇论文,有点像比较归纳和转导,他们采用了这种集成方法,他们同时做了这两件事。他们有一个漂亮的维恩图,显示有时使用Python程序进行归纳效果非常好,有时解决方案空间效果非常好。你是否对哪些类型的Arc
你知道,任务在你的系统上运行良好,哪些任务运行不佳进行了分析。是的,我们对此没有非常强烈的分析,但从我们所看到的来看,大多数未学习的程序包对应于转导任务。所以我认为这与他们的论文非常一致。
这是一篇很好的论文,突出了这一点。实际上,当它出来的时候,可能是在ARC奖截止日期前的一周左右,我们想,哦,这实际上就是正在发生的事情。我们难以学习这个转导任务。是的,我认为有一些明显的方法可以
将这种集成技术也用于架构或其他架构。转导任务的问题在于,潜在空间中没有点对应于你的转导任务,因为根据定义,那里不需要归纳。所以这一切都在解码器中。
我认为有一些方法可以帮助解码器做到这一点。我们只是试图尽可能保持基准无关性,尽量不过度适应ARK。但我认为有一些明显的方法可以改进。你有没有一个故事,你有点像,
你不是符号主义者。我一直是一个联结主义者,我最近才开始尝试改进联结主义架构来解决这个问题,也许是1%,10%的任务,人们现在非常关注推理、搜索。我相信在未来,你知道,也许大多数任务都可以通过一次性深度学习架构(如LLM)来解决,但实际上一些困难的,比如最后一英里困难的,比如1%的任务
需要一些不同的东西。所以是的,我坚信深度学习和程序合成应该合并起来才能完成最后1%的任务。所以你不同意这种观点,即这些东西比我们聪明,我们只需要让它去做就行了?我认为我们无法理解任意组合的符号序列。
所以这就是联结主义非常有用的地方,因为我们试图学习复杂性的流形。我认为它可以带你走得很远,但只能带你走这么远。
这就是我的意思,我认为深度学习架构可以解决大约90%、99%的任务,但还有一些任务本质上可能是离散的,或者需要长期规划和推理的任务,我们现在正在尝试用LLM和其他深度学习架构来解决这些任务,但实际上是最近才开始的。我相信其他架构可以更有效地做到这一点。
我认为这也与创造力有关。我相信深度学习模型不是高度创造性的。
我不会说它们没有创造力,因为,好吧,正如你从回到Arc可以看出的一样,像Ryan Greenblatt的解决方案一样,对大量程序进行采样,并且随着你采样越来越多的程序,你会看到这种对数缩放曲线。好吧,这意味着,如果你绘制LLM输出代码的可能程序分布图,那么你就会有一些非零质量
在非常有创意和好的解决方案上具有长尾。只有当你采样一百万次时,你才能得到这些解决方案。所以这样,我不能说它们没有创造力,因为,好吧,如果你采样足够高,它们就会创造这些东西。但我相信它们在指数上不是创造性的。所以你需要指数级更多的样本才能使它们具有创造力。
我认为这就是符号可能通过进行符号程序合成或我们所说的程序(可能只是符号序列)来帮助解决创造力问题的地方。我们可以通过非常容易地进入一个完全新颖的交换空间来解决这个问题,而你实际上无法跟踪,你无法摊销。
并且你知道,对抗诸如进入计算不可约性之类的事情。所以是的,我认为程序合成可以帮助,符号可以帮助深度学习架构变得更有创造力。不知道这是否说得通。不,说得通。我对创造力非常感兴趣。我必须承认,我可能已经改变了我的立场,因为我采取了一种几乎是人类沙文主义的创造力方法,即你知道,在LLM中存在创造力差距,我们可以访问某种
LLM所不具备的创造力来源。我在欧洲采访的许多人都告诉我相反的情况。事实上,Sabaro Kambahati在6月份的ICML上说的是相反的。他说,不,不,不,这些东西非常有创造力。部分原因是创造力不仅仅是新颖性。它也关乎趣味性。它关乎我们根据我们的文化偏见和兴趣等发现有趣的事情。
所以它们似乎捕捉到了很多这样的东西。然后,好吧,你可以说,我们可以用Greenblatt的方法,是的,我们必须采样30000次才能得到一些有趣的东西。但这与我们有什么不同呢?就像我们是一个巨大的集体智慧,我们都在想出主意,大多数都是垃圾。每隔一段时间,我们就会有灵光一现。
也许我们是嵌入式的和情境化的,我们可以访问所有这些熵等等,但这真的有那么大的区别吗?是的,我认为关于集体智慧有一些需要说明的地方。我还没有过多地考虑集体智慧,所以Nacho可以对此发表很好的评论。但如果你专注于个体智力一秒钟,
很明显,你在试图解决Arc任务或试图想出一些有创意的东西时,不会在你的脑海中采样一百万个程序。你的大脑中发生着某种更高效的合成。
我认为我感兴趣的是试图更接近这种合成。现在,我相信有一些事情,你知道,关于集体智慧有很多有趣的事情要说,这带来了更多,你知道,熵和我们谈论的更多采样。是的,所以也许这两个学派,你知道,都可以取得有趣的突破。当你解决Arc挑战时,你是在发挥创造力吗?好吧,我这样想,当我解决,当我试图解决Arc任务时,
所以再一次,我对任务可能是什么样子有一些直觉,比如,你知道,十分之一秒。我很快就能看到结构,看到规律性。然后我意识到,哦,不,我的意思是,这并不像看起来那么容易。然后我试图弄清楚,我提出了一些假设。
也许两三个四个,然后我改进它们。然后第五个实际上是正确的。检查匹配所有规范,我只是应用它,然后就得到了。所以这可能是在一半的任务上。在另一半的任务上,我需要更多的时间,但这就是想法。我相信我们有这种类似的
一些内省,一些我们提出的假设,这些假设在某种程度上似乎很有创意,它们彼此可能大相径庭,我觉得它们会以一种相当组合和组合的方式重新组合先验。
我的意思是,我需要谦虚地看待我如何解决这个问题,因为许多人实际上都在努力解决这个问题。但我认为这是提出一些假设、测试它们,而不是提出一百万个假设的想法。那么,你如何以一种有效的方式缩小这个搜索空间呢?人类认知中可能还有更多的东西。我认为获得这一点至少是一个很好的近似值。如果我们极度地扩展你的解决方案,对吧?更多训练数据,更大的模型等等。
我们训练的时间更长,你认为会发生什么?所以我认为它可以扩展很多,特别是如果我们扩展潜在空间。我相信这将是非常……所以我认为一个限制是你实际上可以在该空间中搜索多少。我希望这个空间实际上不是那么线性,不是那么内插,不是那么平滑。
所以如果你最终扩展任务和问题,是的,我最终会发现这个空间实际上更难搜索。所以这将取决于你在训练期间可以进行多少搜索。你可能需要扩展它,保持这个架构中的所有内容不变。所以我认为扩展起来实际上会相当昂贵。
编码器解码器和潜在空间以及在这个潜在空间中的搜索。所以我认为我们可以对这个想法进行更好的迭代。我相信提出,你知道,任何任务,任何查询的简短表示,
可能是一种非常有用的合成方法,可以适应处理认知不确定性。我不相信我们目前可以估计认知不确定性,但我认为搜索这个空间可以帮助解决一些不确定性。这非常有见地。所以你说当我们真正扩展它时,潜在空间可能会变得不那么具有解释性。
我们可以进行元优化吗?我们可以拥有不同类型的潜在空间吗?只是在这里随意猜测,但某种拓扑空间或某种图表示或我们还可以做什么?我认为这不仅仅是扩展空间的潜在维度,这在大型语言模型中一直如此。我认为根据我的直觉,大型语言模型中发生的事情是,它们具有这些非常复杂、非常虚假、高维的向量函数,可以以某种狭窄的方式重新组合。它非常有用,但它非常局部。你试图在局部找到一个稍微好一点的抽象。
我认为它不会给你关于组合和自动分布泛化的所有这些东西。所以是的,我非常相信尝试找到可以解释你的输出的小型表示。所以对于自然语言来说,将是一个查询,然后是查询的答案。
现在,你如何构建这些空间?你如何搜索它们?我认为这些都是悬而未决的问题。我最近看到很多人对这个方向感兴趣,所以这非常令人兴奋。是的,太棒了。好吧,祝贺你的工作以及Cholet对你的认可。完全空白的石板,不像任何其他方法。确实非常有趣。所以是的,继续努力,感谢你来到这里。非常感谢,Tim。感谢你的邀请。