← 文章 / AI技术
Hacker News 5小时前 · 2026-09-01 20:42:43 · 3 阅读

仅花67美分,ARC-AGI-1达到44%

我在一块 5090 上花了 1.5 小时,从零训练了一个小型 Transformer
性能超过许多 LLM,与 TRM/HRM 持平

这是对我之前模型的升级版
速度更快、效果更好、成本更低,而且依然开源。

在 ARC-2 上也取得了 7% 的成绩

Twitter 讨论GitHub 代码

ARC-1 Public Eval
ARC-1 公共评测集上的表现。我只与采用类似测试时训练方法的模型进行比较

这是 ARC-AGI 系列研究的第 3 篇博客。上一篇:博客 2博客 1

很多人认为上一篇的结果不可能实现。它得到了顶尖研究者的关注,并在 X 上迅速走红。例如,Lucas BeyerJeremy HowardRohan Anil 都参与了讨论,此外还有许多人发表评论。

为什么要研究这个问题?

我认为,样本效率是当今 AI 领域最重要的问题,而我想解决它。

这项工作的目标是:(1)在限定使用 Transformer 和当今深度学习方法的前提下,探索样本效率的极限;(2)降低成本,让迭代变得更快、更便宜。

ARC 是检验这一点的绝佳基准:

  • 高维空间中的样本极少,只有约 1000 道题
  • 它是一个元学习基准,每道题都使用不同的规则,但其中也包含一些共通概念
  • 所需先验知识极少:评测集中的每个概念都出现在训练集中
  • 对人类来说极其容易解决,即使 AI 研究经验有限的人也能上手
  • 这个基准仍未饱和(讨论数据效率时,应排除 LLM,以及大量使用合成数据或人类归纳偏置的方法)

接下来,我会研究新的思路,突破这些限制。同时,我会尽量控制成本,让世界各地的任何人都能参与这项研究。

技术细节

它是如何工作的?

整体思路与上次类似(完整技术细节见这里),但这次加入了不少改进。方法概括如下:

  • 将每个输入-输出对转换成 token 序列,再用一个小型 Transformer 对这些序列进行自回归训练。测试时,从头开始同时在训练集和评估集的谜题上训练模型(测试标签保持隐藏)。
  • 为了实现跨任务学习,为每道谜题分配一个独立的可学习加性 embedding。由于每个序列包含两个二维网格,位置编码采用可学习的 3D RoPE embedding。
  • 对序列进行颜色置换和二面体置换增强。推理时,对测试输入进行增强,再对模型生成的输出应用逆变换。最终提交出现频率最高的两个输出(AAIVR)。

相比上次的改动

这次的主要目标,是寻找能提升模型样本效率的架构和算法改进。

分数提升主要来自:

  • 采用更现代的架构(用 SwiGlu 替代 GELU、用 RMSnorm 替代 layernorm 等)
  • 增加数据多样性,并改进数据打乱方式
  • 扩大模型规模:层数从 4 层增加到 8 层

成本下降主要得益于:

  • 大幅减少数据增强次数(样本效率更高!)
  • 用 Normuon 替代 AdamW
  • 训练时使用支持变长序列的 flash attention,推理时使用 flex attention kernel

一个重大变化是:我不再使用输入 token 进行训练。也就是说,损失函数只包含输出 token,因此这种方法变成了有监督学习。效果略有提升,从 40% 提高到 44% $\to$ 44%,但我还不清楚原因。可能是因为模型容量有限。

我还加入了 ARC-2 中与 ARC-1 不重叠的任务,从而扩大了训练数据规模。为避免数据泄漏,我对这部分数据进行了非常严格的筛选。如果你不希望使用额外数据,也可以将其移除,模型仍能达到约 40% 的分数,但所需计算量大约会翻倍。

背景:ARC-2 包含 ARC-1 的 773 道谜题,以及 347 道新谜题。由于 ARC-1 的大多数评估谜题都被重复收录,如果直接在 ARC-2 上训练,就会产生数据泄漏,分数也会达到 100%。为避免这种情况,我仔细过滤掉了那 773 道重复谜题,因此不存在数据泄漏。

还有许多改动带来了渐进式的性能或速度提升。完整改动列表见这里

有意思的现象

由于我不再使用输入数据进行训练,这套方法现在属于有监督学习。奇怪的是,测试损失反而更高了,但得分却更好!同时,训练也更加稳定,得分方差更小。

如今,很多人通过在小数据集上追求最低验证损失来提升样本效率。我认为这当然是件好事,但这也暴露出这种方法存在一种失败模式

