扩散模型 (Diffusion Models) 是一种生成模型,通过模拟数据从噪声到目标分布的逐渐变化过程来生成数据。它们的理论基础来自随机微分方程 (SDE) 和马尔科夫链。这些模型的关键在于定义一个正向扩散过程 (forward diffusion process) 和一个逆向生成过程 (reverse generation process)。我们可以一步步推导其理论。
Dissuision Model
- 1. 正向扩散过程 (Forward Diffusion Process)
- 1. 正向扩散过程的公式
- 2. 一步正向扩散解释
- 3. 多步正向扩散公式
- 4. 正向过程的直观解释
- 5. 总结
- 2. 逆向扩散过程 (Reverse Diffusion Process)
- 1. 逆向扩散过程的目标
- 2. 逆向扩散过程的步骤
- 3. 逆向过程的训练目标
- KL 散度最小化
- 4. 直接噪声预测 (Noise Prediction)
- 5. 简化的训练损失 (Simple Loss)
- 6. 总结
- 4. 参数化与训练
- 5. 总结
1. 正向扩散过程 (Forward Diffusion Process)
1. 正向扩散过程的公式
给定初始数据 x 0 \mathbf{x}_0 x0(通常是图像或其他形式的输入数据),在每一步时间 t t t 都会向数据中加入一个小量的噪声,直到达到时间 T T T,此时的数据 x T \mathbf{x}_T xT 接近一个标准的高斯噪声分布。整个过程可以表示为一个条件概率:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}) q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
其中, N \mathcal{N} N 表示高斯分布, β t \beta_t βt 是控制在第 t t t 步添加噪声的量, I \mathbf{I} I 是单位矩阵。
- x t \mathbf{x}_t xt 是时间步 t t t 的数据(带有一定噪声)。
- x t − 1 \mathbf{x}_{t-1} xt−1 是时间步 t − 1 t-1 t−1 的数据。
- β t \beta_t βt 是随时间变化的噪声系数(称为噪声调度)。
这个公式表示,在每个时间步 t t t, x t \mathbf{x}_t xt 是由 x t − 1 \mathbf{x}_{t-1} xt−1 加入了一定量的噪声之后得到的。这是一种马尔科夫过程,因为 x t \mathbf{x}_t xt 仅依赖于 x t − 1 \mathbf{x}_{t-1} xt−1,不依赖于更早的时间步。
2. 一步正向扩散解释
在第 t t t 步时,新的数据 x t \mathbf{x}_t xt 是通过从上一时间步 t − 1 t-1 t−1 的数据 x t − 1 \mathbf{x}_{t-1} xt−1 中采样得到的,具体公式为:
x t = 1 − β t x t − 1 + β t ϵ t \mathbf{x}_t = \sqrt{1 - \beta_t} \mathbf{x}_{t-1} + \sqrt{\beta_t} \epsilon_t xt=1−βtxt−1+βtϵt
其中, ϵ t \epsilon_t ϵt 是从标准正态分布 N ( 0 , I ) \mathcal{N}(0, \mathbf{I}) N(0,I) 采样的噪声。
- 1 − β t \sqrt{1 - \beta_t} 1−βt 控制了原始数据 x t − 1 \mathbf{x}_{t-1} xt−1 在生成数据 x t \mathbf{x}_t xt 中的权重,随着时间步数增加,这个项逐渐减小。
- β t \sqrt{\beta_t} βt 控制了添加噪声的权重,随着时间的增加,这个项逐渐增大。
当 t t t 趋近于 T T T 时,噪声的权重 β t \sqrt{\beta_t} βt 趋近于 1,原始数据的权重 1 − β t \sqrt{1 - \beta_t} 1−βt 趋近于 0,这意味着 x T \mathbf{x}_T xT 几乎完全是噪声。
3. 多步正向扩散公式
通过多次应用上述一步的过程,可以将数据逐渐扩散成噪声。多步扩散可以直接表达为从 x 0 \mathbf{x}_0 x0 到 x t \mathbf{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)
其中, α ˉ t \bar{\alpha}_t αˉt 是前 t t t 个时间步中噪声缩减的累计乘积:
α ˉ t = ∏ i = 1 t ( 1 − β i ) \bar{\alpha}_t = \prod_{i=1}^t (1 - \beta_i) αˉt=i=1∏t(1−βi)
这个公式表明,给定最初的数据 x 0 \mathbf{x}_0 x0,我们可以直接在时间步 t t t 上采样得到 x t \mathbf{x}_t xt,而不必一步一步地计算整个过程。
- α ˉ t \sqrt{\bar{\alpha}_t} αˉt 表示数据 x 0 \mathbf{x}_0 x0 在 x t \mathbf{x}_t xt 中的剩余成分,随着 t t t 增加,这个成分越来越小。
- 1 − α ˉ t 1 - \bar{\alpha}_t 1−αˉt 表示噪声在 x t \mathbf{x}_t xt 中的成分,随着 t t t 增加,这个成分越来越大。
4. 正向过程的直观解释
- 在时间 t = 0 t = 0 t=0 时,数据 x 0 \mathbf{x}_0 x0 是干净的,没有噪声。
- 随着时间 t t t 增加,噪声 ϵ t \epsilon_t ϵt 的贡献越来越大,原始数据 x 0 \mathbf{x}_0 x0 的信息逐渐丧失。
- 到时间 T T T 时,数据 x T \mathbf{x}_T xT 几乎完全是噪声,原始信息基本丢失。
5. 总结
正向扩散过程通过逐渐添加噪声,将原始数据转换成高斯噪声。每一步的变化是通过一个条件概率公式来描述的,其中噪声的强度由 β t \beta_t βt 控制,随着时间步 t t t 增加,噪声的占比逐渐增大。多步扩散可以通过累积噪声来直接表示,将正向扩散过程的复杂性大大简化。
2. 逆向扩散过程 (Reverse Diffusion Process)
生成数据的过程则是从纯噪声 x T \mathbf{x}_T xT 开始,逐步去噪,直到恢复为一个合成的数据样本 x 0 \mathbf{x}_0 x0。逆过程的目标是找到每一步的条件概率 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) pθ(xt−1∣xt),使得我们能够从噪声中逐渐生成逼真的数据。
根据贝叶斯定理,逆扩散过程的条件概率为:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_t, t), \Sigma_\theta(\mathbf{x}_t, t)) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
其中, μ θ \mu_\theta μθ 和 Σ θ \Sigma_\theta Σθ 是需要通过神经网络参数化并学习的均值和方差。
逆向扩散过程是扩散模型中用于生成数据的关键部分。它从一个纯噪声样本(通常是高斯噪声)开始,逐步去噪,最终恢复出与真实数据相似的样本。该过程是正向扩散过程的逆过程,通过一个训练好的模型来预测每一步的去噪数据。
1. 逆向扩散过程的目标
正向扩散过程逐步向数据添加噪声,最终将数据破坏成噪声。而逆向扩散过程的目标是从噪声开始,逐步去掉噪声,恢复数据。这个过程是从时间 T T T 开始逐步减少噪声,直到时间 t = 0 t=0 t=0 时生成真实数据 x 0 \mathbf{x}_0 x0。
逆向扩散过程建模为从 x t \mathbf{x}_t xt 生成 x t − 1 \mathbf{x}_{t-1} xt−1 的条件概率:
p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) pθ(xt−1∣xt)
其中, θ \theta θ 是我们希望通过训练得到的模型参数。该条件概率同样假设为高斯分布:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_t, t), \Sigma_\theta(\mathbf{x}_t, t)) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
- μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t) 是时间步 t t t 时从数据 x t \mathbf{x}_t xt 生成 x t − 1 \mathbf{x}_{t-1} xt−1 的均值,由神经网络模型输出。
- Σ θ ( x t , t ) \Sigma_\theta(\mathbf{x}_t, t) Σθ(xt,t) 是时间步 t t t 时生成的方差,可以是一个可学习的参数,或者直接固定。
2. 逆向扩散过程的步骤
逆向扩散过程的每一步都是在给定当前时间步 t t t 的数据 x t \mathbf{x}_t xt 时,去噪并生成前一时间步的数据 x t − 1 \mathbf{x}_{t-1} xt−1。这个过程通过模型预测出每一步的均值和方差,并采样得到下一步的数据。
对于每一步 t t t 到 t − 1 t-1 t−1,我们使用以下公式:
x t − 1 = μ θ ( x t , t ) + σ t ϵ \mathbf{x}_{t-1} = \mu_\theta(\mathbf{x}_t, t) + \sigma_t \epsilon xt−1=μθ(xt,t)+σtϵ
其中:
- μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t) 是神经网络模型预测的去噪均值。
- σ t \sigma_t σt 是噪声的标准差,通常与正向扩散过程中的方差 β t \beta_t βt 有关,可以设定为 σ t 2 = β t \sigma_t^2 = \beta_t σt2=βt 或者其他简单的函数。
- ϵ \epsilon ϵ 是从标准正态分布中采样的噪声 N ( 0 , I ) \mathcal{N}(0, \mathbf{I}) N(0,I)。
这个公式表明, x t − 1 \mathbf{x}_{t-1} xt−1 是由当前时间步的数据 x t \mathbf{x}_t xt 加上少量噪声生成的,模型的主要任务就是预测出去噪的均值 μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t),从而尽可能恢复出真实数据。
3. 逆向过程的训练目标
为了能够正确预测每一步的去噪均值 μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t),我们需要一个训练目标。在训练时,扩散模型通过最小化真实的逆向过程 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt−1∣xt) 和模型预测的 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt−1∣xt) 之间的差异来学习。这种差异通常使用变分下界 (Variational Lower Bound, VLB) 来衡量。
KL 散度最小化
模型的训练目标是最小化每一步的Kullback-Leibler (KL) 散度:
L t = D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) L_t = D_{\text{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \parallel p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)) Lt=DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))
- q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt−1∣xt,x0) 是正向扩散过程中的真实后验分布,即真实数据逐步扩散成噪声时,在时间 t − 1 t-1 t−1 时的分布。
- p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt−1∣xt) 是模型逆向过程中的预测分布,即模型从噪声去噪时预测的每一步的分布。
通过最小化这个KL散度,模型会逐步学习到如何在每一步准确地去噪。
4. 直接噪声预测 (Noise Prediction)
在实际操作中,模型往往不直接预测每一步的均值 μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t),而是预测正向扩散过程中加入的噪声 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t)。我们可以通过从正向扩散的公式中推导出 μ θ \mu_\theta μθ,并将其表示为噪声的函数:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_\theta(\mathbf{x}_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(\mathbf{x}_t, t) \right) μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))
这里的 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 是模型预测的噪声,即神经网络输出的噪声估计值。
5. 简化的训练损失 (Simple Loss)
在很多实现中,扩散模型的训练通过一个简化的损失函数来进行,即直接最小化预测噪声与实际噪声的差异。这个简化的损失函数为:
L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] L_{\text{simple}} = \mathbb{E}_{t, \mathbf{x}_0, \epsilon} \left[ \|\epsilon - \epsilon_\theta(\mathbf{x}_t, t)\|^2 \right] Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
其中:
- ϵ \epsilon ϵ 是正向扩散过程中的噪声,已经知道。
- ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 是模型预测的噪声。
这个损失函数的目标是使模型输出的噪声 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 尽可能接近真实的噪声 ϵ \epsilon ϵ,从而模型可以学会如何从噪声中逐步生成真实数据。
6. 总结
逆向扩散过程的核心是从噪声逐步去噪并生成数据。每一步的生成可以表示为从一个高斯分布中采样,其中均值由神经网络模型预测。通过最小化真实数据和模型预测之间的KL散度,或者直接最小化噪声预测误差,模型可以学会如何通过逐步去噪恢复出高质量的数据。
完整的逆向扩散过程示意图如下:
p θ ( x T − 1 ∣ x T ) → p θ ( x T − 2 ∣ x T − 1 ) → ⋯ → p θ ( x 0 ∣ x 1 ) p_\theta(\mathbf{x}_{T-1} | \mathbf{x}_T) \rightarrow p_\theta(\mathbf{x}_{T-2} | \mathbf{x}_{T-1}) \rightarrow \dots \rightarrow p_\theta(\mathbf{x}_0 | \mathbf{x}_1) pθ(xT−1∣xT)→pθ(xT−2∣xT−1)→⋯→pθ(x0∣x1)
最终从 x T \mathbf{x}_T xT(纯噪声)生成出 x 0 \mathbf{x}_0 x0(合成数据)。
4. 参数化与训练
为了让逆扩散过程的均值和方差 μ θ , Σ θ \mu_\theta, \Sigma_\theta μθ,Σθ 逼近真实分布,扩散模型通常通过深度神经网络来预测均值 μ θ \mu_\theta μθ,并且方差 Σ θ \Sigma_\theta Σθ 通常被固定为常数或者简单的时间相关函数。
训练过程的核心目标是最小化噪声预测误差。
L simple = E x 0 , ϵ , t [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] L_{\text{simple}} = \mathbb{E}_{\mathbf{x}_0, \epsilon, t} \left[ \|\epsilon - \epsilon_\theta(\mathbf{x}_t, t)\|^2 \right] Lsimple=Ex0,ϵ,t[∥ϵ−ϵθ(xt,t)∥2]
其中 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_t, t) ϵθ(xt,t) 是模型的输出, ϵ \epsilon ϵ 是我们添加的噪声。
5. 总结
扩散模型的理论推导基于两个主要过程:正向扩散过程和逆向生成过程。正向过程通过向数据逐步添加噪声,将其转化为高斯噪声,而逆向过程则通过逐步去噪,生成与真实数据一致的样本。通过最小化逆向过程中的误差或KL散度,模型可以学习到如何从噪声生成高质量的样本。
这个模型在图像生成等任务中表现优异,已经被广泛应用于如Denoising Diffusion Probabilistic Models (DDPM) 和 DALL·E 等生成系统中。