【学习笔记】Diffusion Policy for Robotics

部署运行你感兴趣的模型镜像

Diffusion Policy for Robotics

📋 文档概述

本文档基于我的兴趣与关注,结合扩散模型理论,全面阐述 Diffusion Policy 在机器人领域的应用。文档涵盖理论基础、实践经验、代码实现和前沿研究。


📊 Diffusion Models 技术演进对比

方法年份核心创新采样步数训练复杂度适用场景
DDPM2020简化损失,噪声预测,随机SDE1000高质量生成基础
DDIM2021非马尔可夫,确定性ODE10-50低(复用 DDPM)快速采样(20x加速)
Score SDE2021连续时间,SDE 框架可变理论统一
Diffusion Policy2023机器人策略,序列生成50-100视觉运动策略 ⭐
Flow Matching2023ODE,最优传输直线路径10-20最快最稳定生成 ⭐
Latent Diffusion2022潜在空间扩散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 xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtzDDPM 采样反向去噪步骤
α ˉ 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) xt1=αˉt1 x^0+1αˉt1 ϵθ(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 xt1αˉ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=(1t)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)(x1x0)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:Hpθ(o)策略采样动作序列生成
a exec = a 0 : k , k < H \mathbf{a}_{\text{exec}} = \mathbf{a}_{0:k}, k < H aexec=a0:k,k<HReceding Horizon执行前 k k k

🎨 可视化理解 Diffusion Process

1. 前向扩散过程(Forward Process)

时间步:     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)

时间步:    t=1000         t=750          t=500          t=250          t=0
          (纯噪声)                                                   (数据)
采样轨迹:  
           · · ·          · · ·          ~ ~ ~          🎯~🎯         🎯🎯
           · · ·    ←     · · ·    ←     ~ ~ ~    ←     🎯~🎯   ←     🎯🎯
          (初始化)      (逐步清晰)    (显现结构)    (模态分离)   (确定模态)

神经网络预测:
  t=1000: "完全不确定,任何方向都可能"
  t=500:  "大概是抓取动作,但左右未定"
  t=250:  "应该是右手抓取,信心 70%"
  t=0:    "确定:右手从右侧抓取把手"

关键:每个 t 都在预测 "当前状态应该往哪个方向去噪"

3. 多模态保持机制

传统 BC 训练:
  输入: [obs1, obs1, obs2, obs2, ...]
  标签: [左手, 右手, 左手, 右手, ...]
  网络学习: obs1 → (左手 + 右手) / 2 = 中间虚空 ❌

Diffusion Policy 训练:
  步骤 1: 给所有动作加噪
    [左手]_t=500 → [模糊动作]
    [右手]_t=500 → [模糊动作]
  
  步骤 2: 学习去噪方向
    网络预测: "从 [模糊动作] 应该往 [左手] 方向走"
    网络预测: "从 [模糊动作] 应该往 [右手] 方向走"
  
  步骤 3: 采样时的分支
    初始噪声 seed1 → 去噪路径 A → [左手] ✅
    初始噪声 seed2 → 去噪路径 B → [右手] ✅
    
  关键: 不同的随机初始化 → 探索不同的去噪路径 → 到达不同的模态

4. DDIM 加速原理

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 对比

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 πθ:oa

