从扩散模型到 Diffusion Policy:一条从分布生成到机器人动作的主线

从扩散模型到 Diffusion Policy:一条从分布生成到机器人动作的主线

这份笔记不是把所有扩散模型公式逐条罗列一遍,而是围绕一个核心问题展开: 为什么扩散模型能够比普通回归模型更自然地表示多峰生成问题,并进一步被用于机器人动作序列生成? 扩散模型最初常被解释为“先加噪,再去噪”的生成模型。这个解释直观,但如果只停留在这个层面,很容易把扩散模型理解成一种复杂的图像修复算法。更准确地说,扩散模型学习的是一个从简单分布到复杂数据分布的

这份笔记不是把所有扩散模型公式逐条罗列一遍,而是围绕一个核心问题展开:
为什么扩散模型能够比普通回归模型更自然地表示多峰生成问题,并进一步被用于机器人动作序列生成?

扩散模型最初常被解释为“先加噪,再去噪”的生成模型。这个解释直观,但如果只停留在这个层面,很容易把扩散模型理解成一种复杂的图像修复算法。更准确地说,扩散模型学习的是一个从简单分布到复杂数据分布的逐步生成过程。它不是一次性输出一个样本,而是从随机噪声出发,通过多步条件去噪,逐渐把样本推向真实数据分布中的高概率区域。

这一点在机器人策略学习中尤其重要。机器人动作并不总是存在唯一答案。例如,前方有障碍物时,机器人既可以从左侧绕行,也可以从右侧绕行。两个动作序列都合理,但它们的平均值可能直接撞向障碍物。普通 MSE 回归倾向于学习这种“平均动作”;扩散策略则可以建模完整的动作分布,从中采样出不同的可行动作模式。

本文按照一条连续主线展开:先从生成范式和多峰性问题出发,再解释 DDPM 的加噪、去噪、训练目标和采样过程,最后说明 Diffusion Policy 如何把扩散模型从图像空间迁移到机器人动作序列空间,并从随机最优控制角度理解其本质。


第一章:生成问题的核心矛盾是分布,而不是单点预测

三种生成范式:自回归、非自回归与扩散

生成模型要解决的问题可以写成:

x \sim p_{\text{data}}(x), \qquad p_\theta(x) \approx p_{\text{data}}(x)

其中 ​p_{\text{data}}(x) 是真实数据分布,​p_\theta(x) 是模型学习到的生成分布。不同生成范式的差异,主要在于它们如何从条件输入生成一个复杂结构化样本。

自回归生成把一个样本分解成有序的条件生成过程:

p_\theta(x) = \prod_{i=1}^{N}p_\theta(x_i\mid x_{<i})

它的优点是每一步都能利用已经生成的上下文,因此全局一致性较好。语言模型逐 token 生成文本就是典型例子。但自回归生成的问题也很明显:生成必须逐步进行,长序列或高维输出会带来较高推理成本。

非自回归生成试图一次性并行输出多个变量:

p_\theta(x\mid c) \quad \Rightarrow \quad x_1,x_2,\ldots,x_N \ \text{parallel generated}

它的速度更快,但由于生成阶段缺少逐步形成的上下文,多个输出之间容易出现全局不一致。尤其当目标分布是多峰分布时,非自回归模型如果用单点回归训练,很容易输出多个合理模式的平均值。

扩散生成采用另一种思路:不要求模型一次性生成最终样本,而是把生成拆成多个小的去噪步骤:

x_T \rightarrow x_{T-1} \rightarrow \cdots \rightarrow x_0

其中 ​x_T 是接近标准高斯的噪声,​x_0 是最终生成样本。扩散模型每一步只做局部修正,因此可以把复杂的高维生成问题分解成一系列更容易学习的局部去噪问题。

图 1:三种生成范式对比

图 1:自回归生成强调逐步条件展开,非自回归生成强调并行输出,扩散生成则把最终样本拆成一系列从噪声到结构的局部去噪步骤。

