GRPO:GUI 接地做得好

预计阅读时间:8 分钟
强化学习 (RL)(例如 GRPO)有助于接地,因为它具有固有的目标对齐——奖励任何成功的点击——而不是鼓励冗长的文本思维链 (CoT) 推理(也称为“思考”)。在本博客中,我们将分享一套使用 GRPO 训练最先进的 GUI 接地模型的完整方法。杨彦、李东旭、杨宇豪、罗子扬、戴雨桐、陈泽元、徐然、潘立元、熊才明、李俊楠
Salesforce Research、澳大利亚国立大学、香港大学、北京理工大学
🤔 什么是 GUI 接地?
当图形用户界面 (GUI) 代理代表用户执行任务时,一个关键步骤是接地,即根据用户指令确定要“点击”UI 的坐标。形式上,任务是根据文本指令预测 GUI 屏幕截图图像上的 坐标。目标是根据用户意图识别并点击正确的目标元素,例如按钮、链接或图标。下面,我们提供一个具体的示例。

🧪 为什么选择 GRPO?
在 GUI 接地中,目标元素内的任何点击都被认为是正确的预测,这意味着输出坐标 只需要落在正确元素区域内即可。与监督微调 (SFT) 严格训练模型预测目标元素的精确中心不同,组相对策略优化 (GRPO) 采用更灵活的方法。它学习优化成功操作,接受目标区域内一系列有效的点击,这更符合真实用户交互行为。

通常,在使用 GRPO 训练模型时,模型会先对指令和图像进行推理,然后生成最终答案,预期输出格式为
<think> the textual reasoning process </think>
<answer> the answer to the user instruction </answer>
我们将 <think>
标签中包含的推理过程称为文本思维链 (CoT) 和“思考”。
📦 GUI 接地数据集
为了有效地使用 GRPO 训练模型,我们需要包含以下内容的数据集:
- 指令;
- GUI 图像;
- 目标元素边界框(即,有效点击区域)。
例如,
{ "instruction": "Click menu", "image_path": "images/screenshot_001.png", "target_bbox": { "x_min": 12, "y_min": 10, "x_max": 42, "y_max": 40 } }
通常有三种主要类型的训练数据:
- 移动端(例如,Android 或 iOS 应用程序);
- 桌面端(例如,Windows、Linux 应用程序);
- Web 端(例如,基于浏览器的界面)。
对于桌面和 Web 数据集,数据通常通过屏幕截图以及 A11y 或 HTML 解析器等辅助工具收集,以提取元素结构和边界框。然而,由于 UI 动画或时间不一致,这些边界框有时可能与视觉渲染不一致。在我们的工作中,我们主要依赖于从 Aria-UI 和 OS-Atlas 整理的数据集,我们发现它们比其他数据集合更干净、对齐更好。
为了进一步提高数据质量,我们采用了一种轻量级的清理策略:
- 使用 OmniParser 检测屏幕截图上的所有元素;
- 计算每个带注释边界框与检测到元素之间的最大交并比 (IoU);
- 过滤掉目标边界框低于预定义 IoU 阈值的样本。
这有助于确保训练数据与实际视觉目标保持一致,减少由于注释未对齐而导致的噪声。虽然这种方法偶尔会过滤掉少量误报,但我们发现这种情况占数据的不到 3%。有关详细信息,请参阅我们的代码。

🛠️ 模型训练
我们使用各种开源模型作为基线模型(例如,UI-TARS 和 Qwen2.5-VL),参数规模从 7B 扩展到 32B 和 72B,并使用 VLM-R1 代码库进行训练。训练过程可以在大约 800 H100 GPU 小时内完成,经过 250 次优化迭代。在此,我们分享训练过程中的关键见解和经验教训。
- 使用 GRPO 实现强大的接地性能不需要“思考”。GRPO 的有效性主要来自于其目标对齐——无论点击如何表达,都会奖励成功的点击。事实上,避免“思考”和 KL 正则化通常会导致更灵活和准确的坐标预测。我们稍后将更详细地讨论使用“思考”的权衡——它往往只在特定场景下有帮助。
- 基于点击的奖励就足够了。我们尝试了各种奖励函数(例如,基于 MSE 的、基于 IoU 的、用于“思考”的格式奖励等等)。一个简单的奖励,即检查预测点是否落在目标区域内,就足以实现强大的性能。
- 对于“思考”和“非思考”GRPO,执行 SFT 作为冷启动是不必要的。Qwen2.5-VL 和 UI-TARS 已经足够强大,并且在 GRPO 之前进行 SFT 不会显着改善接地性能。
- 使用大于 128 的批量大小。较小的批量(例如,16 或 32)可能导致训练不稳定。例如,如果一个批量只包含完全正确或不正确的样本,奖励信号可能会消失,导致模型崩溃。
- 每个指令采样 8 个响应通常足以实现强大的性能。增加这个数字会产生递减的回报。(重要提示:在采样期间,请务必添加“坏词”(即禁止的标记)以防止模型生成
<img>
标记。在多样化的数据集和更长的训练运行中,忘记这一点可能导致对齐问题或与图像标记生成相关的虚假行为。) - 不需要与参考模型进行 KL 散度。Qwen2.5-VL 在移动领域通常表现强劲。虽然添加 KL 惩罚可能有助于在移动环境中保持性能,但它往往会限制在桌面和 Web 领域中的探索。
- 模型对学习率不敏感。
1e-6
的峰值学习率在大多数设置中通常效果很好。

