4. Diffusion Policy核心思想
Diffusion Policy 的核心突破,在于把机器人动作生成问题从“直接回归一个动作”改写为“在观测条件下,从噪声中逐步恢复出一段可执行动作序列”。它借鉴扩散生成模型的思想:先定义一条真实动作轨迹,再通过前向加噪把它破坏成近似高斯噪声;训练一个去噪网络学会反向恢复;推理时从纯噪声出发,在观测条件约束下迭代去噪,最终得到多步动作。对机器人操作而言,这意味着策略不再只输出单步动作,而是输出一段具有时间一致性的动作序列,并能表达同一观测下多种合理操作方式。
前向:
a_t^k = sqrt(α_k) a_t^0 + sqrt(1-α_k) ε反向:
a_t^{k-1} = f_θ(a_t^k, k, o_t)其中
o_t 是观测条件,a_t^0 是真实动作序列,k 是去噪步数。
一、条件去噪:把“预测动作”变成“恢复动作”
传统行为克隆通常学习 π(a|o),用均方误差直接拟合专家动作。当人类演示存在多模态时,例如绕过障碍物可以从左侧也可以从右侧,均方误差会把两个模式平均成一个撞向障碍物的动作。Diffusion Policy 不直接预测唯一动作,而是学习条件分布 p(a|o) 的得分场。训练时,网络看到的是被加噪的动作序列和当前观测,目标是预测所加噪声;推理时,网络从随机噪声开始,每一步都根据观测条件把噪声去掉一点,最终收敛到某个合理动作模式。
这种“条件去噪”带来两个关键性质:第一,观测条件贯穿整个去噪过程,使生成动作始终与当前场景对齐;第二,随机初始噪声决定最终落入哪个模式,因此同一观测可以采样出不同但都合理的动作,天然适合多模态操作。
二、观测条件:视觉、本体与任务信息的融合
观测条件是去噪网络的条件输入,通常包括:
- 视觉观测:RGB 图像、深度图或多视角图像,经 CNN 或 ViT 编码为特征图。
- 本体状态:关节角、末端位姿、夹爪开合度等低维向量。
- 任务信息:语言指令、目标图像或 one-hot 任务编码。
- 历史观测:过去若干帧的观测堆叠,用于推断速度与接触状态。
这些条件通过 FiLM、交叉注意力或特征拼接注入去噪网络。以 1D U-Net 为例,视觉特征作为 key/value,动作序列作为 query,在每一层去噪中反复对齐。这样,网络在每一步去噪时都能“看到”当前场景,而不是盲目地恢复动作。
三、动作序列表示:从单步到动作块
Diffusion Policy 通常不生成单步动作,而是生成一个动作块 A_t = [a_t, a_{t+1}, ..., a_{t+H-1}],其中 H 是预测时域。动作块有两种常见表示:
| 表示方式 | 含义 | 优点 | 注意点 |
|---|---|---|---|
| 位置表示 | 直接预测末端或关节目标位置 | 平滑、易与控制器衔接 | 需处理绝对/相对坐标 |
| 速度表示 | 预测每步速度增量 | 对动态操作更自然 | 积分误差可能累积 |
| 关节空间 | 预测各关节角序列 | 直接下发底层控制器 | 需处理关节限位 |
| 末端位姿 | 预测 SE(3) 位姿序列 | 任务空间直观 | 需逆运动学转换 |
动作块的长度 H 与执行步数 H_exec 是两个重要参数。常见做法是预测 H=16 步,但只执行前 H_exec=8 步,然后重新观测、重新生成。这种“滚动时域”策略既保留了时间一致性,又能及时响应环境变化。
四、多模态动作分布建模:为什么扩散适合机器人
机器人操作中的多模态来源很多:同一目标可以从不同方向接近;抓取点可以不同;避障路径可以不同;人类演示本身存在风格差异。扩散模型通过迭代去噪,实际上是在学习一个复杂的多峰分布。与高斯混合模型、VAE 或 GAN 相比,扩散模型训练稳定、模式覆盖好、不易模式崩溃。
下面这张图展示了 Diffusion Policy 的核心数据流:观测编码、条件注入、动作序列去噪、多模态输出与滚动执行之间的关系。
五、案例场景:多模态抓取中的扩散策略
假设桌面有一个圆柱形杯子,机器人需要抓取。专家演示中,有人从左侧抓,有人从右侧抓,也有人从上方抓。传统 MSE 策略可能输出一个“平均”的、指向杯子中心的动作,导致夹爪与杯壁碰撞。Diffusion Policy 在训练时学习到三个模式;推理时,随机初始噪声不同,去噪轨迹会收敛到不同模式。执行时,机器人先执行前 8 步,如果发现杯子被移动,重新观测后再次生成新的动作块,从而具备闭环纠错能力。
六、常见误区与复盘
- 误区一:把扩散策略当成普通回归网络。它输出的是分布采样,不是确定性映射;评估时要看多模态覆盖,而不是只看单次 MSE。
- 误区二:忽略观测条件注入方式。条件若只在输入端拼接一次,去噪后期容易“忘记”场景;应在多个尺度反复注入。
- 误区三:动作表示与控制器不匹配。预测位置却下发速度,或预测关节角却用笛卡尔控制器,都会导致执行异常。
- 误区四:去噪步数越多越好。步数增加提升质量但降低频率,实时操作需在质量与延迟间权衡。
# 典型训练配置片段
action_horizon: 16 # 预测动作块长度 H
action_exec: 8 # 实际执行步数 H_exec
obs_horizon: 2 # 观测历史帧数
num_diffusion_steps: 100 # 训练去噪步数 K
num_inference_steps: 10 # 推理去噪步数
action_dim: 7 # 末端位姿+夹爪
lr: 1e-4
batch_size: 64
复盘来看,Diffusion Policy 的核心思想可以压缩成三句话:用条件去噪替代直接回归,用动作序列替代单步动作,用随机采样表达多模态分布。理解这三点,就能理解它为什么在机器人操作中表现出色,也能在工程落地时抓住观测编码、动作表示、去噪步数和滚动执行这几个关键抓手。