多峰性问题:为什么“平均答案”经常是坏答案

多峰性指的是:在同一个条件输入下,输出空间中存在多个合理答案。这个问题在图像生成、轨迹预测和机器人控制中都很常见。

以导航为例。假设机器人前方有一个障碍物,目标在障碍物后方。合理轨迹至少有两种:

\text{left mode}: \text{从左侧绕行}, \qquad \text{right mode}: \text{从右侧绕行}

如果使用普通确定性回归,并用 MSE 训练:

\min_\theta \mathbb{E} \left[ \|A - f_\theta(O)\|^2 \right]

其中 ​O 是观测,​A 是动作序列,那么在左右绕行都合理的情况下,模型容易输出两种动作的均值:

f_\theta(O) \approx \frac{1}{2}A_{\text{left}} + \frac{1}{2}A_{\text{right}}

但这条平均轨迹可能正好穿过障碍物。问题不在于模型“不够聪明”,而在于训练目标把一个多峰分布压缩成了一个单点预测。

扩散模型的优势在于,它学习的是条件分布:

p_\theta(A\mid O)

而不是一个确定性函数:

A=f_\theta(O)

因此,同一个观测 ​O 下,模型可以通过不同随机初始化采样出不同合理动作序列:

A^{(1)} \sim p_\theta(A\mid O), \qquad A^{(2)} \sim p_\theta(A\mid O)

这使扩散模型天然适合表达多峰性。它不会被迫把多个模式平均成一个单点,而是保留多个高概率解,再通过采样、评分、碰撞检测、价值函数或 MPC refinement 选择最终执行的动作。

图 2:多峰轨迹与平均轨迹失败案例

图 2:同一观测下,左右绕行都是合理模式;如果用单点回归学习平均轨迹,结果可能穿过障碍物,反而成为不可执行方案。


第二章:DDPM 的主线是把复杂生成拆成逐步去噪

前向加噪:固定马尔可夫链与闭式采样

DDPM 的前向过程是一个人为设定的加噪过程,不需要神经网络学习。给定真实数据样本:

x_0 \sim p_{\text{data}}(x)

前向过程逐步向样本中加入高斯噪声:

q(x_{1:T}\mid x_0) = \prod_{t=1}^{T}q(x_t\mid x_{t-1})

其中每一步定义为:

q(x_t\mid x_{t-1}) = \mathcal{N} \left( x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I \right)

这里 ​\beta_t 是第 ​t 步的噪声强度。通常定义:

\alpha_t = 1-\beta_t, \qquad \bar{\alpha}_t=\prod_{s=1}^{t}\alpha_s

由于高斯分布在线性变换和噪声叠加下具有闭合性,虽然理论上前向过程是逐步马尔可夫链,但训练时可以直接从 ​x_0 构造任意时刻的 ​x_t

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

等价地,可以写成重参数化形式:

x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, \qquad \epsilon\sim\mathcal{N}(0,I)

这条公式非常关键。它说明训练时不需要真的执行:

x_0 \rightarrow x_1 \rightarrow \cdots \rightarrow x_t

而是可以随机选择时间步 ​t,随机采样噪声 ​\epsilon,然后一步构造带噪样本 ​x_t。当 ​t 较小时,​\sqrt{\bar{\alpha}_t} 较大,图像或动作序列还保留较多真实结构;当 ​t 较大时,​\sqrt{1-\bar{\alpha}_t} 较大,样本逐渐接近纯高斯噪声。

图 3:DDPM 前向加噪与闭式采样

图 3:前向过程可以逐步加噪,也可以通过闭式公式直接从干净样本构造任意时间步的带噪样本。

反向去噪:从 negative ELBO 到噪声预测

DDPM 的目标是学习一个生成分布 ​p_\theta(x_0),使其接近真实数据分布。反向生成过程写成:

p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^{T} p_\theta(x_{t-1}\mid x_t)

其中:

p_\theta(x_{t-1}\mid x_t) = \mathcal{N} \left( x_{t-1}; \mu_\theta(x_t,t), \Sigma_\theta(x_t,t) \right)

理论上,DDPM 最初优化的是 negative ELBO。完整目标可以分解为终端噪声匹配项、中间去噪 KL 项和最后一步重建项:

L_T + \sum_{t>1}L_{t-1} + L_0

其中最核心的是中间项:

L_{t-1} = D_{\mathrm{KL}} \left( q(x_{t-1}\mid x_t,x_0) \| p_\theta(x_{t-1}\mid x_t) \right)

它要求模型预测的反向分布 ​p_\theta(x_{t-1}\mid x_t) 接近真实后验分布 ​q(x_{t-1}\mid x_t,x_0)

由于前向过程是高斯马尔可夫链,真实后验也有闭式高斯形式:

q(x_{t-1}\mid x_t,x_0) = \mathcal{N} \left( x_{t-1}; \tilde{\mu}_t(x_t,x_0), \tilde{\beta}_t I \right)

如果模型方差固定为:

\Sigma_\theta(x_t,t)=\sigma_t^2I

那么两个高斯分布之间的 KL 散度可以化简为两个均值之间的加权平方误差:

L_{t-1} = \mathbb{E}_q \left[ \frac{1}{2\sigma_t^2} \left\| \tilde{\mu}_t(x_t,x_0) - \mu_\theta(x_t,t) \right\|^2 \right] + C

其中 ​C 是与模型参数无关的常数。

但 DDPM 通常不直接让网络预测均值 ​\mu_\theta(x_t,t),而是预测噪声:

\epsilon_\theta(x_t,t) \approx \epsilon

原因在于 ​x_t 可以写成:

x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon

因此只要网络能预测出当前样本中包含的噪声 ​\epsilon,就可以间接确定去噪方向和反向均值。常用的简化训练目标是:

L_{\text{simple}}(\theta) = \mathbb{E}_{t,x_0,\epsilon} \left[ \left\| \epsilon - \epsilon_\theta \left( \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t \right) \right\|^2 \right]

所以 DDPM 的训练可以理解成一个噪声预测任务:

1. 从数据集中取真实样本 ​x_0; 2. 随机采样时间步 ​t; 3. 随机采样噪声 ​\epsilon; 4. 构造带噪样本 ​x_t; 5. 输入 ​(x_t,t),让神经网络预测 ​\epsilon; 6. 用真实噪声和预测噪声做 MSE。

表面上看,DDPM 在优化一个复杂的变分目标;实际训练中,核心通常被简化为“让网络预测加进去的噪声”。

图 4:DDPM 训练流程图

图 4:训练时随机选择数据样本、时间步和噪声,构造带噪输入,再让去噪网络预测被加入的噪声。

采样公式:为什么每一步还要加 ​\sigma_t z

采样时没有真实样本 ​x_0。模型从标准高斯噪声开始:

x_T \sim \mathcal{N}(0,I)

然后逐步反向去噪:

x_T \rightarrow x_{T-1} \rightarrow \cdots \rightarrow x_0

DDPM 的一步采样公式通常写成:

x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t,t) \right) + \sigma_t z, \qquad z\sim\mathcal{N}(0,I)

这个公式可以拆成两部分。第一部分是模型预测出来的去噪均值:

\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)

第二部分是随机采样项:

\sigma_t z

这里的 ​\sigma_t z 不是为了“把图像重新变噪”,也不是为了防止局部最优,而是因为 DDPM 的反向转移本身被定义成一个高斯分布:

x_{t-1} \sim \mathcal{N} \left( \mu_\theta(x_t,t), \sigma_t^2I \right)

神经网络预测的是高斯分布的均值,但从高斯分布中采样还需要方差项。因此,​\sigma_t z 的作用是保证每一步确实是在执行随机反向采样,而不是确定性映射。

需要区分两个噪声:

\epsilon_\theta(x_t,t)

是网络预测的“当前样本里包含的噪声”;

z