📈 模型表现如何?
我们遵循标准评估协议,并在三个具有挑战性的数据集上对我们的模型进行了基准测试。我们的方法在所有开源模型家族中始终取得最佳结果。以下是比较结果:
模型 | 大小 | 开源 | ScreenSpot-V2 | ScreenSpotPro | OSWORLD-G |
---|---|---|---|---|---|
OpenAI CUA | — | ❌ | 87.9 | 23.4 | — |
Claude 3.7 | — | ❌ | 87.6 | 27.7 | — |
JEDI-7B | 7B | ✅ | 91.7 | 39.5 | 54.1 |
SE-GUI | 7B | ✅ | 90.3 | 47.0 | — |
UI-TARS | 7B | ✅ | 91.6 | 35.7 | 47.5 |
UI-TARS-1.5* | 7B | ✅ | 89.7* | 42.0* | 64.2* |
UGround-v1-7B | 7B | ✅ | — | 31.1 | 36.4 |
Qwen2.5-VL-32B-Instruct | 32B | ✅ | 91.9* | 48.0 | 59.6* |
UGround-v1-72B | 72B | ✅ | — | 34.5 | — |
Qwen2.5-VL-72B-Instruct | 72B | ✅ | 94.00* | 53.3 | 62.2* |
UI-TARS | 72B | ✅ | 90.3 | 38.1 | — |
GTA1 (我们) | 7B | ✅ | 92.4 (∆ +2.7) | 50.1(∆ +8.1) | 67.7 (∆ +3.5) |
GTA1 (我们) | 32B | ✅ | 93.2 (∆ +1.3) | 53.6 (∆ +5.6) | 61.9(∆ +2.3) |
GTA1 (我们) | 72B | ✅ | 94.8(∆ +0.8) | 58.4 (∆ +5.1) | 66.7(∆ +4.5) |
注意
- 模型大小以十亿(B)参数表示。
- 破折号(—)表示目前无法获得的结果。
- 上标星号(﹡)表示我们评估的结果。
- UI-TARS-1.5 7B、Qwen2.5-VL-32B-Instruct 和 Qwen2.5-VL-72B-Instruct 用作我们的基线模型。
- ∆ 表示我们的模型相对于其基线的性能提升 (∆)。
🤔 什么时候“思考”有帮助?
在各种静态基准测试中,我们观察到经过“思考”和未经“思考”训练的模型之间的性能差异很小,通常在 0.5% 以内。然而,它们通常在不同的样本上取得成功,这可能是由于训练不稳定而非系统推理增益。下面,我们提供几个示例,其中“思考”模型或非“思考”模型是正确的,但不是两者都正确。


然而,我们发现“思考”在动态环境(例如 AndroidWorld)中可能有效,在这种环境中,模型会获得任务对象、过去轨迹和用户指令。例如,我们使用 AndroidControl 数据集训练了一个领域内 7B 模型。虽然接地性能在 AndroidControl 测试折叠上相似,但使用“思考”时,AndroidWorld 上的任务成功率从 39% 增加到 44%。这种改进归因于文本提示的复杂性增加(即任务对象、过去轨迹和用户指令的组合),这鼓励模型在具有挑战性和动态条件下运行时进行“思考”。
💬 SFT 与 GRPO 的比较如何?
为了回答这个问题,我们使用相同的数据集,同时训练了一个 SFT 模型和一个 GRPO 模型。SFT 模型在 ScreenSpot-V2 上的得分是 90.2,在 ScreenSpotPro 上的得分是 42.5。相比之下,GRPO 训练的模型分别达到了 92.4 和 50.1。这表明 GRPO 提供了显著的性能提升。然而,值得注意的是,GRPO 只有在基础模型已经表现出相当好的性能时,才能带来显著的改进。如果基线太弱,GRPO 可能会因为奖励信号不足而难以发挥作用。