我认为,在某些场景下,无监督训练会表现得更好,目前正在对此进行评估。

在使用 NorMuon 之前,我尝试过原版 Muon。它的训练速度显然比 AdamW 快得多,但训练末期损失和得分都会停滞不前,而不是继续收敛。我发现,在这个阶段大幅降低动量和/或学习率(LR)会有所帮助,但不想手动进行这类调整。切换到 NorMuon 后,这个问题就消失了。

消融实验

对性能贡献最大的是高质量的表示方式(3D RoPE + 任务专属 embedding)。

Ablating RoPE and per-task embeddings
移除 3D RoPE 或任务专属 embedding 后,性能都会大幅下降;两种消融的得分最终都停在 25%。
  • 使用输入数据进行训练,表现略差 → 约 39%
  • 将训练集限制为 ARC-1 + ConceptARC,表现基本相同:约 40%
  • 将 3D RoPE 换成 1D 后,得分降至约 24%
  • 移除任务专属 embedding 后,得分降至约 24%
  • 采用 CompressARC 的方式运行模型(针对每个任务分别从头训练,且采用无监督方式),性能降至约 18%
  • 采用有监督方式运行 CompressARC,得分约为 15%
Other ablations, best scores
其他消融实验中的最佳得分。这里比较成本意义不大,因为除了第一个消融实验外,其余实验都需要多得多的算力。

其他人可以如何参与?

代码已经开源。欢迎自由修改代码,以提升得分或降低成本。(请不要增加训练数据。)

试着做到 65%——不需要做太多修改。证据是:我合并了多次运行中所有解出的任务,得分达到了 55%。此外,还有不少任务已经“接近”解出。可以尝试的方向包括:

  • RoPE 会混合位置信息和内容信息,可能因此影响性能。PoPE 应该至少能达到同等水平,甚至更好;也可以尝试设计一种新的位置嵌入
  • 架构显然还可以进一步现代化

如果手写 GPU 代码,成本可能降低 10 倍。通过架构调整也能实现类似的降本效果。

最后,还需要想办法移除数据增强。(我很后悔用了它,别听那些认为这样没问题的人。)有几种显而易见的实现方式,但难点在于如何控制训练成本。

其他

说实话,我没想到仅靠 Transformer 就能达到 45%,原以为还需要新的思路。我更没想到能以这么低的成本和 FLOPs 达到这个成绩。消融实验表明,即使不使用数据增强或合成数据,依然能保留出人意料的大部分性能。现在我相当确信,在 Transformer 框架内可以达到 65%。

我不明白为什么其他人没能发现这一点。这其实就是一个采用最直观表示方式的 Transformer。这个基准已经开放 6 年,知名度很高,奖金更是高达 100 万美元!也许研究人员低估了深度学习?也许实验成本太高,导致他们没法正确进行消融实验?又或者是被 LLM 的发展打了个措手不及,或者过度依赖了各种 harness?

附录

知名研究人员过去对我这一方法的批评与验证

我之前的结果在 X 上迅速传播开来,许多经验丰富的研究人员对此展开了讨论,有人支持,也有人质疑。相关讨论串包括 JeremyLucasSusanAndreasYoav 等人的帖子。我把所有批评和对应的回答都列在这里。

在评测题上训练就是作弊,也就是“在测试集上训练”

  • 不,这个说法是错误的。“在测试集上训练”特指使用测试数据的标签进行训练,而训练过程中并没有使用这些标签。
  • 此外,ARC 本质上是一个元学习基准,因此本来就应该从评测题中学习。
    • 术语说明:ARC 包含一组训练题和一组评测题。每道题由若干示例对和测试对组成,每一对都包括一个输入网格和一个输出网格。
    • 在 ARC 中,标签仅指评测题测试对的输出网格
    • 这些标签并未用于训练,而是处于隐藏状态。如果愿意,也可以事先将其删除。

在评测题的输入上训练会泄露信息

  • 不对,这个说法错误。这种方法称为传导式推理(transductive reasoning),从 Vapnik 时代起就一直有人研究。
  • 而且,在一个试图解决持续学习问题的世界里,坚决忽略评测输入这一教条本身就说不通。
  • 其他方法通常先训练一个元学习算法,再通过运行 CoT 或在循环过程中修改 latent 来部署它、让它继续学习。我这里采用的方法,是直接通过修改单个前向函数的权重来进行元学习;这与通过……学习并没有本质区别。
  • 注:在最新的 44% 结果中,我们移除了对输入的训练,因为这种做法的得分略低。

