简介
DDPM(Denoising Diffusion Probabilistic Models)是一种基于逐步加噪和去噪的生成模型,近年来在图像生成任务中表现卓越。
1. 核心思想
DDPM 的核心思想是通过一个正向扩散过程将数据分布逐步转化为高斯噪声分布,然后通过一个逆向去噪过程从高斯噪声生成数据。这个过程可以分为以下两部分:
- 正向扩散(Forward Diffusion):逐步向数据加入噪声,使其变得接近标准高斯分布。
- 逆向扩散(Reverse Diffusion):学习从噪声逐步去噪,恢复到原始数据。
2. 正向扩散过程
2.1 正向扩散的定义
正向扩散过程通过 T T T 个时间步将原始数据 x 0 x_0 x0 转化为接近标准高斯分布的噪声 x T x_T xT。每一步通过一个条件高斯分布实现:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t ⋅ x t − 1 , β t ⋅ I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} \cdot x_{t-1}, \beta_t \cdot \mathbf{I}) q(xt∣xt−1)=N(xt;1−βt⋅xt−1,βt⋅I)
其中:
- β t ∈ ( 0 , 1 ) \beta_t \in (0, 1) βt∈(0,1):时间步 t t t 的噪声强度,通常被称为噪声调度参数。
2.2 直接采样公式
通过一步计算,可以直接从 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(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} \cdot x_0, (1 - \bar{\alpha}_t) \cdot \mathbf{I}) q(xt∣x0)=N(xt;αˉt⋅x0,(1−αˉt)⋅I)
其中:
- α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt
- α ˉ t = ∏ i = 1 t α i \bar{\alpha}_t = \prod_{i=1}^t \alpha_i αˉt=∏i=1tαi
这意味着我们可以用以下公式通过采样生成 x t x_t xt:
x t = α ˉ t ⋅ x 0 + 1 − α ˉ t ⋅ ϵ x_t = \sqrt{\bar{\alpha}_t} \cdot x_0 + \sqrt{1 - \bar{\alpha}_t} \cdot \epsilon xt=αˉt⋅x0+1−αˉt⋅ϵ
其中 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathbf{I}) ϵ∼N(0,I) 是标准高斯噪声。
3. 逆向扩散过程
在逆向过程中,我们需要从噪声 x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \mathbf{I}) xT∼N(0,I) 开始,通过一个神经网络逐步去噪,恢复到原始数据 x 0 x_0 x0。
3.1 逆向扩散的定义
逆向扩散过程的每一步可以表示为:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , σ t 2 ⋅ I ) p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2 \cdot \mathbf{I}) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2⋅I)
其中:
- μ θ ( x t , t ) \mu_\theta(x_t, t) μθ(xt,t):神经网络预测的均值,表示如何从 x t x_t xt 生成 x t − 1 x_{t-1} xt−1。
- σ t 2 \sigma_t^2 σt2:预定义的噪声方差。
3.2 均值的计算
通过学习正向扩散过程中的噪声 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t),可以计算逆向过程的均值:
μ θ ( 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 - \bar{\alpha}_t}} \cdot \epsilon_\theta(x_t, t) \right) μθ(xt,t)=αt1(xt−1−αˉtβt⋅ϵθ(xt,t))
4. 损失函数
DDPM 的训练目标是使神经网络学会预测正向扩散过程中加入的噪声 ϵ \epsilon ϵ。因此,损失函数可以定义为:
L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] L_\text{simple} = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
其中:
- t ∼ Uniform ( 1 , T ) t \sim \text{Uniform}(1, T) t∼Uniform(1,T):随机采样一个时间步。
- ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathbf{I}) ϵ∼N(0,I):正向扩散过程中加入的真实噪声。
- x t x_t xt:通过正向扩散公式从 x 0 x_0 x0 计算得到。
5. 代码实现中的重要公式总结
在实现 DDPM 时,以下公式是关键:
- 正向扩散公式:
x t = α ˉ t ⋅ x 0 + 1 − α ˉ t ⋅ ϵ x_t = \sqrt{\bar{\alpha}_t} \cdot x_0 + \sqrt{1 - \bar{\alpha}_t} \cdot \epsilon xt=αˉt⋅x0+1−αˉt⋅ϵ
- 逆向扩散均值公式:
μ θ ( 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 - \bar{\alpha}_t}} \cdot \epsilon_\theta(x_t, t) \right) μθ(xt,t)=αt1(xt−1−αˉtβt⋅ϵθ(xt,t))
- 损失函数:
L simple = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] L_\text{simple} = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
6. 总结
DDPM 的核心在于:
- 正向过程将数据逐步转化为噪声。
- 逆向过程通过神经网络逐步去噪。
- 损失函数让模型学会如何还原数据。
参考文献
- Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. arXiv:2006.11239
- Song, Y., & Ermon, S. (2019). Generative Modeling by Estimating Gradients of the Data Distribution. arXiv:1907.05600