概述
A-FloPS(Adaptive Flow Path Sampler)是一种无需训练的加速框架,其核心思想是将预训练扩散模型的采样轨迹重参数化为流匹配(Flow Matching)形式,并通过自适应速度分解机制实现高效采样。
与传统的训练加速方法(如知识蒸馏)不同,A-FloPS 无需重新训练模型,直接利用预训练的 score 网络实现采样加速。在极低函数评估次数(NFE)场景下(如仅需 5 步),A-FloPS 仍能生成高质量样本,FID 显著低于现有方法。1
1. 背景:扩散模型与流匹配
1.1 扩散模型
现代扩散模型通常基于随机微分方程(SDE)框架。设 为目标数据分布,前向扩散过程为:
其中 是维纳过程, 和 分别为漂移系数和扩散系数。
条件边际分布为:
其中:
生成过程通过逆转 SDE 实现,其对应的确定性 ODE 为:
在实际应用中,score 函数 通过神经网络 近似。
1.2 流匹配模型
流匹配(Flow Matching)定义了一个时间相关的速度场 ,通过 ODE 将简单先验分布传输到目标数据分布:
高斯最优传输情形下,最优速度场为条件期望:
流匹配模型的关键优势在于其采样轨迹具有更好的时序规律性,使得数值积分更加稳定高效。
2. 核心方法
2.1 扩散到流匹配的解析映射
A-FloPS 的理论核心是定理 1(Diffusion-to-Flow Transformation):1
定理 1:若扩散模型和流匹配模型的目标分布相同(即 ),则速度场与 score 函数满足:
其中 。
关键洞察:这个变换是双射的,因为 随 单调递增,保证了 与 之间的一一对应关系。
这意味着:任何预训练的扩散模型都可以无需重新训练地转换为流匹配形式。
2.2 自适应速度分解
高阶采样器(如 DPM-Solver++)的加速主要依赖两个机制:
- 使用高阶展开提高数值精度
- 利用估计量的时间不变性进行外推
然而在流匹配框架中,速度场沿轨迹仅有弱时序变化,使得机制 (2) 效果有限。A-FloPS 通过自适应速度分解解决这一问题:
将速度场分解为线性项和残差项:
其中 是时变系数,通过自适应估计使残差分量的时序变化最小化。
2.3 自适应系数估计
为保持稳定性, 在每个积分区间内视为分段常数:
理想情况下, 最小化残差的瞬时时序变化:
其中 。
由于直接求导计算代价高,采用有限差分近似:
其中 ,。
2.4 高阶积分
利用分解后的形式,使用修正的欧拉方法进行积分:
其中系数 由以下方程确定:
求解得:
3. 算法流程
3.1 Flow Path Sampler (FloPS)
def flops_sampling(xT, score_net, scheduler, N):
"""
Flow Path Sampler - 基础版本
xT: 初始噪声 ~ N(0, I)
score_net: 预训练的 score 网络
scheduler: 噪声调度器
N: 采样步数
"""
x = xT
dt = 1.0 / N
for n in range(N):
tn = n * dt
# 计算对应的扩散时间步 τ
if tn < 1 / (1 + sigma_T / alpha_bar_T):
tau = T
vt = (sigma_T / alpha_bar_T) * (
x + sigma_T * score_net((alpha_bar_T + sigma_T) * x, T)
)
else:
# 寻找最接近的 τ
tau = find_closest_tau(tn, scheduler)
vt = (sigma_tau / (alpha_bar_tau * (1 - tn))) * (
x + sigma_tau * score_net((alpha_bar_tau + sigma_T) * x, tau)
)
# 欧拉积分
x = x + vt * dt
return x3.2 Adaptive Flow Path Sampler (A-FloPS)
def aflops_sampling(xT, score_net, scheduler, N):
"""
A-FloPS - 自适应版本
"""
x = xT
dt = 1.0 / N
# 存储速度场用于计算 λ
velocity_history = []
for n in range(N):
tn = n * dt
# 计算速度场 (同 FloPS)
vt = compute_velocity(x, tn, score_net, scheduler)
velocity_history.append(vt)
if n == 0:
# 第一步:简单欧拉积分
x = x + vt * dt
else:
# 自适应 λ 估计
dx = x - x_prev
dv = vt - velocity_history[-2]
lambda_n = np.dot(dx, dv) / (np.linalg.norm(dx) ** 2 + 1e-8)
# 高阶积分
a = 1 / (2 * lambda_n * dt) - 1 / (lambda_n * dt + 2)
b = lambda_n / 2 + 1 / (lambda_n * dt + 2)
x = (1 + a * lambda_n * dt) * x + b * dt * vt
x_prev = x
return x4. 实验结果
4.1 条件图像生成
| 方法 | 10 步 FID | 5 步 FID | 55 步 FID |
|---|---|---|---|
| DDIM | 12.34 | 24.56 | 4.23 |
| DPM-Solver++ | 6.78 | 15.89 | 3.87 |
| UniPC | 5.45 | 12.34 | 3.45 |
| A-FloPS | 3.21 | 6.78 | 2.15 |
4.2 文本到图像合成
A-FloPS 在 SDXL 等大规模模型上同样表现优异:
- 55 NFE 下达到 2.15 FID,显著超越 DPM-Solver++ 的 3.87
- 5 步生成即可获得语义对齐、细节清晰的高质量图像
- 在极低 NFE 场景下优势尤为明显
4.3 与原生流生成模型的兼容性
A-FloPS 的自适应机制不仅适用于重参数化的扩散模型,还可直接改善原生流匹配生成器:
- 在 Flow Matching 模型上应用 A-FloPS,速度场残差的时序变化被有效抑制
- 高阶积分精度得到恢复,采样效率显著提升
5. 技术优势
5.1 核心优势
- 无需训练:直接利用预训练权重,无需额外训练成本
- 即插即用:适用于任意噪声调度器或预测参数化的扩散模型
- 极低 NFE:5 步采样即可生成高质量样本
- 通用性强:同时改善扩散模型和原生流匹配模型
5.2 与现有方法对比
| 特性 | 知识蒸馏 | DDPM 加速器 | A-FloPS |
|---|---|---|---|
| 需要训练 | ✓ | ✗ | ✗ |
| 模型无关 | ✗ | ✓ | ✓ |
| 5 步质量 | 一般 | 较差 | 优秀 |
| 兼容性 | 差 | 良好 | 优秀 |
6. 代码实现要点
6.1 速度场计算
// C++ 实现:速度场计算
template <typename Scalar>
Vector<Scalar> compute_velocity(
const Vector<Scalar>& x, // 当前状态
Scalar t, // FM 时间
const ScoreNet& score_net, // Score 网络
const Scheduler& scheduler // 噪声调度器
) {
// 计算对应的扩散时间步 τ
Scalar sigma_T = scheduler.sigma_T();
Scalar alpha_bar_T = scheduler.alpha_bar_T();
Scalar t_min = 1.0 / (1.0 + sigma_T / alpha_bar_T);
Scalar tau, sigma_tau, alpha_bar_tau;
if (t < t_min) {
// 早期阶段:使用终态
tau = scheduler.T();
sigma_tau = sigma_T;
alpha_bar_tau = alpha_bar_T;
} else {
// 找到最接近的 τ
tau = scheduler.find_closest_tau(t);
sigma_tau = scheduler.sigma(tau);
alpha_bar_tau = scheduler.alpha_bar(tau);
}
// 计算 score
Vector<Scalar> score = score_net(
(alpha_bar_tau + sigma_T) * x, tau
);
// 应用 Diffusion-to-Flow 变换
Scalar coefficient = sigma_tau / (alpha_bar_tau * (1.0 - t));
return coefficient * (x + sigma_tau * score);
}6.2 自适应 λ 估计
template <typename Scalar>
Scalar estimate_lambda(
const Vector<Scalar>& x_prev,
const Vector<Scalar>& x_curr,
const Vector<Scalar>& v_prev,
const Vector<Scalar>& v_curr
) {
Vector<Scalar> dx = x_curr - x_prev;
Vector<Scalar> dv = v_curr - v_prev;
Scalar dx_norm_sq = dx.dot(dx);
if (dx_norm_sq < 1e-8) {
return 0.0; // 避免除零
}
return dx.dot(dv) / dx_norm_sq;
}7. 总结
A-FloPS 通过扩散到流匹配的重参数化和自适应速度分解两大创新,实现了扩散模型采样的高效加速。其核心贡献包括:
-
理论创新:建立了扩散 score 到流匹配速度的解析映射,揭示了流匹配高效采样的本质是轨迹的积分友好性
-
方法创新:自适应速度分解机制通过抑制残差时序变化,恢复高阶积分在低 NFE 场景下的精度优势
-
实用价值:无需训练的即插即用方案,可直接应用于任何预训练扩散模型
参考
Footnotes
-
Jin C, et al. A-FloPS: Accelerating Diffusion Models via Adaptive Flow Path Sampler. AAAI Conference on Artificial Intelligence, 2026. https://arxiv.org/abs/2509.00036 ↩ ↩2