【学习笔记】Diffusion Policy for Robotics

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 的突破

  1. 从 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)

      移除随机性,路径完全由初始状态决定

  2. 非马尔可夫假设

    • 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
    • 允许跳过中间步骤
  3. 数学保证

    • 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)的核心贡献

  1. Receding Horizon Control

    • 不是生成整个轨迹,而是生成固定长度的动作序列
    • 执行前几步,重新规划后续动作
    • 平衡长期规划和在线反应
  2. Visual Conditioning

    • 将图像编码为条件向量
    • 使用 CNN 或 Vision Transformer
    • 跨模态对齐(视觉 → 动作)
  3. 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 可以表示任意复杂的分布,包括多模态分布。

  1. 前向扩散 破坏数据结构,将多模态分布"平滑"为单峰高斯:
    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)(单峰)

  2. 反向去噪 逐步恢复数据结构,保持多模态特性
    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(多模态)

  3. 采样的随机性使得每次采样可探索不同模态:

    • 噪声初始化 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)+噪声项:探索其他谷底 η ⋅ϵ

两个作用

  1. 梯度项:让动作沿能量下降方向移动(像小球滚下山)
  2. 噪声项:添加热噪声,使系统能跨越小的能量障碍,探索多个模态
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 总结

三种范式的本质

  1. Explicit Policy

    • 学习 a = f ( o ) a = f(o) a=f(o)
    • 快但不能处理多模态
  2. 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 动力学找能量最小值
    • 慢但能处理多模态
  3. 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]

过程

  1. 随机采样时间步 t ∼ Uniform ( 0 , T ) t \sim \text{Uniform}(0, T) t∼Uniform(0,T)
  2. 随机采样噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ∼N(0,I)
  3. 添加噪声: 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 ϵ
  4. 预测噪声: ϵ ^ = ϵ θ ( a t , t , o ) \hat{\epsilon} = \epsilon_\theta(\mathbf{a}_t, t, o) ϵ^=ϵθ(at,t,o)
  5. 计算损失: 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 采样):

  1. 初始化: a T ∼ N ( 0 , I ) \mathbf{a}_T \sim \mathcal{N}(0, I) aT∼N(0,I)(纯噪声)
  2. 对于 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 ϵ^
  3. 输出: 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 复制代码
多模态分布(复杂):
  ●    ●         ← 两个模态(左拉、右拉)
 ╱╲  ╱╲
╱  ╲╱  ╲

前向加噪(简化):
  ∼∼∼∼∼∼         ← 变成单峰高斯(简单)

反向去噪(还原):
  ●    ●         ← 恢复多模态结构
 ╱╲  ╱╲
╱  ╲╱  ╲

数学原理

  1. 前向过程 q ( a t ∣ a 0 ) q(\mathbf{a}_t | \mathbf{a}_0) q(at∣a0) 是固定的高斯分布(可解析)
  2. 反向过程 p θ ( a t − 1 ∣ a t , o ) p_\theta(\mathbf{a}_{t-1} | \mathbf{a}_t, o) pθ(at−1∣at,o) 如果学好了,可以精确还原
  3. 采样的随机性(初始噪声)决定了最终落入哪个模态
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 最优?

综合优势

  1. 训练简单(优于 Implicit)

    • ✅ MSE 损失,不需要负样本
    • ✅ 标准监督学习流程
    • ❌ Implicit 需要对比学习,采样负样本困难
  2. 推理快速(优于 Implicit)

    • ✅ 10-100 步(0.1-0.5s)
    • ❌ Langevin 需要 100-1000 步(1-5s)
    • 原因:退火策略,逐步细化
  3. 多模态能力(优于 Explicit)

    • ✅ 采样随机性保证多样性
    • ❌ Explicit 只能输出单一值
  4. 表达能力强

    • ✅ 理论上可以表示任意分布
    • ✅ 实验验证在复杂任务上性能最优

实验证据(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)


核心论文

基础理论
  1. 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
  2. Denoising Diffusion Implicit Models (DDIM)

    • 作者:Jiaming Song, Chenlin Meng, Stefano Ermon
    • 会议:ICLR 2021
    • 论文:arXiv:2010.02502
    • 贡献:确定性快速采样,加速 10-50 倍
    • 核心创新:
      • 非马尔可夫前向过程
      • 跳步采样策略
      • 保持生成质量的同时显著加速
  3. Score-Based Generative Modeling

    • 作者:Yang Song, Stefano Ermon
    • 会议:NeurIPS 2019
    • 论文:arXiv:1907.05600
    • 贡献:建立 Diffusion Models 与 Score Matching 的联系
    • 核心创新:
      • 噪声条件得分网络(NCSN)
      • Langevin 动力学采样
      • 统一的得分匹配框架
  4. Improved Denoising Diffusion Probabilistic Models

    • 作者:Alex Nichol, Prafulla Dhariwal
    • 会议:ICML 2021
    • 论文:arXiv:2102.09672
    • 贡献:改进噪声调度、混合目标、架构优化
    • 核心创新:
      • Cosine 噪声调度
      • 混合 ε-预测和 x₀-预测
      • 提升似然估计
机器人应用
  1. 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 研究方向
  2. Classifier-Free Diffusion Guidance

    • 作者:Jonathan Ho, Tim Salimans
    • 会议:NeurIPS Workshop 2021
    • 论文:arXiv:2207.12598
    • 贡献:无需额外分类器的条件控制增强
    • 核心创新:
      • 训练时随机丢弃条件
      • 推理时插值有/无条件预测
      • 平衡生成质量和条件遵循
扩展研究
  1. 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 质量
  2. 3D Diffusion Policy

    • 作者:(基于 Diffusion Policy 的 3D 扩展)
    • 贡献:利用 3D 点云的空间感知策略
    • 核心创新:
      • PointNet++ 编码 3D 场景
      • 空间条件生成
      • 改进操作精度
  3. ScaleDP: Scaling Diffusion Policy

    • 贡献:大规模 Transformer 的稳定训练技术
    • 核心创新:
      • RMSNorm 替代 LayerNorm
      • 课程学习策略
      • 渐进式难度调度
  4. Vision-Language-Action (VLA) Models

    • 代表:RT-2, PaLM-E, Octo
    • 贡献:统一视觉-语言-动作的基础模型
    • 核心创新:
      • 预训练大模型 + 机器人微调
      • 多任务泛化
      • 零样本策略迁移
相关推荐
咚咚王者2 小时前
人工智能之数据分析 numpy:第七章 数组迭代排序筛选
人工智能·数据分析·numpy
ins_lizhiming2 小时前
华为昇腾910B服务器上部署Qwen3-30B-A3B并使用EvalScope推理性能测试
人工智能·华为
麦麦大数据2 小时前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示
IT考试认证2 小时前
华为AI认证 H13-321 HCIP-AI V2.0题库
人工智能·华为·题库·hcip-ai·h13-321
热爱生活的五柒2 小时前
多模态遥感目标检测模型SM3Det:一站式多模态遥感目标检测!开启遥感检测新任务
人工智能·目标检测·计算机视觉·遥感·sm3det
李绍熹3 小时前
半监督对比学习 (Semi-Supervised SimCLR) 实现
学习
952363 小时前
数据结构-堆
java·数据结构·学习·算法
ElfBoard3 小时前
ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行UART引脚复用配置
人工智能·单片机·嵌入式硬件·物联网
星释3 小时前
Rust 练习册 22:映射函数与泛型的威力
开发语言·rust·机器人