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 的核心数据流:观测编码、条件注入、动作序列去噪、多模态输出与滚动执行之间的关系。

Diffusion Policy 条件去噪与多模态动作生成数据流 观测条件 o_t RGB / 深度 / 多视角 关节角 / 末端位姿 语言指令 / 任务编码 观测编码器 CNN / ViT / MLP 输出条件特征 c 纯高斯噪声 A^K ~ N(0, I) 形状: H × d_a 去噪网络 f_θ 1D U-Net / Transformer 输入: A^k, k, c 输出: 预测噪声 ε̂ 迭代 K 步 动作序列 A^0 [a_t, ..., a_{t+H-1}] 位置 / 速度 / 关节 多模态动作分布 模式 A: 左侧绕行 模式 B: 右侧绕行 模式 C: 上方抓取 随机噪声决定模式 滚动执行 执行前 H_exec 步 重新观测 重新去噪 闭环 训练目标:预测所加噪声 L = E[ || ε - ε_θ( sqrt(α_k) A^0 + sqrt(1-α_k) ε, k, c ) ||² ] 推理:A^K ~ N(0,I) → A^{K-1} → ... → A^0,每步以 c 为条件 关键参数:H 预测时域、H_exec 执行步数、K 去噪步数、d_a 动作维度

五、案例场景:多模态抓取中的扩散策略

假设桌面有一个圆柱形杯子,机器人需要抓取。专家演示中,有人从左侧抓,有人从右侧抓,也有人从上方抓。传统 MSE 策略可能输出一个“平均”的、指向杯子中心的动作,导致夹爪与杯壁碰撞。Diffusion Policy 在训练时学习到三个模式;推理时,随机初始噪声不同,去噪轨迹会收敛到不同模式。执行时,机器人先执行前 8 步,如果发现杯子被移动,重新观测后再次生成新的动作块,从而具备闭环纠错能力。

工程提示:动作块长度 H 不宜过短,否则时间一致性不足;也不宜过长,否则去噪计算量增大且对动态环境响应变慢。常见起点是 H=16、H_exec=8、K=10~100,再根据任务频率调整。

六、常见误区与复盘

  • 误区一:把扩散策略当成普通回归网络。它输出的是分布采样,不是确定性映射;评估时要看多模态覆盖,而不是只看单次 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 的核心思想可以压缩成三句话:用条件去噪替代直接回归,用动作序列替代单步动作,用随机采样表达多模态分布。理解这三点,就能理解它为什么在机器人操作中表现出色,也能在工程落地时抓住观测编码、动作表示、去噪步数和滚动执行这几个关键抓手。