即使允许使用评测题的输入,也应该禁止使用测试输入本身

  • 不对,这个说法同样错误。这里依然适用“传导式推理”的论证。
  • 元学习基准可以在两个层面采用传导式方法:
    • 训练题 $\to$ 评测题
    • 在同一道评测题内,从示例对 $\to$ 测试对
  • 后一种方式正是对这一批评的直接回应。

这违反了测试政策

  • 不对,这个说法错误
  • 政策原文是“应试者不得事先知道测试内容”。有人据此认为 TTT 被禁止,但这句话实际针对的是设计 AI 系统的人,而不是 AI 系统本身。
    • 例如,防止人们根据评测集来设计归纳偏置。
  • 对于 ARC 社区中一直关注这项工作的人来说,这一点早已很明确:测试时训练一直是被允许、甚至被鼓励的。StevenChew 的评论也澄清了这一点以及其他相关疑问。
  • TTT 同样符合元学习基准的理念,因此这样做并无不妥。

你没有计入训练成本

  • 不对,这个说法不成立。我统计的是模型的完整生命周期计算成本,包括从初始化开始训练模型的成本,以及在所有任务上运行推理的总成本。总计确实只有 67 美分。去看看 vast.ai 上使用一台 5090 运行 2 小时的价格就知道了。

传统的测试时训练是一次处理一个任务,同时训练所有测试任务并不现实

  • 这个批评有道理,但情况比较复杂。
  • 我同意,现实中很少会一次性面对整套问题。即便是在考试这种场景下,人类通常也只能逐题作答。
  • 但人类缺乏某种能力,并不意味着 AI 模型具备这种能力就是不合理的。否则,我们也可以说 LLM 不现实,因为人类无法在整个互联网语料上训练,也无法像模型那样高速读取 token。
  • 此外,人类是否真的受限于一次只能处理一个任务,也并不明确。人类或许能够同时从多个感官获取不同数据并进行学习,正如

按任务计算成本,会因为所有测试任务同时参与训练而摊薄训练成本。因此,拿它和其他模型比较并不公平

  • 这点确实有道理。为此我想说明两点:
    • 评测组织方比较所有模型时都是这么做的,包括同样一次性在所有测试任务上训练的 TRM。
    • 而且我的计算其实更宽松:我计入了训练和推理成本,但 LLM 及其他模型通常不计入预训练或离线训练成本。
  • 现在我已经改为:(a)展示完整生命周期的计算成本,而不是单个任务的成本;(b)只与 TRM、HRM 和 CompressARC 比较,不再与 LLM 或其他方法比较;(c)增加采用可比训练方式的消融实验。

回应关于 ARC-AGI 本身的批评

上次发帖时,很多人讨论了 ARC-AGI 本身。其中一些质疑是合理的,但有不少问题 Chollet 其实早已回答过多次:

  • ARC 到底测试什么?(流体智力)
  • 我们为什么要关注 ARC?(流体智力尚未被完全解决)
  • 解决 ARC-AGI 并不等于实现 AGI(没人这么说过)
  • ARC 不断提高目标,或者说它是专门为对抗 LLM 而设计的(这两种说法都不对)

Chollet 的论文和这些推文1是不错的参考。概括来说,他的观点是:这个基准旨在测试流体智力,而他认为流体智力是 AGI 的必要条件,但不是充分条件。能解决 ARC-1 / 2,说明具备非零的流体智力,但这并不构成上限。这些基准并不是在宣告 AGI 已经实现,而是希望帮助研究者找出值得提出的正确问题。测试标准也没有被刻意调整:ARC-1 早于 LLM,ARC-2 在 ChatGPT 发布前就已公布,ARC-3 则是在 ARC-2 达到饱和之前公布的。他也乐见 ARC 取得进展,因为这记录了 AI 能力的提升。

我主要关注 ARC,是因为它可以用来测试样本效率,而这正是当前尚未解决的重要问题之一!它还是一个设计出色、易于 GPU 资源有限的研究者参与的元学习基准。一直以来,它都很擅长揭示 LLM 的优势与缺陷。我也觉得,尽管 ARC-1/2 关注度很高、奖金丰厚,这个基准仍然在 6 年里没有饱和,这一点很有意思——因为我们现在已经知道,DL 在 ARC-1/2 上可以取得极其出色的表现。

