【学习笔记】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+)∼Dlogexp(−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
    • 贡献:统一视觉-语言-动作的基础模型
    • 核心创新:
      • 预训练大模型 + 机器人微调
      • 多任务泛化
      • 零样本策略迁移
相关推荐
回眸&啤酒鸭5 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅5 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein5 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
XiHongShi20165 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
LaughingZhu5 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台5 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
爱吃苹果的日记本5 天前
离散数学第六课
学习·离散数学
wukangjupingbb5 天前
智能网联汽车安全能力框架
人工智能