【学习笔记】Diffusion Policy for Robotics

机器人操作——diffusion policy(2023) 机器人操作领域发论文的热点又来了。扩散模型大概率很难和强化学习结合,因为强化学习需要网络足够小从而在每次更新的很短时间内收敛,不过基于扩散模型的动力学模型可以试试。 阅读详情

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 xt−1​=αt​ ​1​(xt​−1−αˉt​ ​1−αt​​ϵθ​(xt​,t))+σt​zDDPM 采样反向去噪步骤
α ˉ 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]+λs​Lsmooth​+λc​Lcontact​策略训练带物理约束
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<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 πθ​: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∑K​wk​⋅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​,βt​I)

性质:由于马尔可夫性质,可以直接从 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)=∇xt​​logpθ​(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δ​∇xt​​logp(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 跳步采样策略

采样步数调度:

# 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​=(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 曲线路径

# 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.8 ⭐50
Flow Matching (Midpoint)200.06s11.5 ⭐40
Flow Matching (RK4)100.05s12.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∑T​Lt−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 ∇xt​​logq(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δ​∇xt​​logq(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]

推理阶段:单次前向传播

# 一步到位
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θ​(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=1N​exp(−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η​∇a​Eθ​(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(a∣o)=Ze−E​概率分布形式
为什么梯度下降能找到好动作?

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

− ∇ a E θ ( a , o ) -\nabla_a E_\theta(a, o) −∇a​Eθ​(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η​梯度项:滚向谷底 ∇a​Eθ​(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θ​(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 ϵθ​:噪声预测网络

推理阶段:迭代去噪

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)=∇at​​logpθ​(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)=∇at​​logpθ​=−∇at​​Eθ​

结论:
得分函数 = 负能量梯度 \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​ ​⋅∇at​​Eθ​

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: −∇a​Eθ​(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) ∇x​logp(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(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
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​(干净的动作序列)
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(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)∝∇at​​Eθ​(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^−a∣2InfoNCE ∣ ϵ ^ − ϵ ∣ 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)−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打印

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

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) 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
    • 贡献:统一视觉-语言-动作的基础模型
    • 核心创新:
      • 预训练大模型 + 机器人微调
      • 多任务泛化
      • 零样本策略迁移
Diffusion Policy:基于扩散模型的视觉运动策略学习新范式 Diffusion Policy通过​​扩散模型​​​多模态建模​​:自然捕捉动作空间的多样性​​高维处理​​:支持长序列动作的稳定学习​​训练鲁棒性​​:MSE损失避免对比学习的梯度问题随着​​扩散模型加速技术​推理延迟从100ms级降至10ms级从纯模仿学习扩展到强化学习框架实现跨模态策略学习(视觉-触觉-力觉)这项技术正在推动机器人学习从​​单一解策略​​向​​多模态策略​​的范式转变,为复杂场景下的机器人应用开辟了新可能。 阅读详情

相关推荐

Diffusion Policy,生成式决策框架

解决的是机器人输出的问题,输入端使用非常普通的东西,聚焦于机器人的动作端sd模型输出图片,Diffusion Policy输出机器人动作。

紫金山赵火龙的博客 1566

Diffusion Policy——斯坦福UMI所用的动作预测算法:基于扩散模型的扩散策略(从原理到其编码实现)

所谓扩散策略,是指将机器人的视觉运动策略表示为条件去噪扩散过程来生成机器人行为的新方法,如下图所示a)具有不同类型动作表示的显式策略(b)隐式策略学习以动作和观察为条件的能量函数,并优化能够最小化能量景观的动作c)通过“条件去噪扩散过程在机器人行动空间上生成行为”,即该扩散策略策略不直接输出一个动作,而是推断出「基于视觉观察的动作-评分梯度」,进行K次去噪迭代。

结构之法 算法之道 2万+

深入MoveIt与OMPL集成开发:从源码编译到自定义规划算法实战

本文详细介绍了如何从源码编译集成MoveIt与OMPL,并实现自定义规划算法的完整流程。通过清理环境、获取源码、解决编译依赖与错误,最终指导开发者创建并集成名为MyRRT的自定义规划算法,从而实现对机器人运动规划栈的深度定制与优化。

h0i1j2k3l的博客 468

【论文阅读】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

本文介绍了扩散策略,这是一种通过将机器人的视觉运动policy表示为条件去噪扩散过程来生成机器人行为的新方法。我们对来自 4 个不同的机器人操作基准的 15 个不同任务的扩散策略进行了基准测试,发现它始终优于现有的 state-of-the-art 机器人学习方法,平均提高了 46.9%。扩散策略学习动作分布评分函数的梯度,并通过一系列随机朗之万动力学步骤在推理过程中针对该梯度场迭代优化。

qq_33673253的博客 5471

Win10 桌面回收站右键没有“清空回收站”选项怎么解决

Win10 桌面回收站右键没有“清空回收站” 选项怎么解决? 我之前不知道怎么捣鼓注册表(胡乱删了一些。。。) 导致想清空回收站的时候,右键却没有“清空回收站”这个选项了 以下是解决方法: 1、在桌面上新建一个txt文本文档,将以下代码拷贝进去: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\empty] "Com...

菜鸟的后花园 2万+

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1050

从理论到实践:如何在VLA-Diffusion-Policy-Robotics中实现强化学习与扩散策略的融合

在机器人操作领域,**扩散策略(Diffusion Policy)**与强化学习(Reinforcement Learning)的结合正成为推动智能机器人发展的关键技术。VLA-Diffusion-Policy-Robotics项目为我们提供了这一前沿领域的全面资源集合,展示了如何将这两种强大的AI技术有效融合,创造出更智能、更灵活的机器人控制系统。本文将带您深入了解这一融合技术的核心原理、实现方

gitblog_00331的博客 1034

vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制

技术无关,独立开发,独立部署,增量升级,独立运行,微前端的核心目标是将巨石应用拆解成若干可以自治的松耦合微应用。

前端开发工程师 9750

VLA-Diffusion-Policy-Robotics中的开源项目与代码库:20个必备资源推荐

VLA-Diffusion-Policy-Robotics是一个专注于机器人操作扩散模型的开源项目集合,汇集了最新研究成果与实用工具。自2022年以来,扩散策略在机器人操作领域展现出超越传统方法的卓越性能,本项目通过系统分类和分析,为开发者和研究人员提供了全面的资源导航。 ### 一、扩散策略研究概览 📊 扩散策略(Diffusion Policy)通过生成式建模实现机器人操作的精准控制,已

gitblog_00095的博客 373

电路课设-音响分频器电路设计

(一)题目简介 1.一阶分频器电路设计 假定高音和低音扬声器均等效为 16 欧姆电阻,设计如图 2 的简单分频器电 路,要求高低频分界(两个滤波器的截止频率)为 5kHz。 1) 写出高音扬声器和低音扬声器电压对于 vs 的传递函数,确定电路中电 容 C 和电感 L 的元件值;2)利用 AC 频率扫描分析求出两个扬声器电压的频率响应曲线,验证计算 结果。用包含高低频成分的电压 vs 激励进行测量验证。 3)计算并利用 EWB 仿真证明从 vs 看进去的阻抗为一常数 16 欧姆。

weixin_53507617的博客 1万+

STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd

目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。TSL1401 线性传感器由一个 1x128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。

2401_87557129的博客 3229

VLA-Diffusion-Policy-Robotics论文写作指南:如何发表高质量的扩散策略研究

想要在机器人操作扩散策略领域发表高质量的研究论文吗?本指南将为你提供完整的VLA-Diffusion-Policy-Robotics论文写作方法论,帮助你在这一前沿领域取得突破。扩散策略作为机器人操作领域的新兴研究方向,自2022年以来展现出了超越传统方法的卓越性能,成为学术界和工业界的热点话题。 ## 📊 扩散策略研究发展概况 扩散策略在机器人操作领域的应用正在经历爆炸式增长。根据VLA-

gitblog_00168的博客 342

18-XLINX的XC7A100T的BANK0引脚说明

DXP_0和 DXN_0是纯输入引脚,Xilinx Artix-7 FPGA 内部集成的一个片上监控模数转换器​ 的差分模拟输入对,模数转换器​的模拟信号输入端,将外部的模拟电压​ 采样并转换为内部的数字值,是一个单向的信号采集过程。它是与 VCCADC配对的关键引脚,共同为内部的精密模数转换器提供一个纯净、安静、独立的参考地平面。多FPGA同步配置: 在多FPGA系统中,主FPGA配置完成后,可以拉低从FPGA的 INIT_B使其等待,等所有FPGA都准备好后,再同时释放,实现同步启动。

weixin_44479192的博客 233

VLA-Diffusion-Policy-Robotics社区与协作:如何参与这个快速发展的研究领域

VLA-Diffusion-Policy-Robotics是一个专注于机器人操作扩散模型研究的开源项目,汇集了丰富的资源和论文,为开发者和研究者提供了探索扩散策略在机器人领域应用的绝佳平台。自2022年以来,扩散策略在机器人操作任务中展现出超越传统方法的卓越性能,吸引了全球研究者的广泛关注。 ## 领域发展现状:从快速增长到协作机遇 扩散策略在机器人操作领域的发展速度令人瞩目。根据项目数据显示

gitblog_01200的博客 426

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从仿真到真实世界:VLA-Diffusion-Policy-Robotics中的Sim-to-Real迁移策略

在机器人操作领域,**扩散策略**(Diffusion Policy)正成为连接仿真环境与真实世界机器人的关键桥梁。自2022年以来,基于扩散模型的机器人策略学习在各类任务中展现出超越传统方法的卓越性能。本文将深入探讨**VLA-Diffusion-Policy-Robotics**项目中关于Sim-to-Real(仿真到真实)迁移策略的最新进展,帮助新手理解这一前沿技术如何让机器人在仿真环境中学

gitblog_00128的博客 859

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

如何评估扩散策略性能:VLA-Diffusion-Policy-Robotics中的基准测试与评估方法

扩散策略(Diffusion Policy)作为机器人操作领域的前沿技术,近年来展现出比传统方法更优越的性能。在VLA-Diffusion-Policy-Robotics项目中,研究人员系统收集和分析了大量扩散策略相关的论文资源,为评估扩散策略性能提供了全面的参考框架。本文将深入探讨扩散策略性能评估的关键指标、基准测试方法以及实际应用中的评估策略,帮助初学者和普通用户快速掌握这一重要技术。 ##

gitblog_00154的博客 1146

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

扩散策略如何改变机器人操作:VLA-Diffusion-Policy-Robotics中的7个创新技术

**扩散策略**正在彻底改变机器人操作领域!🤖 自2022年以来,基于扩散模型的机器人操作策略研究在多样化任务中持续展现出超越传统方法的优越性能。VLA-Diffusion-Policy-Robotics项目汇集了该领域最新的研究成果和技术突破,为研究者和开发者提供了一个完整的资源库。本文将深入探讨这个项目中7个关键的创新技术,帮助您理解扩散策略如何重塑机器人操作的未来。 ## 1. 视觉-语

gitblog_00475的博客 613

双手机器人操作新突破:VLA-Diffusion-Policy-Robotics中的双手机器人扩散策略详解

VLA-Diffusion-Policy-Robotics是一个专注于机器人操作扩散模型的资源与论文集合,为双手机器人操作提供了创新的解决方案。该项目系统分析了扩散策略在机器人操作领域的应用,涵盖数据表示、模型架构和扩散策略等多个关键维度,为新手和普通用户提供了全面了解这一前沿技术的窗口。 ### 🌟 扩散策略在机器人操作中的崛起 自2022年以来,扩散策略在机器人操作领域展现出超越传统方法

gitblog_01070的博客 488

为什么VLA-Diffusion-Policy-Robotics是机器人学习的未来:10个关键技术突破详解

在机器人学习领域,VLA-Diffusion-Policy-Robotics代表了扩散模型在机器人操作中的革命性应用。这个开源项目汇集了扩散策略在机器人操控方面的最新研究成果和关键技术突破,为研究人员和开发者提供了宝贵的资源库。扩散策略作为一种基于生成模型的方法,正在彻底改变机器人学习的方式,使其能够处理复杂的、高维度的操作任务。 自2022年以来,扩散策略在机器人操作研究领域展现出超越传统方法

gitblog_01110的博客 634

VLA-Diffusion-Policy-Robotics中的长时域任务规划:如何解决复杂机器人操作问题

在机器人操作领域,长时域任务规划一直是一个极具挑战性的难题。传统的机器人控制方法在面对需要多步骤、长时间序列的复杂操作任务时往往表现不佳。VLA-Diffusion-Policy-Robotics项目通过扩散策略技术,为长时域任务规划提供了一种创新性的解决方案。这项技术结合了视觉-语言-动作模型与扩散模型,能够有效处理复杂的机器人操作问题。 ## 什么是长时域任务规划?🤔 长时域任务规划指的

gitblog_00629的博客 693

VLA-Diffusion-Policy-Robotics中的实时部署策略:加速采样与降噪技术的5种方法

在机器人操作领域,扩散策略(Diffusion Policy)正迅速成为最前沿的技术方向。VLA-Diffusion-Policy-Robotics项目汇集了机器人操作扩散策略的最新研究成果,为开发者和研究者提供了宝贵的资源。本文将深入探讨扩散策略在实时部署中的关键挑战,并详细介绍加速采样与降噪技术的5种核心方法,帮助您快速掌握这一前沿技术。 ## 📈 扩散策略在机器人操作中的崛起 自202

gitblog_00210的博客 311

VLA-Diffusion-Policy-Robotics中的3种模型架构:大语言模型、小型CNN/Transformer与VAE/VQ-VAE对比

VLA-Diffusion-Policy-Robotics是一个专注于机器人操作扩散模型的资源与论文集合,为机器人控制领域提供了丰富的模型架构选择。本文将深入对比该项目中的三种核心模型架构:基于大语言模型的扩散策略、小型CNN/Transformer扩散策略以及VAE/VQ-VAE扩散策略,帮助读者快速理解它们的原理与应用场景。 ## 📊 扩散策略模型架构全景对比 机器人操作扩散模型近年来发

gitblog_00694的博客 660

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

如下图所示a)具有不同类型动作表示的显式策略(b)隐式策略学习以动作和观察为条件的能量函数,并对最小化能量景观的动作进行优化(c)扩散策略通过学习的梯度场将噪声细化为动作。这种表述提供了稳定的训练,允许学习到的策略准确地建模为多模态动作分布,并容纳高维动作序列进一步,所谓扩散策略,是指将机器人的视觉运动策略表示为条件去噪扩散过程来生成机器人行为的新方法扩散策略学习动作-分布评分函数的梯度即该策略不是直接输出一个动作,而是以视觉观察为条件,对K次去噪迭代推断“动作-得分梯度”(

结构之法 算法之道 3万+

VLA-Diffusion-Policy-Robotics实战教程:从零开始构建你的第一个扩散策略模型

欢迎来到VLA-Diffusion-Policy-Robotics实战教程!🎯 本文将带你从零开始,深入探索扩散策略在机器人操作领域的应用,帮助你快速上手并构建自己的第一个扩散策略模型。扩散策略作为近年来机器人学习领域的热门技术,已经在多种复杂任务中展现出超越传统方法的卓越性能。 ## 📚 什么是扩散策略? 扩散策略是一种基于扩散模型的机器人控制方法,它将机器人动作序列的生成过程建模为逐步

gitblog_00778的博客 367

如何快速入门VLA-Diffusion-Policy-Robotics:扩散模型在机器人操作中的5大应用场景

扩散模型正在彻底改变机器人操作领域!🤖 作为人工智能和机器人技术融合的前沿,VLA-Diffusion-Policy-Robotics项目汇集了扩散模型在机器人操作领域的最新研究成果和应用实践。这个开源资源库提供了全面的论文综述、技术分类和实践指南,帮助研究人员和开发者快速掌握这一革命性技术。 [![扩散模型在机器人操作中的发展历程](https://raw.gitcode.com/gh_mi

gitblog_01041的博客 1020
上一篇: Tokenization的演进:从NLP基石到多模态AI的“通用翻译器”
下一篇: 强化学习人形机器人奖励函数分析
我要看无刺有刺
博客等级 码龄8年 292粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值