ATLAS: Agentic or Latent Visual Reasoning? One Word is Enough for Both
Paper: arXiv:2605.15198 Project: atlas-oneword.github.io Code: none — no public official training or inference implementation is available. Open-source code status: official GitHub ZiyuGuo99/ATLAS was checked at
main@e8183df5(2026-05-15), but it currently contains README / LICENSE / assets only; no public training or inference implementation is available.
1. Motivation (研究动机)
ATLAS 要解决的是 interleaved visual reasoning 中“中间视觉状态”难以高效表达的问题:复杂视觉推理常常不是单次看图后直接回答,而是需要在推理链里局部放大、画辅助线、圈定区域、标注文字或表示方向。纯文本 CoT 难以显式承载这些视觉操作;直接生成中间图像又会把问题变成昂贵的 image decoding / re-encoding。
Figure 1 解读:论文把现有路径分成四类。I 类 unified model 直接生成 pixel-level 中间图像,表达力强但训练和推理都重;II 类 agentic 方法用 code/tool call 操作图像,保留可解释性但每一步都要外部执行,输出也很长;III 类 latent 方法把中间状态放进 hidden embedding,效率更好但任务泛化与并行训练兼容性较差;IV 类 ATLAS 把视觉操作压缩成 tokenizer 里的离散 functional token,让“画线/圈区域/加标签”像生成一个普通词一样进入自回归序列。
当前方法的瓶颈可以概括为三点:
- Unified visual generation 太重:如果每一步推理都显式生成一张图,模型需要承担图像解码、图像再编码、视觉状态监督与框架级预训练成本。
- Agentic tool/code call 太慢且太长:即使只是画一条线或裁剪一个区域,也可能要生成一段 code,再交给外部模块执行,造成 context switching latency 和 output-length overhead。
- Latent reasoning 不够“标准自回归”:连续 latent embedding 或 recurrent latent dependency 往往依赖特定任务监督,且破坏 vanilla next-token prediction 的并行训练形态。
ATLAS 的研究价值在于:如果视觉操作能被压缩成少量可学习的离散词,VLM 就能在不改架构、不生成中间图、不调用外部工具的情况下获得一种可解释的“视觉行动接口”。这让 visual reasoning 同时接近 agentic 的可读性和 latent 的效率,并且仍能使用常规 SFT 与 GRPO pipeline 扩展到更大数据和模型。
2. Idea (核心思想)
核心洞察是:一个离散 token 可以同时扮演 agentic operation 和 latent visual reasoning unit。例如 <|Line|> 不需要真的输出一张带辅助线的图片,也不需要调用绘图工具;它作为普通 vocabulary token 被模型生成,同时在模型内部语义上锚定“接下来应当按画辅助线的方式组织视觉证据”。
ATLAS 的关键创新不是增加一个新的视觉 decoder,而是把常见视觉操作抽象成五个 functional tokens:<|Manip|>、<|Shape|>、<|Line|>、<|Arrow|>、<|Text|>。这些 token 用 vanilla next-token prediction 学习何时出现,并通过 LA-GRPO 在 RL 阶段额外强化稀疏 functional-token 的梯度信号。
与 V-Thinker 这类 agentic 方法相比,ATLAS 不生成长 code 也不等待外部工具;与 LVR / MCOT / CoVT 这类 latent visual methods 相比,ATLAS 不引入连续 latent state 或 recurrent hidden dependency,而是把视觉 reasoning action 留在标准离散 token 序列里。因此它牺牲了任意代码操作的无限灵活性,换来可并行训练、低延迟和更稳定的可解释 visual operation vocabulary。
3. Method (方法)
3.1 Overall framework:把视觉操作放进自回归 token 序列
Figure 2 解读:ATLAS 的 pipeline 有两层含义。第一层是 inference-time 形态:输入图像与问题后,模型在自然语言 reasoning 中穿插生成 functional token;这些 token 不被渲染成外部图像,而是在模型内部表示“该步需要 Manip / Shape / Line / Arrow / Text 这类视觉操作”。第二层是 training-time 形态:先用 ATLAS-178K 做 SFT,让模型获得 functional-token cold start;再用 GRPO / LA-GRPO 做 outcome-driven RL,使模型学会在真正有助于正确答案时使用这些 token。
形式上,ATLAS 扩展标准 VLM vocabulary:
其中 是普通文本 token, 是原始 VLM special tokens(如 <im_start> / <image_pad>),新增的 functional-token vocabulary 为:
给定 multimodal input context ,模型仍然预测单个离散序列:
当 时,它既是普通 token,又是内部视觉 reasoning unit。例如 <|Line|> 表示模型应在内部按辅助线构造关系,<|Text|> 表示当前推理需要标签、数值或文字注释。直觉上,ATLAS 不是让模型“看见一张新图”,而是让模型在语言流里留下一个可学习的视觉操作锚点;该锚点让后续 token 的注意力和推理上下文更容易聚焦到对应视觉证据。
3.2 Functional-token taxonomy
| Functional token | 语义 | 对应视觉操作 |
|---|---|---|
| `< | Manip | >` |
| `< | Shape | >` |
| `< | Line | >` |
| `< | Arrow | >` |
| `< | Text | >` |
作者故意把 token 集合保持得很小:如果为每个任务或每种 tool 操作都添加一个 token,会扰动原模型分布,也会让 RL 阶段更稀疏。五个 token 是一种中间抽象:足够覆盖常见 visual operation,又不需要 image-level supervision。论文也明确说该 taxonomy 不是穷尽的,未来可以扩展到更多视觉操作。
3.3 Stage 1:SFT with ATLAS-178K
ATLAS-178K 的构造分三步:
- Source data and token extraction:从 V-Interaction-400K 的 publicly released preview subset 出发,解析其中 image-construction code,把 line drawing、text annotation、shape drawing、visual refinement、cropping 等操作映射到 functional-token space。过滤后保留 138K high-quality examples,覆盖 40+ visual reasoning tasks。
- Trajectory construction and polishing:对每个 functional step 插入预定义 transition template,让 functional token 显式出现在 reasoning 轨迹中;随后用 Gemini-2.5-Pro 将模板化轨迹润色成更自然的 reasoning text,同时保持原始语义和 functional-token 顺序。
- Perception preservation:额外加入 V-Perception-40K。这部分数据不含 functional tokens,作用是保持 low-level perceptual ability,减少 fine-tuning 时的 catastrophic forgetting。
SFT 使用普通 CE objective。论文突出 functional tokens 的 CE 项:
这意味着 functional token 没有单独的视觉标签或渲染监督;它们通过上下文 token-level supervision 学会何时被调用。例如当文本上下文说“现在添加一条辅助高线”时,下一个 token 应该更容易是 <|Line|>。
3.4 Stage 2:GRPO reward design
SFT 只提供 cold start,RL 阶段让模型通过 outcome reward 学会“什么时候 functional token 真有助于最终答案”。给定 query ,policy 采样 个 outputs ,综合 reward 为: $ r(o) = \lambda_{\text{acc}} r_{\text{acc}}
- \lambda_{\text{func}} r_{\text{func}}
- \lambda_{\text{fmt}} r_{\text{fmt}}
-
\lambda_{\text{len}} p_{\text{len}}
-
\lambda_{\text{spam}} p_{\text{spam}}. $ 各项含义:
-
:final answer correctness;可用 exact string matching 与 mathematical equivalence checking,正确为 1,否则为 0。
-
:functional-token usage reward;只有当模型至少调用一个 functional token 且最终答案正确时才给,避免单纯为了奖励而插 token。
-
:format adherence;答案满足 required format 才给 1,保证可解析。
-
:length penalty;当输出长度 超过阈值 时在线性 buffer 内惩罚,并有 capped maximum penalty。
-
:token overuse penalty;当 functional-token 数量 超过阈值 时施加 bounded linear penalty。
标准 GRPO objective 写作: $ \mathcal{L}_{GRPO}(\theta) =
- \frac{1}{G} \sum_{i=1}^{G} \left( \frac{\pi_{\theta}(o_i \mid q)}{\pi_{ref}(o_i \mid q)} \right)^\beta \hat{A}_i
- \beta \mathbb{D}{KL}(\pi{\theta} || \pi_{ref}), \hat{A}_i\beta$ 控制 KL penalty。
3.5 LA-GRPO:解决 functional tokens 的 gradient dilution
Figure 3 解读:标准 GRPO 把 sequence-level advantage 分配给整条输出,普通文本 token 数量远多于 functional token,因此少数关键视觉操作 token 的梯度很容易被稀释。论文统计 ATLAS 轨迹平均有 203.7 generated tokens,但只有 4.8 functional tokens,占比 2.3%。LA-GRPO 保持 sequence-level GRPO 不变,但在 functional-token 位置额外加 token-level auxiliary objective,让 <|Line|>、<|Shape|>、<|Text|> 等稀疏 token 获得更强、更稳定的更新。
对 rollout ,先收集 functional-token 位置: 对每个 ,定义 token-level clipped surrogate loss: $ \mathcal{L}_{\mathrm{token}}^{(t)}
-\min\left( \rho_{i,t}\hat{A}i,, \mathrm{clip}(\rho{i,t},1-\epsilon,1+\epsilon)\hat{A}i \right), \quad \rho{i,t}
\frac{\pi_{\theta}(y_t \mid q,y_{<t})} {\pi_{\theta_{\mathrm{old}}}(y_t \mid q,y_{<t})}. \mathcal{L}_{\mathrm{LA\text{-}GRPO}}
\mathcal{L}{\mathrm{GRPO}} + \alpha \frac{1}{|M{\mathrm{func}}|} \sum_{t \in M_{\mathrm{func}}} \mathcal{L}{\mathrm{token}}^{(t)}. \alphar{\text{func}}$ 过度 spam token。
3.6 Paper-derived pseudocode(无公开实现)
代码搜索未找到开源实现(checked: arXiv/PDF/source links, project page, exact title + GitHub, arXiv ID, method acronym/title variants, GitHub repo search, direct probe of ZiyuGuo99/ATLAS; official repo currently only has README / LICENSE / assets, no training/inference/config/model code)。因此下面伪代码是按论文方法重构的 PyTorch-style paper pseudocode,不是 released implementation。
FUNC_TOKENS = {
"manip": "<|Manip|>",
"shape": "<|Shape|>",
"line": "<|Line|>",
"arrow": "<|Arrow|>",
"text": "<|Text|>",
}
def map_visual_code_to_functional_token(op: str) -> str | None:
op = op.lower()
if any(k in op for k in ["np.pad", "cv2.blur", "gaussianblur", "filter2d", "convolve"]):
return FUNC_TOKENS["manip"]
if any(k in op for k in ["plt.plot", "ax.plot", "cv2.line"]):
return FUNC_TOKENS["line"]
if any(k in op for k in ["plt.arrow", "ax.arrow", "arrowedline"]):
return FUNC_TOKENS["arrow"]
if any(k in op for k in ["rectangle", "circle", "polylines", "fill", "crop", "resize"]):
return FUNC_TOKENS["shape"]
if any(k in op for k in ["plt.text", "ax.text", "cv2.puttext"]):
return FUNC_TOKENS["text"]
return Noneimport torch
import torch.nn.functional as F
def sft_step(model, tokenizer, batch):
input_ids, images, labels = batch["input_ids"], batch["images"], batch["labels"]
logits = model(input_ids=input_ids, images=images).logits
ce_loss = F.cross_entropy(
logits[:, :-1].reshape(-1, logits.size(-1)),
labels[:, 1:].reshape(-1),
ignore_index=-100,
)
func_mask = torch.isin(labels[:, 1:], tokenizer.functional_token_ids)
func_log_probs = F.log_softmax(logits[:, :-1], dim=-1).gather(-1, labels[:, 1:].clamp_min(0).unsqueeze(-1)).squeeze(-1)
func_loss = -(func_log_probs[func_mask]).mean() if func_mask.any() else logits.new_tensor(0.0)
return ce_loss, func_lossdef compute_atlas_reward(output, answer, parser, cfg):
is_correct = parser.is_correct(output.final_answer, answer)
has_func = output.num_functional_tokens > 0
good_format = parser.has_required_format(output.text)
r_acc = 1.0 if is_correct else 0.0
r_func = 1.0 if (has_func and is_correct) else 0.0
r_fmt = 1.0 if good_format else 0.0
p_len = max(0.0, min(1.0, (len(output.tokens) - cfg.max_len) / cfg.len_buffer))
p_spam = max(0.0, min(1.0, (output.num_functional_tokens - cfg.spam_threshold) / cfg.spam_buffer))
return (
cfg.lambda_acc * r_acc
+ cfg.lambda_func * r_func
+ cfg.lambda_fmt * r_fmt
- cfg.lambda_len * p_len
- cfg.lambda_spam * p_spam
)def la_grpo_auxiliary_loss(policy, old_policy, rollout, advantage, func_token_ids, eps=0.2):
token_ids = rollout["token_ids"]
q_prefix = rollout["query_prefix"]
func_positions = torch.where(torch.isin(token_ids, func_token_ids))[0]
if func_positions.numel() == 0:
return token_ids.new_tensor(0.0, dtype=torch.float32)
losses = []
for t in func_positions.tolist():
logp = policy.log_prob(q_prefix, token_ids, position=t)
old_logp = old_policy.log_prob(q_prefix, token_ids, position=t)
rho = torch.exp(logp - old_logp)
unclipped = rho * advantage
clipped = torch.clamp(rho, 1.0 - eps, 1.0 + eps) * advantage
losses.append(-torch.minimum(unclipped, clipped))
return torch.stack(losses).mean()Code reference: none for public implementation. Official repo ZiyuGuo99/ATLAS checked at
main@e8183df5(2026-05-15) contains only README / LICENSE / assets; pseudocode and mapping below are paper-derived.
| Paper concept | Public source file | Key class/function |
|---|---|---|
| Functional-token vocabulary | 无公开实现;paper §2.1 | Paper-defined `V_func = {< |
| ATLAS-178K construction | 无公开实现;paper §2.2 / Table 2 | Code-operation-to-token mapping described in paper only |
| GRPO reward ensemble | 无公开实现;paper §2.2 | r_acc, r_func, r_fmt, p_len, p_spam described in formula |
| LA-GRPO token anchor | 无公开实现;paper §2.3 | Token-level clipped surrogate on M_func(o_i) described in formula |
| Training scripts/configs | 未公开 | README says code/model/data are under company review and coming soon |
论文公式与 released code 实现差异:本次检查没有 released implementation,因此无法比较公式与代码是否一致;note 中所有训练目标与 reward 细节均来自论文正文 / LaTeX source,而不是源码。
4. Experimental Setup (实验设置)
4.1 Model and training
- Base model:Qwen2.5-VL-7B。
- SFT stage:冻结 vision encoder,只更新 visual projector 和 language model。
- RL stage:继续冻结 vision encoder,优化 aligner 和 language model,训练 1 epoch。
- 未详细说明:论文与当前公开 repo 都未给出 GPU type/count、learning rate、batch size、GRPO group size、reward weights 、、、 等具体训练超参;由于没有公开训练脚本,无法从实际 launch config 验证这些数字。
4.2 Datasets
| 用途 | Dataset | Scale / 说明 |
|---|---|---|
| SFT source | V-Interaction-400K preview subset | 原始 preview subset 含 image-construction code;论文未给出 preview subset 总样本数 |
| SFT functional-token trajectories | ATLAS-178K | 由 V-Interaction 操作解析与过滤得到,其中 138K high-quality examples 覆盖 40+ visual reasoning tasks,再结合 perception data 形成 178K 级别 SFT 数据 |
| Perception preservation | V-Perception-40K | 40K,不含 functional tokens,用于保留 low-level perception |
| RL / LA-GRPO | We-Math 2.0, MMK12, ThinkLite | 覆盖不同 visual reasoning 场景;论文未披露每个 RL dataset 的实际采样数 |
| Evaluation | V*, BLINK, WeMath | 论文报告 accuracy;未在正文中列出 benchmark 样本规模 |
4.3 Baselines and metrics
Baselines 分为五组:closed-source models(GPT-4o、Claude-4-Sonnet、Gemini-2.0-Flash、Gemini-2.5-Pro)、standard VLMs(Qwen2.5-VL、LLaVA-OneVision-7B、MiniGPT-v2、Gemma-3-27B)、unified models(Anole、Bagel)、agentic visual models(Visual CoT、V-Thinker、VTS-V)、latent visual models(LVR、MCOT、CoVT、Monet)。ATLAS 变体包括 ATLAS_SFT、ATLAS_GRPO 和 ATLAS_LA-GRPO。
Evaluation metric 主要是 accuracy。作者先用 rule-based scripts 从输出中解析答案,再用 Qwen3-VL-235B-A22B-Instruct 作为 deterministic LLM-as-a-judge 检查 answer correctness 与 format correctness。Efficiency analysis 在 BLINK-Jigsaw 上报告 per-query averages:All Tokens、Code Tokens、Functional Tokens、Latency、Peak Memory、Accuracy。
5. Experimental Results (实验结果)
5.1 Main benchmark results
| Method | V* | WeMath | BLINK Avg. | BLINK Art. | Count. | Forensic. | IQ | Jigsaw | M-view. | Spatial |
|---|---|---|---|---|---|---|---|---|---|---|
| Qwen2.5-VL | 70.2 | 36.2 | 22.8 | 29.9 | 58.3 | 0.8 | 18.7 | 31.3 | 0.0 | 20.3 |
| V-Thinker | 41.4 | 32.5 | 35.0 | 26.9 | 43.3 | 19.7 | 18.7 | 42.0 | 51.1 | 43.4 |
| VTS-V | 74.9 | 42.8 | 51.2 | 62.4 | 61.7 | 32.9 | 28.7 | 56.1 | 49.4 | 67.2 |
| LVR | 77.5 | 41.2 | 49.4 | 59.0 | 60.0 | 35.6 | 25.3 | 52.7 | 48.1 | 65.0 |
| Gemini-2.5-Pro | 79.1 | 71.3 | 74.6 | 85.5 | 78.3 | 89.4 | 43.3 | 85.3 | 50.4 | 90.2 |
| ATLAS_SFT | 77.5 | 28.9 | 46.0 | 50.4 | 59.2 | 26.5 | 26.0 | 54.7 | 48.1 | 57.3 |
| ATLAS_GRPO | 77.9 | 40.3 | 50.5 | 57.3 | 61.7 | 34.1 | 26.0 | 57.7 | 43.6 | 70.6 |
| ATLAS_LA-GRPO | 75.4 | 45.0 | 51.3 | 65.0 | 62.5 | 37.9 | 26.3 | 51.3 | 53.4 | 62.9 |
主要结论:相对 base Qwen2.5-VL,ATLAS_LA-GRPO 在 BLINK Avg. 从 22.8 提升到 51.3;SFT alone 已经达到 46.0,说明 functional-token trajectories 提供了强 cold start;GRPO 进一步到 50.5,LA-GRPO 到 51.3,尤其在 WeMath 上从 GRPO 的 40.3 提到 45.0,在 Multi-view reasoning 上从 43.6 提到 53.4。不过 Gemini-2.5-Pro 仍显著领先,说明 ATLAS 更像是一个高效可扩展训练范式,而不是直接超过最强闭源模型。
5.2 Qualitative examples and attention behavior
Figure 4 解读:这些例子展示 functional tokens 如何嵌入自然语言 reasoning。中间的 cloud-shaped regions 是作者为了可视化而画出的 imagined reasoning states,不是模型实际生成的图像。可以看到 <|Shape|> 常用于定位相关区域,<|Arrow|> 用来引导注意力到额外证据,<|Text|> 用于计数或标签化。关键点是 token 不是孤立标记,而是和前后文本共同构成 reasoning step。
Figure 5 解读:补充例子强调 functional tokens 的不同用途:局部化、方向提示、视觉证据 refinement、多步推理辅助。它也暴露了方法的边界:这些操作都落在五个预定义 token 的语义范围内;如果任务需要更复杂、开放式、可程序化的图像操作,单 token abstraction 可能不如真正的 code/tool agent 灵活。
Figure 6 解读:作者对 functional token 附近 10 个 token 与 image tokens 的 attention scores 做平均,可视化 functional-token 关注区域。示例中 <|Line|> 会关注几何题中的高度线段,<|Shape|> 会突出空间比较中的猫所在区域。这支持了论文的解释:functional token 不只是文本占位符,而和任务相关视觉证据形成了注意力关联。
Figure 7 解读:更多 attention map 显示不同 functional token 会在不同任务上聚焦不同证据区域。该证据不是因果证明,但提供了可解释性线索:functional token 可能在模型内部把“应当进行哪类视觉操作”与“应该看图中哪块区域”绑定起来。
5.3 Efficiency comparison
| Method | All Tokens ↓ | Code Tokens ↓ | Func. Tokens ↓ | Latency ↓ | Peak Mem. ↓ | Acc. ↑ |
|---|---|---|---|---|---|---|
| V-Thinker | 489.57 | 350.35 | - | 18.83s | 2.55GB | 42.0 |
| ATLAS | 99.85 | - | 0.81 | 3.80s | 1.43GB | 57.7 |
| Relative Gain | 4.90× | 434.3× over operation tokens | 434.3× over operation tokens | 4.96× | 1.78× | +15.7 |
效率结果直接对应论文标题里的 “One Word”:V-Thinker 需要平均 350.35 code tokens 来表达视觉操作,而 ATLAS 平均只用 0.81 functional tokens;per-query latency 从 18.83s 降到 3.80s,peak memory 从 2.55GB 降到 1.43GB,同时 BLINK-Jigsaw accuracy 从 42.0 提到 57.7。
5.4 Ablation:negative reward penalties
| BLINK Acc. | |||
|---|---|---|---|
| ✓ | ✓ | ✓ | 51.3 |
| - | ✓ | ✓ | 50.0 |
| ✓ | - | ✓ | 49.2 |
| ✓ | ✓ | - | 47.0 |
Ablation 说明 LA-GRPO 不是只靠 “多鼓励 functional token” 就能成功。移除 format reward 后 accuracy 降到 50.0,说明 parseable final answer 仍重要;移除 length penalty 降到 49.2,且作者观察到平均序列长度增加 43.8%;移除 token spam penalty 降到 47.0,并出现 reward hacking:模型每条序列最多生成 18.7 functional tokens,不是为了更好推理,而是为了攒 。
5.5 Limitations and takeaways
作者没有单独的 limitations section,但从论文和公开材料可以看到三个现实限制。第一,functional-token vocabulary 只有五类,覆盖常见视觉操作但不等于通用 code agent;第二,当前公开 GitHub 尚无训练代码、模型权重、数据或 launch configs,复现实验需要等待 release;第三,ATLAS 在 efficiency 与开源/同规模基线对比上很强,但绝对性能仍低于 Gemini-2.5-Pro 这类闭源强模型。
整体上,ATLAS 证明了一个值得继续探索的方向:把视觉 reasoning action 做成离散 vocabulary token,可以在保留标准 VLM 训练/推理形态的同时获得 agent-like 的可解释操作接口;LA-GRPO 则说明,当这些关键操作 token 很稀疏时,RL 目标需要专门处理 gradient dilution,否则模型会 underuse 或 spam 这些 token。