其中:

  • 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)a2]

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(ao)=k=1KwkN(μ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(xtxt1)=N(xt;1βt xt1,β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(xtx0)=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θ(xt1xt)=N(xt1;μθ(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(xt1αˉ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],x0q(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 xt1=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 x1000x999x0
  • 每步都需要模型前向传播 + 随机采样
  • 基于随机微分方程(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} xt1 只依赖于 x t x_t xt(马尔可夫性)
    • DDIM: x t − 1 x_{t-1} xt1 可以同时依赖于 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{ 的方向}} xt1=αˉt1 预测的 x0 (αˉt xt1αˉt ϵθ(xt,t))+指向 xt 的方向 1αˉt1 ϵθ(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} xt1
  • 整个过程是确定性的(无随机项 z z z
2.3 跳步采样策略

采样步数调度

# 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 实际效果对比
# 采样时间对比(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=(1t)x0+tx1,t[0,1]

其中:

  • x 0 x_0 x0:真实数据样本
  • x 1 ∼ N ( 0 , I ) x_1 \sim \mathcal{N}(0, I) x1N(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(xtx0)=dtdxt=x1x0

训练损失(速度匹配):
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)(x1x0)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 曲线路径

# 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 训练:

# 需要模拟前向扩散 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 训练:

# 直接线性插值,无需模拟
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 采样(一阶):

# 只能用一阶 Euler 方法(DDIM)
for t in reversed(timesteps):
    ε_pred = model(x_t, t)
    x_t = alpha_t * x_t - beta_t * ε_pred  # 一阶更新

Flow Matching 采样(可用高阶):

# 可以用 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 (网络前向次数)
DDPM10002.5s12.61000
DDIM500.15s12.950
DDIM100.03s15.810
Flow Matching (Euler)500.12s11.850
Flow Matching (Midpoint)200.06s11.540
Flow Matching (RK4)100.05s12.140

关键发现

  • 相同步数: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(ao)
x ∈ R H × W × 3 x \in \mathbb{R}^{H \times W \times 3} xRH×W×3 a ∈ R T × D \mathbf{a} \in \mathbb{R}^{T \times D} aRT×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) at1=αˉt1 a^0+1αˉt1 ϵθ(at,t,o)

其中观测 o o o 可包含:

  • 图像: o img ∈ R H × W × 3 o_{\text{img}} \in \mathbb{R}^{H \times W \times 3} oimgRH×W×3
  • 状态: o state ∈ R d o_{\text{state}} \in \mathbb{R}^d ostateRd
  • 文本: 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:Tx0)[logq(x1:Tx0)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θ(x0x1)]+t=2TLt1:去噪匹配 DKL(q(xt1xt,x0)pθ(xt1xt))+LT:先验匹配 DKL(q(xTx0)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] Lt1Ex0,ϵ[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 xt1=xt+2δxtlogq(xt)+δ z=xt21αˉ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) xTN(0,I) 的随机性
    • DDPM 采样过程中的随机性 z ∼ N ( 0 , I ) z \sim \mathcal{N}(0, I) zN(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} πθ:OA

给定观测 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)a2]

推理阶段:单次前向传播

# 一步到位
action = policy_network(observation)  # 0.01s
1.3 为什么这样计算?

优势

  • 速度快:单次神经网络前向传播(~0.01s)
  • 训练简单:标准的监督学习,梯度下降优化 MSE

致命缺陷多模态时平均化失败

场景:机器人面对抽屉
专家演示 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θ(ao)=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θ(ao)
  • 坏的动作 a a a → 能量 E θ ( a , o ) E_\theta(a, o) Eθ(a,o) → 概率 p θ ( a ∣ o ) p_\theta(a|o) pθ(ao)
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=ak2ηaEθ(ak,o)+η ϵ

其中 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)

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:配分函数

核心原理:自然界中,系统倾向于能量最低的稳定状态

物理类比:

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(ao)=ZeE概率分布形式
为什么梯度下降能找到好动作?

能量梯度指向能量增长最快的方向,因此:

− ∇ 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=ak2η梯度项:滚向谷底 aEθ(ak,o)+噪声项:探索其他谷底 η ϵ

两个作用

  1. 梯度项:让动作沿能量下降方向移动(像小球滚下山)
  2. 噪声项:添加热噪声,使系统能跨越小的能量障碍,探索多个模态
能量场中的采样过程:

初始(随机): a₀ ~ 高能量区域
    ▲  ▲  ▲      ← 当前位置(随机初始化)
   ╱╲ ╱╲ ╱╲
  ╱  ×   ╲
 ╱ ○    ○ ╲     ← 低能量谷底

迭代 1-10: 沿梯度滚向最近的谷底
    ▲  ▲  ▲
   ╱╲ ╱↓ ╱╲     ← 梯度引导
  ╱  ↓   ╲
 ╱ ○    ○ ╲

迭代 50-100: 收敛到谷底
    ▲  ▲  ▲
   ╱╲ ╱╲ ╱╲
  ╱  ╲   ╲
 ╱ ●    ○ ╲     ← ● 最终位置(好动作)
