资讯动态

视觉预训练如何破解ARC抽象推理难题:从自然图像到网格规则

发布时间:2026/10/26 20:23:14 来源:尧图企业网站定制
1. ARC挑战到底难在哪里ARCAbstraction and Reasoning Corpus抽象与推理语料库这两年几乎成了AI推理能力的试金石。它长得很朴素给模型两三个小网格网格里有不同颜色的色块模型要根据这几个例子总结出变换规则然后生成新输入对应的输出网格。规则可能是翻转、镜像、补全、计数、颜色替换也可能是更复杂的组合逻辑。人做这种题几乎不费脑子扫一眼就能确认规则但模型表现往往惨不忍睹。最近有一支做视觉技术出名的研究团队提出了一个反直觉的思路先让模型大规模地“看”日常图像——网上不少人调侃成“看猫片”——再去挑战ARC任务效果出人意料地好。这个思路真正有意思的地方不在于“猫”本身而在于它回答了AI圈子里争论很久的一个问题抽象推理能力到底是凭空产生的还是从大量感知经验里长出来的这篇文章我会结合自己做基准实测和模型训练的体会把ARC的难点、视觉预训练为什么有效、完整的复现方案以及实际执行中容易踩的坑一次讲清楚。如果你想搞懂这类推理基准或者正打算上手做类似的视觉推理实验这篇内容可以直接当参考手册用。1.1 任务定义看起来是“找规律”实际是“当场学会一项新技能”先具体说说ARC长什么样。每个任务包含若干组“输入-输出”网格样例网格尺寸通常不超过30×30颜色种类也有限。模型看完这些样例后会拿到一个新的输入网格需要输出预期结果。关键设计在于评测集里的任务与训练集里的任务刻意保证规则不重叠。模型不可能靠背题得分必须在推理时从两三个样例中当场提炼规则。打个比方这就像你从没见过“把一个物体的轮廓变成它的边框”这种变换但看了两三个例子后就得立刻学会并且在下一个新例子上用出来。人类能通过视觉经验快速类比机器却经常抓错重点。有的模型把颜色当作核心规律有的模型把样例里偶然出现的位置关系当成规则结果一换输入就全错。另一个难点是ARC没有给模型试错的机会。标准答案只有一份输出必须和答案完全一致才算对不存在“部分得分”。所以模型即使每个格子的预测准确率到了九成以上只要错一个格子整个任务就等于失败。这种全对全错的性质直接让很多依赖统计平滑的模型暴露出结构性缺陷。1.2 为什么传统方法一直卡着早期研究者习惯用程序合成的方式解ARC也就是搜索可能的变换程序让程序输出符合所有样例。这个思路符合直觉但规则组合空间爆炸式增长网格里任何位置、颜色、形状差异都可能产生一条候选规则。实际跑下来经常是搜索超时或者找到的程序过拟合了样例。后来大语言模型火起来有人把网格序列化成文本靠上下文学习去推理。这比程序合成灵活但问题也很明显二维空间结构被压扁成一维字符串后位置关系、对称性、邻接性这些关键信息大量丢失。语言模型擅长处理符号序列却不擅长在脑海里重建一个二维几何空间。用人类的体验来类比相当于让一个只看过文字描述、没见过真实图形的人去做几何题能做但很勉强。这两类方法的失败共同指向一个事实ARC要求的不是单纯的模式识别也不是单纯的符号搜索而是把“视觉感知”和“规则抽象”接起来。感知端要能从色块中识别出对象、轮廓、方向、对称性抽象端要能从两三个例子中提炼出“变换”。过去的方法把这两端割裂了视觉预训练的思路则恰好是把两者串起来的那条路。2. “看猫学规则”的思路从哪来2.1 自然图像里其实藏着大量抽象先验你可能会疑惑猫的照片、汽车的照片和抽象网格题有什么关系表面上毫无关系但往深层看自然图像里包含了大量人类认知世界的基础结构对象有边界、物体之间有空间关系、整体由局部组成、对称和重复无处不在。一只猫的脸存在左右对称这本身就是一种抽象规则猫和背景的分隔对应着对象与背景的区分。模型在海量自然图像上做预训练时不会真的去记“猫长什么样”而是会学习到这些基础结构规律。等到它去看ARC网格时就不会把网格当成孤立的颜色点阵而会更自然地组织成“物体”“区域”“轮廓”这样的高层概念。这个能力在传统从零训练中很难出现因为ARC任务本身的样例太少模型根本没机会建立这些基础感知结构。我用一个比较贴近生活的例子来解释一个从小看过各种实物照片的孩子拿到积木图形题时即使积木只是抽象的色块也会本能地去想象“这是一个正方形旋转了”“这是把左边的物体复制到右边”。一个完全没有任何视觉经验的人看到同样的题目就只能看到“一堆颜色块”连找规律都无从下手。自然图像预训练的作用就是让模型先拥有这种“看什么都像物体关系”的经验基础。2.2 “猫片”只是表象网格抽象才是核心回到那个让人们讨论的细节团队用了大量日常图像其中包含大量猫图、狗图、建筑图。调侃归调侃背后的技术设计其实很有讲究。他们不是直接拿自然图像预训练模型然后就去微调ARC而是在预训练阶段专门设计了一些中间任务让模型学着从自然图像中提取网格级别的结构摘要。也就是把真实图片抽象成低分辨率的色块图让模型学会忽略纹理和细节抓住布局和结构。这一步很像人类学习简笔画的过程。儿童从复杂照片走向简笔画需要学会概括模型从自然图像走向抽象网格也需要类似的过渡。如果直接把自然图像的特征迁移到ARC上中间还是有落差但有了“把图像压缩成结构摘要”的训练目标模型就更容易把在自然图像中学到的空间关系知识迁移到ARC这种简化网格世界中。从这个角度看“看猫片”真正提供的不是猫本身而是一个无比丰富的物体关系样本库。猫片里有眼睛和脸的相对位置ARC里有色块之间的相对位置猫片里有对称结构ARC里有镜像规则。这些结构性知识是跨域通用的也是视觉预训练成功的根本原因。2.3 为什么这比语言模型路线更对路对比一下就清楚了。ARC的输入本质是二维网格核心信息全部编码在“空间关系”里某个色块在另一个色块的上方某个图形绕中心旋转了九十度某个模式左右对称。卷积网络和视觉Transformer天然就在建模这种空间关系位置编码和局部感受野都是为此设计的。语言模型路线则把网格拆成字符串本质上是把空间关系转译成符号序列关系。这个转译过程是有损的就像把一张地图用文字逐行描述出来读者很难在脑子里还原地形。视觉模型直接吃像素和色块保留了所有空间线索。所以视觉预训练方案在ARC上的优势不是调参带来的而是模型结构本身就匹配任务特性。3. 从零搭建一套“视觉预训练ARC微调”方案这一节我把自己实测过的流程拆开讲。需要说明的是完整复现一支明星团队的全部实验需要很大的算力但思路和框架完全可以带着自己的设备做一轮小规模验证。你先跑通闭环再逐步放大规模收获会远大于直接看论文。3.1 数据准备与增强策略第一步是准备两类数据。第一类是ARC官方数据包含大约八百个任务其中一部分用于算法开发另一部分用于最终评测。这里要特别强调开发期间不要用评测集做任何调参否则结果会虚高到失去参考价值。第二类是自然图像数据可以从公开图像数据集里抽取一个子集。如果你的算力有限选几万张起步就够验证效果了。数据增强是第一个容易出问题的地方。ARC规则对位置非常敏感如果你在微调阶段做随机旋转、缩放很可能把本来就稀少的规则样例变得面目全非。我的做法是预训练阶段用常规增强随机裁剪、翻转、颜色抖动微调阶段设定成只做输入网格的轻微扰动或者干脆不做。你要记住一个原则ARC需要的是精确映射不是增强多样性。3.2 模型结构与输入表示模型推荐用视觉Transformer理由前面说过它对二维结构建模更自然。具体操作时把每个网格编码成token序列每个格子按照颜色类别映射成对应的类别嵌入再加上位置编码。网格尺寸不大序列长度通常能控制在几百个token以内推理成本很低。解码器逐格输出颜色类别的概率分布用交叉熵损失训练。更关键的设计是把“输入样例”和“输出样例”同时送入模型让模型学习的是输入到输出的映射关系而不是单独记忆某个网格的特征。测试时给出新输入模型预测输出网格。我画一个简易的数据流示意# 把一组ARC样例构造成模型输入 # 样例组: [(input_grid1, output_grid1), (input_grid2, output_grid2)] # 新输入: test_grid def build_batch(demo_pairs, test_grid): demo_tokens [] for in_grid, out_grid in demo_pairs: demo_tokens.append(grid_to_tokens(in_grid)) demo_tokens.append(grid_to_tokens(out_grid)) # 拼接演示样例后接上测试输入 input_seq concat(demo_tokens, grid_to_tokens(test_grid)) return input_seq这只是示意实际工程实现还要考虑mask机制让模型在预测阶段看不到输出token。但核心思路是明确的模型看到的是一串“渐变过程”而不是孤立的输入。3.3 训练流程与参数选择整个训练分成两个阶段。预训练阶段在自然图像上完成目标可以是图像重建、掩码恢复或者结构摘要生成目的是让编码器获得对空间关系的基本感知。微调阶段固定大部分编码器参数只训练解码器和少部分高层参数在ARC任务上做适配。这种分阶段策略能有效防止微调阶段数据太少导致的过拟合。训练阶段数据来源输入形式主要目标建议学习率预训练自然图像子集图像块序列结构重建/掩码恢复1e-4微调ARC训练任务网格token对网格颜色交叉熵5e-5批大小按显存调整32到64都可以。优化器用AdamW配合warmup和余弦衰减。微调时如果任务数不多冻结底层特征提取层非常关键。我见过不少复现项目因为微调层开放太多模型快速在训练集上过拟合评测集任务成功率反而一路走低。3.4 评估口径别被单格准确率骗了ARC的官方评分标准很严格模型输出的整个网格必须和标准答案逐格一致才算该任务做对。所以评估时一定要按任务维度计算成功率而不是看平均每个格子的准确率。我见过有项目报告单格准确率超过95%实际任务成功率却只有百分之十几。原因就是ARC规则具有级联性一个格子错了后面的输出逻辑往往也会跟着错最终整个结果作废。正确做法是同时跟踪两个指标任务成功率和每格准确率。任务成功率用来判断模型是否真正领悟规则每格准确率用来定位问题出现在哪类规则上。如果任务成功率很低但每格准确率不低说明模型大部分位置预测对了只是偶尔在关键格子上犯错这种情况后期调优空间很大。反过来如果每格准确率都很低说明模型可能压根没接住任务的核心结构。4. 实操中的典型问题与排查经验4.1 模型学会了“抄答案”而不是“学规则”我第一次复现这个思路时训练集任务成功率一路涨到五十多当时还挺高兴。结果唤醒到评测集成功率直接掉到个位数。翻看预测输出才发现模型大量输出基本是“把输入原样复制”或者“把常见颜色填满网格”。仔细一想就明白了训练集中不少任务确实存在输入输出相似的情况模型学到的不是变换而是“输入和输出差不多”这个统计规律。排查方法很直接把标准答案和预测结果并排打印出来肉眼扫几十个样本就能看出是不是复制粘贴。更严谨的做法是构造对抗样本比如把测试输入里色块的位置轻微打乱看看模型输出是否跟着变了。如果模型无论怎么调整输入输出都保持稳定那基本可以断定它对位置信息不敏感只是在按颜色分布瞎猜。4.2 不同类型任务训练进度严重不均衡ARC任务种类很多几何类任务通常学得快逻辑运算类的任务学得慢甚至一直学不会。如果不加干预模型会倾向于把所有任务都简化成自己擅长的那种处理方式导致整体成功率被难任务拖垮。我在训练日志里增加了按任务类型分组的统计很快定位到问题出在“计数类”和“条件逻辑类”任务上。解决办法是动态调整采样权重。简单任务收敛后降低采样比例把更多训练步数分配给困难任务。还有一种做法是做课程学习先用几何变换类任务热身再逐步加入逻辑类任务。这两种手段可以结合使用效果比固定采样好很多。4.3 显存占用不大但训练时间被数据处理卡住ARC网格本身很小模型也轻量显存不会有太大压力。真正耗时间的是数据管线。ARC任务以JSON格式存放每次训练都要解析JSON、完成网格到token的转换。数据量一大CPU处理速度跟不上GPU消费速度训练就成了等数据的空转。我的优化方案是预处理阶段把所有任务一次性转成tensor字节流存成二进制缓存文件。训练时直接按索引读取省掉了大量重复解析。这一步看起来不起眼实际可以把训练速度提升好几倍。尤其是做多组超参对比实验时数据管线的效率直接决定了你能试多少个配置。4.4 常见问题速查表现象可能原因建议操作训练集成功率尚可评测集暴跌过拟合训练任务学到统计偏好冻结底层参数加强正则按规则类型做数据增广输出网格尺寸总是不对解码器输出长度对齐错误检查位置编码和序列长度映射逻辑模型输出永远是同一个颜色类别严重不平衡模型学偏了调整损失函数权重按颜色类别重新采样损失下降但任务成功率不涨单格精度提升结构规则没抓住可视化失败样例检查是否对齐规则关键点训练时GPU利用率很低数据解析成为瓶颈离线预处理数据使用缓存机制5. 个人体会与后续扩展方向ARC这类任务目前不会有满分模型但它的价值一直不在分数本身而在于逼着研究者把感知、归纳、推理这几个能力真正串起来。视觉预训练方案给我的启发是模型完全可以从大量“无关”经验里获得抽象推理的基础能力关键是怎么设计中间任务让这些经验能被顺利迁移到目标场景。后续我觉得有两个方向很有潜力。第一个是自动生成“伪ARC任务”从自然图像中自动提取结构关系批量生成类似ARC的网格题目让模型有更多自监督训练材料。第二个是视觉模型与程序合成结合视觉模型负责从样例中提出候选规则程序搜索负责验证规则是否可靠两者互补很可能比单一方法稳定得多。最后分享一个做这类复现实验的小技巧一定要把评测脚本和训练脚本解耦。先把评测逻辑固定死用一批已知任务跑通再开始迭代训练方案。否则你改一次训练代码就要重新确认一次评测链路很容易在混乱中得出虚高或虚低的结论。ARC挑战对模型而言是抽象推理测试对做工程的人来说也一样——先把“正确答案”定义清楚再全力追求解法。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