一致性模型 $f_\theta(x_t, t)$ 经过训练后,无论是通过蒸馏还是独立训练,它都能提供从概率流 ODE 轨迹上的任意点 $(x_t, t)$ 到该轨迹起点的估计 $\hat{x}_0$ 的直接映射。这种能力使得采样速度比需要迭代模拟逆向过程的传统扩散模型快很多。我们接下来将查看如何使用单步和多步方法生成样本。单步生成一致性模型最直接的应用是单步生成。这种方法旨在模型的一次正向传播中生成一个样本,提供最快的推理速度。步骤如下:从先验分布中采样初始噪声向量 $x_T$,通常是标准高斯分布:$x_T \sim \mathcal{N}(0, I)$。在扩散过程的背景下,这里 $T$ 表示最大噪声水平或时间。使用此噪声向量和对应的最大时间 $T$ 评估一致性模型 $f_\theta$: $$ \hat{x}0 = f\theta(x_T, T) $$输出 $\hat{x}_0$ 即为生成的样本。这次单次评估取代了 DDPM 或 DDIM 采样器通常需要的数百或数千步。其基本原理依赖于训练好的模型能够近似地将 ODE 轨迹上的任意点 $(x_t, t)$ 直接映射到起点 $x_0$ 的函数。优点:极速: 单步生成是可能的最快方法,每个样本只需一次网络评估。简单: 采样算法实现起来非常简单。缺点:潜在质量折衷: 单步生成的样本质量可能低于多步一致性采样或传统扩散模型生成的样本,特别是当一致性属性未能完美掌握所有时间步时。从 $x_T$ 到 $\hat{x}_0$ 的单次映射中的误差不会被修正。单步采样在生成速度是主要考量的应用中尤其有用,例如实时交互系统,即使这意味着对最高可能保真度略有折衷。多步生成为了提升样本质量,同时仍保持相对于传统方法的明显速度优势,一致性模型可用于多步生成过程。这种方法迭代地使用一致性属性,加入中间去噪和噪声注入步骤以改进估计。多步算法通常包括以下内容:选择采样步数 $N$(例如 2, 5, 10),这远小于典型的扩散采样步数。定义时间步序列 $T = t_N > t_{N-1} > \dots > t_1 > t_0 = 0$。一个常见选择是在某个尺度上(例如线性或对数线性)均匀间隔。令 $\epsilon$ 为表示最小噪声水平的小正常数(例如 $\epsilon=0.002$)。采样初始噪声向量:$x_{t_N} \sim \mathcal{N}(0, I)$。从 $i = N$ 迭代到 $1$: a. 获取当前状态 $x_{t_i}$ 和时间 $t_i$。 b. 使用一致性模型估计起点:$\hat{x}0^{(i)} = f\theta(x_{t_i}, t_i)$。 c. 如果 $i > 1$: i. 确定下一个时间步 $t_{i-1}$。 ii. 采样高斯噪声:$z_i \sim \mathcal{N}(0, I)$。 iii. 将噪声添加到估计的起点,以获得下一个时间步的状态: $$ x_{t_{i-1}} = \hat{x}0^{(i)} + \sqrt{t{i-1}^2 - \epsilon^2} \cdot z_i $$ 此步骤使用估计值 $\hat{x}0^{(i)}$ 并注入适量的噪声,以模拟 $x{t_{i-1}}$ 位于同一轨迹上。$\epsilon^2$ 项确保噪声方差为正。 d. 如果 $i = 1$:最终估计值 $\hat{x}_0^{(1)}$ 即为结果。返回最终估计值 $\hat{x}_0 = \hat{x}_0^{(1)}$。此过程在每一步 $i$ 都使用一致性模型,从当前状态 $x_{t_i}$ 获得起点的估计值 $\hat{x}0^{(i)}$。然后通过将适当缩放的噪声重新添加到此估计值,跳到下一个时间步 $t{i-1}$,从而有效地在轨迹上的多个点校正通向起点的路径。优点:样本质量提升: 与单步生成相比,迭代优化通常会带来更高保真度的样本,这些样本与原始扩散模型(如果经过蒸馏)的质量或目标分布更匹配。灵活折衷: 步数 $N$ 允许调整计算成本和样本质量之间的平衡。即使 $N$ 很小(例如 2-10),也常能看到相对于单步的明显质量提升。缺点:计算量增加: 需要进行 $N$ 次网络评估,这使其比单步生成慢,但仍比传统扩散采样器快得多。下图说明了单步和多步采样路径之间的区别:digraph G { rankdir=LR; node [shape=point, width=0.1, height=0.1]; edge [arrowhead=vee, arrowsize=0.7]; splines=true; subgraph cluster_single { label = "单步采样"; style=dashed; bgcolor="#e9ecef"; color="#adb5bd"; node [color="#1c7ed6"]; edge [color="#1c7ed6"]; xT_s [label="", shape=circle, style=filled, fillcolor="#fa5252", xlabel="x_T"]; x0_s_hat [label="", shape=star, style=filled, fillcolor="#40c057", xlabel="x_0"]; xT_s -> x0_s_hat [label=" f_θ(x_T, T)", fontsize=10, fontcolor="#495057"]; } subgraph cluster_multi { label = "多步采样 (N=3)"; style=dashed; bgcolor="#e9ecef"; color="#adb5bd"; node [color="#7048e8"]; edge [color="#7048e8"]; xT_m [label="", shape=circle, style=filled, fillcolor="#fa5252", xlabel="x_T = x_t3"]; xt2 [label="", shape=circle, xlabel="x_t2"]; xt1 [label="", shape=circle, xlabel="x_t1"]; x0_m_hat [label="", shape=star, style=filled, fillcolor="#40c057", xlabel="x_0"]; // Invisible nodes for curve control c1 [pos="2,0.5!", shape=none, label=""]; c2 [pos="4,0.1!", shape=none, label=""]; c3 [pos="6,-0.3!", shape=none, label=""]; xT_m -> xt2 [label=" 步骤 1 (估计 x0, 添加噪声)", fontsize=9, fontcolor="#495057", style=dashed]; xt2 -> xt1 [label=" 步骤 2 (估计 x0, 添加噪声)", fontsize=9, fontcolor="#495057", style=dashed]; xt1 -> x0_m_hat [label=" 步骤 3 (估计 x0)", fontsize=9, fontcolor="#495057", style=dashed]; // Actual estimate points (invisible for clarity, used for labels) x0_hat_3 [pos="2,0.5!", shape=none, label=""]; x0_hat_2 [pos="4,0.1!", shape=none, label=""]; } // Add invisible edges to force layout roughly xT_s -> xT_m [style=invis]; x0_s_hat -> x0_m_hat [style=invis]; }单步采样直接将初始噪声 $x_T$ 映射到估计值 $\hat{x}0$。多步采样遵循迭代路径,使用中间估计和噪声注入步骤($x{t3} \rightarrow x_{t2} \rightarrow x_{t1}$)以得到最终的 $\hat{x}_0$。实际考量时间步安排: 多步采样中序列 $t_N, \dots, t_1$ 的选择会影响性能。在较低噪声水平处放置更多步骤的安排可能更有益,类似于加速扩散采样中的发现。噪声项: $\sqrt{t_{i-1}^2 - \epsilon^2}$ 项对于正确缩放注入的噪声很重要。确保 $t_1 > \epsilon$。其精确形式可能会因训练期间使用的特定噪声调度参数化而略有不同。边界条件 $\epsilon$: 这个小值可以防止当 $t_{i-1}$ 接近零时出现问题,并确保噪声标准差保持为实数。它的确切值通常不高度敏感,但应为小而正的值。通过选择单步或多步生成,您可以在推理速度需求与期望的样本质量水平之间取得平衡,这使得一致性模型成为高效生成建模的多用途工具。