2.4 为什么比 Explicit Policy 好?

Implicit Policy 通过能量场自然地处理多模态

对比:

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θ(ao)

但通过去噪扩散过程来建模,而不是显式的能量函数。

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 ϵθ:噪声预测网络

推理阶段:迭代去噪

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θ(ato)

与能量函数的关系

如果我们定义能量函数:

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θ(ato)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 本质上在学习能量场的梯度!

物理意义:

能量场 E(a):
    ▲         ▲        
   ╱╲       ╱╲       
  ╱  ╲     ╱  ╲      
 ╱    ╲   ╱    ╲     ← 能量地形

梯度场 ∇E(a):
    ↓         ↓       
   ╱ ↘     ↙ ╲      
  ╱     ↓     ╲      
 ↙             ↘     ← 箭头指向能量下降方向

Diffusion 采样 = 沿着梯度场上升(因为预测负梯度)
                = 沿着能量场下降
                = 找到低能量区域(好动作)
为什么 Diffusion 比 Langevin 更快?

核心区别逐步退火(Annealing)

方法能量地形步数原理
Langevin固定(复杂)100-1000在复杂地形中探索,需要大量步数跨越障碍
Diffusion逐步锐化(简单→复杂)10-100从平坦地形开始,逐步细化,每步都在"温和"地形上

Diffusion 的退火过程

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 ModelsSong & Ermon, 2019得分函数 ∇ x log ⁡ p ( x ) \nabla_x \log p(x) xlogp(x)Langevin 动力学
Flow MatchingLipman et al., 2023速度场 v θ ( x , t ) v_\theta(x, t) vθ(x,t)最优传输,流体力学
Schrödinger BridgeDe Bortoli et al., 2021最优传输路径量子力学,薛定谔方程
Rectified FlowLiu et al., 2022直线速度场最小作用量原理

物理学为什么有效?

  • 自然界已经"解决"了很多优化问题(最小能量,最小作用量)
  • 借用物理学的数学框架,提供了强大的建模工具
  • 能量、场、梯度等概念在高维空间中依然适用

5. 三种范式的对比与选择 📊

5.1 完整对比表
维度Explicit PolicyImplicit 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 采样迭代去噪
步数1100-100010-100 ⭐
推理时间0.01s ⚡1-5s 🐌0.1-0.5s ⚡
多模态❌ 平均化失败✅ 能量谷底✅ 采样随机性 ⭐
训练难度简单 ⭐困难(需要负样本)简单 ⭐
表达能力高 ⭐
物理解释能量最小化能量梯度场
5.2 性能对比(Diffusion Policy 论文 Table 1)
任务MSE BCIBCDiffusion
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(ao)=eE/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,...,aH1]

过程

  1. 随机采样时间步 t ∼ Uniform ( 0 , T ) t \sim \text{Uniform}(0, T) tUniform(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
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) aTN(0,I)(纯噪声)
  2. 对于 t = T , T − 1 , . . . , 1 t = T, T-1, ..., 1 t=T,T1,...,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 at1αˉ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} at1=αˉt1 a^0+1αˉt1 ϵ^
  3. 输出: a 0 \mathbf{a}_0 a0(干净的动作序列)
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 从回归到生成的范式转变

传统回归

输入 → 网络 → 输出
  o  →  π_θ →   a
  
问题:只能输出一个确定值

生成建模

输入 + 随机性 → 网络 → 采样输出
  o  +  z_T   →  去噪 →  a ~ p(a|o)
  
优势:每次采样可以不同(多模态)
2.2 为什么"加噪再去噪"有效?

关键直觉:多模态分布 → 噪声 → 再还原

多模态分布(复杂):
  ●    ●         ← 两个模态(左拉、右拉)
 ╱╲  ╱╲
╱  ╲╱  ╲

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

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

数学原理

  1. 前向过程 q ( a t ∣ a 0 ) q(\mathbf{a}_t | \mathbf{a}_0) q(ata0) 是固定的高斯分布(可解析)
  2. 反向过程 p θ ( a t − 1 ∣ a t , o ) p_\theta(\mathbf{a}_{t-1} | \mathbf{a}_t, o) pθ(at1at,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)

