5.2 策略表征与生成式策略:扩散策略与 Flow Matching


文档摘要

5.2 策略表征与生成式策略:扩散策略与 Flow Matching 一个状态可以对应多种合理动作——「抓杯子」可以从左、从右、从上抓。传统回归策略只能输出「平均动作」(往往是无效的中间值)。扩散策略与 Flow Matching 的革命在于:它们能精确建模这种多模态动作分布。 5.2.1 动作多模态问题 先用一个例子说明问题。考虑「抓桌上杯子」这个任务: 每个合理动作都可行,但它们在动作空间是分离的簇。如果用传统回归策略(MSE 训练): $$ \min\theta \mathbb{E}[(\pi\theta(s) - a)^2] $$ 回归目标会让模型预测所有合理动作的平均值——一个在动作空间里位于「簇与簇之间」的无效动作(既不像左抓也不像右抓)。

5.2 策略表征与生成式策略:扩散策略与 Flow Matching

一个状态可以对应多种合理动作——「抓杯子」可以从左、从右、从上抓。传统回归策略只能输出「平均动作」(往往是无效的中间值)。扩散策略与 Flow Matching 的革命在于:它们能精确建模这种多模态动作分布。

5.2.1 动作多模态问题

先用一个例子说明问题。考虑「抓桌上杯子」这个任务:

合理动作 1: 从左侧接近,斜上方抓 合理动作 2: 从右侧接近,斜上方抓 合理动作 3: 从正前方接近,正上方抓 ...

每个合理动作都可行,但它们在动作空间是分离的簇。如果用传统回归策略(MSE 训练):

\min_\theta \mathbb{E}[(\pi_\theta(s) - a)^2]

回归目标会让模型预测所有合理动作的平均值——一个在动作空间里位于「簇与簇之间」的无效动作(既不像左抓也不像右抓)。这就是「模式平均」(mode collapse)问题。

策略类型 能否建模多模态 代表
确定性回归(MSE) 早期 BC
高斯策略(输出均值+方差) 部分(单峰) 标准 BC
混合高斯(Mixture of Gaussians, GMM) 是(有限模态) Mixture Density Network
扩散策略 是(任意分布) Diffusion Policy
流匹配 是(任意分布) π0

扩散与 Flow 是当前最强的多模态动作建模工具。

5.2.2 扩散模型基础回顾

扩散模型(Diffusion Model)的直觉:把数据逐步加噪变成纯噪声,再学习「反向去噪」从噪声还原数据。

前向加噪过程(固定):

q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I)

其中 x_0 是原始数据(动作),x_t 是加噪 t 步后的版本,\bar{\alpha}_t 是噪声调度。

反向去噪过程(学习):训练一个网络 \epsilon_\theta(x_t, t, c) 预测噪声,从 x_T(纯噪声)逐步去噪到 x_0

训练: 采样真实动作 a_0 采样时间步 t ~ Uniform(0, T) 采样噪声 ε ~ N(0, I) 计算加噪 a_t = √(α_t) a_0 + √(1-α_t) ε 训练网络预测: ε_θ(a_t, t, 观测) ≈ ε 损失: ||ε_θ(a_t, t, 观测) - ε||² 推理(生成动作): 从纯噪声 a_T ~ N(0, I) 开始 迭代 T 步去噪: a_{t-1} = denoise_step(a_t, t, 观测) 最终 a_0 是生成的动作

💡 直觉:训练时让网络学会「从带噪动作里去掉噪声」,推理时从纯噪声开始迭代去噪,最终得到一个合理的动作。由于每次采样噪声不同,生成的动作也不同——天然支持多模态。

5.2.3 Diffusion Policy 在机器人中的应用

Diffusion Policy(哥伦比亚大学 + Toyota 2023)把扩散模型引入机器人策略学习,是机器人领域的里程碑。核心创新:

创新一:动作序列预测(action chunk)

不是预测单步动作,而是预测未来一段动作序列:

\pi_\theta(o_t) \to [a_t, a_{t+1}, ..., a_{t+H_p}]

预测 horizon H_p 通常 8-16 步。这样:

  • 一次去噪生成多步动作,推理效率高。
  • 序列内动作自然平滑(一个扩散过程生成)。
  • 能补偿感知-控制延迟(用预测的未来动作填充)。

创新二:条件去噪(recurrent horizon)

每步去噪时,条件是当前观测序列(最近几帧图像 + 关节状态):

\epsilon_\theta(a_t^{chunk}, t, o_{t-K:t})