是采样时额外加入的随机扰动,用于从反向高斯分布中采样。

​t=1 时,通常令 ​z=0,因为最后一步已经要输出最终样本,不再需要额外随机扰动。

图 5:采样公式中均值项与随机项的区别

图 5:模型预测的均值项给出主要去噪方向,随机项则保证每一步仍然是在反向高斯分布中采样。


第三章:Diffusion Policy 把扩散变量从图像换成动作序列

从图像生成到动作序列生成

在 DDPM 图像生成中,扩散变量是图像:

X \in \mathbb{R}^{H\times W\times C}

模型学习的是条件或非条件图像分布:

p_\theta(X) \quad \text{or} \quad p_\theta(X\mid c)

在 Diffusion Policy 中,扩散变量不再是图像,而是一段未来动作序列:

A_t = (a_t,a_{t+1},\ldots,a_{t+H-1})

其中 ​H 是动作预测 horizon。对于移动机器人,单步动作可以是:

a_i=(v_i,\omega_i)

也可以是 waypoint、局部轨迹点、末端执行器位姿或关节控制量。Diffusion Policy 学习的是条件动作分布:

p_\theta(A_t\mid O_t)

其中 ​O_t 是当前观测,可以包括图像、机器人状态、目标位置、语言指令或历史观测。

训练时,对专家动作序列 ​A_t^0 加噪:

A_t^k = \sqrt{\bar{\alpha}_k}A_t^0 + \sqrt{1-\bar{\alpha}_k}\epsilon

然后让网络预测噪声:

L(\theta) = \mathbb{E} \left[ \| \epsilon - \epsilon_\theta(O_t,A_t^k,k) \|^2 \right]

采样时,从随机动作序列开始:

A_t^K \sim \mathcal{N}(0,I)

经过多步条件去噪得到未来动作序列:

A_t^K \rightarrow A_t^{K-1} \rightarrow \cdots \rightarrow A_t^0

最终执行时,通常不会一次性执行整段动作,而是采用类似 MPC 的 receding-horizon 方式:每次生成未来一段动作,只执行前一个或前几个动作,然后重新观测、重新生成。

图 6:Diffusion Policy 的动作序列去噪与 receding-horizon 执行

图 6:Diffusion Policy 在动作序列空间中逐步去噪生成未来轨迹;执行时通常只采用前几个动作,然后重新观测并滚动规划。

为什么 Diffusion Policy 适合机器人策略学习

Diffusion Policy 对机器人策略学习有三个关键价值。

第一,它可以表达多峰动作分布。对于同一个观测,机器人可能有多个合理动作模式。扩散模型不会把这些模式强制平均,而是通过采样保留多个可能解。

第二,它适合生成高维动作序列。假设一个动作 horizon 有 ​H=100 个 waypoint,每个 waypoint 是 ​(x,y,\theta),那么整段轨迹就是 300 维变量。直接一次性回归这个高维向量很难;扩散模型则从随机轨迹开始,每一步只做局部修正,因此更容易学习复杂轨迹分布。

第三,它的训练相对稳定。扩散模型训练样本可以由专家动作序列经过前向加噪构造,目标是噪声预测或 score matching,不需要像 GAN 那样依赖对抗训练,也不需要显式构造负样本。

不过,Diffusion Policy 的“最优性”需要谨慎理解。它直接学习的是:

p_\theta(A\mid O) \approx p_{\text{data}}(A\mid O)

也就是说,原始 Diffusion Policy 的目标是拟合专家动作分布,而不是直接最小化真实系统代价函数。如果专家数据来自人类遥操作、MPC、MPPI、Hybrid A* + NMPC 或轨迹优化器,那么模型会学习这些专家策略的分布特征。如果专家本身次优,模型也会继承这种次优性。

因此,Diffusion Policy 更准确地说是一种条件动作分布生成器,而不是严格意义上的在线最优控制器。

CNN 去噪器与 Transformer 去噪器

Diffusion Policy 的核心网络是去噪器:

