Learning from Hindsight for VLA Reinforcement Learning
研究问题
Learning from Hindsight
Rollout Relabeling
每轮训练开始时,初始化原始数据 Batch、Hindsight Batch 和旧策略:
$$ \mathcal B\leftarrow\varnothing, \qquad \widetilde{\mathcal B}\leftarrow\varnothing, \qquad \pi_{\theta_{\mathrm{old}}}\leftarrow\pi_\theta. $$之后按以下流程收集并重标记数据:
从任务分布中采样指令 $g$,使用旧策略采集包含 $K$ 条轨迹的 Group:
$$ \mathcal G =\{(\tau_i,g,R_i)\}_{i=1}^{K}, $$并将其加入 $\mathcal B$。
计算 Group 的平均奖励。只有平均奖励低于阈值 $\eta$ 时,才启动 Hindsight Relabeling:
$$ \frac{1}{K}\sum_{i=1}^{K}R_i<\eta. $$从 Group 的失败轨迹中随机选择一条作为 Anchor(锚点轨迹)。VLM 先判断 Anchor 是否包含有意义的行为;如果只是悬停、空转或没有发生实质性交互,就丢弃这个 Anchor。
VLM 根据 Anchor 的实际行为生成新任务 $g'$,再使用同一个 $g'$ 重新评估原 Group 中的每一条轨迹:
$$ \widetilde R_i =M_{\mathrm{reward}}(\tau_i,g') \in\{0,0.5,1\}. $$其中,$0$、$0.5$ 和 $1$ 分别表示失败、不确定和成功。共享同一个 $g'$,可以保证 Group 内不同轨迹的奖励仍然可比较。
将得到的 Hindsight Group 加入 $\widetilde{\mathcal B}$,最后同时使用 $\mathcal B$ 和 $\widetilde{\mathcal B}$ 更新模型。
Challenge 1. VLM 可能为一段行为强行生成任务
假设机器人实际上只碰了一下杯子,杯子晃了晃。你问 VLM“机器人完成了什么任务”,它仍可能回答:
“把杯子移动到桌子中央。”
但杯子可能根本没到桌子中央,也可能只是偶然晃动,没形成什么明确结果。
解决方法:Constrained Judgment
作者把 VLM 的工作拆成两次提问:
生成候选任务。 根据场景中实际存在的物体,判断机器人完成了什么。例如,原任务是“把杯子放进柜子”,但机器人把杯子放到了桌上,那么可以生成新指令:
“把杯子放到桌上。”
如果机器人只是乱动,没有完成明确的事情,则允许回答:
“没有完成任何任务。”
验证候选任务。 给定生成的新指令,再检查视频是否真的证明它已经完成。例如,新指令是“把杯子放到桌上”,但最后杯子被机械臂挡住,看不清它有没有放稳,则允许回答:
“不确定。”
这就是 Constrained Judgment:受场景事实约束的判断。它不再是“无论视频里发生什么,都必须写出一个任务描述”。
Training Objective
Challenge 2. 重标记轨迹并非由新指令采样得到
假设杯子确实被放到了桌上,新标签完全正确。
但机器人当时听到的是:
$$ g=\text{“放进柜子”} $$所以动作来自:
$$ \pi(a\mid s,g) $$现在重新标注后,你要训练的是:
$$ g'=\text{“放到桌上”} $$对应的动作分布是:
$$ \pi(a\mid s,g') $$普通 GRPO:当前策略与采样时旧策略的比值
$$ r_t(\theta)= \frac{\pi_\theta(a_t\mid o_t,g)} {\pi_{\theta_{\mathrm{old}}}(a_t\mid o_t,g)} $$分母固定,分子参与参数更新。这是我们前面一直讲的情况。
HPG 的目标切换比值:没有显式区分新旧模型
$$ W_t= \prod_{s=1}^{t} \frac{\pi(a_s\mid o_s,g')} {\pi(a_s\mid o_s,g)} $$这个式子单独讨论的是:固定同一套模型参数,只改变任务指令,轨迹前缀的概率会怎样变化?
GRPO 目标
$$ L_{\mathrm{GRPO}}(\theta)= \mathbb E_{g,\{\tau_i\}} \left[ \frac{1}{K} \sum_{i=1}^{K} \sum_{t=0}^{T-1} \ell_{i,t}(\theta) \right] $$其中:
$$ \ell_{i,t}(\theta)= \min\!\left( r_{i,t}\hat A_i, \bar r_{i,t}\hat A_i \right)- \beta\,D_{\mathrm{KL}} \!\left(\pi_\theta\,\|\,\pi_{\mathrm{ref}}\right), $$$$ \bar r_{i,t}= \operatorname{clip}\!\left(r_{i,t},1-\epsilon,1+\epsilon\right). $$定义 Hindsight 目标 $L_{\mathrm{H\text{-}GRPO}}$:
- 使用重标记后的奖励 $\tilde R_i$ 计算 Advantage $\tilde A_i$;
- 用新的概率比 $\tilde r_{i,t}$ 替换原来的 $r_{i,t}$;
- 在新指令 $g'$ 的条件下计算 KL 项。
为限制含噪声或不匹配的重标记结果所产生的影响,在给 $L_{\mathrm{H\text{-}GRPO}}$ 乘上权重之前,先对它进行截断:
$$ L_{\mathrm{LfH}}(\theta)= L_{\mathrm{GRPO}}(\theta) + \lambda\min\!\left(L_{\mathrm{H\text{-}GRPO}}(\theta),c\right). $$也就是说,总目标由原始 GRPO 项(未经重标记的原始轨迹)和加权后的 Hindsight 项组成;Hindsight 项先以 $c$ 为上限截断,再乘以权重 $\lambda$。
实验
实验设置
- 初始模型: 使用 3.3B 的 $\pi_{0.5}$,从
RLinf-Pi05-LIBERO-SFTCheckpoint 开始,再进行 GRPO 或 LfH 训练。 - Benchmark: LIBERO-PRO,包括 Spatial、Goal、Object 和 Long 四个 OOD Task Suite,每个 Suite 包含 10 个任务。
- OOD 设置: 保留原有场景、物体和环境动力学,但改变任务指令中的目标物体、目标状态或动作要求。
- 训练方式: 四个 Suite 分别训练,比较不同方法在稀疏奖励条件下的样本效率。
对比方法
| 方法 | 使用的训练信号 |
|---|---|
| GRPO | 原始任务的稀疏成功奖励 |
| GRPO + RoboMETER | 原始任务上的稠密进度奖励,相当于更细粒度地判断任务完成程度 |
| GRPO + LfH | 除原始奖励外,将失败轨迹重标记为已经完成的新任务 |