观测通过一个视觉编码器 + 历史编码器进入噪声预测网络。

创新三:CNN-based U-Net 或 Transformer 主干

Diffusion Policy 可用两种噪声预测网络:

主干 优势 适用
CNN U-Net(1D 时序卷积) 训练稳定、内存小 标准选择
Transformer 全局注意力、易扩展 大模型

完整伪代码

# Diffusion Policy 训练 def train_step(policy, batch): obs, action_chunk = batch # action_chunk: (B, H, A) # 1. 采样时间步与噪声 t = torch.randint(0, T, (B,)) noise = torch.randn_like(action_chunk) # 2. 前向加噪 a_noisy = q_sample(action_chunk, t, noise) # 3. 网络预测噪声 pred_noise = policy(a_noisy, t, obs) # 4. 噪声预测损失 loss = mse(pred_noise, noise) return loss # Diffusion Policy 推理 def predict_action(policy, obs): a = torch.randn(B, H, A) # 从纯噪声开始 for t in reversed(range(T)): a = policy.denoise_step(a, t, obs) return a # 返回 H 步动作 chunk

5.2.4 扩散过程的可视化

<svg viewBox="0 0 760 260" xmlns="http://www.w3.org/2000/svg"> <!-- 噪声起点 --> <circle cx="80" cy="130" r="40" fill="#94a3b8" opacity="0.5"/> <text x="80" y="80" text-anchor="middle" font-size="11" fill="#475569">t = T</text> <text x="80" y="200" text-anchor="middle" font-size="11" fill="#475569">纯噪声</text> <!-- 中间步骤 --> <circle cx="250" cy="130" r="35" fill="#fde68a" opacity="0.6"/> <text x="250" y="80" text-anchor="middle" font-size="11" fill="#92400e">t = T/2</text> <text x="250" y="200" text-anchor="middle" font-size="11" fill="#92400e">半去噪</text> <circle cx="420" cy="130" r="30" fill="#fbbf24" opacity="0.7"/> <text x="420" y="80" text-anchor="middle" font-size="11" fill="#92400e">t = T/4</text> <text x="420" y="200" text-anchor="middle" font-size="11" fill="#92400e">轮廓可见</text> <!-- 终态:动作分布 --> <circle cx="620" cy="110" r="20" fill="#16a34a"/> <circle cx="660" cy="150" r="20" fill="#16a34a"/> <circle cx="590" cy="160" r="20" fill="#16a34a"/> <text x="620" y="80" text-anchor="middle" font-size="11" fill="#16a34a">t = 0</text> <text x="620" y="220" text-anchor="middle" font-size="11" fill="#16a34a">多模态动作</text> <!-- 箭头 --> <line x1="125" y1="130" x2="210" y2="130" stroke="#374151" stroke-width="2" marker-end="url(#ar)"/> <line x1="290" y1="130" x2="385" y2="130" stroke="#374151" stroke-width="2" marker-end="url(#ar)"/> <line x1="455" y1="130" x2="565" y2="130" stroke="#374151" stroke-width="2" marker-end="url(#ar)"/> <text x="160" y="120" font-size="10" fill="#374151">去噪</text> <text x="335" y="120" font-size="10" fill="#374151">去噪</text> <text x="500" y="120" font-size="10" fill="#374151">去噪</text> <defs> <marker id="ar" markerWidth="8" markerHeight="8" refX="6" refY="3" orient="auto"> <path d="M0,0 L6,3 L0,6 Z" fill="#374151"/> </marker> </defs> <text x="380" y="245" text-anchor="middle" font-size="10" fill="#6b7280">Diffusion Policy 迭代去噪:从噪声收敛到多模态动作分布</text> </svg>

注意终点是三个绿色簇而非一个点——这正是扩散策略能建模多模态动作分布的体现。

5.2.5 扩散策略的优势与代价

优势 代价
建模任意多模态分布 推理慢(多步迭代去噪)
训练稳定 训练数据需求大
与 Transformer 兼容 超参数多(步数、噪声调度)
已被工业验证(π0 等) 内存占用大

⚠️ 推理延迟:扩散策略推理需要 T 步去噪(通常 T=10-100)。如果 T=50,每步策略推理要做 50 次网络前向,相比单步回归慢 50 倍。这是 π0 转向 Flow Matching 的核心动机。

5.2.6 Flow Matching:连续时间的优雅替代

Flow Matching(2023)是更新的生成式建模方法,被 Physical Intelligence 的 π0 模型采用。它的核心思想:用连续时间流(Continuous Normalizing Flow)建模数据分布。