\epsilon_\theta(O_t,A_t^k,k)

它的输入包括当前观测 ​O_t、带噪动作序列 ​A_t^k 和扩散时间步 ​k,输出是预测噪声。

常见实现有两类。

CNN-based Diffusion Policy 把动作序列看作一维时间信号,用 Conv1D 进行去噪,并通过 FiLM 或条件归一化把观测信息注入网络。它的优点是结构简单、训练稳定、推理效率较高,适合较平滑、局部时间相关性强的动作序列。

Transformer-based Diffusion Policy 把动作序列中的每个时间步看作 token,用 self-attention 建模动作之间的长程依赖,再通过 cross-attention 注入观测条件。它更适合复杂任务、高频动作变化和长 horizon 生成,但训练成本和数据需求通常更高。

从直觉上说,CNN 去噪器更像一个局部平滑修正器;Transformer 去噪器更像一个全局动作序列协调器。两者并不是绝对优劣关系,而是对任务复杂度、数据规模和实时性要求的不同取舍。

图 7:CNN-based 与 Transformer-based Diffusion Policy 架构对比

图 7:CNN 去噪器更偏向局部时间平滑修正,Transformer 去噪器更擅长通过注意力建模长程动作依赖。


第四章:从随机最优控制角度看,去噪是一种受控运输

反向扩散中的 score 可以看成 feedback control

扩散模型还有一种更深的理解方式:反向生成过程可以看成一个受控随机过程。前向过程是无控制扩散:

dX_\tau = f(\tau,X_\tau)d\tau + g(\tau)dW_\tau

它把真实数据分布逐渐运输到简单高斯分布:

p_0 \rightarrow p_T \approx \mathcal{N}(0,I)

反向生成则是从高斯分布回到真实数据分布:

p_T \rightarrow p_0

如果没有额外控制项,一个噪声样本不会自然变成真实数据。因此,反向过程需要一个方向场,告诉当前样本应该往哪里走。这个方向场就是 score:

\nabla_x\log p_\tau(x)

反向 SDE 的漂移项中会出现与 score 相关的修正项。忽略符号约定差异,其核心结构可以理解为:

\text{reverse drift} = \text{base drift} + \text{score-based correction}

从控制角度看,score-based correction 就是一个反馈控制项:

u^*(\tau,x) \propto \nabla_x\log p_\tau(x)

它根据当前状态 ​x 和扩散时间 ​\tau,把样本推向当前噪声层级下的高概率数据区域。

这与薛定谔桥问题也有关系。设 ​\mathbb{P} 是无控制扩散过程的路径分布,​\mathbb{Q} 是加入控制后的路径分布。薛定谔桥可以写成:

\mathbb{Q}^* = \arg\min_{\mathbb{Q}} \mathrm{KL}(\mathbb{Q}\|\mathbb{P})

subject to:

\mathbb{Q}_0=p_0, \qquad \mathbb{Q}_T=p_T

也就是说,在所有连接 ​p_0​p_T 的随机路径中,寻找一个最接近无控制扩散过程的路径分布。在适当条件下,这个路径空间 KL 可以和控制能量联系起来:

\mathrm{KL}(\mathbb{Q}^u\|\mathbb{P}) = \frac{1}{2} \mathbb{E}_{\mathbb{Q}^u} \left[ \int_0^T \|u_\tau\|^2d\tau \right]

因此,反向扩散可以理解为:在随机噪声驱动的系统中,学习一个低能量反馈控制场,把简单高斯分布运输回复杂数据分布。

图 8:扩散模型作为受控分布运输

图 8:从控制视角看,反向扩散可以理解为用 score 诱导的反馈场,把简单噪声分布运输回复杂数据分布。

Diffusion Policy 与 MPC 的关系:生成分布不等于直接优化真实 cost

Diffusion Policy 和 MPC 都会产生未来动作序列,但它们的优化对象不同。

MPC 直接在真实系统动力学和真实代价函数上优化。设真实系统为:

