GUI-Libra: Training Native GUI Agents to Reason and Act with Action-aware Supervision and Partially Verifiable RL
Paper: arXiv:2602.22190 Code: GUI-Libra/GUI-Libra Code reference:
main@f3e9c78e(2026-03-29)
1. Motivation (研究动机)
GUI-Libra 关注的是 native GUI agent:单个 VLM 直接看截图、读任务和历史、输出可执行 GUI action,而不是把 planner、summarizer、grounder 拆成多个模块。论文的出发点是:开源 native GUI agent 在单步 grounding 和短动作执行上进展很快,但在 AndroidWorld、WebArena-Lite-v2、Online-Mind2Web 这类长程交互里仍明显落后于闭源或多模块系统。
具体瓶颈有三层。第一,开放数据里缺少“动作对齐的长 CoT reasoning”:Table 2 显示 GUI-Libra-81K 的平均 thought token/step 为 210,而 MM-Mind2Web 是 0、AndroidControl 是 11、AGUVIS Stage2 L3 是 85;没有足够长且动作对齐的推理轨迹,模型很难学到“为什么下一步应该点这里/输入这个”。第二,直接把 LLM/RLVR 的后训练 recipe 搬到 GUI 会出问题:Figure 4 和 Figure 8 都显示,长 CoT 会干扰精确 grounding,response 越长,坐标预测越容易下降。第三,多步 GUI navigation 的 reward 不是完全可验证的:离线数据通常只给一个 demonstration action,但真实环境里同一状态可能有多个有效下一步;把所有不匹配 demonstration 的动作都当负样本,会惩罚 valid alternative。
Figure 1 解读:图中把论文的两个核心挑战放在同一张图里:左边是“reasoning vs. grounding”的冲突,短 CoT 有利于动作简洁,长 CoT 有利于计划但会拖累坐标;右边是“partial verifiability”,同一个页面状态下可能有多个可继续完成任务的 action,但离线 verifier 只奖励 demonstration action。GUI-Libra 的方法正是分别用 action-aware SFT 和保守 RL 来处理这两个问题。
这个问题值得研究,因为 GUI agent 的最终价值不在离线单步匹配,而在真实闭环操作:网页状态会变化、移动端 UI 会异步刷新、一个错误动作会把后续状态带到离线分布之外。若开源 native GUI agent 能在单模型内同时保持 reasoning 和 precise action,就能减少外部 grounding 模块、step summary 模块和闭源 planner 的依赖,使 GUI automation 更轻、更可复现,也更容易部署到 web/mobile 混合场景。
2. Idea (核心思想)
核心洞察是:GUI agent 的后训练不能把 reasoning token 和 action/grounding token 当成同质文本,也不能把离线 demonstration match 当成完全可靠的负反馈。 GUI-Libra 把问题拆成两段:SFT 阶段用 mixed supervision + token reweighting 让模型既会推理又不会丢动作精度;RL 阶段用 KL-regularized GRPO + success-adaptive negative gradient scaling (SNGS) 限制策略漂移并减轻“未匹配 demonstration 但可能仍正确”的负梯度。
关键创新可以概括为三件事:一是构建 GUI-Libra-81K,把现有 web/mobile 轨迹扩展成包含 <think> reasoning 与结构化 <answer> action 的 81K-step 数据;二是提出 Action-aware SFT (ASFT),在同一训练集中混合 reasoning-then-action 和 direct-action 两种输出,并对 action/grounding token 加权;三是提出面向 partial verifiability 的 RL 分析与实现,把 KL 视为控制 offline-to-online predictability 的 trust region,再用 SNGS 只缩小 ambiguous negative advantage。
和 GUI-R1、UGround/SeeAct-V、ScaleCUA 等路线相比,GUI-Libra 的差异不是“也做 RL”或“也有 CoT”,而是把 GUI 特有的监督结构纳入目标函数:UGround-style 框架通常把 planner 与 visual grounding 分开,GUI-R1/部分 RLVR recipe 更接近单步可验证 reward;GUI-Libra 则尝试让一个 native VLM 直接输出可执行 action,并显式处理长 CoT 对坐标的副作用以及多步导航里 negative reward 的不可靠性。
3. Method (方法)
3.1 Overall framework:从数据到两阶段训练
整体流程包含四个层次:数据构建、ASFT、conservative RL、统一 action/reward/evaluation。模型输入是任务 instruction、当前 screenshot 和 interaction history;输出是 <think>...</think><answer>{...}</answer>,其中 JSON action 包含 action_type、action_description、value、point_2d 等字段。
Figure 5 解读:上半部分是 Stage 1 ASFT:同一条 GUI trajectory 会派生出 reasoning+action 版本和 direct-action 版本,训练时 prompt/reasoning/action/grounding token 被赋予不同权重。下半部分是 Stage 2 conservative RL:模型按组 rollout,多条候选 action 经过 partially-verifiable reward 打分,再进入 GRPO;KL loss 控制策略不要远离 reference SFT policy,SNGS 根据 group success ratio 调整负 advantage 的强度。
直觉上,GUI-Libra 不是简单让模型“多想一点”。GUI action 的最后几枚坐标 token 往往比前面的自然语言 token 更脆弱,长 reasoning 既会占用上下文和 generation budget,也会把模型的概率质量推向解释性文本而不是结构化 action。因此 ASFT 需要把“会解释”和“会点对位置”拆开加权;RL 阶段则需要避免把所有非 demonstration action 都当错,因为在 GUI 页面里“先打开搜索框”和“先切换 filter”可能都能推进任务。
3.2 GUI-Libra-81K 数据构建与过滤
数据源来自 GUI-Odyssey、AMEX、AndroidControl、AitZ、AitW、GUIAct、MM-Mind2Web 等公开 web/mobile trajectory,并额外加入 GUIAct 中文子集。初筛会去掉不完整轨迹、少于 3 步或多于 50 步的异常轨迹,以及无法映射到统一 action space 的 compound action;清洗后得到 19K trajectories、170K steps。
统一格式把每个 step 写成“视觉观察 + 文本上下文 → reasoning + structured action”。action space 包含 13 类常见操作:Click、Write、Terminate、Swipe、Scroll、NavigateHome、Answer、Wait、OpenAPP、NavigateBack、KeyboardPress、LongPress、Select。action_target 用自然语言描述 UI 元素,action_description 用一句话记录本步意图,并被追加到后续 history 中。
Figure 3 解读:Figure 3a–3d 展示 SFT/RL 数据源、action type 与 step-index 分布。SFT 数据以 mobile 为主,web 只占 14.3%;Click 约占 60%,Write、Terminate、Swipe 次之,LongPress/Select 很少。RL 子集通过下采样 early steps 和 mobile trajectories,让 step index 与 domain 更平衡,避免 RL 只学到打开 app、进入首页等重复初始动作。
reasoning augmentation 不是直接让模型复述 demonstration。作者扩展 prompt,要求生成 observation description、reflection、planning,并允许 generator 在有理由时选择不同于原 annotation 的 action;然后再过滤掉 reasoning/action/coordinate 不一致的样本。SFT 过滤包含两步:用 Qwen3-VL-8B-Instruct 对每个输入随机重预测 10 次,若 action match 频率低于 0.3 则丢弃;再用 Qwen3-VL-32B-Instruct 根据 screenshot 和 action target 预测 bounding box,仅保留原 point_2d 落在 box 内的样本。最终 SFT 数据为 81K steps / 9K trajectories,RL 使用更均衡的 40K-step 子集。
Figure 13 解读:这个附录图比较 GPT-4o、o4-mini、GPT-4.1 作为 reasoning generator 时对后续 grounding 的影响。论文用它说明 reasoning augmentation 的质量不是“有 CoT 就行”,generator 需要能产出与 action target、action type 和坐标一致的短而有用的思路。
3.3 Action-aware SFT:混合监督与 token-level reweighting
普通 SFT 目标为
其中 拼接 reasoning trace 与 executable action。GUI-Libra 的 ASFT 把 target 分成 reasoning token 、action token 、grounding token ,并在 mixed dataset 上优化:
这里 同时包含 reasoning-then-action 样本与去掉 <think> 的 direct-action 样本;后者让模型学会不经长推理直接输出动作。 强化 action field, 强化 point_2d 坐标。特殊情形包括: 退化为普通 SFT; 接近 CoT-free SFT; 时接近 grounding-only SFT。
Figure 4b 解读:Grounding-only 训练有小幅提升,去掉 CoT 的 SFT 变化较小,而带长 CoT 的 SFT 会明显拉低 grounding performance。这个结果支持 ASFT 的设计:不能简单删掉 reasoning,因为在线长程任务仍需要 planning;也不能把所有 token 平均训练,因为坐标 token 会被长文本稀释。
论文公式与 released code 实现差异:论文写成 与 两个显式系数;released SFT code 的 Qwen2.5 launch (SFT/scripts/train_qwen2_5.sh) 使用 --use_action_weight True --action_weight 2.0,而 SFT/src/aguvis/dataset.py 会把 <answer>...</answer> 内 token 乘以 action_weight,并把 "point_2d": 后的 token 再乘以 action_weight * 2,因此对应约 。Qwen3 launch (SFT/scripts/train_qwen3.sh) 则显示 use_action_weight=False、action_weight=1,这和论文 Appendix B 对 GUI-Libra-4B 使用 一致,但 released example script 不完整覆盖论文中所有模型的最终训练差异。
def action_aware_sft_loss(model, batch, action_weight=2.0):
outputs = model(input_ids=batch["input_ids"], attention_mask=batch["attention_mask"])
logits = outputs.logits[:, :-1]
labels = batch["labels"][:, 1:]
token_loss = F.cross_entropy(
logits.reshape(-1, logits.size(-1)),
labels.reshape(-1),
ignore_index=-100,
reduction="none",
).view_as(labels)
# released code builds these weights by locating <answer>...</answer>
# and the token span after "point_2d":.
weights = batch.get("action_weights")[:, 1:].float()
valid = labels.ne(-100)
effective_weight = valid.float() * weights
return (token_loss * effective_weight).sum() / effective_weight.sum()3.4 Partially verifiable RL:为什么离线 step accuracy 不总能预测在线 success
论文把 GUI interaction 形式化为 goal-conditioned POMDP / finite-horizon MDP。离线数据在状态 给一个 demonstrated action ,但真实有效 action 集合是 。partial verifier 的 reward 为: 它的特点是 positive reliable:;但 negative ambiguous: 不推出 。
离线 score 定义为 在线 success 是闭环轨迹成功概率 。论文定义两个控制量:occupancy mismatch 和 off-demo validity mass 在假设失败轨迹至少有一步无效 action 时,Theorem 5.1 给出: 这说明离线 step match 能否预测在线 success,取决于策略是否访问了离线 support 之外的状态,以及策略是否把概率质量放在未被 demonstration 标注但其实有效的 action 上。
Figure 6 解读:MM-Mind2Web 的 symbolic action history 不像真实用户历史,AndroidControl 又有 action type mismatch 和 coordinate mismatch。这个图解释了为什么论文要构建 v2 benchmark:如果离线 benchmark 本身有历史表示和标注噪声,step accuracy 的解释性会进一步变差。
3.5 KL-regularized GRPO 与 SNGS
GRPO 在同一状态/上下文 下采样 个候选 action,得到 group-normalized advantage: 论文使用带 KL 的 clipped objective: KL 的作用不是只为了“不要偏离原模型”,而是理论上同时控制 和 。若每个状态满足 ,论文给出非正式界: 因此 moderate KL 能让离线 score 更像在线 success 的 proxy。
SNGS 进一步处理 ambiguous negative。对同一 state 的 group,定义 empirical group success rate: 再定义 直觉是:当 group 里很多 rollout 都命中 demonstration action,non-match 更可能是真错,负梯度可以强一些;当 group success 低时,non-match 可能只是 valid alternative 或 verifier 漏标,因此要保守。
论文公式与 released code 实现差异:released code 在 EasyR1/verl/trainer/core_algos.py 中注册 grpo_weighted_positive_negative,先按 group reward 计算 normalized score,再只对负 score 乘 clamp(weighted_posneg_base + weighted_posneg_coef * id2mean[index], 0, 1)。因为 reward 近似二值时 id2mean 就是 group success ratio,这与论文的 对应;但 released example scripts (EasyR1/examples/gui_grpo.sh, EasyR1/examples/gui_grpo_qwen3.sh) 使用 weighted_posneg_base=0.5, weighted_posneg_coef=1.5,而论文 Appendix B 报告的模型特定 为 3B 、7B 、4B 、8B 。因此笔记中的伪代码按 released implementation 写,训练配置同时记录论文表格与 release script 的差异。
def sngs_grpo_advantage(rewards, group_ids, base=0.5, coef=1.5, eps=1e-6):
# rewards: one scalar per sampled response, usually format/action reward sum
advantages = torch.empty_like(rewards)
for gid in group_ids.unique():
idx = group_ids.eq(gid)
group_r = rewards[idx]
mean = group_r.mean()
std = group_r.std()
scores = (group_r - mean) / (std + eps)
scale = torch.clamp(base + coef * mean, min=0.0, max=1.0)
scores = torch.where(scores < 0, scores * scale, scores)
advantages[idx] = scores
return advantages3.6 Reward function 与 action verifier
每个 rollout 输出: 其中 step-wise reward 是 format verifier 和 accuracy verifier 的加权和: accuracy 部分检查 action type、value 和 grounding:。value 用 word-level F1,阈值为 0.5;grounding 检查预测点是否落入 demonstrated bounding box。
released EasyR1/examples/reward_function/r1gui.py 的实现有几个实际细节:r1gui_format_reward 允许 <think>...</think> 可选,但 compute_score 会根据样本是否是 grounding task 调整 format score:非 grounding reasoning task 如果没有 <think>,format score 置 0;grounding task 如果用了 reasoning,format score 也置 0。坐标 reward 在 ground truth 是点时使用 normalized distance <0.05^2,是 bbox 时使用 inside-box 判断;click/longpress 要过坐标检查,write/select/scroll/openapp/swipe/terminate/answer 则在 action match 后看 value F1 是否 ≥0.5。
def gui_reward(response, ground_truth, format_weight=0.1):
fmt = valid_answer_json(response) # action_type/action_description/value/point_2d
pred = parse_answer(response)
if normalize(pred.action_type) != normalize(ground_truth["gt_action"]):
acc = 0.0
elif pred.action_type in {"click", "longpress"}:
acc = point_inside_target_or_close(pred.point_2d, ground_truth)
elif pred.action_type in {"write", "select", "scroll", "openapp", "swipe", "terminate", "answer"}:
acc = float(word_f1(pred.value, ground_truth["gt_input_text"]) >= 0.5)
else:
acc = 1.0
if (not ground_truth.get("is_grounding", False)) and "<think>" not in response:
fmt = 0.0
if ground_truth.get("is_grounding", False) and "<think>" in response:
fmt = 0.0
return (1 - format_weight) * acc + format_weight * fmt3.7 Code-to-paper mapping
Code reference:
main@f3e9c78e(2026-03-29) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| SFT / ASFT launch config | SFT/scripts/train_qwen2_5.sh, SFT/scripts/train_qwen3.sh | accelerate launch train.py, --use_action_weight, --action_weight, LR/batch/epoch flags |
| ASFT token weighting | SFT/src/aguvis/dataset.py | LazySupervisedDataset.__getitem__ builds action_weights for <answer> and "point_2d" spans |
| Weighted SFT loss | SFT/src/aguvis/trainer.py | AGUVISTrainer.compute_loss multiplies token CE by action_weights before averaging |
| RL launch config | EasyR1/examples/gui_grpo.sh, EasyR1/examples/gui_grpo_qwen3.sh | algorithm.adv_estimator=grpo_weighted_positive_negative, algorithm.kl_coef=0.001, rollout settings |
| SNGS / weighted negative GRPO | EasyR1/verl/trainer/core_algos.py | AdvantageEstimator.GRPO_WeightedPositiveNegative, compute_grpo_outcome_advantage |
| Reward function | EasyR1/examples/reward_function/r1gui.py, r1gui_qwen3vl.py | r1gui_format_reward, r1gui_accuracy_reward, compute_score |
| RL action/grounding masks | EasyR1/verl/workers/actor/dp_actor.py | DataParallelPPOActor.update_policy supports response_action_mask and response_grounding_mask |
| Rollout token masks | EasyR1/verl/workers/rollout/vllm_rollout_spmd.py | detects answer/action/grounding token spans during vLLM rollout |
| Offline / online evaluation | evaluation/offline_evaluation/, evaluation/android_world_seeact_v/, evaluation/WebArenaLiteV2/, evaluation/online-mind2web-eval/ | benchmark-specific parsing, scoring, and environment adapters |
4. Experimental Setup (实验设置)
Datasets and scale
训练数据包括 GUI-Libra-81K SFT 数据和 40K RL 子集。GUI-Libra-81K 来自 9K trajectories / 81K SFT steps,源数据初筛前为 19K trajectories / 170K steps;主要来源包括 GUI-Odyssey、AMEX、AndroidControl、AitZ、AitW、GUIAct、MM-Mind2Web,web 只占 SFT 数据约 14.3%。RL 数据从 SFT pool 中重采样 40K steps,减少 early-step bias 和 mobile-domain imbalance。
评测数据分为 grounding、offline navigation、online navigation。ScreenSpot-v2 含 1,269 tasks,ScreenSpot-Pro 含 1,555 tasks,用预测坐标是否落入 target bbox 衡量 grounding。AndroidControl-v2 从 UGround 的 500 sampled examples 过滤出 398 examples,分别评 high-level 与 low-level instruction。MM-Mind2Web-v2 含 Cross-Task 1,328、Cross-Website 1,019、Cross-Domain 1,002 samples。WebArena-Lite-v2 有 154 locally deployed web tasks;Online-Mind2Web 覆盖 136 live websites / 300 web agent tasks;AndroidWorld 以 20-step horizon 汇报任务成功率。
Baselines
离线 benchmark 比较了 proprietary + SeeAct-V/UGround framework(GPT-4o、GPT-4.1、GPT-5-mini、GPT-5 + UGround-v1-7B)和 open-source native models(GUI-R1-3B/7B、Aguvis-7B、UI-TARS-1.5-7B、GLM-4.1V-9B-Thinking、Qwen2.5-VL-32B/72B、Qwen3-VL-32B、Qwen2.5-VL-3B/7B、Qwen3-VL-4B/8B)。在线 benchmark 还包含 ScaleCUA-3B/7B/32B、UI-TARS-72B-DPO、InternVL3.5-241B-A28B,以及带 step-wise summary 或 GPT-4o planner 的多模块 framework。
Metrics
离线 navigation 的主指标是 step success rate / step accuracy,要求 action type、textual value(如适用)和 coordinates 都正确;报告 Pass@1 和 Pass@4。MM-Mind2Web-v2 还拆分 Cross-Task、Cross-Website、Cross-Domain。AndroidWorld、WebArena-Lite-v2、Online-Mind2Web 报告 task success rate;Online-Mind2Web 用 o4-mini 与 WebJudge-7B 两种 judge,并报告 easy/medium/hard/overall。附录还报告 grounding accuracy、operation F1、offline-online Pearson/Spearman correlation。
Training config
SFT 以 Qwen2.5-VL-3B/7B-Instruct 和 Qwen3-VL-4B/8B-Instruct 为 backbone,full-parameter fine-tuning,LR ,cosine scheduler,warmup ratio 0.01,weight decay 0,per-device batch size 4,gradient accumulation 8,8 GPUs 下 effective batch size 256,gradient checkpointing enabled。论文 Appendix B 说明 SFT/ASFT 在 GUI-Libra-81K 上训练 2 epochs,mixed reasoning+direct-action 数据因大小翻倍训练 1 epoch;Qwen3-VL-4B/8B 在 8 B200 GPUs 上约 4h/5.5h。released SFT/scripts/train_qwen2_5.sh 对 Qwen2.5 使用 num_epochs=1,但对非 mixnoreasoning mode 自动翻倍到 2;SFT/scripts/train_qwen3.sh 使用 Qwen3-VL-4B/8B、mixed no-reasoning YAML、num_epochs=1。
RL 使用 VERL/EasyR1、FSDP、vLLM,rollout samples per prompt 8,rollout batch size 256,top-p 0.98,temperature 1.0,max prompt length 8092,max response length 1500,training iterations 300,LR ,AdamW bf16,global batch size 128,micro batch update 4,micro batch experience 8,clip ratio 0.2。论文 Table 14 写 KL coefficient 默认 0.001,GUI-Libra-7B 为 0.005;Appendix B 写 8 B200 GPUs 上 Qwen3-VL-4B/8B RL 约 16h/20h。released EasyR1/examples/gui_grpo.sh / gui_grpo_qwen3.sh 也设置 data.rollout_batch_size=256、worker.rollout.n=8、algorithm.kl_coef=0.001、trainer.n_gpus_per_node=8,但 example script 的 trainer.total_epochs=2 和 placeholder TRAIN_FILES=your_dataset@train 说明它是复现入口而非完整 paper-specific job manifest。
5. Experimental Results (实验结果)
Main offline results
AndroidControl-v2(Table 3)上,GUI-Libra 系列对同尺寸 baseline 都有显著提升。Qwen2.5-VL-3B baseline 为 High Pass@1/Pass@4 36.4/50.8、Low 71.1/79.2,GUI-Libra-3B 提升到 57.3/67.1、85.9/90.5。Qwen2.5-VL-7B baseline 为 46.5/58.5、67.8/81.7,GUI-Libra-7B 为 59.3/67.3、85.2/90.7。Qwen3-VL-4B baseline 为 49.3/63.3、78.9/82.4,GUI-Libra-4B 为 62.3/68.6、86.4/93.0。Qwen3-VL-8B baseline 为 54.8/66.1、77.6/83.2,GUI-Libra-8B 达到 64.3/70.6、88.9/91.7。
MM-Mind2Web-v2(Table 4)上,GUI-Libra-3B average Pass@1/Pass@4 为 42.7/50.3,相比 Qwen2.5-VL-3B 的 23.4/28.3 提升 +19.3/+22.0。GUI-Libra-7B 为 46.5/53.6,相比 Qwen2.5-VL-7B 的 32.5/45.2 提升 +14.0/+8.4。GUI-Libra-4B 为 50.0/55.6,相比 Qwen3-VL-4B 的 41.2/51.3 提升 +8.8/+4.3。GUI-Libra-8B 为 50.5/55.2,相比 Qwen3-VL-8B 的 43.8/52.8 提升 +6.7/+2.4。
Main online results
AndroidWorld(Table 5)中,GUI-Libra-3B 从 Qwen2.5-VL-3B 的 3.5 提升到 25.2;GUI-Libra-7B 从 7.8 提升到 29.6;GUI-Libra-4B 从 Qwen3-VL-4B 的 27.0 提升到 42.6;GUI-Libra-8B 从 30.4 提升到 42.6。GUI-Libra-4B/8B 的 42.6 已接近或超过带 UGround 的 GPT-4o 42.6、GPT-5-mini 40.9,并高于 Qwen3-VL-32B native 的 34.8。
WebArena-Lite-v2(Table 6)上,GUI-Libra-3B/7B/4B/8B average success 分别为 16.7/22.6/24.4/26.6;对应 baselines Qwen2.5-VL-3B/7B/Qwen3-VL-4B/8B 为 0.8/4.9/11.9/15.3。GUI-Libra-8B 的 26.6 高于 ScaleCUA-32B 24.0、UI-TARS-72B-DPO 23.4、Aguvis-72B 5.8,并接近 GPT-4o+ScaleCUA-7B framework 的 28.6。
Online-Mind2Web(Table 7)上,按 o4-mini 和 WebJudge-7B 两个 judge 的 Avg. Overall:Qwen2.5-VL-3B 为 4.8,GUI-Libra-3B 为 21.3;Qwen2.5-VL-7B 为 15.8,GUI-Libra-7B 为 25.5;Qwen3-VL-4B 为 21.7,GUI-Libra-4B 为 25.7;Qwen3-VL-8B 为 19.3,GUI-Libra-8B 最高为 28.0。ScaleCUA-7B/32B 分别是 23.7/23.5,说明 GUI-Libra 的 live-website generalization 不只来自离线 benchmark 适配。
Figure 7 解读:AndroidWorld 轨迹展示 GUI-Libra-7B 在多步任务中逐步定位 app、打开页面、搜索并判断目标完成。这个案例的价值在于展示 native model 直接生成 reasoning + action JSON,而不是依赖外部 planner/grounder 组合。
Grounding degradation, ASFT, and RL
Figure 8 解读:左侧曲线显示 response 越长,base/SFT grounding correctness 越低;ASFT 尤其在高权重设置下能保持长输出下的 grounding。右侧 Table 8 给出 exact token/accuracy:SFT-3B reason 为 223.4 tokens / 73.4%,ASFT-3B no-reason 67.7 / 81.0%,ASFT-3B reason 200.2 / 76.2%;经过 RL 后 GUI-Libra-3B no-reason 为 59.0 / 83.2%,reason 为 206.5 / 83.4%。7B 上 SFT reason 为 218.2 / 79.0%,ASFT reason 为 169.6 / 83.4%,GUI-Libra-7B no-reason 为 124.4 / 88.5%,reason 为 176.1 / 89.3%。这说明 RL 后 reasoning mode 不再明显牺牲 grounding。
KL regularization and offline-online predictability
Figure 9 解读:有无 KL 的训练 reward 曲线接近,但 entropy、offline eval 和 AndroidWorld online success 行为不同。无 KL 时 reward 仍可能上升,但 policy entropy 更快下降,离线和在线评测出现退化,符合 reward hacking / overfitting 的现象;小 KL 能稳定策略并改善 evaluation trajectory。
Figure 10 解读:所有 checkpoint 的 offline vs online 关系整体 Pearson 为 ,但分 KL 后差异明显:KL-regularized checkpoints 的 Pearson/Spearman 为 0.89 () / 0.83 (),无 KL 为 0.63 () / 0.53 ()。这直接支持论文理论:控制策略漂移后,离线 step metric 才更能预测闭环 online success。
Ablations
Table 9 显示 ASFT 和 RL 都有贡献。以 Qwen2.5-VL-3B 为 backbone,Base Model 在 MM-Mind2Web-v2 / AC-v2 High / AC-v2 Low / AndroidWorld 上为 23.4/36.4/71.1/3.5(Pass@1 或 success);SFT 为 28.5/45.7/73.1/5.2;SFT + Mixed Data 为 30.2/45.5/72.6/11.3;ASFT 为 32.0/44.5/75.4/13.0;GUI-Libra with KL=0.001 达到 42.7/55.8/89.5/25.2。去掉 ASFT 但保留 KL=0.001 时为 41.9/57.0/86.2/20.9,说明 RL 本身很强,但 ASFT 对 online success 和 grounding 仍有额外贡献。
Figure 11 解读:SFT 和 RL 两阶段的数据过滤都提升 Pass@1/Pass@4;论文正文给出例子:SFT filtering 让 AndroidControl-High 提升 +4.5 Pass@1 / +6.3 Pass@4,RL filtering 又额外带来 +0.5 Pass@1 / +3.7 Pass@4。这说明小而干净、domain/step 更平衡的数据,比直接扩大噪声数据更有用。
SNGS 的效果在 Table 10 中体现:GUI-Libra-4B w/o SNGS 在 AndroidWorld / WebArena-Lite-v2 为 39.1 / 22.2,w/ SNGS 为 42.6 / 24.4;MM-Mind2Web-v2 Pass@1/Pass@4 从 49.1/55.1 到 50.0/55.6;AC-v2 High 从 59.8/69.9 到 62.3/68.6;AC-v2 Low 从 87.7/92.0 到 86.4/93.0。SNGS 更明显改善 online generalization,同时可能在低层、短程任务上略有 trade-off。
混合 grounding 数据进入 RL 并非无代价。Table 11 显示 GUI-Libra-4B + Mix Grounding 20k 在 ScreenSpot-v2 / ScreenSpot-Pro 从 92.3/54.3 提升到 94.6/61.4,但 MM-Mind2Web-v2 从 49.1 降到 43.9,AC-v2 Low 从 87.7 降到 84.9;GUI-Libra-8B 也类似,ScreenSpot-v2/Pro 从 90.7/54.1 到 94.8/59.9,但 AC-v2 High/Low 从 65.6/88.7 降到 61.7/86.4。结论是直接 grounding supervision 会改善定位 benchmark,却可能损害 reasoning/navigation,因此 GUI-Libra 主线使用 navigation-focused RL。
Limitations and conclusion
作者明确暴露了几个限制。第一,web 数据占比低:SFT 中 web 只有 14.3%,论文也把 MM-Mind2Web / WebArena 的部分差距归因于高质量 web trajectory 不足。第二,SNGS 对超参数敏感,论文在非 SNGS ablation 中使用 KL-regularized GRPO 来隔离其它组件。第三,离线/在线评测的公平性仍受 evaluator 和 environment 影响,例如 WebArena-Lite-v2 需要修复 action parsing、Map environment、fuzzy evaluation,Online-Mind2Web 依赖 o4-mini/WebJudge-7B judge。第四,released repo 提供了官方训练/评测入口,但部分 example script 与论文最终配置存在差异,复现时需要以 commit main@f3e9c78e 下的具体脚本和论文 Appendix B 同时校验。
总体上,GUI-Libra 的实验证明:在 native GUI agent 中,reasoning 不是越长越好,RL 也不是越少约束越好;关键是把 action/grounding token、partial verifier、offline-online mismatch 当作 GUI-specific training structure 来处理。结果上,GUI-Libra 在 AndroidControl-v2、MM-Mind2Web-v2、AndroidWorld、WebArena-Lite-v2、Online-Mind2Web 上均显著强于同尺寸 backbone,并在部分 online benchmark 上接近或超过更大的 native/open-source/proprietary agent framework。