数学直觉

定义一个「速度场」v_t(x),描述数据点 x 在时间 t 时的「流动速度」。从噪声分布 x_0 \sim \mathcal{N}(0, I) 出发,沿速度场积分到 x_1 得到数据分布:

\frac{dx}{dt} = v_t(x), \quad x_0 \sim \text{noise}, \quad x_1 \sim \text{data}

训练目标:让神经网络 v_\theta(t, x) 拟合真实速度场:

\min_\theta \mathbb{E}_{t, x_0, x_1} \| v_\theta(t, x_t) - (x_1 - x_0) \|^2

其中 x_t = (1-t) x_0 + t x_1 是噪声到数据的线性插值。

Flow Matching vs Diffusion

维度 Diffusion Flow Matching
建模对象 离散步马尔可夫链 连续时间 ODE
路径 弯曲(扩散概率) 直线(线性插值)
训练目标 预测噪声 预测速度
推理步数 多(10-100 步) 少(5-10 步甚至更少)
数值稳定性
工程友好度 成熟 兴起中

💡 π0 选择 Flow Matching 的原因:(1) 推理快(少步即可生成);(2) 训练稳定;(3) 与 Transformer 主干兼容好。π0 用 Flow Matching 把推理延迟压到与离散 token 化相当的水平。

5.2.7 π0:Flow Matching + VLA 的标杆

π0(Physical Intelligence 2024)是当前最强 VLA 模型之一,技术栈组合:

特点:

  • 主干用 PaliGemma 3B(视觉语言模型),继承预训练。
  • 动作头用 Flow Matching,快速生成连续动作 chunk。
  • 训练数据来自跨本体遥操作数据(10K+ 小时)。
  • 支持复杂任务:折叠衣物、装袋、组装。

π0 证明了一个事实:Flow Matching 是当前 VLA 动作头的最优选择之一

5.2.8 ACT:早期 action chunk 思路

在扩散策略之前,ACT(Action Chunking Transformer, 2023) 已经提出 action chunk 思路,但用 CVAE(条件变分自编码器)建模多模态:

编码器:把 ground truth action chunk 编码为 latent z 解码器:从 latent z + 观测 生成 action chunk

训练用 ELBO(证据下界),推理时从先验采样 z 或用 encoder 推断 z。

ACT 是 action chunk 的早期代表作,但其多模态建模能力弱于扩散/Flow,故逐渐被替代。

5.2.9 生成式策略的工程实践

实践点 推荐
动作 chunk 长度 8-16 步,平衡延迟与精度
去噪步数 Diffusion 10-50;Flow 5-10
噪声调度 余弦或线性,根据数据调整
观测条件 最近 2-3 帧图像 + 关节状态
训练数据 至少几千条轨迹,复杂任务更多
重规划策略 执行 chunk 的 1-4 步后重规划(不执行完)

⚠️ 重规划箴言:action chunk 不要全执行完才重规划——世界在变,全执行完 chunk 末段可能已不合适。常见做法是「执行 chunk 前 1/4 - 1/2 步,然后重新生成新 chunk」。这叫 recurrent horizon control

5.2.10 三种动作头对比总结

动作头 代表 多模态 推理速度 训练稳定性 工程成熟度
离散 token 化 RT-2、OpenVLA 中(自回归)
扩散策略 Diffusion Policy
Flow Matching π0 中(兴起中)
CVAE/ACT ACT

💡 当前趋势:Flow Matching 是 2025 年最热的方向,逐步替代 Diffusion 在 VLA 动作头的位置。离散 token 化在需要复用 LLM 训练管线时仍有优势。两者并存是常态。

本节小结

  • 动作多模态性(一个状态多种合理动作)是机器人策略学习的核心难题,传统回归策略会模式平均失败。
  • 扩散策略用「加噪-去噪」过程建模任意动作分布,配合 action chunk 提升效率与延迟补偿。
  • Flow Matching 用连续时间速度场,推理步数少、训练稳定,π0 证明其优势。
  • ACT 用 CVAE 是 action chunk 的早期思路,多模态能力弱于扩散/Flow。
  • 三种动作头各有优劣:离散 token 化工程成熟、扩散多模态强但慢、Flow 兼顾速度与多模态。
  • 工程上用 recurrent horizon control(执行 chunk 一部分即重规划)应对动态环境。

下一节《5.3 代表性 VLA 模型谱系》将梳理 RT-1 到 π0 的代表模型,看 VLA 技术如何演进到今天。


发布者: 作者: 灏天文库 转发
评论区 (0)
U