x_{i+1} = F(x_i,a_i)

MPC 求解的是:

A^* = \arg\min_A \left[ \phi(x_{t+H}) + \sum_{i=0}^{H-1} \ell(x_{t+i},a_{t+i}) \right]

其中代价函数可以包含目标误差、碰撞风险、动力学约束、输入平滑性和能耗。MPC 的优化发生在真实系统状态和真实控制输入上。

Diffusion Policy 的扩散过程发生在动作序列生成空间中。它学习的是:

p_\theta(A\mid O) \approx p_{\text{data}}(A\mid O)

也就是说,它生成的是“像专家数据”的动作序列,而不是显式求解:

\arg\min_A J_{\text{real}}(A,O)

因此,原始 Diffusion Policy 的最优性是间接的、数据依赖的。如果训练数据来自近似最优专家,那么它可以表现得像一个摊销优化器:

\text{expert optimizer} \rightarrow \text{expert action dataset} \rightarrow p_\theta(A\mid O)

在线执行时,模型不再从头求解优化问题,而是快速采样出低代价动作候选。

如果希望 Diffusion Policy 更接近真实系统 cost,可以加入以下机制。

一种方式是用高质量专家生成训练数据,例如 MPC、MPPI、trajectory optimization 或 Hybrid A* + NMPC。

另一种方式是在采样时加入 cost guidance:

s_{\text{guided}}(A,O) = s_\theta(A,O) - \lambda\nabla_A J_{\text{real}}(A,O)

这里 ​s_\theta(A,O) 是扩散模型学到的 score,​J_{\text{real}} 是真实系统代价。这个项会把采样过程进一步推向低真实代价区域。

还可以采样多条候选动作序列:

A_1,\ldots,A_N \sim p_\theta(A\mid O)

再用碰撞检测、动力学可行性、目标距离、value function 或真实代价函数进行筛选:

A^* = \arg\min_{A_i} J_{\text{real}}(A_i,O)

更工程化的做法是把 Diffusion Policy 生成的动作序列作为 MPC 或 NMPC 的 warm start。这样可以同时利用扩散模型的多峰 proposal 能力和 MPC 的真实动力学约束处理能力。

图 9:Diffusion Policy、MPC 与 hybrid refinement 的关系

图 9:Diffusion Policy 可以产生多条动作候选,MPC 或代价评估模块负责筛选和细化,最终得到更安全可行的执行轨迹。


总结:Diffusion Policy 的价值与边界

扩散模型的核心价值不是“把噪声变成图片”这个表面过程,而是它提供了一种建模复杂分布的方法。通过前向加噪和反向去噪,模型把高维、多峰、结构化生成问题分解成一系列局部去噪问题。

DDPM 中,训练目标虽然来自 negative ELBO,但实际常用形式是噪声预测 MSE:

\mathbb{E} \left[ \|\epsilon-\epsilon_\theta(x_t,t)\|^2 \right]

这个噪声预测器在采样时决定每一步反向去噪的均值,而随机项 ​\sigma_t z 则保证每一步符合高斯反向采样过程。

Diffusion Policy 把这个思想迁移到了机器人动作序列空间。它不再生成图像,而是生成未来动作序列:

A_t^K \rightarrow A_t^{K-1} \rightarrow \cdots \rightarrow A_t^0

在当前观测 ​O_t 条件下,它学习条件动作分布 ​p(A_t\mid O_t),因此可以表达多个合理动作模式,避免普通回归中的平均解问题。

但需要明确的是,Diffusion Policy 原始形式并不直接优化真实系统 cost。它的性能依赖专家数据质量。要把它用于真实机器人系统,通常还需要和 cost guidance、candidate selection、collision checking、MPC/NMPC refinement 或安全控制层结合。

用一句话概括:

扩散模型学习的是分布上的去噪控制场;Diffusion Policy 则把这个控制场放到动作序列空间中,用来生成多峰、连续、可执行的未来动作候选。

评论