概述

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++)的加速主要依赖两个机制:

  1. 使用高阶展开提高数值精度
  2. 利用估计量的时间不变性进行外推

然而在流匹配框架中,速度场沿轨迹仅有弱时序变化,使得机制 (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 x

3.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 x

4. 实验结果

4.1 条件图像生成

方法10 步 FID5 步 FID55 步 FID
DDIM12.3424.564.23
DPM-Solver++6.7815.893.87
UniPC5.4512.343.45
A-FloPS3.216.782.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 核心优势

  1. 无需训练:直接利用预训练权重,无需额外训练成本
  2. 即插即用:适用于任意噪声调度器或预测参数化的扩散模型
  3. 极低 NFE:5 步采样即可生成高质量样本
  4. 通用性强:同时改善扩散模型和原生流匹配模型

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 通过扩散到流匹配的重参数化自适应速度分解两大创新,实现了扩散模型采样的高效加速。其核心贡献包括:

  1. 理论创新:建立了扩散 score 到流匹配速度的解析映射,揭示了流匹配高效采样的本质是轨迹的积分友好性

  2. 方法创新:自适应速度分解机制通过抑制残差时序变化,恢复高阶积分在低 NFE 场景下的精度优势

  3. 实用价值:无需训练的即插即用方案,可直接应用于任何预训练扩散模型

参考

Footnotes

  1. 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