引言:模型什么时候需要画一条线
几何题里的辅助线很少出现在题目里,却经常决定整道题能不能解出来。计数题里,先把候选目标圈出来,再逐个排除,比直接在自然语言里说“左边那个、上面那个、旁边那个”稳定得多。空间关系题也类似:判断猫有没有碰到杯子,视线会自然落到猫爪和杯脚之间那一小块接触区域。
这些动作很难被普通 CoT 表达好。语言可以写“我现在画一条辅助线”,但这句话本身没有改变视觉状态;工具调用可以真的执行 cv2.line 或 PIL.Image.crop,但一次简单的视觉动作会变成一段代码、一次外部执行和一次上下文切换。视觉推理的中间态因此卡在两种极端之间:要么只是语言描述,要么变成完整 agent loop。
ATLAS1 的做法很轻:把这些动作压缩成词表里的一个 token。<|Line|> 表示画线,<|Shape|> 表示框选或区域操作,<|Arrow|> 表示方向指示,<|Text|> 表示文本或数值标注,<|Manip|> 表示裁剪、放大、滤波一类图像处理。它们不生成中间图,也不调用外部工具;模型只是在普通 next-token prediction 中生成一个功能词,让后续推理围绕这个动作继续展开。
把几十个代码 token 省成一个 token,只是这个设计最表层的收益。更深的一层变化在训练目标里:一次视觉动作变成了语言模型可以生成、可以强化学习、可以被 credit assignment 直接命中的离散事件。风险也在同一处:如果这些功能词只是在训练数据里学到的格式标记,而没有形成稳定的动作语义,ATLAS 就只是把工具轨迹压缩成了更难解释的 prompt token。
一、视觉中间态的三种角色
围绕视觉题的中间态,最近几条路线其实在处理不同层次的问题。
| 缺口 | 问题 | 代表路线 | 中间表示 |
|---|---|---|---|
| Perception Gap(感知缺口) | 图像细节没有被可靠转成结构化信息 | CodePercept | 可执行代码、结构化 caption |
| Reference Gap(指代缺口) | 推理链中的语言指代无法稳定锚定对象 | TVPrimitives | point / box 坐标原语 |
| Operation Gap(操作缺口) | 推理链缺少轻量视觉动作接口 | ATLAS | functional tokens |
Perception Gap 发生在输入端。模型看图时漏掉小目标、误读几何关系、无法把图形关系转成可推理结构,后续推理再强也只能在错误前提上展开。CodePercept 用代码作为描述媒介,把视觉信息变成更可验证的符号结构。
Reference Gap 发生在推理链内部。模型已经知道图里有多个对象,却在“那个红色物体”“左边的线段”这类自然语言指代中逐渐偏离原目标。TVPrimitives 把 point / box 写进 CoT,使推理步骤拥有空间锚点。
Operation Gap 更微妙。它关心的对象已经不再是“看到了什么”或“指向哪里”,而是“在这个推理时刻应当对视觉状态做什么”。画线、圈区域、加箭头、写标签,这些动作既不像最终答案,也不像普通解释文本。把它们写成自然语言会膨胀推理链;把它们交给工具会让模型离开自回归生成环。ATLAS 的 functional token 正好卡在中间:它不给出完整工具参数,却为模型提供一个可训练的动作槽位。
flowchart LR
A[Image] --> B[Perception: see accurately]
B --> C[Reference: point accurately]
C --> D[Operation: choose visual action]
D --> E[Reasoning state update]
E --> F[Answer]
B -. CodePercept .-> B1[Code / structured caption]
C -. TVPrimitives .-> C1[Point / box anchors]
D -. ATLAS .-> D1[Functional tokens]这张分解图比“agentic or latent”更贴近 ATLAS 的工程位置。CodePercept 处理输入表示,TVPrimitives 处理对象锚定,ATLAS 处理动作接口:模型知道自己需要一次视觉操作,但不想为这次操作支付完整工具调用成本。
二、Functional Token 作为视觉动作槽
论文将五个 functional tokens 加入标准词表:
论文文本里常把它们描述为 visual operations。这个说法成立,但容易让人误读成“模型真的在内部画了线”。更贴近训练过程的理解是:functional token 扮演视觉动作槽(visual action slot)。它把某一类动作放进自回归序列里,使模型在生成过程中有机会切换到一种不同的注意力/推理模式。
五个 token 的语义很粗:
| Functional token | 动作槽 | 可能承载的内部行为 |
|---|---|---|
| `< | Manip | >` |
| `< | Shape | >` |
| `< | Line | >` |
| `< | Arrow | >` |
| `< | Text | >` |
这里有一个很关键的张力。token 粗,泛化性更好;token 细,可解释性更强。<|Shape|> 同时覆盖 bounding box、mask、crop、resize、多边形、区域高亮,给模型留下很大自由度;但也让这个 token 的语义变得多义。一个 <|Shape|> 到底代表“框住候选目标”,还是“裁剪局部图像”,或者只是“接下来需要更关注某个区域”的提示?论文用 attention visualization 给出证据,显示 token 附近的 image attention 会集中到相关区域。这是有用的相关性证据,距离“functional token 具有稳定可干预的视觉动作语义”仍差一步。
是否真的具有视觉动作语义,要看几个 follow-up 实验的结果:删除 <|Line|> 后,模型几何推理是否系统性退化?把 <|Line|> 替换为 <|Text|> 后,attention 是否从几何结构转向标注或数值?同一个 token 在没见过的视觉任务上是否仍触发相近动作?如果都成立,functional token 接近视觉动作词;否则它只是训练语料里一种高效的 discourse marker。
三、从工具调用到动作词蒸馏
ATLAS-178K 的构造方式暴露了方法的本质。作者从 V-Interaction-400K 的公开 preview subset 出发,解析其中用于构造中间图像的代码,把代码操作映射到 functional tokens。cv2.line、plt.plot 映射到 <|Line|>;cv2.rectangle、PIL.Image.crop、cv2.resize 映射到 <|Shape|>;plt.text、cv2.putText 映射到 <|Text|>;滤波、卷积、模糊等映射到 <|Manip|>。过滤后得到 138K 个高质量 functional-token 样本,再混入 V-Perception-40K 保护底层感知。
这个流程可以概括为:
flowchart LR
A[Agentic visual traces: code / tool operations] --> B[Parse operations]
B --> C[Map to action vocabulary]
C --> D[Functional-token trajectories]
D --> E[SFT]
E --> F[GRPO / LA-GRPO]这不是从零发现视觉原语。ATLAS 借用了 agentic 数据里已经存在的操作先验,把外部工具轨迹压缩为内部 token 轨迹。它的长处也来自这里:工具调用的可解释性、代码轨迹的可解析性、语言模型训练的可扩展性,被压进同一个自回归框架。它的限制同样来自这里:功能词语义的上界,很大程度受制于原始工具轨迹覆盖了哪些操作,以及映射规则是否把不同操作过度合并。
用这个视角看,ATLAS 在做的是 agentic-to-token 蒸馏:把 agentic trace 压缩进内部 token 轨迹。外部工具的执行语义被移除,留下一个可学习的动作索引。模型不真的画线,但在推理文字中生成一个"画线动作曾经应该出现"的压缩符号。论文标题问的「agentic or latent」其实问错了——ATLAS 既是 agentic 行为的离散化产物,也是 latent reasoning 的可显式生成版本,两者并非对立。
这也是 ATLAS 最有价值的启发:未来许多昂贵的 agentic loop 可能都可以被蒸馏成可生成的动作 token。搜索、调用计算器、检索局部证据、切换解题策略,都可能有类似的 token 化空间。ATLAS 只是把这个想法落在视觉操作上。
四、LA-GRPO 的意义不止在视觉
SFT 让模型知道 functional token 长什么样,强化学习决定模型何时使用它。ATLAS 的 reward 包含答案正确性、functional token 使用、格式可解析性、长度惩罚和 token spam 惩罚:
这里的设计很克制。 只有在模型使用 functional token 且最终答案正确时才给,避免模型把 <|Line|> 当作奖励按钮乱按。消融实验也显示,移除 token spam penalty 后 BLINK 平均准确率从 51.3 降到 47.0,模型会生成过多 functional tokens 来套利。
更有意思的是 gradient dilution(梯度稀释)。论文统计一条 ATLAS 轨迹平均 203.7 个生成 token,其中 functional tokens 只有 4.8 个,占比约 2.3%。标准 GRPO 的 advantage 信号分摊到整条序列,决定视觉动作选择的少数 token 得不到足够强的更新。LA-GRPO 因此把 token-level auxiliary loss 加到 functional-token 位置:
公式不直观,但用一张色带就能看清这件事——
LA-GRPO 不只是在视觉里有用:在长序列推理中,改变轨迹的 token 可能很少——一个工具调用 token、一个检索 token、一个代码执行 token、一个 “switch strategy” token,都可能只占序列的 1% 到 3%,却决定后续路径。标准 RL 把 reward 平均摊给所有 token,让这些控制点学不动。ATLAS 在视觉 functional token 上提出的 anchor loss,可以迁移到更一般的 action-token training。
从这个角度看,LA-GRPO 可能比五个视觉 token 更有普适价值。它给出了一个训练范式:先把高层动作压缩为离散 token,再在 RL 阶段对这些稀疏动作 token 做显式 credit anchoring。视觉只是一个展示场景。
五、实验结果该怎么读
论文在 V*、WeMath、BLINK 上评估。几个数字如下:
| Method | V* | WeMath | BLINK Avg. |
|---|---|---|---|
| Qwen2.5-VL | 70.2 | 36.2 | 22.8 |
| V-Thinker | 41.4 | 32.5 | 35.0 |
| LVR | 77.5 | 41.2 | 49.4 |
| ATLASSFT | 77.5 | 28.9 | 46.0 |
| ATLASGRPO | 77.9 | 40.3 | 50.5 |
| ATLASLA-GRPO | 75.4 | 45.0 | 51.3 |
这张表支持三个温和结论。ATLAS 相比 Qwen2.5-VL 在 BLINK 上提升很大,说明 functional-token 轨迹确实改善了复杂视觉推理。LA-GRPO 相比标准 GRPO 在 WeMath 和 BLINK average 上更稳,说明稀疏 token anchoring 有效。V* 上 ATLASLA-GRPO 低于 ATLASGRPO,也低于部分 latent visual models,说明它还没有形成所有视觉推理任务上的统一优势。
效率表更能说明 ATLAS 的工程价值。在 BLINK-Jigsaw 上,V-Thinker 平均生成 489.57 个 token,其中 350.35 个是代码 token;ATLAS 平均只有 99.85 个 token,functional token 只有 0.81 个。延迟从 18.83s 降到 3.80s,峰值显存从 2.55GB 降到 1.43GB,准确率从 42.0 提到 57.7。
这个结果不只是“省 token”。它说明视觉工具调用中有大量可压缩的操作表述。很多时候模型不需要写完整 cv2.line(img, pt1, pt2, ...),只需要在正确的推理时刻激活“线结构”这个动作槽。ATLAS 用一个 token 近似替代一段工具调用描述,收益自然会体现在延迟和长度上。
但这里也要避免过度外推。BLINK-Jigsaw 很适合画线、拼图、空间操作,正中 ATLAS 的功能词设计。更开放的视觉问答、风格理解、医学影像诊断、多帧视频因果推断,未必能被这五个 token 覆盖。ATLAS 的结果证明“把一部分视觉操作压缩成 token 很有用”,还没有证明“视觉推理存在一个通用五词动作词表”。
六、ATLAS 更像接口论文
ATLAS 的标题把问题放在 “Agentic or Latent Visual Reasoning” 上,论文叙事也强调 functional token 同时具备 agentic operation 和 latent reasoning unit 的属性。这个 framing 很吸引人,但我认为 ATLAS 更适合作为**接口论文(interface paper)**来读。
它定义的是一个接口:
这个接口同时处理三个工程问题——工具调用太长(用 functional token 压缩长度);连续 latent 难训练(用离散 token 保留 next-token prediction);功能 token 稀疏难优化(用 LA-GRPO 做 credit anchoring)。各自的解都不新颖,新的是把它们绑进同一套词表机制处理。
本体论层面的结论需要更强证据。一个 token 出现在推理链里,并且 attention map 在它附近看向相关区域,只能说明它参与了模型的统计路径。要证明它是视觉动作词,需要做更强的干预实验:
| 实验 | 目的 | 预期观察 |
|---|---|---|
| Token deletion | 删除 `< | Line |
| Token substitution | 将 `< | Line |
| Token permutation | 打乱 functional-token 顺序 | 多步视觉推理出现可解释的步骤错位 |
| Cross-domain transfer | 在未见过的视觉任务上固定 token vocabulary | 观察动作语义是否跨任务保持稳定 |
| Tool replay comparison | 将 functional token 展开回工具轨迹 | 比较压缩 token 与真实执行轨迹的差距 |
这些实验会把 ATLAS 从“token 有相关性”推向“token 有可干预的动作语义”。如果做不到,ATLAS 仍然可以是很好的工程压缩方法,但它作为视觉推理新范式的声称需要收窄。
七、如果三种中间表示同时出现
一旦把这几条路线接起来,视觉推理就不再是一个笼统的“多模态推理能力”问题,而是一条中间表示链条:
flowchart LR
A[Raw image] --> B[Structured percept]
B --> C[Anchored reference]
C --> D[Visual action]
D --> E[Updated reasoning state]
E --> F[Answer]
B --- B1[CodePercept: code as perception medium]
C --- C1[TVPrimitives: point / box as reference anchors]
D --- D1[ATLAS: functional token as action slot]接下来的问题会变得更棘手:这些中间表示能否在同一个模型里共存?
一个几何题可能先需要 CodePercept 式结构化,把图中的点、线、角翻译成可计算关系;随后需要 TVPrimitives 式坐标锚定,保证每一步都指向正确对象;再需要 ATLAS 式动作 token,决定何时画辅助线、何时标注中间变量。三者共同出现时,会带来一个训练冲突:代码 token、坐标 token、functional token 都在争夺有限的输出序列和 reward credit。LA-GRPO 只处理了 functional token 稀疏问题,尚未处理多类中间 token 共同训练时的 credit assignment。
下一阶段的问题更具体:多模态推理模型是否需要一套统一的 reasoning interface vocabulary(推理接口词表),其中包含 perception tokens、reference tokens、operation tokens、tool tokens、verification tokens?如果需要,词表应当手工设计、从工具轨迹蒸馏,还是通过任务分布自动发现?ATLAS 给出了一个可行的手工版本,但它还不是终局。
参考文献
Ziyu Guo, Rain Liu, Xinyan Chen, Pheng-Ann Heng. ATLAS: Agentic or Latent Visual Reasoning? One Word is Enough for Both. arXiv:2605.15198, 2026. Paper, Project Page. ↩︎