扩散模型(Diffusion Model)介绍
- 介绍
- 示例代码
- 一、基本思想
- 二、前向扩散过程
- 三、反向扩散过程(生成过程)
- 四、训练目标(变分推理)
- 通过代入参数化的均值 $ \mu_\theta $,KL散度的计算可简化为: <span class="katex--display"> \mathcal{L}_t = \mathbb{E}_{x_0, \epsilon} \left[ \frac{\beta_t^2}{2\sigma_t^2 \alpha_t (1 - \alpha_t)} \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] </span> 在DDPM中,进一步忽略权重系数,得到最终的简化损失。
- 六、采样过程(推理)
- 七、扩展:条件生成 & 加速采样
- 八、变种与改进
- 九、优点与挑战
- 总结
- 扩展内容 (DDIM)
介绍
示例代码
扩散模型(Diffusion Model)是一类生成模型,其基本思想是通过模拟数据的逐步“扩散”与“去扩散”过程,学习数据分布,从而生成新的样本。扩散模型近年来在图像生成(如Stable Diffusion)等任务中表现出色。
一、基本思想
扩散模型包含两个阶段:
- 前向扩散过程(Forward Diffusion Process):逐步向原始数据添加高斯噪声,直到最终变为纯噪声。
- 反向生成过程(Reverse Diffusion Process):训练一个神经网络学会从噪声一步步“还原”出原始数据。
二、前向扩散过程
我们设训练样本为 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0∼q(x0),表示从真实数据分布中采样。
目标:将数据 ( x_0 ) 逐步添加高斯噪声,最终转化为纯噪声 ( x_T \sim \mathcal{N}(0, I) )。
数学描述:
-
马尔科夫链:
前向扩散过程是一个马尔科夫链,定义如下:
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(\mathbf{x}_{1:T} | \mathbf{x}_0) = \prod_{t=1}^{T} q(\mathbf{x}_t | \mathbf{x}_{t-1}) q(x1:T∣x0)=t=1∏Tq(xt∣xt−1) -
单步扩散:
每一步的噪声添加服从马尔可夫链,定义条件概率分布:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}\left(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t I\right) q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
其中 β t ∈ ( 0 , 1 ) \beta_t \in (0,1) βt∈(0,1) 是预设的噪声调度参数,控制噪声添加的速度。 x t \mathbf{x}_t xt 是第 t t t 步的加噪结果。 -
累积扩散(重参数化技巧):
由于该过程是线性高斯,我们可以直接从任意 x 0 x_0 x0采样到任意 x t x_t xt:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(\mathbf{x}_t | \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I}) q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
或者写为
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I)
其中:- α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt
- α ˉ t = ∏ s = 1 t α s \bar{\alpha}_t = \prod_{s=1}^{t} \alpha_s αˉt=∏s=1tαs,称为累积噪声因子。
这意味着我们可以一次性地从原始样本生成加噪版本 x t \mathbf{x}_t xt,而不需要逐步模拟。
三、反向扩散过程(生成过程)
目标:学习一个神经网络 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt−1∣xt),逐步从噪声 x T x_T xT 恢复原始数据 x 0 x_0 x0。
数学描述:
-
反向分布假设:
假设反向过程每一步服从高斯分布:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(x_{t-1} | x_t) = \mathcal{N}\left(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)\right) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
在简化模型(如DDPM)中,通常固定方差 Σ t = σ t 2 I \Sigma_t = \sigma_t^2 I Σt=σt2I,仅需学习均值 μ θ \mu_\theta μθ。 -
均值参数化:
通过推导,反向过程的均值可表示为:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α t ϵ θ ( x t , t ) ) \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \alpha_t}} \epsilon_\theta(x_t, t) \right) μθ(xt,t)=αt1(xt−1−αtβtϵθ(xt,t))
其中 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) 是神经网络预测的噪声。
四、训练目标(变分推理)
我们希望最大化对数似然 log p θ ( x 0 ) \log p_\theta(\mathbf{x}_0) logpθ(x0)。由于这个直接优化很困难,我们采用变分下界(ELBO)方法进行近似。
变分下界公式:
log p θ ( x 0 ) ≥ E q [ log p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = : L ELBO \log p_\theta(\mathbf{x}_0) \geq \mathbb{E}_{q}\left[ \log \frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T} | \mathbf{x}_0)} \right] =: \mathcal{L}_{\text{ELBO}} logpθ(x0)≥Eq[logq(x1:T∣x0)pθ(x0:T)]=:LELBO
展开后,得到:
L ELBO = E q [ ∑ t = 1 T D KL ( q ( x t ∣ x t − 1 ) ∥ p θ ( x t − 1 ∣ x t ) ) − log p θ ( x 0 ∣ x 1 ) ] \mathcal{L}_{\text{ELBO}} = \mathbb{E}_q\left[ \sum_{t=1}^T D_{\text{KL}}(q(\mathbf{x}_t | \mathbf{x}_{t-1}) \parallel p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t)) - \log p_\theta(\mathbf{x}_0 | \mathbf{x}_1) \right] LELBO=Eq[t=1∑TDKL(q(xt∣xt−1)∥pθ(xt−1∣xt))−logpθ(x0∣x1)]
这个目标由多个 KL 散度项构成,表示真实加噪过程与学习去噪过程之间的距离。
简化损失函数(DDPM 论文中的常用形式)
Ho et al. 在 DDPM(Denoising Diffusion Probabilistic Model)中提出了一种简化的训练目标,神经网络直接预测噪声 ϵ \boldsymbol{\epsilon} ϵ,训练损失为:
L simple = E x 0 , ϵ , t [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] \mathcal{L}_{\text{simple}} = \mathbb{E}_{\mathbf{x}_0, \epsilon, t} \left[ \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2 \right] Lsimple=Ex0,ϵ,t[∥ϵ−ϵθ(xt,t)∥2]
其中:
- x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1 - \alpha_t} \epsilon xt=αtx0+1−αtϵ
- ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathbf{I}) ϵ∼N(0,I)
- 神经网络 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 学习预测添加到数据上的噪声。
五、关键推导步骤
1. 前向过程的累积分布
从 $ x_0 $ 到 $ x_t $ 的累积扩散过程可表示为:
q
(
x
t
∣
x
0
)
=
N
(
x
t
;
α
t
x
0
,
(
1
−
α
t
)
I
)
q(x_t | x_0) = \mathcal{N}\left(x_t; \sqrt{\alpha_t} x_0, (1 - \alpha_t) I \right)
q(xt∣x0)=N(xt;αtx0,(1−αt)I)
推导:
通过递归应用
x
t
=
1
−
β
t
x
t
−
1
+
β
t
ϵ
t
−
1
x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1}
xt=1−βtxt−1+βtϵt−1,并利用高斯分布的叠加性质,最终得到闭式解。
2. 反向过程的KL散度
反向过程的目标是最小化
KL
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∥
p
θ
(
x
t
−
1
∣
x
t
)
)
\text{KL}(q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t))
KL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))。
通过分析,
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0) 也是一个高斯分布:
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
N
(
x
t
−
1
;
μ
~
(
x
t
,
x
0
)
,
β
~
t
I
)
q(x_{t-1}|x_t, x_0) = \mathcal{N}\left(x_{t-1}; \tilde{\mu}(x_t, x_0), \tilde{\beta}_t I \right)
q(xt−1∣xt,x0)=N(xt−1;μ~(xt,x0),β~tI)
其中:
μ
~
(
x
t
,
x
0
)
=
α
t
−
1
β
t
1
−
α
t
x
0
+
1
−
β
t
(
1
−
α
t
−
1
)
1
−
α
t
x
t
\tilde{\mu}(x_t, x_0) = \frac{\sqrt{\alpha_{t-1}} \beta_t}{1 - \alpha_t} x_0 + \frac{\sqrt{1 - \beta_t}(1 - \alpha_{t-1})}{1 - \alpha_t} x_t
μ~(xt,x0)=1−αtαt−1βtx0+1−αt1−βt(1−αt−1)xt
推导:
利用贝叶斯公式
q
(
x
t
−
1
∣
x
t
,
x
0
)
∝
q
(
x
t
∣
x
t
−
1
)
q
(
x
t
−
1
∣
x
0
)
q(x_{t-1}|x_t, x_0) \propto q(x_t|x_{t-1}) q(x_{t-1}|x_0)
q(xt−1∣xt,x0)∝q(xt∣xt−1)q(xt−1∣x0),结合高斯分布的乘积性质,可得均值和方差。
3. 损失函数的最终形式
通过代入参数化的均值 $ \mu_\theta $,KL散度的计算可简化为:
L
t
=
E
x
0
,
ϵ
[
β
t
2
2
σ
t
2
α
t
(
1
−
α
t
)
∥
ϵ
−
ϵ
θ
(
x
t
,
t
)
∥
2
]
\mathcal{L}_t = \mathbb{E}_{x_0, \epsilon} \left[ \frac{\beta_t^2}{2\sigma_t^2 \alpha_t (1 - \alpha_t)} \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right]
Lt=Ex0,ϵ[2σt2αt(1−αt)βt2∥ϵ−ϵθ(xt,t)∥2]
在DDPM中,进一步忽略权重系数,得到最终的简化损失。
六、采样过程(推理)
从高斯噪声 x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(0, \mathbf{I}) xT∼N(0,I) 开始,依次应用如下反向过程生成样本:
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z , z ∼ N ( 0 , I ) \mathbf{x}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(\mathbf{x}_t, t) \right) + \sigma_t \mathbf{z}, \quad \mathbf{z} \sim \mathcal{N}(0, \mathbf{I}) xt−1=αt1(xt−1−αˉt1−αtϵθ(xt,t))+σtz,z∼N(0,I)
其中 σ t \sigma_t σt 控制每步采样的随机性。
七、扩展:条件生成 & 加速采样
- 条件生成:如图像到图像、文本到图像生成(如Stable Diffusion),通过引入条件 y \mathbf{y} y,将网络变为 ϵ θ ( x t , t , y ) \epsilon_\theta(\mathbf{x}_t, t, \mathbf{y}) ϵθ(xt,t,y)。
- 加速采样:原始采样需要上百或上千步,后续如 DDIM(Denoising Diffusion Implicit Models)等提出加速采样方法。
八、变种与改进
1. DDPM(Denoising Diffusion Probabilistic Model)
- 原始扩散模型,提出于 2020 年;
- 采样慢,需上百步才能生成高质量图像。
2. DDIM(Denoising Diffusion Implicit Model)
- 改为确定性采样方式,加快生成速度,支持少步采样而保持质量。
3. Stable Diffusion
- 结合 CLIP、U-Net、VAE 和 Latent Diffusion 技术;
- 能在潜空间中进行扩散,大幅提升效率与图像质量。
九、优点与挑战
优点 | 缺点 |
---|---|
生成质量高(细节丰富) | 采样速度慢(需多步去噪) |
训练稳定(不易崩溃) | 对计算资源要求较高 |
易于与条件控制结合(如文本) | 理论理解相对复杂 |
总结
扩散模型是一种通过建模噪声添加与去除过程来学习数据分布的强大生成模型,具有如下优点:
- 生成质量高;
- 训练稳定;
- 可与其他条件灵活结合。
扩展内容 (DDIM)
DDIM(Denoising Diffusion Implicit Models) 是对经典扩散模型(如 DDPM)反向采样过程的一种加速改进方法,由 Jiaming Song et al. 于 2020 年提出。DDIM 允许在较少的时间步中实现高质量采样,采样过程可以是确定性的。
下面我们从 DDPM 出发,推导 DDIM 的核心公式。
🧩 一、DDPM 采样回顾
在 DDPM 中,采样过程使用的是如下的反向高斯过程:
x t − 1 ∼ N ( μ θ ( x t , t ) , Σ t ) \mathbf{x}_{t-1} \sim \mathcal{N}(\mu_\theta(\mathbf{x}_t, t), \Sigma_t) xt−1∼N(μθ(xt,t),Σt)
其中,已知:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon},\quad \boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I}) xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I)
神经网络模型 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 被训练来预测噪声 ϵ \boldsymbol{\epsilon} ϵ。
🚀 二、DDIM 推导目标
DDIM 目标是:
- 构造一种确定性采样过程(不需要随机采样)
- 允许在一个任意选定的时间步子集 { t 0 , t 1 , . . . , t N } \{t_0, t_1, ..., t_N\} {t0,t1,...,tN} 上生成数据
- 使用和 DDPM 相同的训练方法(噪声预测 MSE 损失)
📐 三、DDIM 的关键公式推导
我们从 x t \mathbf{x}_t xt 的解析式出发:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon} xt=αˉtx0+1−αˉtϵ
若已知模型预测了 ϵ θ ( x t , t ) \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) ϵθ(xt,t),我们可以从中重建原始图像 x 0 \mathbf{x}_0 x0:
x ^ 0 = 1 α ˉ t ( x t − 1 − α ˉ t ϵ θ ( x t , t ) ) \boxed{ \hat{\mathbf{x}}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \right) } x^0=αˉt1(xt−1−αˉtϵθ(xt,t))
🧠 构造从 x t \mathbf{x}_t xt 到 x t − 1 \mathbf{x}_{t-1} xt−1 的公式
DDIM 将从 x t \mathbf{x}_t xt 到 x t − 1 \mathbf{x}_{t-1} xt−1 的过程构造为:
x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 ϵ θ ( x t , t ) \boxed{ \mathbf{x}_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \hat{\mathbf{x}}_0 + \sqrt{1 - \bar{\alpha}_{t-1}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) } xt−1=αˉt−1x^0+1−αˉt−1ϵθ(xt,t)
这个式子是通过重构出的 x ^ 0 \hat{\mathbf{x}}_0 x^0 插回去得到的。
但为了保留一定的随机性,还可以加入一个可控参数 η ∈ [ 0 , 1 ] \eta \in [0, 1] η∈[0,1],控制采样的确定性程度,最终采样公式是:
x t − 1 = α ˉ t − 1 x ^ 0 + 1 − α ˉ t − 1 − η 2 σ t 2 ϵ θ ( x t , t ) + η σ t z \boxed{ \mathbf{x}_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \hat{\mathbf{x}}_0 + \sqrt{1 - \bar{\alpha}_{t-1} - \eta^2 \sigma_t^2} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) + \eta \sigma_t \boldsymbol{z} } xt−1=αˉt−1x^0+1−αˉt−1−η2σt2ϵθ(xt,t)+ησtz
其中:
- σ t 2 = 1 − α ˉ t − 1 1 − α ˉ t β t \sigma_t^2 = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t σt2=1−αˉt1−αˉt−1βt
- z ∼ N ( 0 , I ) \boldsymbol{z} \sim \mathcal{N}(0, \mathbf{I}) z∼N(0,I)
若设 η = 0 \eta = 0 η=0,该过程完全确定性,即为 DDIM 的核心采样方式。
💡 四、DDIM 总结(采样算法)
给定时间步序列 t 0 = T > t 1 > ⋯ > t N = 0 t_0 = T > t_1 > \cdots > t_N = 0 t0=T>t1>⋯>tN=0,设定噪声调度表 α ˉ t \bar{\alpha}_t αˉt,采样过程如下:
-
采样初始噪声: x t 0 ∼ N ( 0 , I ) \mathbf{x}_{t_0} \sim \mathcal{N}(0, \mathbf{I}) xt0∼N(0,I)
-
对每个时间步 t i → t i − 1 t_i \to t_{i-1} ti→ti−1,执行:
- 计算 x ^ 0 \hat{\mathbf{x}}_0 x^0
- 更新 x t i − 1 \mathbf{x}_{t_{i-1}} xti−1 使用 DDIM 公式
📌 五、DDPM 与 DDIM 的区别
特性 | DDPM | DDIM |
---|---|---|
采样 | 随机采样 | 确定性或可控噪声 |
速度 | 慢(需上百步) | 快(几十步可生成) |
训练 | 噪声预测 MSE | 与 DDPM 相同 |
参数 | 需固定调度表 | 可自定义步数调度 |