DynaWeb:先学会预测网页变化,再让 Agent 在想象中做强化学习
训练网页 Agent 时,每次尝试都打开真实网站,会遇到页面变动、访问限制和重置成本。DynaWeb 的办法是先训练一个模型回答:“看到这个页面,执行这个动作,接下来页面会怎样变化?”
之后,Agent 在这个模型生成的网页状态中练习,根据任务是否完成获得奖励,再用强化学习更新自己。训练中还混入真实专家轨迹,约束模拟误差。
这里确实有两个学习对象:世界模型学状态变化,Agent 学动作选择。前者用 SFT,后者用 GSPO。理解这篇论文,最重要的是不要把两者的输入、标签和梯度混在一起。
本文解读 DynaWeb: Model-Based Reinforcement Learning of Web Agents,依据所读 21 页 PDF。该 PDF 的 §4.1 使用 GPT-oss-120B 作为世界模型骨干,Agent 为 NNetNav 初始化的 Llama-3.1-8B;以下不混用其他版本的训练配方。方法见 §3、式 3–10,训练细节见附录 A.3。
1. 两个模型各自负责什么?
| 世界模型 \(p_\phi\) | Agent 策略 \(\pi_\theta\) | |
|---|---|---|
| 输入 | 当前网页、动作、相关指令 | 任务、当前网页、交互历史 |
| 输出 | 状态变化描述,以及据此生成的下一网页观察 | 推理文本和下一动作 |
| 训练依据 | 真实网页前后状态提取出的变化标签 | 自己尝试后的任务奖励,以及混入的真实专家轨迹 |
| 优化方法 | 监督微调 SFT | 序列级策略优化 GSPO |
| 参数 | \(\phi\) | \(\theta\) |
本文中的网页观察主要是 可访问性树(accessibility tree / AXTree):包含按钮、输入框、文字及其标识的结构化文本。它不是浏览器完整数据库,也不是逐像素视频预测。
例如,Agent 看到的是:
1 | |
世界模型要预测 click [18] 后页面会发生什么,Agent
要决定此时该不该点击它。
2. 动机:减少真实交互,也要防止“在假世界里学坏”
只看静态专家示范,模型不一定接触自己会犯错的状态。让当前策略主动探索有助于解决这个问题,但真实浏览器的吞吐与维护成本会限制训练规模。
模型生成的环境可以便于并行采样,不过新增了一个风险:如果它把本应失败的动作模拟为成功,Agent 就可能学会利用模拟器的错误。
DynaWeb 因此把重点放在三件事上:用真实转换训练模拟器、控制想象长度、混入完全真实的专家轨迹。后面的消融说明,这些不是可有可无的配件。
3. 第一阶段:世界模型怎样学网页变化?
3.1 训练标签从真实前后状态来
论文清洗 NNetNav 的网页交互数据,排除缺失观察、非法动作和不一致转换。对每条有效记录,已有:
\[ (I,o_t,a_t,o_{t+1}). \]
\(I\) 是相关指令,\(o_t\) 是动作前网页,\(a_t\) 是已执行动作,\(o_{t+1}\) 是真实动作后网页。
再让 GPT-oss-120B 读取前后状态,提取解释文本 \(r\) 和变化描述 \(\Delta\),作为 SFT 目标。
| 世界模型训练时的输入 | 要学习生成的目标 |
|---|---|
当前商品页、click [18]、相关指令 |
对变化的解释;购物车计数 0 → 1,出现“已加入购物车”提示 |
真实下一页用于制作标签,不直接作为预测时输入。否则就变成看着答案描述答案。
3.2 为什么先预测变化,不直接训练复制整页?
点击购物车按钮后,商品标题、价格、导航栏通常都不变。如果整页几千个 token 都是目标,大量损失会用于学习复制未变化内容。
论文 §3.2 将任务拆为:先预测自然语言变化描述,再利用模型的指令遵循能力,把变化应用到当前观察并生成下一棵 AXTree。明确监督的是前面的解释与变化预测阶段:
\[ L_{\mathrm{WM}}(\phi)=-\sum_{(I,o_t,a_t,r,\Delta)}\log p_\phi(r,\Delta\mid I,o_t,a_t). \]
附录的输出格式同时要求变化描述和新的 AXTree,因此推理时仍然要产出 Agent 能读取的下一页,并不是只输出一句“购物车加一”就结束。
3.3 用两个目标位置手算 SFT
教学上,把很长的目标压缩为两个独立的二分类位置:第一个预测购物车计数变化,第二个预测提示出现。设正确标签概率为 0.8 和 0.5,取 token 平均交叉熵:
\[ L=-\frac12(\log0.8+\log0.5)\approx0.4581. \]
若每个位置用独立 logit \(z_k\) 表示正确标签概率,梯度为:
\[ \frac{\partial L}{\partial z_1}=\frac{0.8-1}{2}=-0.1,\qquad \frac{\partial L}{\partial z_2}=\frac{0.5-1}{2}=-0.25. \]
用教学学习率 0.1,第二个 logit 从 0 变成 0.025,正确标签概率从 0.5 变成约 0.50625。
这次更新提高的是世界模型正确描述网页变化的概率。Agent 的参数 \(\theta\) 没有参与这个损失。真实模型的目标是文本 token,不是这两个人工二分类变量。
4. 第二阶段:Agent 怎样在模拟网页中尝试?
教学任务:“把一个蓝色杯子加入购物车,不要结账。”
1 | |
这个过程没有真正打开网站添加商品。页面与完成奖励来自模型模拟和自评。奖励属于对模拟结果的估计,不能当成真实服务器已确认订单的证明。
论文设置中:
- 初始观察可从专家轨迹的起点或中间状态采样,扩大导航阶段覆盖。
- 模拟轨迹最长 5 步,遇到终止状态可提前结束。
- 任务完成奖励为 0 或 1。
- 随机用真实专家轨迹替换 50% 的 dreamed trajectories。
最后一点是整条真实专家轨迹与整条想象轨迹混合,不是老师在学生这一条想象轨迹中途接管,也不是每步有 50% 概率访问真实网站。(§3.3、§4.1)
↓ 提取变化标签
SFT 更新世界模型 φ学习“做了动作后,页面怎样变化”。
↓ 与真实专家轨迹混合
GSPO 更新 Agent θ学习“选择哪些动作更容易完成任务”。
5. GSPO 的损失与梯度怎样计算?
5.1 先算轨迹优势,再算序列概率比
同一个任务采样多条轨迹,根据终局奖励计算组内优势 \(A_i\)。成功但同组全都成功的任务,未必还能提供有区别的组内信号;优势不是直接把奖励原样抄一遍。
一条轨迹中的 Agent 输出序列记作 \(y_i\),长度为 \(T_i\)。GSPO 把每个输出 token 的新旧策略概率比合成一个几何平均:
\[ s_i(\theta)=\exp\left[\frac1{T_i}\sum_{k=1}^{T_i} \log\frac{\pi_\theta(y_{ik}\mid h_{ik})}{\pi_{\mathrm{old}}(y_{ik}\mid h_{ik})}\right]. \]
这里用 \(h_{ik}\) 表示该 token 实际可见的任务、观察与前文。模型生成的网页观察提供上下文;策略损失针对 Agent 的推理和动作 token,不要求 Agent 学着输出网页本身。
如果两个 token 的概率比分别是 1.2、0.8,那么 \(s_i=\sqrt{1.2\times0.8}\approx0.9798\),并不是算术平均 1。
策略优化最大化:
\[ J=\frac1G\sum_i\min\left[s_iA_i,\ \operatorname{clip}(s_i,1-\epsilon,1+\epsilon)A_i\right]. \]
实际梯度下降使用 \(L=-J\)。以教学裁剪范围 \([0.8,1.2]\) 为例,正优势 \(A_i=1\)、比值 \(s_i=1.4\) 时,该项取 1.2,防止继续过度提高这条轨迹的概率。此处的 0.2 只是展示裁剪逻辑,不宣称是论文配方中的实际阈值。
5.2 一次完整的两轨迹更新
继续做教学简化:两条想象轨迹,一条成功奖励 1、一条失败奖励 0,所以 \(A_S=1\)、\(A_F=-1\)。每条轨迹仅有两个二分类输出位置;每个位置用独立参数 \(z_1,z_2\) 控制正确选择概率 \(p_k\)。成功轨迹两处都选对,失败轨迹两处都选错。
旧策略 \(p_1=p_2=0.5\),当前策略从相同参数开始。两条序列比分别为:
\[ s_S=\sqrt{\frac{p_1}{0.5}\frac{p_2}{0.5}},\qquad s_F=\sqrt{\frac{1-p_1}{0.5}\frac{1-p_2}{0.5}}. \]
在更新起点,两者都等于 1,裁剪不起作用:
\[ L=-\frac12(s_S-s_F)=0. \]
虽然此处损失为 0,但两个方向的导数不同。对任意一个 \(z_k\):
\[ \frac{\partial s_S}{\partial z_k}=\frac12(1-p_k)=0.25, \qquad \frac{\partial s_F}{\partial z_k}=-\frac12p_k=-0.25. \]
所以
\[ \frac{\partial L}{\partial z_k}=-\frac12(0.25-(-0.25))=-0.25. \]
教学学习率 0.1 使两个参数都从 0 更新到 0.025,正确选择概率均成为约 0.50625。成功序列比提高到约 1.0125,失败序列比下降到约 0.9875,损失变为约 −0.0125。
这次更新的是 Agent,而不是世界模型。真实训练中,所有 token 共享庞大网络参数,轨迹也远不止两步;论文附录使用学习率 \(10^{-6}\)、每任务 8 个样本,并关闭 KL 正则。这里仅演示 GSPO 的序列比怎样经由梯度影响动作概率。
5.3 “on-policy”需要加一个限定
想象轨迹中的动作由当前策略产生,因此可以说它在学习到的环境中进行 on-policy 采样;这不保证它访问的观察与真实网站一致。
混入的 NNetNav 专家轨迹则不是当前策略生成。论文式 8 的记号将混合数据统一写在旧策略采样之下,但正文同时明确它们是独立的专家数据。PDF 没有充分展开专家分支的行为策略概率及离策略校正细节。
因此,准确说法是“当前策略想象轨迹与离线专家轨迹混合训练”。不能把整批数据都称为严格 on-policy,也不能自行补出一个论文没有明确写出的独立 SFT 辅助损失。
6. 结果与消融告诉我们什么?
Tables 1–2 的整体成功率(%):
| 方法 | WebArena | WebVoyager,原表 All Rec |
|---|---|---|
| NNetNav | 15.8 | 28.9 |
| Go-Browse | 22.3 | 30.4 |
| WebRL | 26.7 | 32.6 |
| 推理时前瞻 ITL | 22.4 | 25.6 |
| DynaWeb-8B | 31.0 | 38.7 |
相对 WebRL,分别提高 4.3、6.1 个百分点;WebArena 的相对改善约为 \(4.3/26.7=16.1\%\)。
WebArena 使用官方 812 个任务的自托管环境。WebVoyager 原始数据含 643 个任务,但作者过滤了访问受限等失败任务,并在相近时间窗口评估两次取平均;不能将结果写成对完整 643 个任务的无条件复现。某些网站仍有退步,例如 GitHub 上 DynaWeb 为 11.2,低于 WebRL 的 18.4。
三个消融比“整体第一”更有解释力:
- 梦并非越长越好。§5.1 中 4–5 步附近效果较好,再加长会积累状态预测错误。
- 全部使用想象数据会出问题。§5.3 中纯模拟训练低于 SFT 基线,加入约 40% 真实轨迹后明显改善;主实验用 50%。这不能简写成“无需真实交互数据”。
- 世界模型需要专门训练。§5.4 将训练后的模拟器替换为冻结的通用 GPT-oss-120B,WebArena 下游成绩从 31.0 降为 20.9。
§5.4 的 WebVoyager 消融又报告 35.4 与 28.6,其中 35.4 与主表的 38.7 不同。本文分别保留各表设置下的数字,不把它们当成同一条件的可直接替换结果。
7. 创新与不足
最重要的贡献是把学到的网页状态预测器用于策略训练时的探索,并用真实专家数据约束想象误差。它将世界模型从执行前的辅助规划工具,推进为可反复采样的训练环境。
作者的分析已经指出长程误差累积、动态界面与分支复杂网站的困难。对局部状态变化预测得好,也不自动意味着可以稳定模拟很长的任务。
我的分析与改进设想:
| 问题 | 改进方向 | 怎样验证,代价是什么? |
|---|---|---|
| 世界模型和奖励自评可能共同幻觉 | 对不确定转换抽样访问真实环境校准 | 增加真实交互成本;比较模拟成功但真实失败的比例 |
| 固定 5 步忽略不同状态的难度 | 根据预测分歧或置信度提前截断 | 需要额外估计;等预算比较成功率与轨迹误差 |
| 专家混入的优化细节不够清楚 | 明确公布采样、概率分母、掩码及损失实现 | 增加复现工作;比较不同混合目标的稳定性 |
| 8B Agent 背后使用 120B 模拟器 | 报告每个有效 RL 样本的总计算成本,并试验小模型模拟器 | 小模型可能更不准确;同时比较成本、预测保真度和真实任务成绩 |
8. 最后用一句话区分四篇论文
DynaWeb:真实网页转换教会世界模型,世界模型与真实专家数据再共同帮助 RL 训练网页 Agent。
- AWM:程序执行状态变化,训练 Agent。
- Agent-World:生成可执行环境,并根据失败持续补题训练。
- DynaWeb(本文):学习状态预测,再用于训练时的想象探索。
- R-WoM:教程约束想象,在推理时比较动作,框架不更新参数。
点赞与评论
喜欢这篇文章?点个赞,或留下你的想法。登录 GitHub 后即可参与。
如果评论无法加载,请检查网络连接后刷新页面。