采样过程

t=T: 平坦能量场,容易探索
  ∼∼∼∼∼∼∼∼
  
t=T/2: 模糊的谷底
  ∿∿∿∿∿∿∿∿
  
t=0: 清晰的能量谷
    ▲    ▲
   ╱╲  ╱╲
  ●模1 ●模2

每一步去噪 = 在"当前温度"下的能量场上沿梯度移动

3. 范式对比总结

3.1 三种策略的计算对比
阶段ExplicitImplicitDiffusion
训练输入 ( 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^a2InfoNCE ∣ ϵ ^ − ϵ ∣ 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 论文):

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)a2
  • 为什么:简单直接,但无法处理多模态

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打印

输入观测 → 直接输出动作 → 一步到位
问题:多种形态只能输出"平均形态"

Diffusion Policy:像雕刻大理石

1. 从随机噪声(粗糙大理石)开始
2. 根据观测,逐步去除多余部分(去噪)
3. 每次雕刻路径不同,得到多样但合理的结果
4. 最终雕刻出清晰动作(艺术品)
5. “其实这型体本来就存在于大理石中,我只是把不需要的部分去掉而已。————米开朗基罗”

4. Diffusion 作用于哪一步?

关键理解:Diffusion 模型就是策略 π \pi π 本身

4.1 训练阶段(Training)
# 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)
# 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) at1=αt1 (αt at1αt ϵθ(at,t,o))+1αt1 ϵθ(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
    • 贡献:统一视觉-语言-动作的基础模型
    • 核心创新:
      • 预训练大模型 + 机器人微调
      • 多任务泛化
      • 零样本策略迁移

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 关于模仿学习中的Diffusion Policy 在探讨模仿学习(Imitation Learning)中的扩散策略(Diffusion Policy),这一领域融合了多种先进的机器学习技术,旨在通过观察专家行为来训练模型执行复杂任务。尽管提供的参考资料未直接提及扩散策略的具体细节[^1],可以结合当前学术界的研究趋势和技术进展来进行讨论。 #### 研究论文概述 目前,在模仿学习框架下采用扩散模型作为核心组件的工作主要集中在如何利用其强大的生成能力模拟连续动作空间内的决策过程。这类工作通常借鉴自监督学习的思想,设计特定的任务无关先验分布,并借助变分推理机制优化目标函数。例如: - **Learning to Act by Predicting the Future**: 这篇论文提出了一个新颖的方法论,即通过对未来状态预测的方式间接指导行动选择,从而实现高效的学习效率提升。 - **Diffusion-Based Imitation Learning via Trajectory Propagation**: 文章介绍了一种基于轨迹传播的新颖算法,该算法能够有效处理高维输入数据并保持良好的泛化性能。 #### 实现方法分析 为了有效地实施上述理论概念,开发者们往往依赖深度神经网络架构以及高效的采样技巧。具体来说: - 使用U-Net结构或其他类似的编码器-解码器模式构建基础网络; - 应用时间步长上的注意力机制增强长期依赖捕捉效果; - 结合重参数化技巧降低梯度估计方差,促进稳定收敛; 以下是Python代码片段展示了一个简化版的Diffusion Policy实现方式: ```python import torch from torch import nn class DiffusionPolicy(nn.Module): def __init__(self, state_dim, action_dim, hidden_size=256): super(DiffusionPolicy, self).__init__() # Define encoder-decoder architecture with U-net like structure self.encoder = nn.Sequential( nn.Linear(state_dim + action_dim, hidden_size), nn.ReLU(), ... ) self.decoder = nn.Sequential( ..., nn.Linear(hidden_size, action_dim) ) def forward(self, states, actions=None): if actions is None: batch_size = states.shape[0] noise = torch.randn((batch_size, 1)) inputs = torch.cat([states, noise], dim=-1) else: inputs = torch.cat([states, actions], dim=-1) latent_representation = self.encoder(inputs) predicted_actions = self.decoder(latent_representation) return predicted_actions ``` 此段代码仅提供了一个非常基本的概念验证版本,实际应用中还需要考虑更多因素如正则项设置、损失函数定义等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值