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 的构造分三步:

  1. 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
  2. Trajectory construction and polishing:对每个 functional step 插入预定义 transition template,让 functional token 显式出现在 reasoning 轨迹中;随后用 Gemini-2.5-Pro 将模板化轨迹润色成更自然的 reasoning text,同时保持原始语义和 functional-token 顺序。
  3. 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 None
import 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_loss
def 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 conceptPublic source fileKey class/function
Functional-token vocabulary无公开实现;paper §2.1Paper-defined `V_func = {<
ATLAS-178K construction无公开实现;paper §2.2 / Table 2Code-operation-to-token mapping described in paper only
GRPO reward ensemble无公开实现;paper §2.2r_acc, r_func, r_fmt, p_len, p_spam described in formula
LA-GRPO token anchor无公开实现;paper §2.3Token-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

用途DatasetScale / 说明
SFT sourceV-Interaction-400K preview subset原始 preview subset 含 image-construction code;论文未给出 preview subset 总样本数
SFT functional-token trajectoriesATLAS-178K由 V-Interaction 操作解析与过滤得到,其中 138K high-quality examples 覆盖 40+ visual reasoning tasks,再结合 perception data 形成 178K 级别 SFT 数据
Perception preservationV-Perception-40K40K,不含 functional tokens,用于保留 low-level perception
RL / LA-GRPOWe-Math 2.0, MMK12, ThinkLite覆盖不同 visual reasoning 场景;论文未披露每个 RL dataset 的实际采样数
EvaluationV*, 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_SFTATLAS_GRPOATLAS_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

MethodV*WeMathBLINK Avg.BLINK Art.Count.Forensic.IQJigsawM-view.Spatial
Qwen2.5-VL70.236.222.829.958.30.818.731.30.020.3
V-Thinker41.432.535.026.943.319.718.742.051.143.4
VTS-V74.942.851.262.461.732.928.756.149.467.2
LVR77.541.249.459.060.035.625.352.748.165.0
Gemini-2.5-Pro79.171.374.685.578.389.443.385.350.490.2
ATLAS_SFT77.528.946.050.459.226.526.054.748.157.3
ATLAS_GRPO77.940.350.557.361.734.126.057.743.670.6
ATLAS_LA-GRPO75.445.051.365.062.537.926.351.353.462.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

MethodAll Tokens ↓Code Tokens ↓Func. Tokens ↓Latency ↓Peak Mem. ↓Acc. ↑
V-Thinker489.57350.35-18.83s2.55GB42.0
ATLAS99.85-0.813.80s1.43GB57.7
Relative Gain4.90×434.3× over operation tokens434.3× over operation tokens4.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。