Samplers

Diffusion Samplers (Solvers) 详解

一句话概括

如果把生成图片比作下山(从高噪声山顶到无噪声平地):

  • Model 是向导,告诉你当前脚下的坡度(梯度)。
  • Scheduler 是地图,规划了路线的长短和陡峭程度(时间 step 的分布)。
  • Sampler 是走路的方式:是小碎步走直线(Euler)、还是看一步走一步(Heun)、还是参考之前的步伐跨大步(DPM++)。
  • Sampler 是走路的方式:是小碎步走直线(Euler)、还是看一步走一步(Heun)、还是参考之前的步伐跨大步(DPM++)。

0. 发展演变路线 (Evolution Timeline)

Sampler 的发展几乎就是一部 “追求速度与质量平衡” 的历史:

  1. 开荒时代 (2020): DDPM。作为祖师爷,必须走满 1000 步 Markov Chain,慢到令人发指。
  2. 加速时代 (2020 late): DDIM。发现可以用 ODE 描述扩散,支持跳步 (Skip steps)。20-50 步出图成为可能。
  3. 高阶求解时代 (2022): DPM-Solver / DPM++。引入数学上的高阶 ODE 求解器,用更聪明的方式拟合曲线。进一步压缩到 20 步以内。
  4. 随机性回归 (2022 late): DPM++ SDE。发现纯 ODE 生成的图太“油”,重新把 SDE 的随机噪声加回来,为了更好的细节和写实感。
  5. 蒸馏时代 (2023): LCM / Turbo。不再只靠 Sampler 努力,而是让模型自己“跳级”。通过蒸馏 (Distillation),让模型学会 4 步甚至 1 步出图。
  6. 直线回归时代 (2024 - Now): Flow Matching (Euler)。FLUX.1 和 SD3 出现。只要路径训练得足够直,最简单的 Euler 反而是最好的。我们又回到了原点,但这次是螺旋上升。

1. Sampler 的核心分类逻辑

我们可以根据两个维度对 Samplers 进行分类:

A. 确定性 vs 随机性 (ODE vs SDE)

  • ODE Solvers (常微分方程求解器):
    • 代表: Euler, Heun, DPM++ 2M, DDIM
    • 特点: 确定性。给定相同的种子(Seed)和相同的初始噪声,无论跑多少次,每一步的轨迹都完全一样。收敛性好。
    • 用途: 视频生成(不闪烁)、图生图(变化可控)、Inpainting。
  • SDE Solvers / Ancestral (随机微分方程求解器):
    • 代表: Euler a (Ancestral), DPM++ 2M SDE, DPM++ SDE
    • 特点: 随机性。每走一步,都会算完去噪后,额外再注入一点新的随机噪声 ($x_{t-1} = \text{Denoise}(x_t) + \sigma \cdot z$)。
    • 用途: 创造性生成、补充细节(如皮肤纹理、毛发)。如果不加噪声,图像往往会趋于“平均化”而显得平滑(Plastic look)。

B. 阶数 (Order)

  • 一阶 (1st Order): Euler, DDIM. 简单粗暴,仅利用当前梯度线性外推。速度快,但步长大了误差大。
  • 二阶/高阶 (High Order): Heun, DPM++. 利用了历史梯度信息或预判未来梯度,拟合更准确的曲线。可以用更少的步数(Steps)达到高质量。

2. 常用 Sampler 深度解析

(1) Euler (欧拉法)

  • 类型: 1st Order ODE
  • 逻辑: 最简单的线性外推:$x_{t-1} \approx x_t - \Delta t \cdot \text{Model}(x_t)$。
  • 特点:
    • 计算量最小(1 NFE/step)。
    • Flow Matching 时代的王者: 对于 FLUX.1, SD3,因为它们的路径被训练成了直线(Rectified Flow),用最简单的 Euler 走直线效果最好且最快。

(2) Euler Ancestral (Euler a)

  • 类型: 1st Order SDE
  • 逻辑: 先用 Euler 算出“干净”的 $x_{t-1}$,然后把上一帧的噪声并没有完全减干净,而是减一部分,再加一部分新的随机噪声进去。
  • 特点: 不收敛(步数越多画面一直在变),但艺术感强,适合二次元或需要朦胧感的场景。

(3) DPM++ 2M (DPM-Solver++ 2M)

  • 类型: 2nd Order ODE (Multistep)
  • 逻辑: **多步(Multistep)**思想。在计算 $t \to t-1$ 时,利用历史动量(Momentum,即 $t+1$ 时刻的斜率)来拟合曲线。
  • 特点:
    • 极快且稳: SDXL 和 SD1.5 的默认首选。20-30 步就能获得极高质量。
    • 收敛性极好,增加步数画面只会变锐利,构图稳定。

(4) DPM++ 2M SDE

  • 类型: 2nd Order SDE (Multistep + Stochastic)
  • 逻辑: 结合了 DPM++ 2M 的精准轨迹拟合,同时在每一步末尾引入了布朗运动噪声。
  • 特点: 目前最强写实采样器。兼顾了生成的稳定性和细节的丰富度(胶片颗粒感、皮肤毛孔)。

3. 可视化原理解析

假设我们要从 $x_t$ 走到 $x_{t-1}$:

Euler (直男走路)

graph LR
    A[起点 Xt] -->|看一眼梯度| B[计算方向]
    B -->|直接迈一步| C[终点 Xt-1]

Heun (谨慎走路 / Predictor-Corrector)

graph LR
    A[起点 Xt] -->|看梯度| B[预判一步到 X']
    B -->|在 X' 处再看一次梯度| C[修正方向]
    C -->|取平均方向迈步| D[终点 Xt-1]

(注:Heun 会导致计算量翻倍,慢)

DPM++ 2M (老司机走路)

graph LR
    A[起点 Xt] -->|看当前梯度| B[结合上一步的动量]
    B -->|拟合曲线| C[精准滑行到 Xt-1]

4. 总结:如何选择?

Sampler 名称类别推荐场景备注
EulerODE (1阶)FLUX.1, SD3, 快速预览Flow Matching 首选,直线路径无需复杂拟合
Euler aSDE (1阶)创意插画, 二次元画面随步数变化,不收敛,有随机美感
DPM++ 2MODE (2阶)SDXL, SD1.5 通用最稳,视频生成必备,20-30步即可
DPM++ 2M SDESDE (2阶)写实人像, 高精摄影细节最丰富,稍慢,适合追求质感
DDIMODE (1阶)Inpainting, 视频一致性早期采样器,现在用得少了
LCM / TurboDistilled实时生成 (4-8步)需配合特定 LoRA 或模型
Flow Matching 特别提示

如果你在玩 FLUX.1Stable Diffusion 3请把之前的经验忘掉,无脑选 Euler(或者 Simple)。 因为这些新模型的数学假设就是“直的”,不需要 DPM++ 这种复杂的曲线拟合器,用了反而会画蛇添足产生伪影或变慢。