扩散模型调度器(Scheduler)
以下是关于 扩散模型调度器(Scheduler) 的详细解析,涵盖其核心原理、作用机制及在生成过程中的关键角色:
1. 调度器的核心原理
(1) 扩散过程与逆向去噪
-
前向扩散:
通过逐步添加高斯噪声,将数据 x0 转化为纯噪声 xT,遵循马尔可夫链:
xt=αtxt−1+1−αtϵ,ϵ∼N(0,I)
其中 αt 是噪声衰减系数(由beta_schedule
控制)。 -
逆向去噪:
学习一个神经网络(如UNet)预测噪声 ϵθ(xt,t),逐步从 xT 恢复 x0。
调度器负责 定义如何利用预测噪声更新样本:
xt−1=SchedulerStep(xt,ϵθ,t)
(2) 不同调度器的数学基础
调度器类型 | 数学原理 | 更新公式示例(简化) |
---|---|---|
DDIM | 确定性ODE求解(非马尔可夫) | xt−1=αt−1(αtxt−1−αtϵθ)+1−αt−1ϵθ |
DDPM | 随机SDE求解(含高斯噪声) | xt−1=αt1(xt−1−αˉt1−αtϵθ)+σtz |
DPM-Solver++ | 高阶自适应ODE求解(龙格-库塔法) | xt−1=xt+6Δt(k1+4k2+k3)(三阶) |
LMSDiscrete | 线性多步法(数值稳定性优化) | xt−1=xt+Δt⋅∑i=0kwiϵθ(xt−i,t−i) |
2. 调度器的核心作用
调度器是扩散模型的时间步管理器,控制噪声的添加与去除过程,主要功能包括:
-
定义噪声计划:规划从数据到噪声的退化过程(前向扩散)及逆过程(反向生成)
-
控制采样步数:平衡生成速度与质量(如15步快速生成 vs 50步高质量生成)
-
数值稳定性保障:防止梯度爆炸/消失,确保收敛
(1) 控制噪声计划
-
beta_schedule
:定义噪声如何随时间步增加(如linear
、scaled_linear
、squaredcos_cap_v2
)。- 线性计划:简单但可能在高噪声区过度平滑。
- 余弦计划:更接近自然信号衰减,适合高分辨率生成(SDXL默认)。
(2) 平衡速度与质量
调度器 | 典型步数 | 适用场景 | 特点 |
---|---|---|---|
DDIM | 50-100 | 通用生成 | 确定性生成,适合调试 |
DPM-Solver++ (2阶) | 15-20 | 快速高质量生成 | 高阶收敛,Karras噪声计划 |
EulerDiscrete | 30-50 | 轻量级任务 | 简单但需要更多步数 |
(3) 支持条件控制
- CFG集成:调度器需兼容分类器自由引导(CFG)的噪声混合操作:
ϵcfg=ϵuncond+γ(ϵcond−ϵuncond)
其中 γ 是guidance_scale
。
(4) 数值稳定性处理
- 阈值裁剪(
thresholding
):防止生成过饱和像素。 - 信噪比缩放(
rescale_betas_zero_snr
):避免极低信噪比下的数值问题。