DiffGen: Robot Demonstration Generation via Differentiable Physics Simulation, Differentiable Rendering, and Vision-Language Model
核心思想
机器人学习操控任务通常需要大量人工演示或精心设计的奖励函数。能否直接用语言描述目标,让系统自动生成演示轨迹?
DiffGen 提出:将可微物理仿真、可微渲染和视觉-语言模型串联成端到端可微的优化管道:
- 给定语言指令(如”抓红色方块”)
- 可微仿真器前向模拟 → 可微渲染器生成图像
- VLM 计算图像与指令的余弦相似度
- 梯度反传到动作序列 → 直接优化轨迹
结果:比 RL 方法快 500×,成功率 85%,支持跨机器人迁移。
背景知识
什么是可微仿真
传统仿真器是”黑箱”——输入动作、输出状态,但无法计算梯度。可微仿真器允许:
\[\frac{\partial s_{t+1}}{\partial a_t} = \frac{\partial f(s_t, a_t)}{\partial a_t}\]这意味着可以通过仿真器反传梯度,直接优化动作序列。
什么是可微渲染
传统渲染(如光栅化)不可微。可微渲染器允许:
\[\frac{\partial I}{\partial s_t} = \frac{\partial g(s_t)}{\partial s_t}\]即图像像素对物体状态的梯度可计算 → 可以从”图像看起来像不像目标”反推”物体该怎么移动”。
为什么传统 RL 方法效率低
| 问题 | 说明 |
|---|---|
| 奖励设计难 | 每个任务需要手工设计奖励函数 |
| 采样效率低 | PPO 需要数百万步才能收敛 |
| 稀疏奖励 | 只有成功/失败信号 → 探索困难 |
| 不可迁移 | 换机器人需要重新训练 |
DiffGen 的核心优势
| 对比 | RL 方法 | DiffGen |
|---|---|---|
| 奖励来源 | 手工设计 | VLM 自动提供 |
| 优化方式 | 策略梯度(高方差) | 解析梯度(低方差) |
| 优化步数 | 数百万 | 数千 |
| 目标描述 | 需要数学公式 | 自然语言 |
方法详解
1. 问题形式化
目标是找到动作序列 ${a_t}_{t=0}^T$ 最大化累积奖励:
\[\max_{a_t} \mathbb{E}\left[\sum_{t=0}^{T} \gamma^t \mathcal{R}(s_t, a_t; G)\right]\]约束条件:$s_{t+1} = \mathcal{T}(s_t, a_t)$(状态转移)
2. 端到端可微管道
2.1 可微物理仿真
使用 NimblePhysics 仿真器,通过线性互补问题(LCP)求解接触力学:
\[s_{t+1} = f(s_t, a_t)\]支持刚体碰撞、摩擦等复杂物理交互,同时提供解析梯度。
2.2 可微渲染
使用 Redner 渲染器(快速延迟渲染模式):
\[I_t = g(s_t)\]将 3D 物体状态渲染为 2D 图像,像素级梯度可反传。
2.3 VLM 目标指定
使用 LIV 模型(ResNet-50 视觉骨干 + DistilBERT 语言编码器,在 ~400K EpicKitchen 机器人视频上微调):
文本编码:$z^l = h(l)$
图像编码:$z^I = h(I)$
损失函数(余弦相似度):
\[\mathcal{L}(z^l, z^I) = -\frac{z^l \cdot z^I}{\|z^l\| \|z^I\|}\]2.4 梯度链式法则
关键:整个管道端到端可微,梯度可以一路反传到动作:
\[\frac{\partial \mathcal{L}}{\partial \{a_t\}_{t=0}^T} = \frac{\partial \mathcal{L}}{\partial z^I} \cdot \frac{\partial z^I}{\partial I} \cdot \frac{\partial I}{\partial s_T} \cdot \frac{\partial s_T}{\partial \{a_t\}_{t=0}^T}\]动作更新规则:
\[\{a_t\}_{t=0}^T \leftarrow \{a_t\}_{t=0}^T - \lambda \frac{\partial \mathcal{L}}{\partial \{a_t\}_{t=0}^T}\]3. 分段优化策略
问题:长时间步轨迹中,梯度通过仿真器的多步传播会导致梯度消失/爆炸。
解决方案:将长轨迹分解为多个短段(episode),顺序优化:
- 每段用更高的学习率、更少的优化步数
- 前一段的终态作为后一段的初始状态
- 避免长链梯度传播的数值不稳定
4. 实现细节
| 参数 | 值 |
|---|---|
| 优化器 | AdamW |
| 默认学习率 | 1e-2(粗调),1e-3(精细) |
| 视觉骨干 | ResNet-50 |
| 语言编码器 | DistilBERT |
| VLM | LIV(EpicKitchen 微调) |
| 物理仿真器 | NimblePhysics |
| 渲染器 | Redner(延迟模式) |
实验结果
任务设计(Franka Emika Panda 机器人)
| 任务 | 目标 | 成功阈值 | 优化步数 | 时间步 |
|---|---|---|---|---|
| 方块选择 | 抓取目标颜色方块 | 距离 < 10cm | 200 | 50 |
| 杯子放置 | 将杯子放到碟子上 | 距离 < 5cm | 200 | 70 |
| 绕障碍 | 移动方块绕过墙壁 | 到达目标区域 | 300 | 100 |
与 RL 基线对比(方块选择任务)
| 方法 | 成功率 | 偏差 (m) | 总优化步数 |
|---|---|---|---|
| DiffGen(最佳) | 0.85 | 0.082 | 20K |
| DiffGen(最后) | 0.81 | 0.095 | 20K |
| PPO-CosSim | 0.06 | 0.446 | 10M |
| PPO-InfoNCE | 0.00 | 0.259 | 10M |
| PPO-LLM(1轮) | 0.25 | 0.274 | 5M |
| PPO-LLM(2轮) | 0.37 | 0.173 | 5M |
| PPO-LLM(3轮) | 0.40 | 0.224 | 5M |
DiffGen 用 20K 步达到 85% 成功率,PPO 用 10M 步只有 6% → 500× 效率优势。
零样本目标泛化(绕障碍任务)
| 指令 | 成功率 | 位移 |
|---|---|---|
| 向左移动 | 0.978 | -0.205m |
| 向右移动 | 0.704 | 0.049m |
无需重新训练,直接用语言指定新目标。
跨机器人迁移(杯子放置任务)
| 场景 | 成功率 | 偏差 (m) |
|---|---|---|
| 同机器人,训练中见过的颜色 | 0.87 | 0.029 |
| 同机器人,未见过的颜色 | 0.53 | 0.055 |
| UR5e(新机器人),见过的颜色 | 0.84 | 0.054 |
跨机器人迁移成功率 84% → VLM 的语义理解使目标描述机器人无关。
消融实验(绕障碍任务)
| 变体 | 成功率 | 总优化步数 |
|---|---|---|
| 完整方法 | 0.72 | 23.9K |
| 无分段优化 | 0.41 | 30K |
| 无可微渲染(手工奖励) | 0.19 | 30K |
分段优化贡献 +31%,可微渲染 + VLM 贡献 +53%。
个人思考
- 端到端可微管道是最核心的贡献:将”语言→图像→物理→动作”的完整链路打通 → 梯度信号从语义空间直达动作空间。
- 500× 效率优势来自解析梯度 vs 策略梯度的根本差异:RL 用高方差的采样估计梯度,DiffGen 用精确的解析梯度 → 收敛速度天壤之别。
- 分段优化策略巧妙解决了长时间步梯度问题——类似于 BPTT 的截断反传,但在轨迹层面而非时间步层面。
- 跨机器人迁移的关键在于目标描述是语义级的(”杯子在碟子上”)而非几何级的 → VLM 抽象掉了机器人特有的信息。
- 局限性:依赖可微仿真器(不支持所有物理交互)和 VLM 的质量 → 复杂场景可能超出当前 VLM 的理解能力。