Skip to main content
2026-08-26

Diffusion Policy:从噪声到机器人动作序列

同一个操作任务往往存在多条有效轨迹。均方误差回归容易把多种模式平均,而“平均动作”可能并不可执行。Diffusion Policy 将动作预测改写为条件去噪过程。

1. 动作序列而不是单步动作

策略一次生成长度为 TaT_a 的动作块:

At=[at,at+1,,at+Ta1]\mathbf{A}_t=[\mathbf{a}_t,\mathbf{a}_{t+1},\ldots,\mathbf{a}_{t+T_a-1}]

这样可以表达一段时间内的运动一致性,同时在执行若干步后重新观测并规划。

2. 训练时预测噪声

训练阶段从真实动作序列采样扩散步并加入高斯噪声,网络根据带噪动作、时间步和观测条件预测噪声。

noise = torch.randn_like(action)
t = scheduler.sample_timesteps(batch_size)
noisy_action = scheduler.add_noise(action, noise, t)
predicted_noise = policy(noisy_action, t, observation)
loss = F.mse_loss(predicted_noise, noise)

3. 推理时逐步去噪

推理从随机噪声开始,多次调用条件网络,逐步得到结构化动作序列。去噪步数越多,计算开销越高;过度减少步数又可能降低动作质量。

观测历史 ─────┐
              ├─→ 条件去噪网络 × K → 动作序列 [B,Ta,Da]
高斯噪声 ─────┘                         │

                          执行前 n 步 → 重新观测

4. Receding horizon

模型预测 TaT_a 步,但控制器只执行前 TeT_e 步,满足 Te<TaT_e<T_a。随后使用新观测再次推理。这种滚动执行在序列一致性、闭环纠错和推理频率之间取得平衡。

复现建议

先固定动作归一化、scheduler、预测长度和执行长度,再比较网络结构。很多看似来自架构的差异,实际来自采样器或 horizon 不一致。