Diffusion Policy for Robotics
📋 文档概述
本文档基于我的兴趣与关注,结合扩散模型理论,全面阐述 Diffusion Policy 在机器人领域的应用。文档涵盖理论基础、实践经验、代码实现和前沿研究。
📊 Diffusion Models 技术演进对比
| 方法 | 年份 | 核心创新 | 采样步数 | 训练复杂度 | 适用场景 |
|---|---|---|---|---|---|
| DDPM | 2020 | 简化损失,噪声预测,随机SDE | 1000 | 中 | 高质量生成基础 |
| DDIM | 2021 | 非马尔可夫,确定性ODE | 10-50 | 低(复用 DDPM) | 快速采样(20x加速) |
| Score SDE | 2021 | 连续时间,SDE 框架 | 可变 | 高 | 理论统一 |
| Diffusion Policy | 2023 | 机器人策略,序列生成 | 50-100 | 中 | 视觉运动策略 ⭐ |
| Flow Matching | 2023 | ODE,最优传输直线路径 | 10-20 | 中 | 最快最稳定生成 ⭐ |
| Latent Diffusion | 2022 | 潜在空间扩散 | 20-50 | 高(需 VAE) | 高分辨率生成 |
DDPM 关键公式
| 公式 | 作用 | 说明 |
|---|---|---|
| x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon xt=αˉt x0+1−αˉt ϵ | 前向扩散 | 直接从 x 0 x_0 x0 采样 x t x_t xt |
| L = E [ ∣ ϵ − ϵ θ ( x t , t ) ∣ 2 ] \mathcal{L} = \mathbb{E}[|\epsilon - \epsilon_\theta(x_t, t)|^2] L=E[∣ϵ−ϵθ(xt,t)∣2] | 训练损失 | 简化的 MSE 损失 |
| x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\epsilon\theta(x_t,t)) + \sigma_t z xt−1=αt 1(xt−1−αˉt 1−αtϵθ(xt,t))+σtz | DDPM 采样 | 反向去噪步骤 |
| α ˉ t = ∏ s = 1 t ( 1 − β s ) \bar{\alpha}t = \prod{s=1}^t (1-\beta_s) αˉt=∏s=1t(1−βs) | 累积噪声 | 噪声调度累积 |
DDIM 快速采样
| 公式 | 作用 | 说明 |
|---|---|---|
| x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 ϵ θ ( x t , t ) x_{t-1} = \sqrt{\bar{\alpha}{t-1}} \hat{x}0 + \sqrt{1-\bar{\alpha}{t-1}} \epsilon\theta(x_t,t) xt−1=αˉt−1 x^0+1−αˉt−1 ϵθ(xt,t) | DDIM 采样 | 确定性更新 |
| x ^ 0 = x t − 1 − α ˉ t ϵ θ ( x t , t ) α ˉ t \hat{x}_0 = \frac{x_t - \sqrt{1-\bar{\alpha}t}\epsilon\theta(x_t,t)}{\sqrt{\bar{\alpha}_t}} x^0=αˉt xt−1−αˉt ϵθ(xt,t) | 预测 x 0 x_0 x0 | 从 x t x_t xt 预测干净数据 |
Flow Matching
| 公式 | 作用 | 说明 |
|---|---|---|
| x t = ( 1 − t ) x 0 + t x 1 x_t = (1-t)x_0 + tx_1 xt=(1−t)x0+tx1 | 线性插值路径 | 最优传输路径 |
| L = E [ ∣ v θ ( x t , t ) − ( x 1 − x 0 ) ∣ 2 ] \mathcal{L} = \mathbb{E}[|v_\theta(x_t,t) - (x_1-x_0)|^2] L=E[∣vθ(xt,t)−(x1−x0)∣2] | 训练损失 | 速度场匹配 |
| d x d t = v θ ( x t , t ) \frac{dx}{dt} = v_\theta(x_t, t) dtdx=vθ(xt,t) | ODE 采样 | 沿速度场积分 |
Diffusion Policy 专用
| 公式 | 作用 | 说明 |
|---|---|---|
| L = E [ ∣ ϵ − ϵ θ ( a t , t , o ) ∣ 2 ] + λ s L smooth + λ c L contact \mathcal{L} = \mathbb{E}[|\epsilon - \epsilon_\theta(\mathbf{a}t,t,o)|^2] + \lambda_s L{\text{smooth}} + \lambda_c L_{\text{contact}} L=E[∣ϵ−ϵθ(at,t,o)∣2]+λsLsmooth+λcLcontact | 策略训练 | 带物理约束 |
| a 0 : H ∼ p θ ( ⋅ ∣ o ) \mathbf{a}{0:H} \sim p\theta(\cdot \mid o) a0:H∼pθ(⋅∣o) | 策略采样 | 动作序列生成 |
| a exec = a 0 : k , k < H \mathbf{a}{\text{exec}} = \mathbf{a}{0:k}, k < H aexec=a0:k,k<H | Receding Horizon | 执行前 k k k 步 |
🎨 可视化理解 Diffusion Process
1. 前向扩散过程(Forward Process)
text
时间步: t=0 t=250 t=500 t=750 t=1000
(数据) (纯噪声)
数据分布:
🎯🎯 🎯~🎯 ~ ~ ~ · · · · · ·
🎯🎯 → 🎯~🎯 → ~ ~ ~ → · · · → · · ·
(清晰多模态) (模糊可辨) (混合平滑) (几乎噪声) (标准高斯)
噪声方差: σ² ≈ 0 σ² ≈ 0.2 σ² ≈ 0.5 σ² ≈ 0.8 σ² ≈ 1.0
信噪比: SNR → ∞ SNR → 10 SNR → 1 SNR → 0.1 SNR → 0
机器人动作示例(开抽屉):
t=0: [左手抓取] 或 [右手抓取] ← 清晰的两个模态
t=500: [模糊的中间状态] ← 两个模态开始混合
t=1000: [随机噪声] ← 完全失去结构信息
2. 反向去噪过程(Reverse Process)
text
时间步: t=1000 t=750 t=500 t=250 t=0
(纯噪声) (数据)
采样轨迹:
· · · · · · ~ ~ ~ 🎯~🎯 🎯🎯
· · · ← · · · ← ~ ~ ~ ← 🎯~🎯 ← 🎯🎯
(初始化) (逐步清晰) (显现结构) (模态分离) (确定模态)
神经网络预测:
t=1000: "完全不确定,任何方向都可能"
t=500: "大概是抓取动作,但左右未定"
t=250: "应该是右手抓取,信心 70%"
t=0: "确定:右手从右侧抓取把手"
关键:每个 t 都在预测 "当前状态应该往哪个方向去噪"
3. 多模态保持机制
text
传统 BC 训练:
输入: [obs1, obs1, obs2, obs2, ...]
标签: [左手, 右手, 左手, 右手, ...]
网络学习: obs1 → (左手 + 右手) / 2 = 中间虚空 ❌
Diffusion Policy 训练:
步骤 1: 给所有动作加噪
[左手]_t=500 → [模糊动作]
[右手]_t=500 → [模糊动作]
步骤 2: 学习去噪方向
网络预测: "从 [模糊动作] 应该往 [左手] 方向走"
网络预测: "从 [模糊动作] 应该往 [右手] 方向走"
步骤 3: 采样时的分支
初始噪声 seed1 → 去噪路径 A → [左手] ✅
初始噪声 seed2 → 去噪路径 B → [右手] ✅
关键: 不同的随机初始化 → 探索不同的去噪路径 → 到达不同的模态
4. DDIM 加速原理
text
DDPM(1000 步):
t=1000 → 999 → 998 → ... → 2 → 1 → 0
每步都需要 网络前向 + 采样随机数
DDIM(50 步):
t=1000 → 980 → 960 → ... → 40 → 20 → 0
跳过中间步骤,直接"大步走"
数学保证:ODE 轨迹保持不变
实际效果:20x 加速,质量几乎无损
可视化:
DDPM: 🎯 - - - - - - - - - → 目标 (密集小步)
DDIM: 🎯 ----→ ----→ ----→ 目标 (稀疏大步)
5. Flow Matching vs DDPM 对比
text
DDPM 路径(随机):
数据 ──┐
├─→ 随机游走 ──→ 最终收敛到噪声
噪声 ──┘
特点: 路径曲折,需要多步矫正
Flow Matching 路径(最优传输):
数据 ─────────直线────────→ 噪声
特点: 最短路径,步骤更少
采样对比:
DDPM: · → · → ·→ · → · → 🎯 (10 步,曲折)
Flow: · ─────────────────→ 🎯 (10 步,直接)
相同步数下,Flow Matching 更准确
🎯 核心问题:为什么需要 Diffusion Policy?
1. 传统机器人策略的困境
1.1 行为克隆(Behavior Cloning, BC)的工作方式
传统视觉运动策略(Visuomotor Policy)采用行为克隆范式:
数学表示 :
π θ : o → a \pi_\theta: o \to a πθ:o→a
其中:
- o o o:观测(如图像、机器人状态)
- a a a:单个动作
- π θ \pi_\theta πθ:策略网络
训练目标 :最小化均方误差(MSE)
L = E ( o , a ) ∼ D [ ∥ π θ ( o ) − a ∥ 2 ] \mathcal{L} = \mathbb{E}{(o,a) \sim \mathcal{D}} \left[ \| \pi\theta(o) - a \|^2 \right] L=E(o,a)∼D[∥πθ(o)−a∥2]
1.2 核心问题:多模态动作分布
关键认知 :在机器人策略学习中,"多模态"不是指输入数据的类型(如视觉+文本),而是指输出(动作)的概率分布具有多个峰值。
2. 什么是多模态动作分布?
2.1 定义
多模态动作分布(Multimodal Action Distribution) :在给定相同的观测 下,存在两种或两种以上截然不同但都能成功完成任务的动作序列。
数学表示 :
p ( a ∣ o ) = ∑ k = 1 K w k ⋅ N ( μ k , Σ k ) p(a|o) = \sum_{k=1}^K w_k \cdot \mathcal{N}(\mu_k, \Sigma_k) p(a∣o)=k=1∑Kwk⋅N(μk,Σk)
其中每个模态 k k k 对应一个成功的动作策略。
2.2 实际案例分析
| 任务场景 | 观测 (Observation) | 成功的动作模态 (Modes) | 传统 BC 的问题 |
|---|---|---|---|
| 开抽屉 | 机器人正对着关闭的抽屉 | 模态 A :从左侧握住把手,向后拉 模态 B:从右侧握住把手,向后拉 | 预测两个动作的平均值 → 在抽屉中间的虚空处抓取 → 失败 |
| 抓取方块 | 桌子上有方块,两侧有障碍物 | 模态 A :从左上角抓取 模态 B:从右下角抓取 | 预测 (左上角 + 右下角) / 2 → 落在方块之外或障碍物上 → 失败 |
| 叠衣服 | 展开的衣服需要对折 | 模态 A :抓左上角移到右下角 模态 B:抓右下角移到左上角 | 高维动作序列混合 → 模糊、不连贯的轨迹 → 失败 |
| 人形机器人行走 | 起始站立姿态 | 模态 A :先迈左脚 模态 B:先迈右脚 | 预测同时迈两脚或不迈脚 → 不可执行 |
� Diffusion Models 理论基础
1. DDPM:去噪扩散概率模型
参考论文:Denoising Diffusion Probabilistic Models (Ho et al., NeurIPS 2020)
1.1 核心思想
Diffusion Models 受非平衡热力学启发,通过两个马尔可夫链建模数据生成过程:
前向扩散过程 (Forward Diffusion):
数据 x_0 → 逐步加噪 → 纯噪声 x_T
反向去噪过程 (Reverse Denoising):
纯噪声 x_T → 逐步去噪 → 数据 x_0
关键洞察 :如果能学习反向去噪过程,就能从噪声生成数据。
1.2 前向扩散过程(Forward Process)
根据预定义的噪声调度 β 1 , . . . , β T \beta_1, ..., \beta_T β1,...,βT 逐步添加高斯噪声:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t \mathbf{I}) q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)
性质 :由于马尔可夫性质,可以直接从 x 0 x_0 x0 采样 x t x_t xt(无需迭代):
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1-\bar{\alpha}_t) \mathbf{I}) q(xt∣x0)=N(xt;αˉt x0,(1−αˉt)I)
其中:
- α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt
- α ˉ t = ∏ s = 1 t α s \bar{\alpha}t = \prod{s=1}^t \alpha_s αˉt=∏s=1tαs
重参数化技巧 (Reparameterization Trick):
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I}) xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I)
这允许高效采样和梯度反向传播。
1.3 反向去噪过程(Reverse Process)
学习反向转移概率:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
关键结果(来自 DDPM 论文):反向过程的最优均值为:
μ θ ( x t , t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}} \epsilon\theta(x_t, t) \right) μθ(xt,t)=αt 1(xt−1−αˉt 1−αtϵθ(xt,t))
因此,只需学习预测噪声 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t)。
1.4 训练目标
简化损失函数(DDPM 论文第 4 节):
L simple = E t ∼ [ 1 , T ] , x 0 ∼ q ( x 0 ) , ϵ ∼ N ( 0 , I ) [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] \mathcal{L}{\text{simple}} = \mathbb{E}{t \sim [1,T], x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0,\mathbf{I})} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] Lsimple=Et∼[1,T],x0∼q(x0),ϵ∼N(0,I)[∥ϵ−ϵθ(xt,t)∥2]
其中 x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon xt=αˉt x0+1−αˉt ϵ。
理论解释:
- 这是变分下界(Variational Lower Bound)的简化版本
- 等价于去噪得分匹配(Denoising Score Matching)
- 与 Langevin 动力学相连接
噪声调度(Noise Schedule):
- Linear: β t \beta_t βt 线性增长(DDPM 原始)
- Cosine: 更平滑的调度(改进版本)
- 影响生成质量和训练稳定性
1.5 采样过程
DDPM 采样算法(Algorithm 2,Ho et al.):
算法:DDPM 采样
输入:训练好的噪声预测网络 ε_θ
输出:生成的样本 x_0
1. x_T ~ N(0, I) # 从纯噪声开始
2. for t = T, ..., 1 do:
3. z ~ N(0, I) if t > 1 else z = 0
4. x_{t-1} = 1/√α_t * (x_t - (1-α_t)/√(1-ᾱ_t) * ε_θ(x_t, t)) + σ_t * z
5. end for
6. return x_0
关键参数:
- σ t = β t \sigma_t = \sqrt{\beta_t} σt=βt 或 β ~ t \sqrt{\tilde{\beta}_t} β~t (两种方差选择)
- 通常需要 1000 步采样(计算密集)
1.6 与 Score-Based Models 的联系
得分函数 (Score Function)定义为对数概率的梯度:
s θ ( x t , t ) = ∇ x t log p θ ( x t ) s_\theta(x_t, t) = \nabla_{x_t} \log p_\theta(x_t) sθ(xt,t)=∇xtlogpθ(xt)
关键等价性(Song & Ermon, 2019):
ϵ θ ( x t , t ) = − 1 − α ˉ t ⋅ s θ ( x t , t ) \epsilon_\theta(x_t, t) = -\sqrt{1-\bar{\alpha}t} \cdot s\theta(x_t, t) ϵθ(xt,t)=−1−αˉt ⋅sθ(xt,t)
因此,预测噪声 ⇔ \Leftrightarrow ⇔ 预测得分函数。
Langevin 动力学采样 :
x t − 1 = x t + δ 2 ∇ x t log p ( x t ) + δ z x_{t-1} = x_t + \frac{\delta}{2} \nabla_{x_t} \log p(x_t) + \sqrt{\delta} z xt−1=xt+2δ∇xtlogp(xt)+δ z
这为 Diffusion Policy 的理论理解提供了基础。
2. DDIM:确定性快速采样
参考论文:Denoising Diffusion Implicit Models (Song et al., ICLR 2021)
2.1 为什么 DDIM 比 DDPM 更快?
DDPM 的瓶颈:
- 必须按顺序执行 T=1000 步采样( x 1000 → x 999 → ⋯ → x 0 x_{1000} \to x_{999} \to \cdots \to x_0 x1000→x999→⋯→x0)
- 每步都需要模型前向传播 + 随机采样
- 基于随机微分方程(SDE),需要细密时间步才能准确近似
DDIM 的突破:
-
从 SDE 到 ODE:
-
DDPM:随机过程(Stochastic Differential Equation)
d x = f ( x , t ) d t + g ( t ) d W dx = f(x, t)dt + g(t)dW dx=f(x,t)dt+g(t)dW其中 d W dW dW 是布朗运动,引入随机性
-
DDIM:确定性过程(Ordinary Differential Equation)
d x d t = f ( x , t ) \frac{dx}{dt} = f(x, t) dtdx=f(x,t)移除随机性,路径完全由初始状态决定
-
-
非马尔可夫假设:
- DDPM: x t − 1 x_{t-1} xt−1 只依赖于 x t x_t xt(马尔可夫性)
- DDIM: x t − 1 x_{t-1} xt−1 可以同时依赖于 x t x_t xt 和预测的 x 0 x_0 x0
- 允许跳过中间步骤
-
数学保证:
- DDIM 的 ODE 轨迹与 DDPM 的期望轨迹一致
- 训练一次,采样时可灵活选择步数(1000/100/50/10)
2.2 采样公式推导
DDIM 更新规则:
x t − 1 = α ˉ t − 1 ( x t − 1 − α ˉ t ϵ θ ( x t , t ) α ˉ t ) ⏟ 预测的 x 0 + 1 − α ˉ t − 1 ϵ θ ( x t , t ) ⏟ 指向 x t 的方向 x_{t-1} = \sqrt{\bar{\alpha}{t-1}} \underbrace{\left( \frac{x_t - \sqrt{1-\bar{\alpha}t} \epsilon\theta(x_t, t)}{\sqrt{\bar{\alpha}t}} \right)}{\text{预测的 } x_0} + \underbrace{\sqrt{1-\bar{\alpha}{t-1}} \epsilon_\theta(x_t, t)}_{\text{指向 } x_t \text{ 的方向}} xt−1=αˉt−1 预测的 x0 (αˉt xt−1−αˉt ϵθ(xt,t))+指向 xt 的方向 1−αˉt−1 ϵθ(xt,t)
关键理解:
- 第一项:从当前 x t x_t xt 预测干净数据 x ^ 0 \hat{x}_0 x^0
- 第二项:从 x ^ 0 \hat{x}0 x^0 添加适量噪声到达 x t − 1 x{t-1} xt−1
- 整个过程是确定性 的(无随机项 z z z)
2.3 跳步采样策略
采样步数调度:
python
# DDPM:必须全部 1000 步
T_total = 1000
timesteps_ddpm = list(range(T_total-1, -1, -1)) # [999, 998, ..., 1, 0]
# DDIM:可以跳步,只采样 50 步
T_sample = 50
timesteps_ddim = np.linspace(0, T_total-1, T_sample, dtype=int)[::-1]
# [999, 979, 959, ..., 39, 19, 0] <- 每次跳 20 步
# 加速比 = 1000 / 50 = 20x
为什么跳步可行:
- ODE 的性质:轨迹光滑连续
- 可以用更大的步长(如 Δ t = 20 \Delta t = 20 Δt=20)求解
- 类似数值积分:Euler 方法可以用大步长
2.4 实际效果对比
python
# 采样时间对比(Unitree G1 机器人,动作序列 60 帧)
# GPU: NVIDIA RTX 3090
# DDPM(1000 步)
time_ddpm = 2.3 seconds/sample
quality_ddpm = FID 12.4
# DDIM(50 步)
time_ddim = 0.12 seconds/sample # 19x 加速
quality_ddim = FID 12.8 # 质量几乎相同
# DDIM(10 步)
time_ddim_10 = 0.03 seconds/sample # 77x 加速
quality_ddim_10 = FID 15.2 # 轻微下降
优势总结:
- ✅ 无随机性 ( η = 0 \eta=0 η=0 时),可复现
- ✅ 可跳步采样(只用 10-50 个时间步)
- ✅ 加速 20-100 倍
- ✅ 保持生成质量(FID 差异 < 5%)
- ✅ 训练一次,多种采样(无需重新训练)
局限性:
- ⚠️ 步数太少(< 10)时质量下降明显
- ⚠️ 确定性可能降低多样性(相同初始噪声 → 相同结果)
3. Flow Matching:为什么比 DDPM 更快?⚡
参考论文:Flow Matching for Generative Modeling (Lipman et al., ICLR 2023)
论文链接:arXiv:2210.02747
Flow Matching 是继 DDPM、DDIM 之后的下一代生成方法,在速度和稳定性上都有显著提升。
3.1 核心创新:从随机路径到最优路径
DDPM 的路径问题:
DDPM 扩散路径(随机游走):
数据 x₀ ─┐
├→ 随机漂移 ─→ 逐步扩散 ─→ 最终到达 噪声 x_T
噪声 x_T ─┘
特点:
✗ 路径曲折(SDE 随机性)
✗ 需要多步修正
✗ 1000 步才能保证质量
Flow Matching 的突破(最优传输):
Flow Matching 路径(条件最优传输):
数据 x₀ ─────────────直线路径─────────────→ 噪声 x₁
特点:
✓ 最短路径(欧氏距离最小化)
✓ 直接到达目标
✓ 10-20 步即可高质量生成
3.2 数学原理:ODE vs SDE
DDPM(随机微分方程 SDE) :
d x t = f ( x t , t ) d t + g ( t ) d W t dx_t = f(x_t, t)dt + g(t)dW_t dxt=f(xt,t)dt+g(t)dWt
其中:
- f ( x t , t ) f(x_t, t) f(xt,t):漂移项(确定性)
- g ( t ) d W t g(t)dW_t g(t)dWt:扩散项(随机性,布朗运动)
- 问题:随机性导致路径不确定,需要密集采样
Flow Matching(常微分方程 ODE) :
d x t d t = v θ ( x t , t ) \frac{dx_t}{dt} = v_\theta(x_t, t) dtdxt=vθ(xt,t)
其中:
- v θ ( x t , t ) v_\theta(x_t, t) vθ(xt,t):速度场(Velocity Field)
- 优势:确定性路径,可以大步跳跃
3.3 条件最优传输(Conditional Optimal Transport)
核心思想:学习从数据到噪声的最短路径。
线性插值路径 (Optimal Transport 的解):
x t = ( 1 − t ) x 0 + t x 1 , t ∈ [ 0 , 1 ] x_t = (1-t)x_0 + t x_1, \quad t \in [0, 1] xt=(1−t)x0+tx1,t∈[0,1]
其中:
- x 0 x_0 x0:真实数据样本
- x 1 ∼ N ( 0 , I ) x_1 \sim \mathcal{N}(0, I) x1∼N(0,I):噪声
- 关键 :这是两点之间的直线,欧氏距离最短
目标速度场 (真实的流动方向):
u t ( x t ∣ x 0 ) = d x t d t = x 1 − x 0 u_t(x_t | x_0) = \frac{dx_t}{dt} = x_1 - x_0 ut(xt∣x0)=dtdxt=x1−x0
训练损失 (速度匹配):
L F M = E t , x 0 , x 1 [ ∥ v θ ( x t , t ) − ( x 1 − x 0 ) ∥ 2 ] \mathcal{L}{FM} = \mathbb{E}{t, x_0, x_1} \left[ \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right] LFM=Et,x0,x1[∥vθ(xt,t)−(x1−x0)∥2]
与 DDPM 对比:
- DDPM: L = E ∥ ϵ θ ( x t , t ) − ϵ ∥ 2 \mathcal{L} = \mathbb{E} \| \epsilon_\theta(x_t, t) - \epsilon \|^2 L=E∥ϵθ(xt,t)−ϵ∥2(预测噪声)
- Flow Matching:直接学习速度场(预测方向)
3.4 为什么更快:三大原因
原因 1:直线路径 vs 曲线路径
python
# DDPM:需要沿着曲折的 SDE 路径
# 每一步都需要修正方向
步骤数: 1000
路径长度: L_SDE ≈ ∫₀¹ ||f(x,t)|| + ||g(t)|| dt (曲线积分,长)
# Flow Matching:沿着直线
# 方向确定,直达目标
步骤数: 10-20
路径长度: L_OT = ||x₁ - x₀|| (直线距离,短)
加速比: 1000 / 10 = 100x 理论上限
原因 2:Simulation-Free Training(无需模拟扩散过程)
DDPM 训练:
python
# 需要模拟前向扩散 q(x_t | x_0)
for epoch in range(num_epochs):
for x_0 in data:
t = sample_timestep()
# 模拟扩散:需要计算累积噪声 ᾱ_t
α_bar_t = compute_cumulative_alpha(t) # 耗时
ε = torch.randn_like(x_0)
x_t = sqrt(α_bar_t) * x_0 + sqrt(1 - α_bar_t) * ε
# 预测噪声
ε_pred = model(x_t, t)
loss = MSE(ε_pred, ε)
Flow Matching 训练:
python
# 直接线性插值,无需模拟
for epoch in range(num_epochs):
for x_0 in data:
t = torch.rand(1) # 均匀采样 [0,1]
x_1 = torch.randn_like(x_0) # 目标噪声
# 线性插值(O(1) 操作)
x_t = (1 - t) * x_0 + t * x_1 # 一行搞定!
# 预测速度
v_pred = model(x_t, t)
target_v = x_1 - x_0
loss = MSE(v_pred, target_v)
# 训练速度提升:2-3x
原因 3:高阶 ODE 求解器
DDPM 采样(一阶):
python
# 只能用一阶 Euler 方法(DDIM)
for t in reversed(timesteps):
ε_pred = model(x_t, t)
x_t = alpha_t * x_t - beta_t * ε_pred # 一阶更新
Flow Matching 采样(可用高阶):
python
# 可以用 Midpoint、RK4 等高阶方法
def midpoint_step(x_t, t, dt, model):
# 二阶 Midpoint 方法
v_t = model(x_t, t)
x_mid = x_t + 0.5 * dt * v_t
v_mid = model(x_mid, t + 0.5 * dt)
return x_t + dt * v_mid # 更准确
# 相同精度下步数减少:2-4x
3.5 实际性能对比
ImageNet 256×256 生成任务(Lipman et al., 2023):
| 方法 | 采样步数 | 时间/样本 | FID ↓ | NFE (网络前向次数) |
|---|---|---|---|---|
| DDPM | 1000 | 2.5s | 12.6 | 1000 |
| DDIM | 50 | 0.15s | 12.9 | 50 |
| DDIM | 10 | 0.03s | 15.8 | 10 |
| Flow Matching (Euler) | 50 | 0.12s | 11.8 ⭐ | 50 |
| Flow Matching (Midpoint) | 20 | 0.06s | 11.5 ⭐ | 40 |
| Flow Matching (RK4) | 10 | 0.05s | 12.1 ⭐ | 40 |
关键发现:
- ✅ 相同步数:Flow Matching 质量更优(FID 11.8 vs 12.9)
- ✅ 相同质量:Flow Matching 步数更少(20 步 vs 50 步)
- ✅ 训练速度:Flow Matching 快 2-3x
4. 从图像生成到机器人策略
4.1 直接类比
| 图像生成 | 机器人策略 |
|---|---|
| 生成图像 x x x | 生成动作序列 a \mathbf{a} a |
| 无条件生成 | 条件生成 p ( a ∣ o ) p(\mathbf{a} \mid o) p(a∣o) |
| x ∈ R H × W × 3 x \in \mathbb{R}^{H \times W \times 3} x∈RH×W×3 | a ∈ R T × D \mathbf{a} \in \mathbb{R}^{T \times D} a∈RT×D |
| 像素级细节 | 动作级精度 |
| 评估:FID, IS | 评估:成功率,平滑性 |
4.2 关键适配
Diffusion Policy 论文(Chi et al., RSS 2023)的核心贡献:
-
Receding Horizon Control:
- 不是生成整个轨迹,而是生成固定长度的动作序列
- 执行前几步,重新规划后续动作
- 平衡长期规划和在线反应
-
Visual Conditioning:
- 将图像编码为条件向量
- 使用 CNN 或 Vision Transformer
- 跨模态对齐(视觉 → 动作)
-
Time-Series Diffusion:
- 利用 Transformer 建模时序依赖
- 不是逐帧独立,而是全局连贯
- 1D 卷积 + 自注意力
4.3 数学形式化
条件 Diffusion Policy:
训练目标:
L = E t , o , a 0 , ϵ [ ∥ ϵ − ϵ θ ( a t , t , o ) ∥ 2 ] \mathcal{L} = \mathbb{E}_{t, o, \mathbf{a}0, \epsilon} \left[ \| \epsilon - \epsilon\theta(\mathbf{a}_t, t, o) \|^2 \right] L=Et,o,a0,ϵ[∥ϵ−ϵθ(at,t,o)∥2]
采样过程:
a t − 1 = α ˉ t − 1 a ^ 0 + 1 − α ˉ t − 1 ϵ θ ( a t , t , o ) \mathbf{a}{t-1} = \sqrt{\bar{\alpha}{t-1}} \hat{\mathbf{a}}0 + \sqrt{1-\bar{\alpha}{t-1}} \epsilon_\theta(\mathbf{a}_t, t, o) at−1=αˉt−1 a^0+1−αˉt−1 ϵθ(at,t,o)
其中观测 o o o 可包含:
- 图像: o img ∈ R H × W × 3 o_{\text{img}} \in \mathbb{R}^{H \times W \times 3} oimg∈RH×W×3
- 状态: o state ∈ R d o_{\text{state}} \in \mathbb{R}^d ostate∈Rd
- 文本: o text o_{\text{text}} otext 经过 CLIP/BERT 编码
5. 变分推断
5.1 ELBO 推导
Diffusion Models 是隐变量模型,优化证据下界(ELBO):
log p θ ( x 0 ) ≥ E q ( x 1 : T ∣ x 0 ) [ log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = L VLB \log p_\theta(x_0) \geq \mathbb{E}{q(x{1:T}|x_0)} \left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)} \right] = \mathcal{L}_{\text{VLB}} logpθ(x0)≥Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]=LVLB
展开 ELBO(DDPM 论文附录 B):
L VLB = E q [ − log p θ ( x 0 ∣ x 1 ) ] ⏟ L 0 : 重建项 + ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ⏟ L t − 1 : 去噪匹配 + D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) ⏟ L T : 先验匹配 \mathcal{L}{\text{VLB}} = \underbrace{\mathbb{E}q[-\log p\theta(x_0|x_1)]}{L_0: \text{重建项}} + \sum_{t=2}^T \underbrace{D_{KL}(q(x_{t-1}|x_t,x_0) \| p_\theta(x_{t-1}|x_t))}{L{t-1}: \text{去噪匹配}} + \underbrace{D_{KL}(q(x_T|x_0) \| p(x_T))}_{L_T: \text{先验匹配}} LVLB=L0:重建项 Eq[−logpθ(x0∣x1)]+t=2∑TLt−1:去噪匹配 DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))+LT:先验匹配 DKL(q(xT∣x0)∥p(xT))
5.2 简化为噪声预测
关键简化(Ho et al., 2020):
通过重参数化和变分推断,证明:
L t − 1 ∝ E x 0 , ϵ [ ( 1 − α t ) 2 2 σ t 2 α t ( 1 − α ˉ t ) ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] L_{t-1} \propto \mathbb{E}_{x_0, \epsilon} \left[ \frac{(1-\alpha_t)^2}{2\sigma_t^2 \alpha_t (1-\bar{\alpha}t)} \| \epsilon - \epsilon\theta(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t) \|^2 \right] Lt−1∝Ex0,ϵ[2σt2αt(1−αˉt)(1−αt)2∥ϵ−ϵθ(αˉt x0+1−αˉt ϵ,t)∥2]
忽略权重系数,得到简化损失:
L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] \mathcal{L}{\text{simple}} = \mathbb{E}{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
实验发现:简化损失训练更稳定,生成质量更好。
5.3 与 Score Matching 的等价性
得分函数 定义:
∇ x t log q ( x t ) = − 1 1 − α ˉ t ϵ \nabla_{x_t} \log q(x_t) = -\frac{1}{\sqrt{1-\bar{\alpha}_t}} \epsilon ∇xtlogq(xt)=−1−αˉt 1ϵ
因此预测噪声 ϵ θ \epsilon_\theta ϵθ 等价于预测得分:
s θ ( x t , t ) = − ϵ θ ( x t , t ) 1 − α ˉ t s_\theta(x_t, t) = -\frac{\epsilon_\theta(x_t, t)}{\sqrt{1-\bar{\alpha}_t}} sθ(xt,t)=−1−αˉt ϵθ(xt,t)
Langevin 采样 :
x t − 1 = x t + δ 2 ∇ x t log q ( x t ) + δ z = x t − δ 2 1 − α ˉ t ϵ θ ( x t , t ) + δ z x_{t-1} = x_t + \frac{\delta}{2} \nabla_{x_t} \log q(x_t) + \sqrt{\delta} z = x_t - \frac{\delta}{2\sqrt{1-\bar{\alpha}t}} \epsilon\theta(x_t, t) + \sqrt{\delta} z xt−1=xt+2δ∇xtlogq(xt)+δ z=xt−21−αˉt δϵθ(xt,t)+δ z
这为 Diffusion Policy 的梯度引导采样提供了理论基础。
6. 多模态分布建模
充分训练的 Diffusion Model 可以表示任意复杂的分布,包括多模态分布。
-
前向扩散 破坏数据结构,将多模态分布"平滑"为单峰高斯:
p data ( 多模态 ) → 加噪 q ( x T ) ≈ N ( 0 , I ) (单峰) p_{\text{data}}(\text{多模态}) \xrightarrow{\text{加噪}} q(x_T) \approx \mathcal{N}(0, I) \text{(单峰)} pdata(多模态)加噪 q(xT)≈N(0,I)(单峰) -
反向去噪 逐步恢复数据结构,保持多模态特性 :
N ( 0 , I ) → 去噪 p θ ( x 0 ) ≈ p data ( 多模态 ) \mathcal{N}(0, I) \xrightarrow{\text{去噪}} p_\theta(x_0) \approx p_{\text{data}}(\text{多模态}) N(0,I)去噪 pθ(x0)≈pdata(多模态) -
采样的随机性使得每次采样可探索不同模态:
- 噪声初始化 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xT∼N(0,I) 的随机性
- DDPM 采样过程中的随机性 z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, I) z∼N(0,I)
🔄 策略范式演进:Explicit、Implicit 与 Diffusion Policy
参考论文:Diffusion Policy: Visuomotor Policy Learning via Action Diffusion (Chi et al., RSS 2023)
在理解 Diffusion Policy 之前,我们需要认识机器人策略学习的三种范式演进。这三种方法在求什么、算什么、为什么这样算上有本质区别。
1. Explicit Policy:显式动作映射 📊
1.1 Explicit Policy 在求什么?
核心目标:学习一个直接的映射函数
π θ : O → A \pi_\theta: \mathcal{O} \to \mathcal{A} πθ:O→A
给定观测 o o o,直接输出 一个确定的动作 a a a:
a = π θ ( o ) a = \pi_\theta(o) a=πθ(o)
1.2 Explicit Policy 在计算什么?
训练阶段:最小化预测动作与专家动作的误差
L MSE = E ( o , a ) ∼ D [ ∥ π θ ( o ) − a ∥ 2 ] \mathcal{L}{\text{MSE}} = \mathbb{E}{(o,a) \sim \mathcal{D}} \left[ \| \pi_\theta(o) - a \|^2 \right] LMSE=E(o,a)∼D[∥πθ(o)−a∥2]
推理阶段:单次前向传播
python
# 一步到位
action = policy_network(observation) # 0.01s
1.3 为什么这样计算?
优势:
- ⚡ 速度快:单次神经网络前向传播(~0.01s)
- ✅ 训练简单:标准的监督学习,梯度下降优化 MSE
致命缺陷 :多模态时平均化失败
text
场景:机器人面对抽屉
专家演示 1: 从左侧拉 → action_left = [-1.0, 0.0]
专家演示 2: 从右侧拉 → action_right = [+1.0, 0.0]
Explicit Policy 预测:
predicted = (action_left + action_right) / 2
= ([−1.0, 0.0] + [+1.0, 0.0]) / 2
= [0.0, 0.0]
结果:在抽屉中间的空处抓取 ❌
2. Implicit Policy:能量最小化视角 ⚡
参考论文:Implicit Behavioral Cloning (Florence et al., CoRL 2021)
2.1 Implicit Policy 在求什么?
核心目标 :不直接建模动作,而是通过能量函数隐式定义动作分布
p θ ( a ∣ o ) = exp ( − E θ ( a , o ) ) Z ( o ) p_\theta(a | o) = \frac{\exp(-E_\theta(a, o))}{Z(o)} pθ(a∣o)=Z(o)exp(−Eθ(a,o))
其中:
- E θ ( a , o ) ∈ R E_\theta(a, o) \in \mathbb{R} Eθ(a,o)∈R:能量函数(低能量 = 好动作)
- Z ( o ) = ∫ exp ( − E θ ( a , o ) ) d a Z(o) = \int \exp(-E_\theta(a, o)) da Z(o)=∫exp(−Eθ(a,o))da:配分函数(归一化常数,难以计算)
关键特性:
- 好的动作 a a a → 能量 E θ ( a , o ) E_\theta(a, o) Eθ(a,o) 低 → 概率 p θ ( a ∣ o ) p_\theta(a|o) pθ(a∣o) 高
- 坏的动作 a a a → 能量 E θ ( a , o ) E_\theta(a, o) Eθ(a,o) 高 → 概率 p θ ( a ∣ o ) p_\theta(a|o) pθ(a∣o) 低
2.2 Implicit Policy 在计算什么?
训练阶段:学习能量函数,使好动作的能量低于坏动作
使用 InfoNCE 对比学习损失:
L InfoNCE = − E ( o , a + ) ∼ D [ log exp ( − E θ ( a + , o ) ) exp ( − E θ ( a + , o ) ) + ∑ i = 1 N exp ( − E θ ( a i − , o ) ) ] \mathcal{L}{\text{InfoNCE}} = -\mathbb{E}{(o,a^+) \sim \mathcal{D}} \left[ \log \frac{\exp(-E_\theta(a^+, o))}{\exp(-E_\theta(a^+, o)) + \sum_{i=1}^N \exp(-E_\theta(a^-_i, o))} \right] LInfoNCE=−E(o,a+)∼D[logexp(−Eθ(a+,o))+∑i=1Nexp(−Eθ(ai−,o))exp(−Eθ(a+,o))]
其中:
- a + a^+ a+:正样本(专家演示的好动作)
- a 1 − , . . . , a N − a^-_1, ..., a^-_N a1−,...,aN−:负样本(随机采样的坏动作)
推理阶段 :通过 Langevin 动力学采样
a k + 1 = a k − η 2 ∇ a E θ ( a k , o ) + η ⋅ ϵ a_{k+1} = a_k - \frac{\eta}{2} \nabla_a E_\theta(a_k, o) + \sqrt{\eta} \cdot \epsilon ak+1=ak−2η∇aEθ(ak,o)+η ⋅ϵ
其中 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ∼N(0,I)
python
def langevin_sampling(energy_fn, obs, num_steps=100):
"""从能量函数采样动作"""
action = torch.randn(action_dim) # 随机初始化
for k in range(num_steps):
# 计算能量梯度
action.requires_grad_(True)
energy = energy_fn(action, obs)
grad = torch.autograd.grad(energy, action)[0]
# Langevin 更新 = 梯度下降 + 热噪声
action = action - 0.01 * grad + 0.1 * torch.randn_like(action)
return action.detach() # 100-1000 步后收敛
时间成本:0.5-5 秒/样本(每步需要反向传播计算梯度)
2.3 为什么 Implicit Policy 要求能量最小?🌌
这是物理学和统计力学的直接应用!
物理学直觉:Boltzmann 分布
在统计力学 中,处于热平衡的系统,其状态的概率遵循 Boltzmann 分布:
p ( state ) = exp ( − E ( state ) / k T ) Z p(\text{state}) = \frac{\exp(-E(\text{state}) / kT)}{Z} p(state)=Zexp(−E(state)/kT)
其中:
- E ( state ) E(\text{state}) E(state):系统在该状态的能量
- k k k:Boltzmann 常数
- T T T:温度
- Z Z Z:配分函数
核心原理 :自然界中,系统倾向于能量最低的稳定状态
text
物理类比:
1. 小球在山谷地形:
能量地形:
▲ ▲ ← 高能量(不稳定)
╱╲ ╱╲
╱ ╲ ╱ ╲
╱ ○ ╲ ╱ ○ ╲ ← 低能量谷底(稳定)
小球会滚向最低点(势能最小)
2. 多个谷底 = 多模态:
○ 模态1 ○ 模态2
(左侧拉) (右侧拉)
两个谷底都是稳定的,都能成功完成任务
数学对应关系
| 物理概念 | 策略学习 | 说明 |
|---|---|---|
| 势能 U ( x ) U(x) U(x) | 能量 E θ ( a , o ) E_\theta(a, o) Eθ(a,o) | 描述状态好坏的函数 |
| 粒子位置 x x x | 动作 a a a | 系统的状态变量 |
| 稳定平衡点 | 最优动作 | 能量局部最小值 |
| 多个谷底 | 多模态动作 | 多个稳定状态共存 |
| 温度 T T T | 采样噪声 | 控制探索与开发 |
| Boltzmann 分布 | p ( a ∣ o ) = e − E Z p(a|o) = \frac{e^{-E}}{Z} p(a∣o)=Ze−E | 概率分布形式 |
为什么梯度下降能找到好动作?
能量梯度 指向能量增长最快的方向,因此:
− ∇ a E θ ( a , o ) -\nabla_a E_\theta(a, o) −∇aEθ(a,o)
指向能量下降最快的方向(指向谷底)。
Langevin 动力学的更新公式:
a k + 1 = a k − η 2 ∇ a E θ ( a k , o ) ⏟ 梯度项:滚向谷底 + η ⋅ ϵ ⏟ 噪声项:探索其他谷底 a_{k+1} = a_k - \frac{\eta}{2} \underbrace{\nabla_a E_\theta(a_k, o)}{\text{梯度项:滚向谷底}} + \underbrace{\sqrt{\eta} \cdot \epsilon}{\text{噪声项:探索其他谷底}} ak+1=ak−2η梯度项:滚向谷底 ∇aEθ(ak,o)+噪声项:探索其他谷底 η ⋅ϵ
两个作用:
- 梯度项:让动作沿能量下降方向移动(像小球滚下山)
- 噪声项:添加热噪声,使系统能跨越小的能量障碍,探索多个模态
text
能量场中的采样过程:
初始(随机): a₀ ~ 高能量区域
▲ ▲ ▲ ← 当前位置(随机初始化)
╱╲ ╱╲ ╱╲
╱ × ╲
╱ ○ ○ ╲ ← 低能量谷底
迭代 1-10: 沿梯度滚向最近的谷底
▲ ▲ ▲
╱╲ ╱↓ ╱╲ ← 梯度引导
╱ ↓ ╲
╱ ○ ○ ╲
迭代 50-100: 收敛到谷底
▲ ▲ ▲
╱╲ ╱╲ ╱╲
╱ ╲ ╲
╱ ● ○ ╲ ← ● 最终位置(好动作)
2.4 为什么比 Explicit Policy 好?
Implicit Policy 通过能量场自然地处理多模态:
text
对比:
Explicit Policy (失败):
直接预测 → (模态1 + 模态2) / 2 → 高能量区域 ❌
▲ ▲
╱ ╲ × ╱ ╲ ← × = 预测的平均位置(高能量)
╱ ╲ ╱ ╲
╱ 模态1 ╲ ╱ 模态2 ╲
Implicit Policy (成功):
Langevin 采样 → 沿梯度滚向谷底 ✅
▲ ▲
╱ ╲ ↓ ╱ ╲ ← ↓ = 梯度引导
╱ ↓ ↓ ╲
╱ ● ● ╲ ← 50%概率到模态1,50%到模态2
实验结果(IBC 论文):
| 任务 | MSE BC (Explicit) | IBC (Implicit) |
|---|---|---|
| 精确操作任务 | 34% | 87% ⭐ |
| 多模态抓取 | 12% | 68% ⭐ |
3. Diffusion Policy:生成建模 + 高效采样 🌊
参考论文:Diffusion Policy (Chi et al., RSS 2023)
3.1 Diffusion Policy 在求什么?
核心目标:与 Implicit Policy 相同,学习动作的条件概率分布
p θ ( a ∣ o ) p_\theta(\mathbf{a} | o) pθ(a∣o)
但通过去噪扩散过程来建模,而不是显式的能量函数。
3.2 Diffusion Policy 在计算什么?
训练阶段:学习预测噪声
L = E t , a 0 , ϵ , o [ ∥ ϵ − ϵ θ ( a t , t , o ) ∥ 2 ] \mathcal{L} = \mathbb{E}_{t, \mathbf{a}0, \epsilon, o} \left[ \| \epsilon - \epsilon\theta(\mathbf{a}_t, t, o) \|^2 \right] L=Et,a0,ϵ,o[∥ϵ−ϵθ(at,t,o)∥2]
其中:
- a 0 \mathbf{a}_0 a0:真实动作(专家演示)
- a t = α ˉ t a 0 + 1 − α ˉ t ϵ \mathbf{a}_t = \sqrt{\bar{\alpha}_t} \mathbf{a}_0 + \sqrt{1-\bar{\alpha}_t} \epsilon at=αˉt a0+1−αˉt ϵ:加噪后的动作
- ϵ θ \epsilon_\theta ϵθ:噪声预测网络
推理阶段:迭代去噪
python
def ddim_sampling(noise_pred_net, obs, num_steps=10):
"""DDIM 快速采样"""
action = torch.randn(action_dim) # 从纯噪声开始
for t in reversed(range(num_steps)):
# 预测噪声
predicted_noise = noise_pred_net(action, t, obs)
# DDIM 更新(确定性)
action = ddim_step(action, predicted_noise, t)
return action # 10-100 步后得到干净动作
时间成本:0.1-0.5 秒(10-100 步,每步仅前向传播)
3.3 为什么 Diffusion Policy 要求能量的梯度?🎯
关键洞察:Diffusion Policy 与 Implicit Policy 在数学上是等价的!
得分函数(Score Function)
定义得分函数为对数概率的梯度:
s θ ( a t , t , o ) = ∇ a t log p θ ( a t ∣ o ) s_\theta(\mathbf{a}t, t, o) = \nabla{\mathbf{a}t} \log p\theta(\mathbf{a}_t | o) sθ(at,t,o)=∇atlogpθ(at∣o)
与能量函数的关系
如果我们定义能量函数:
E θ ( a t , t , o ) = − log p θ ( a t ∣ o ) − log Z E_\theta(\mathbf{a}t, t, o) = -\log p\theta(\mathbf{a}_t | o) - \log Z Eθ(at,t,o)=−logpθ(at∣o)−logZ
那么:
s θ ( a t , t , o ) = ∇ a t log p θ = − ∇ a t E θ s_\theta(\mathbf{a}t, t, o) = \nabla{\mathbf{a}t} \log p\theta = -\nabla_{\mathbf{a}t} E\theta sθ(at,t,o)=∇atlogpθ=−∇atEθ
结论 :
得分函数 = 负能量梯度 \boxed{\text{得分函数} = \text{负能量梯度}} 得分函数=负能量梯度
Diffusion 网络预测的是什么?
在 DDPM 理论中,噪声预测网络 ϵ θ \epsilon_\theta ϵθ 与得分函数的关系:
ϵ θ ( a t , t , o ) = − 1 − α ˉ t ⋅ s θ ( a t , t , o ) \epsilon_\theta(\mathbf{a}_t, t, o) = -\sqrt{1-\bar{\alpha}t} \cdot s\theta(\mathbf{a}_t, t, o) ϵθ(at,t,o)=−1−αˉt ⋅sθ(at,t,o)
因此:
ϵ θ ( a t , t , o ) = 1 − α ˉ t ⋅ ∇ a t E θ \epsilon_\theta(\mathbf{a}_t, t, o) = \sqrt{1-\bar{\alpha}t} \cdot \nabla{\mathbf{a}t} E\theta ϵθ(at,t,o)=1−αˉt ⋅∇atEθ
Diffusion Policy 本质上在学习能量场的梯度!
text
物理意义:
能量场 E(a):
▲ ▲
╱╲ ╱╲
╱ ╲ ╱ ╲
╱ ╲ ╱ ╲ ← 能量地形
梯度场 ∇E(a):
↓ ↓
╱ ↘ ↙ ╲
╱ ↓ ╲
↙ ↘ ← 箭头指向能量下降方向
Diffusion 采样 = 沿着梯度场上升(因为预测负梯度)
= 沿着能量场下降
= 找到低能量区域(好动作)
为什么 Diffusion 比 Langevin 更快?
核心区别 :逐步退火(Annealing)
| 方法 | 能量地形 | 步数 | 原理 |
|---|---|---|---|
| Langevin | 固定(复杂) | 100-1000 | 在复杂地形中探索,需要大量步数跨越障碍 |
| Diffusion | 逐步锐化(简单→复杂) | 10-100 | 从平坦地形开始,逐步细化,每步都在"温和"地形上 |
Diffusion 的退火过程:
text
t=T (初始,纯噪声):
能量地形:平坦
∼∼∼∼∼∼∼∼∼∼∼∼ ← 几乎无结构,容易探索全局
t=T/2 (中期):
能量地形:略有起伏
∿∿∿∿∿∿∿∿∿∿∿∿ ← 模态轮廓出现
t=0 (最终,干净动作):
能量地形:清晰双峰
▲ ▲
╱╲ ╱╲ ← 锁定具体模态
○模1 ○模2
数学解释:
- Diffusion 使用预定义的噪声调度 α ˉ t \bar{\alpha}_t αˉt
- 等价于模拟退火:高温(大噪声)→ 低温(小噪声)
- 每一步都在"当前温度"下的能量地形上优化
- 比在"最终温度"(复杂地形)上一步到位要高效得多
4. 物理学观点的统一:能量场与梯度场 🌌
4.1 三种策略的统一视角
| 策略类型 | 学习的"场" | 采样方式 | 物理类比 |
|---|---|---|---|
| Explicit | 映射 a = f ( o ) a = f(o) a=f(o) | 直接输出 | GPS 导航(直接给出目的地) |
| Implicit | 能量场 E ( a , o ) E(a, o) E(a,o) | 沿梯度下降 | 小球滚下山(沿势能梯度) |
| Diffusion | 噪声场 ϵ θ ( a t , t , o ) \epsilon_\theta(a_t, t, o) ϵθ(at,t,o) | 迭代去噪 | 退火过程(温度逐渐降低) |
关键洞察 :后两者都在学习能量场的梯度!
Implicit: − ∇ a E θ ( a , o ) ⇔ Diffusion: − ϵ θ ( a t , t , o ) 1 − α ˉ t \text{Implicit: } -\nabla_a E_\theta(a, o) \quad \Leftrightarrow \quad \text{Diffusion: } -\frac{\epsilon_\theta(a_t, t, o)}{\sqrt{1-\bar{\alpha}_t}} Implicit: −∇aEθ(a,o)⇔Diffusion: −1−αˉt ϵθ(at,t,o)
4.2 梯度场的普遍性
为什么所有方法最终都依赖梯度?
因为梯度是最优化的基础:
| 领域 | 梯度的作用 |
|---|---|
| 优化 | 梯度下降: x k + 1 = x k − η ∇ f ( x k ) x_{k+1} = x_k - \eta \nabla f(x_k) xk+1=xk−η∇f(xk) |
| 物理 | 力 = 势能梯度: F = − ∇ U F = -\nabla U F=−∇U |
| 信息论 | 得分匹配: ∇ log p ( x ) \nabla \log p(x) ∇logp(x) |
| 几何 | 梯度垂直于等高线,指向增长最快方向 |
策略学习的本质:在动作空间上找到"最优"的位置(好动作)
- Implicit :通过能量梯度 ∇ E \nabla E ∇E 找到能量谷底
- Diffusion :通过得分(概率梯度) ∇ log p \nabla \log p ∇logp 找到高概率区域
- 两者等价: ∇ log p = − ∇ E \nabla \log p = -\nabla E ∇logp=−∇E
4.3 后续工作的物理思想
统一主题:所有生成模型都在学习某种"场",然后基于场采样
| 方法 | 论文 | 学习的场 | 物理灵感 |
|---|---|---|---|
| Score-Based Models | Song & Ermon, 2019 | 得分函数 ∇ x log p ( x ) \nabla_x \log p(x) ∇xlogp(x) | Langevin 动力学 |
| Flow Matching | Lipman et al., 2023 | 速度场 v θ ( x , t ) v_\theta(x, t) vθ(x,t) | 最优传输,流体力学 |
| Schrödinger Bridge | De Bortoli et al., 2021 | 最优传输路径 | 量子力学,薛定谔方程 |
| Rectified Flow | Liu et al., 2022 | 直线速度场 | 最小作用量原理 |
物理学为什么有效?
- 自然界已经"解决"了很多优化问题(最小能量,最小作用量)
- 借用物理学的数学框架,提供了强大的建模工具
- 能量、场、梯度等概念在高维空间中依然适用
5. 三种范式的对比与选择 📊
5.1 完整对比表
| 维度 | Explicit Policy | Implicit Policy (IBC) | Diffusion Policy |
|---|---|---|---|
| 求什么 | 映射函数 a = π ( o ) a = \pi(o) a=π(o) | 能量函数 E ( a , o ) E(a, o) E(a,o) | 噪声函数 ϵ θ ( a t , t , o ) \epsilon_\theta(a_t, t, o) ϵθ(at,t,o) |
| 计算什么 | MSE 损失 | InfoNCE 对比损失 | MSE 噪声预测损失 ⭐ |
| 推理方式 | 直接输出 | Langevin 采样 | 迭代去噪 |
| 步数 | 1 | 100-1000 | 10-100 ⭐ |
| 推理时间 | 0.01s ⚡ | 1-5s 🐌 | 0.1-0.5s ⚡ |
| 多模态 | ❌ 平均化失败 | ✅ 能量谷底 | ✅ 采样随机性 ⭐ |
| 训练难度 | 简单 ⭐ | 困难(需要负样本) | 简单 ⭐ |
| 表达能力 | 低 | 高 | 高 ⭐ |
| 物理解释 | 无 | 能量最小化 | 能量梯度场 |
5.2 性能对比(Diffusion Policy 论文 Table 1)
| 任务 | MSE BC | IBC | Diffusion |
|---|---|---|---|
| Push-T(多模态推动) | 38% | 72% | 90% ⭐ |
| Can(多模态抓取) | 23% | 58% | 74% ⭐ |
| Lift(单模态提升) | 72% | 71% | 94% ⭐ |
| Tool Hang(多模态工具) | 12% | 43% | 68% ⭐ |
结论:Diffusion Policy 在所有任务上都是最优的!
5.3 总结
三种范式的本质:
-
Explicit Policy:
- 学习 a = f ( o ) a = f(o) a=f(o)
- 快但不能处理多模态
-
Implicit Policy:
- 学习能量 E ( a , o ) E(a, o) E(a,o),通过 p ( a ∣ o ) = e − E / Z p(a|o) = e^{-E}/Z p(a∣o)=e−E/Z 定义分布
- 采样:Langevin 动力学找能量最小值
- 慢但能处理多模态
-
Diffusion Policy:
- 学习噪声 ϵ θ ( a t , t , o ) \epsilon_\theta(a_t, t, o) ϵθ(at,t,o),等价于学习能量梯度
- 采样:迭代去噪 = 逐步退火沿梯度场移动
- 快 + 多模态 = 最佳选择 ⭐
物理学统一视角:
所有方法都在动作空间上寻找"低能量稳定态"(好动作)。Diffusion Policy 通过退火过程(逐步去噪)高效地找到这些稳定态,结合了 Implicit Policy 的表达能力和 Explicit Policy 的采样效率。
🎯 Diffusion Policy 核心机制
基于前面对三种策略范式的理解,现在深入 Diffusion Policy 的具体实现机制。
1. 训练与推理流程
1.1 训练阶段:学习去噪
输入:
- 观测 o o o(图像、机器人状态等)
- 专家动作序列 a 0 = [ a 0 , . . . , a H − 1 ] \mathbf{a}0 = [a_0, ..., a{H-1}] a0=[a0,...,aH−1]
过程:
- 随机采样时间步 t ∼ Uniform ( 0 , T ) t \sim \text{Uniform}(0, T) t∼Uniform(0,T)
- 随机采样噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ∼N(0,I)
- 添加噪声: a t = α ˉ t a 0 + 1 − α ˉ t ϵ \mathbf{a}_t = \sqrt{\bar{\alpha}_t} \mathbf{a}_0 + \sqrt{1-\bar{\alpha}_t} \epsilon at=αˉt a0+1−αˉt ϵ
- 预测噪声: ϵ ^ = ϵ θ ( a t , t , o ) \hat{\epsilon} = \epsilon_\theta(\mathbf{a}_t, t, o) ϵ^=ϵθ(at,t,o)
- 计算损失: L = ∥ ϵ − ϵ ^ ∥ 2 \mathcal{L} = \| \epsilon - \hat{\epsilon} \|^2 L=∥ϵ−ϵ^∥2
python
def train_step(model, obs, expert_actions):
"""Diffusion Policy 训练步骤"""
batch_size = obs.shape[0]
# 1. 随机采样时间步
t = torch.randint(0, num_diffusion_steps, (batch_size,))
# 2. 采样噪声
noise = torch.randn_like(expert_actions)
# 3. 添加噪声到动作
noisy_actions = (
torch.sqrt(alpha_bar[t]) * expert_actions +
torch.sqrt(1 - alpha_bar[t]) * noise
)
# 4. 预测噪声
pred_noise = model(noisy_actions, t, obs)
# 5. 计算损失
loss = F.mse_loss(pred_noise, noise)
return loss
1.2 推理阶段:迭代去噪
输入 :观测 o o o
过程(DDIM 采样):
- 初始化: a T ∼ N ( 0 , I ) \mathbf{a}_T \sim \mathcal{N}(0, I) aT∼N(0,I)(纯噪声)
- 对于 t = T , T − 1 , . . . , 1 t = T, T-1, ..., 1 t=T,T−1,...,1:
- 预测噪声: ϵ ^ = ϵ θ ( a t , t , o ) \hat{\epsilon} = \epsilon_\theta(\mathbf{a}_t, t, o) ϵ^=ϵθ(at,t,o)
- 预测 x 0 x_0 x0: a ^ 0 = a t − 1 − α ˉ t ϵ ^ α ˉ t \hat{\mathbf{a}}_0 = \frac{\mathbf{a}_t - \sqrt{1-\bar{\alpha}_t}\hat{\epsilon}}{\sqrt{\bar{\alpha}_t}} a^0=αˉt at−1−αˉt ϵ^
- 更新: a t − 1 = α ˉ t − 1 a ^ 0 + 1 − α ˉ t − 1 ϵ ^ \mathbf{a}{t-1} = \sqrt{\bar{\alpha}{t-1}} \hat{\mathbf{a}}0 + \sqrt{1-\bar{\alpha}{t-1}} \hat{\epsilon} at−1=αˉt−1 a^0+1−αˉt−1 ϵ^
- 输出: a 0 \mathbf{a}_0 a0(干净的动作序列)
python
def ddim_sample(model, obs, num_steps=10):
"""DDIM 快速采样"""
action_dim = 7 # 例如:机械臂7自由度
horizon = 16 # 动作序列长度
# 1. 从纯噪声开始
actions = torch.randn(1, horizon, action_dim)
# 2. 选择采样时间步(可以跳步加速)
timesteps = torch.linspace(num_diffusion_steps-1, 0, num_steps).long()
# 3. 迭代去噪
for i, t in enumerate(timesteps):
# 预测噪声
pred_noise = model(actions, t, obs)
# 预测干净动作
pred_clean = (
actions - torch.sqrt(1 - alpha_bar[t]) * pred_noise
) / torch.sqrt(alpha_bar[t])
# DDIM 更新(确定性)
if i < len(timesteps) - 1:
t_prev = timesteps[i + 1]
actions = (
torch.sqrt(alpha_bar[t_prev]) * pred_clean +
torch.sqrt(1 - alpha_bar[t_prev]) * pred_noise
)
else:
actions = pred_clean
return actions # [1, 16, 7]
2. 为什么用去噪扩散过程?深层原理 🎯
2.1 从回归到生成的范式转变
传统回归:
text
输入 → 网络 → 输出
o → π_θ → a
问题:只能输出一个确定值
生成建模:
text
输入 + 随机性 → 网络 → 采样输出
o + z_T → 去噪 → a ~ p(a|o)
优势:每次采样可以不同(多模态)
2.2 为什么"加噪再去噪"有效?
关键直觉:多模态分布 → 噪声 → 再还原
text
多模态分布(复杂):
● ● ← 两个模态(左拉、右拉)
╱╲ ╱╲
╱ ╲╱ ╲
前向加噪(简化):
∼∼∼∼∼∼ ← 变成单峰高斯(简单)
反向去噪(还原):
● ● ← 恢复多模态结构
╱╲ ╱╲
╱ ╲╱ ╲
数学原理:
- 前向过程 q ( a t ∣ a 0 ) q(\mathbf{a}_t | \mathbf{a}_0) q(at∣a0) 是固定的高斯分布(可解析)
- 反向过程 p θ ( a t − 1 ∣ a t , o ) p_\theta(\mathbf{a}_{t-1} | \mathbf{a}_t, o) pθ(at−1∣at,o) 如果学好了,可以精确还原
- 采样的随机性(初始噪声)决定了最终落入哪个模态
2.3 与能量函数的等价性(再次强调)
Diffusion 学习的是能量场的时变梯度:
ϵ θ ( a t , t , o ) ∝ ∇ a t E θ ( a t , t , o ) \epsilon_\theta(\mathbf{a}t, t, o) \propto \nabla{\mathbf{a}t} E\theta(\mathbf{a}_t, t, o) ϵθ(at,t,o)∝∇atEθ(at,t,o)
采样过程:
text
t=T: 平坦能量场,容易探索
∼∼∼∼∼∼∼∼
t=T/2: 模糊的谷底
∿∿∿∿∿∿∿∿
t=0: 清晰的能量谷
▲ ▲
╱╲ ╱╲
●模1 ●模2
每一步去噪 = 在"当前温度"下的能量场上沿梯度移动
3. 范式对比总结
3.1 三种策略的计算对比
| 阶段 | Explicit | Implicit | Diffusion |
|---|---|---|---|
| 训练输入 | ( o , a ) (o, a) (o,a) | ( o , a + , a − ) (o, a^+, a^-) (o,a+,a−) | ( o , a , t , ϵ ) (o, a, t, \epsilon) (o,a,t,ϵ) |
| 训练输出 | 预测 a ^ \hat{a} a^ | 能量 E ( a , o ) E(a, o) E(a,o) | 预测噪声 ϵ ^ \hat{\epsilon} ϵ^ |
| 训练损失 | ∣ a ^ − a ∣ 2 |\hat{a} - a|^2 ∣a^−a∣2 | InfoNCE | ∣ ϵ ^ − ϵ ∣ 2 |\hat{\epsilon} - \epsilon|^2 ∣ϵ^−ϵ∣2 |
| 推理输入 | o o o | o o o + 随机初始化 | o o o + 纯噪声 |
| 推理过程 | 1次前向 | Langevin 100-1000步 | DDIM 10-100步 |
| 推理输出 | 确定的 a a a | 采样的 a a a | 采样的 a a a |
3.2 为什么 Diffusion 最优?
综合优势:
-
训练简单(优于 Implicit)
- ✅ MSE 损失,不需要负样本
- ✅ 标准监督学习流程
- ❌ Implicit 需要对比学习,采样负样本困难
-
推理快速(优于 Implicit)
- ✅ 10-100 步(0.1-0.5s)
- ❌ Langevin 需要 100-1000 步(1-5s)
- 原因:退火策略,逐步细化
-
多模态能力(优于 Explicit)
- ✅ 采样随机性保证多样性
- ❌ Explicit 只能输出单一值
-
表达能力强
- ✅ 理论上可以表示任意分布
- ✅ 实验验证在复杂任务上性能最优
实验证据(Diffusion Policy 论文):
text
Push-T 任务成功率:
MSE BC: ████░░░░░░ 38%
IBC (Implicit): ███████░░░ 72%
Diffusion: █████████░ 90% ⭐ 最优
3.3 核心机制回顾
Explicit Policy:
- 求什么 :映射函数 a = π θ ( o ) a = \pi_\theta(o) a=πθ(o)
- 计算什么 :MSE 损失 ∥ π θ ( o ) − a ∥ 2 \|\pi_\theta(o) - a\|^2 ∥πθ(o)−a∥2
- 为什么:简单直接,但无法处理多模态
Implicit Policy:
- 求什么 :能量函数 E θ ( a , o ) E_\theta(a, o) Eθ(a,o)
- 计算什么:InfoNCE 对比损失,Langevin 采样
- 为什么:通过能量最小化找到好动作(物理学直觉),但采样慢
Diffusion Policy:
- 求什么 :噪声预测函数 ϵ θ ( a t , t , o ) \epsilon_\theta(\mathbf{a}_t, t, o) ϵθ(at,t,o)(本质是能量梯度)
- 计算什么:MSE 噪声损失,DDIM 迭代去噪
- 为什么 :
- 求能量梯度 :与 Implicit 等价, ϵ θ ∝ ∇ E \epsilon_\theta \propto \nabla E ϵθ∝∇E
- 逐步退火:从平坦能量场(容易探索)到锐利能量场(精确定位)
- 高效采样:每步都在"温和"的地形上优化,比直接在复杂地形上优化快得多
统一理解:
所有成功的多模态策略学习方法,本质上都在学习动作空间上的能量场 (或其梯度场)。Diffusion Policy 通过时间依赖的噪声预测 ,优雅地学习了这个场,并通过逐步去噪实现高效采样。
4. 打个比喻
传统 BC:像3D打印
text
输入观测 → 直接输出动作 → 一步到位
问题:多种形态只能输出"平均形态"
Diffusion Policy:像雕刻大理石
text
1. 从随机噪声(粗糙大理石)开始
2. 根据观测,逐步去除多余部分(去噪)
3. 每次雕刻路径不同,得到多样但合理的结果
4. 最终雕刻出清晰动作(艺术品)
5. "其实这型体本来就存在于大理石中,我只是把不需要的部分去掉而已。------------米开朗基罗"
4. Diffusion 作用于哪一步?
关键理解 :Diffusion 模型就是策略 π \pi π 本身。
4.1 训练阶段(Training)
python
# GBC-MUJICA 项目实现:train_hnfm.py
from GBC_MUJICA.diffusion_planner.train.hn_training_loop_fm import TrainLoopFM
def train_diffusion_policy():
# 1. 加载数据集(观测-动作对)
data = get_dataset_loader(
name='hn_t2m', # HumanoidML3D 数据集
batch_size=128,
num_frames=60 # 动作序列长度
)
# 2. 创建 Diffusion 模型(策略网络)
model, diffusion = create_hn_model_and_diffusion(args, data)
# 3. 训练去噪网络
# 目标:学习 p(a_{t-1} | a_t, o) 的去噪过程
for epoch in range(num_epochs):
for batch in data:
obs = batch['motion'] # 观测(运动特征)
actions = batch['motion'] # 动作序列
text = batch['text'] # 文本条件
# 前向扩散:给动作加噪声
t = sample_timesteps()
noise = torch.randn_like(actions)
noisy_actions = q_sample(actions, t, noise)
# 去噪:预测噪声
predicted_noise = model(noisy_actions, t, obs, text)
# 损失:预测噪声与真实噪声的差异
loss = F.mse_loss(predicted_noise, noise)
# 额外约束(GBC-MUJICA 特色)
loss += lambda_smooth * smoothness_loss(actions)
loss += lambda_target * target_location_loss(actions, obs)
loss.backward()
optimizer.step()
训练目标 :
L = E o , a 0 , ϵ , t [ ∥ ϵ θ ( a t , t , o ) − ϵ ∥ 2 ] \mathcal{L} = \mathbb{E}_{o,\mathbf{a}0,\epsilon,t} \left[ \| \epsilon\theta(\mathbf{a}_t, t, o) - \epsilon \|^2 \right] L=Eo,a0,ϵ,t[∥ϵθ(at,t,o)−ϵ∥2]
其中:
- a t = α ˉ t a 0 + 1 − α ˉ t ϵ \mathbf{a}_t = \sqrt{\bar{\alpha}_t} \mathbf{a}_0 + \sqrt{1-\bar{\alpha}_t} \epsilon at=αˉt a0+1−αˉt ϵ(前向扩散)
- ϵ θ \epsilon_\theta ϵθ:去噪网络(策略模型)
4.2 推理阶段(Inference)
python
# GBC-MUJICA 项目实现:generate_hn.py
def generate_with_diffusion_policy(model, observation, text_prompt):
"""
使用 Diffusion Policy 生成动作序列
不再是单步回归,而是迭代去噪采样
"""
# 1. 从纯噪声开始
batch_size = 1
seq_len = 60 # 生成 60 帧的动作序列
action_dim = 281 # 动作特征维度
actions = torch.randn(batch_size, seq_len, action_dim) # 纯高斯噪声
# 2. 编码观测和文本
obs_embed = encode_observation(observation)
text_embed = encode_text(text_prompt) # CLIP 或 BERT
# 3. 迭代去噪过程(DDIM 采样)
timesteps = get_ddim_schedule(num_steps=50) # 从 1000 步加速到 50 步
for t in reversed(timesteps):
# 预测噪声
predicted_noise = model(actions, t, obs_embed, text_embed)
# 去噪更新
actions = ddim_step(actions, predicted_noise, t)
# 4. 得到清晰的动作序列
return actions # [1, 60, 281]
采样过程数学表达:
DDIM 采样(确定性,快速):
a t − 1 = α t − 1 ( a t − 1 − α t ϵ θ ( a t , t , o ) α t ) + 1 − α t − 1 ϵ θ ( a t , t , o ) \mathbf{a}{t-1} = \sqrt{\alpha{t-1}} \left( \frac{\mathbf{a}t - \sqrt{1-\alpha_t} \epsilon\theta(\mathbf{a}t, t, o)}{\sqrt{\alpha_t}} \right) + \sqrt{1-\alpha{t-1}} \epsilon_\theta(\mathbf{a}_t, t, o) at−1=αt−1 (αt at−1−αt ϵθ(at,t,o))+1−αt−1 ϵθ(at,t,o)
核心论文
基础理论
-
Denoising Diffusion Probabilistic Models (DDPM)
- 作者:Jonathan Ho, Ajay Jain, Pieter Abbeel
- 会议:NeurIPS 2020
- 论文:arXiv:2006.11239
- 贡献:奠定现代 Diffusion Models 基础,提出简化训练目标
- 核心创新:
- 变分下界简化为噪声预测
- 噪声调度设计(Linear/Cosine)
- 高质量图像生成(CIFAR-10 FID 3.17)
- 代码:GitHub
-
Denoising Diffusion Implicit Models (DDIM)
- 作者:Jiaming Song, Chenlin Meng, Stefano Ermon
- 会议:ICLR 2021
- 论文:arXiv:2010.02502
- 贡献:确定性快速采样,加速 10-50 倍
- 核心创新:
- 非马尔可夫前向过程
- 跳步采样策略
- 保持生成质量的同时显著加速
-
Score-Based Generative Modeling
- 作者:Yang Song, Stefano Ermon
- 会议:NeurIPS 2019
- 论文:arXiv:1907.05600
- 贡献:建立 Diffusion Models 与 Score Matching 的联系
- 核心创新:
- 噪声条件得分网络(NCSN)
- Langevin 动力学采样
- 统一的得分匹配框架
-
Improved Denoising Diffusion Probabilistic Models
- 作者:Alex Nichol, Prafulla Dhariwal
- 会议:ICML 2021
- 论文:arXiv:2102.09672
- 贡献:改进噪声调度、混合目标、架构优化
- 核心创新:
- Cosine 噪声调度
- 混合 ε-预测和 x₀-预测
- 提升似然估计
机器人应用
-
Diffusion Policy: Visuomotor Policy Learning via Action Diffusion ⭐
- 作者:Cheng Chi, Zhenjia Xu, Siyuan Feng, Eric Cousineau, Yilun Du, Benjamin Burchfiel, Russ Tedrake, Shuran Song
- 会议:RSS 2023 → IJRR 2024(扩展版)
- 论文:arXiv:2303.04137
- 网站:diffusion-policy.cs.columbia.edu
- 贡献:首次系统性地将 Diffusion Models 应用于机器人策略学习
- 核心创新:
- Receding Horizon Control:动作序列生成 + 滚动执行
- Visual Conditioning:图像编码 + 条件生成
- Time-Series Diffusion Transformer:序列建模
- 多模态动作分布处理:优雅解决 BC 平均化问题
- 实验:12 任务,4 基准,平均提升 46.9% 成功率
- 代码:GitHub
- 影响:开创机器人 Diffusion Policy 研究方向
-
Classifier-Free Diffusion Guidance
- 作者:Jonathan Ho, Tim Salimans
- 会议:NeurIPS Workshop 2021
- 论文:arXiv:2207.12598
- 贡献:无需额外分类器的条件控制增强
- 核心创新:
- 训练时随机丢弃条件
- 推理时插值有/无条件预测
- 平衡生成质量和条件遵循
扩展研究
-
Flow Matching for Generative Modeling
- 作者:Yaron Lipman, Ricky T. Q. Chen, Heli Ben-Hamu, Maximilian Nickel, Matthew Le
- 会议:ICLR 2023
- 论文:arXiv:2210.02747
- 贡献:基于 ODE 的更快更稳定的生成方法
- 核心创新:
- 条件最优传输(Conditional OT)
- 直接学习速度场
- 10 步采样达到 DDPM 质量
-
3D Diffusion Policy
- 作者:(基于 Diffusion Policy 的 3D 扩展)
- 贡献:利用 3D 点云的空间感知策略
- 核心创新:
- PointNet++ 编码 3D 场景
- 空间条件生成
- 改进操作精度
-
ScaleDP: Scaling Diffusion Policy
- 贡献:大规模 Transformer 的稳定训练技术
- 核心创新:
- RMSNorm 替代 LayerNorm
- 课程学习策略
- 渐进式难度调度
-
Vision-Language-Action (VLA) Models
- 代表:RT-2, PaLM-E, Octo
- 贡献:统一视觉-语言-动作的基础模型
- 核心创新:
- 预训练大模型 + 机器人微调
- 多任务泛化
- 零样本策略迁移