Euler

Euler & Heun: The Foundation of Solvers

回归本源

在 DPM-Solver 等复杂的高阶求解器统治 Diffusion 圈子两年后,随着 Flow Matching (SD3, FLUX.1) 的兴起,最古老、最简单的 Euler 方法 重新夺回了王座。 这是一个“大道至简”的故事。

1. Euler Method (欧拉法)

1.1 数学原理 (1st Order ODE)

这是求解微分方程 $dx/dt = v(x, t)$ 最基础的方法。 它的思想非常直观:假设在一小段步长 $\Delta t$ 内,速度 $v$ 是恒定不变的。

$$ x_{t-1} = x_t - \Delta t \cdot v_\theta(x_t, t) $$
  • 几何意义: 沿着当前点的切线方向走一步。
  • 误差: 局部截断误差是 $O(\Delta t^2)$。如果曲线弯曲得很厉害,Euler 法会很快偏离轨道(这就是老一代 SD 模型不用它的原因)。

1.2 为什么在 FLUX/SD3 中它是 SOTA?

因为 Rectified Flow 技术改变了游戏规则。

  • 传统的 Diffusion 路径是弯曲的 (Curved),用直线拟合曲线误差大。
  • Rectified Flow 强制训练模型走出一条直线 (Straight Path)
  • 结论: 如果路径本身就是直线,那么切线就是路径本身!此时 Euler 法没有任何近似误差(除了离散化本身),它变成了完美求解器。这就是为什么 FLUX.1 只需要 Euler。

2. Euler Ancestral (Euler a)

2.1 SDE 的欧拉法

Euler a 是 SDE (随机微分方程) 的离散化求解。 它的每一步分为两个动作:

  1. Denoise (去噪): 先用 Euler 方法指向 $x_0$ 的方向移动,算出一个“确定性预测值”。
  2. Noise Injection (注噪): 根据调度表 $\sigma_t$,在预测值上加一点高斯噪声。
$$ x_{t-1} = x_{t-1}^{\text{Euler}} + \sigma_t \cdot \epsilon $$

2.2 特性

  • 由于每一步都加噪声,轨迹具有随机性
  • 不收敛 (Non-convergent): 即使步数无限增加,画面也不会定格,而是在一个合理的图像分布范围内游走。
  • 听觉/视觉比喻: 就像录磁带时的“底噪”,这种随机性给图像增加了一种有机的、非人工的质感(Result feels less “plastic”)。

3. Heun Method (改进的欧拉)

3.1 预估-校正 (Predictor-Corrector)

Heun 是 2阶 ODE 求解器。它试图修正 Euler “只看脚下”的短视。 它走两步:

  1. Predict (预估): 先用 Euler 假装走一步,到达试探点 $x'_{t-1}$。
  2. Observe (观测): 看看试探点 $x'_{t-1}$ 那里的速度是多少?
  3. Correct (修正): 取“起点速度”和“终点速度”的平均值,作为这一步真正的速度。
$$ v_{\text{avg}} = \frac{v(x_t) + v(x'_{t-1})}{2} $$

$$ x_{t-1} = x_t - \Delta t \cdot v_{\text{avg}} $$

3.2 优缺点

  • 更准: 能够更好地拟合弯曲路径。
  • 更慢: 也就是常说的 NFE = 2 (Number of Function Evaluations)。每走一步时间 $t$(Sampler Step),通常需要跑两次 U-Net。也就是设置 20 步,实际要等 40 步的时间。

4. 总结

方法核心逻辑适合场景备注
Euler走切线 (直线)Flow Matching (FLUX, SD3)路径越直,它越强
Euler a走切线 + 撒点土Creative Art, Anime增加随机纹理和细节
Heun走两步取平均传统 Diffusion (SD1.5)比 Euler 准,但慢一倍