在我看来,以下批评是有道理的:

  • ARC-1/2 应该禁止使用合成数据
    • 这违背了基准的初衷,但如今大多数高分都依赖大量合成数据
      • 合成数据降低了解题所需的流体智力门槛
      • 在 2024 年以前,这种做法还算有意义,因为当时 DL 的成绩还很差。
      • 我们现在已经知道,只要训练数据足够多,LLM/DL 几乎什么都能学会
    • 这样也能让该基准更好地测试样本效率,与 ARC-3 形成很好的互补
    • 问题是,如何防止使用合成数据?很简单:
  • 禁止离线训练和预训练。模型提交后必须从头开始训练
    • 过去人们认为这不可能实现,所以没有这条规则。但我的模型证明这是可行的
    • 这样可以确保模型无法使用合成数据
    • 这也能让不同模型之间的比较更加公平。否则,一些模型(例如 LLM)可以通过海量离线训练来刷 ARC 榜单。(由于这个基准已经存在了很长时间,人们已经创建了许多类似 ARC 的数据集)
  • 把多种类型的模型放在同一张排行榜图里比较并不合理,会带来以下 3 个问题(解决方案:分别绘制图表)
    • 横轴表示每个任务的成本,但这里只计算了在线推理成本。有些模型(例如 LLM)还经历了规模庞大的离线预训练阶段,而这部分成本没有计入。通过投入无限的训练算力,模型实际上可以把测试集“训练”进分布中,因此这类模型应当单独评估。
    • 对于一次性在所有测试任务上训练的模型(例如我的模型、TRM 和 HRM),用成本除以任务数量没有意义。
    • 在公开评测集上比较 LLM 没有意义,因为公开谜题的答案可以在互联网上找到。
  • 组织方过早地从 TRM 和 HRM 中得出结论,并将成功归因于递归循环和深度监督。我认为,这种偏见源于他们认定纯深度学习无法解决 ARC(例如基础 LLM 在 ARC-2 上的表现仍然很差)。但我并不认同。
  • 测试政策的措辞也可以进一步改进,以免引起误解。(这里有详细解释

我认为其他方法存在的问题

认定递归是下一个重大突破(例如:HRMTRMArcprize 博客
我理解为什么这种方法很有吸引力,但目前还没有足够的消融实验来证明这一点。我的模型表明,即使不使用递归,也能达到相同的性能。目前唯一得到证实的递归优势,是可以在不增加内存数据搬运的情况下提升计算量。

HRM/TRM 存在误导性宣传:我也不喜欢 TRM 把自己宣传成一个 7M 参数的模型,但实际上还有规模达 O(100M+) 的 embedding 权重参与训练。这种说法具有误导性,让它更像一个查找表,也令人怀疑究竟是什么带来了它的性能。至少,它应该被称为拥有 7M 个“活跃”权重的模型。HRM 也存在同样的问题。而且两者都没有在任何地方提到这一点!

基于 LLM 的 ARC 方法已经不再展现新的能力
观察 LLM 在 ARC 排行榜上的攀升过程非常有价值,下文会详细说明。但我认为,现在已经没什么必要再从它们的 ARC-1/ARC-2 分数中寻找启示了:

  • 如今 LLM 分数的提升主要来自 post-training(下一节会给出证据),很可能取决于合成数据的规模。它们学会的是解 ARC 任务,而不是一般性的抽象推理。
  • 新分数背后还有太多混杂因素,几乎无法从中得出可靠结论。通常来说,仅凭基准测试比较 LLM 并不严谨,例如不同模型可能使用了不同规模、专门针对某个基准的数据进行训练。
  • 对 LLM 而言,只有私有测试集上的分数才有意义。公开排行榜上的成绩没有参考价值,因为答案已经发布在互联网上,并且可能被用于训练。
  • 我不太理解为什么要在 LLM 之上使用 harness 来提升性能。所有 post-training 的魔法都发生在 frontier labs 内部,他们完全可以自行构建 harness。我认为,持续学习很可能不是靠一个 harness 就能解决的。

违背“苦涩教训”的作弊手段
之前已经论证过,合成数据和数据增强并不是好办法,把归纳偏置直接设计进模型同样如此。我们无法在不依赖这些作弊手段的情况下扩展这个基准,恰恰说明其中仍有待发现的突破。我希望有更多人尝试减少这类违背“苦涩教训”的技巧。

从 LLM 解决 ARC-AGI 中得到的启示

如今,LLM 已经在这个基准的 v1 和 v2 上达到饱和。以下是我从它们的进展中得到的判断:

ARC-AGI 的出现早于 LLM。LLM 最初在这些基准上的表现非常糟糕,这说明预训练并不会赋予模型通用推理能力;有些对人类而言极其简单的任务,LLM 也可能表现得一塌糊涂。

OpenAI 的 O1 拿到 75% 的成绩,是 LLM 领域的一次重大胜利。这表明,只要数据足够,LLM 就能在 post-training 阶段学会任何任务。我猜这正是 Sholto Douglas 经常提出的观点

ARC-2 发布后,所有 LLM(包括具备思考能力的模型)都像被重新归零了一样。这说明即使是 post-training,也无法赋予模型通用推理能力;否则,在 ARC-1 上表现出色的模型应该能自动在 ARC-2 上取得好成绩。

(简单来说,模型学到的是如何解 ARC 谜题,而不是通用的抽象推理能力;模型在某项任务上的得分,取决于这类任务在训练数据中的呈现程度。另外,我也不确定“通用推理”是否真的存在——或许人类同样是高度专门化的。)

从那以后,具备思考能力的 LLM 在 ARC-2 上稳步进步。人们往往认为,这意味着模型的通用推理能力变强了。但他们忽略了一点:基础模型的得分一直停留在个位数。结合其他证据,这说明:

  • ARC-2 的得分主要由后训练驱动。(很可能在很大程度上取决于合成 ARC 数据的数量。)
  • 各实验室都在疯狂刷榜。(大概是因为客户在意基准测试成绩。)
  • LLM 在样本效率方面并没有任何优势。

别误会,我非常看好 LLM。ARC-2 的趋势表明,随着算力和数据量增加,模型性能还会持续提升。同时,推理成本的下降也令人难以置信。

完整变更列表

会改变训练动态的变更

  1. 优化器从单独使用 AdamW 改为 NorMuon + 辅助 AdamW
  2. 学习率调度从 warmup+cosine 改为 WSD 调度(warmup 百分比、保持不变,再线性衰减到下限)。
  3. RMSNorm 替换了 LayerNorm
  4. FFN 从 Linear -> GELU -> Linear 改为 SwiGLU 风格的门控 FFN(chunk + SiLU gate)。
  5. 权重衰减从“仅对非 attention 线性层应用”改为显式的分组衰减:attention 权重、token embeddings,以及任务/二面体 embeddings 各自拥有独立的 WD 参数。
  6. 训练目标从 outputs["loss"](无监督风格的输入+输出 LM loss)改为仅使用 outputs["output_loss"](监督学习风格)。
  7. 训练批处理从基于序列长度的智能分桶改为真正的随机 batching(推理路径仍保留分桶)。
  8. 训练时会丢弃落后或不完整的 batch(强制启用 drop_last=True)。
  9. 数据集构建现在支持并使用更多数据源(ARC-1、ARC-2、ConceptARC、可选的跨数据集筛选任务,以及 submission/private 模式),因此训练数据的构成也发生了变化。
  • 颜色增强从每个 epoch 统一使用一次全局置换,改为为每个样本生成独立的增强组合(颜色 + dihedral)。
  • 颜色置换范围改为排除仅出现在输出中的颜色,不再盲目对 1..9 进行置换。
  • 增强生成过程现在会通过哈希去重同一任务中经过变换的输入,从而提高唯一样本的多样性。
  • 增强选择改为按 epoch 循环,并在每轮开始时打乱候选顺序;每轮内不重复选择。
  • 调整了多项超参数:优化器和其他 hparams、epoch 数量、增强上限与类型、深度(n_layers)以及数据集路径。
  • 新增 dihedral_embedding,并将其累加到 token conditioning 中。(性能仅有轻微提升)
  • 以下改动提升了速度,但没有改变训练动态:

    1. 训练 batch 从带 padding 的 [B,S] 改为使用带 cu_seqlens 的 packed token stream(训练路径中不再包含 padding token)。
    2. Attention 路径从带 padding 的 SDPA masking 改为支持 packed varlen flash-attention(cu_seqlens),并加入 flex-attention 解码 kernel。
    3. Dihedral augmentation 从离线扩展数据集改为在 collate 阶段在线选择增强。
    4. 构建时的训练集划分从 ("train","test") 改为 ("train",)

    其他

    1. 恢复训练的行为有所改变:现在检测到优化器或 hparam 变化时,可以重置或重新预热训练 schedule,从而改变恢复训练的动态。
    2. 训练时,Scheduler 改为根据 epoch 的小数进度更新,而不再单纯按 step 使用 cosine progression。

    待办:补充引用

    1. Chollet 关于 ARC benchmark 的原论文,以及他发布的几条推文:解释 ARC是什么意图测试什么,还有两条推文介绍 benchmark 的演进时间线。 

    原始来源: Hacker News

    评论 (0)