在深度学习领域,扩散模型(Diffusion Models)近年来受到了广泛的关注,特别是在图像生成领域。本文将深入探讨扩散模型中的核心组件之一——Noise Scheduler,以及其在生成高质量图像过程中的作用。
Diffusers库中的Schedulers
Diffusion模型的实现依赖于两个核心组件:模型(models)和调度器(schedulers)。Diffusers库提供了丰富的模型和调度器实现,用于构建和训练扩散模型。
扩散模型的通用流程
在训练过程中,扩散模型首先生成一个与输入图像相同尺寸的噪声图像。在每个时间步(timestep),模型会预测噪声残差,然后调度器根据预测出的噪声残差生成一张噪声较少的图像。这个过程会重复进行,直到达到预设的最大时间步,最终生成一张高质量的图像。
Scheduler与PyTorch Scheduler的区别
在扩散模型中,Scheduler是一个采样器,用于将噪声图像还原为原始图像。而在PyTorch中,Scheduler通常指的是学习率调整策略,如余弦退火策略或指数衰减策略。
核心Schedulers原理
1. DDPM (Denoising Diffusion Probabilistic Models)
DDPM是扩散模型的一个经典实现,其模型和调度器对应于论文中的两个算法。
Model学习
模型的学习对应于算法1:
加噪过程可以表示为:
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon
xt=αˉtx0+1−αˉtϵ
其中, α ˉ t \bar{\alpha}_t αˉt 是人为设置的超参数序列,随着时间步 t t t的增加而减小。 α t \alpha_t αt 由 β t \beta_t βt 得到, α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt。 β 1 , β 2 , ⋯ , β T \beta_1, \beta_2, \cdots, \beta_T β1,β2,⋯,βT 是超参数,随着 t t t 的增大, β t \beta_t βt 逐步变大, α ˉ t \bar{\alpha}_t αˉt 逐步变小。
预测的噪声为:
ϵ
θ
(
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
,
t
)
\epsilon_{\theta}(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t)
ϵθ(αˉtx0+1−αˉtϵ,t)
与模型参数
θ
\theta
θ 相关,
t
t
t 代表当前的时间步。
Scheduler设计
Scheduler的设计对应于算法2:
训练好的模型从最后一个时刻 T T T 开始,传入一个纯噪声图像,逐步进行去噪,从 x t x_t xt 推出 x t − 1 x_{t-1} xt−1。
去噪过程可以表示为:
x
t
−
1
=
1
α
t
(
x
t
−
β
t
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
)
x_{t-1} = \frac{1}{\sqrt{\alpha_{t}}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_{t}}} \epsilon_{\theta}(x_t, t) \right)
xt−1=αt1(xt−1−αˉtβtϵθ(xt,t))
其中, σ t z \sigma_t \mathbf{z} σtz 是为了增加推理中的随机性而额外增加的项,类似于GPT中为了增加回答多样性而引入的随机选择方法。
σ t 2 = ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t \sigma_t^2 = \frac{(1-\alpha_t)(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t} σt2=1−αˉt(1−αt)(1−αˉt−1)
在DDPM论文中,已通过实验证明可以使用 σ t 2 = β t \sigma_t^2 = \beta_t σt2=βt,因此源码中也选用了后者。
总结
通过上述分析,我们可以看到Noise Scheduler在扩散模型中扮演着至关重要的角色。它不仅负责将噪声图像逐步还原为原始图像,还通过引入随机性来增加生成图像的多样性。DDPM作为扩散模型的一个经典实现,其模型和调度器的设计为我们提供了深入理解扩散模型的窗口。