扩散模型(Diffusion Model)介绍

介绍

示例代码

扩散模型(Diffusion Model)是一类生成模型,其基本思想是通过模拟数据的逐步“扩散”与“去扩散”过程,学习数据分布,从而生成新的样本。扩散模型近年来在图像生成(如Stable Diffusion)等任务中表现出色。


一、基本思想

扩散模型包含两个阶段:

  1. 前向扩散过程(Forward Diffusion Process):逐步向原始数据添加高斯噪声,直到最终变为纯噪声。
  2. 反向生成过程(Reverse Diffusion Process):训练一个神经网络学会从噪声一步步“还原”出原始数据。

二、前向扩散过程

我们设训练样本为 x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0q(x0),表示从真实数据分布中采样。

目标:将数据 ( x_0 ) 逐步添加高斯噪声,最终转化为纯噪声 ( x_T \sim \mathcal{N}(0, I) )。

数学描述

  1. 马尔科夫链
    前向扩散过程是一个马尔科夫链,定义如下:
    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:Tx0)=t=1Tq(xtxt1)

  2. 单步扩散
    每一步的噪声添加服从马尔可夫链,定义条件概率分布:
    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(xtxt1)=N(xt;1βt xt1,βtI)
    其中 β t ∈ ( 0 , 1 ) \beta_t \in (0,1) βt(0,1) 是预设的噪声调度参数,控制噪声添加的速度。 x t \mathbf{x}_t xt 是第 t t t 步的加噪结果。

  3. 累积扩散(重参数化技巧):
    由于该过程是线性高斯,我们可以直接从任意 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(xtx0)=N(xt;αˉt x0,(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=αˉt x0+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θ(xt1xt),逐步从噪声 x T x_T xT 恢复原始数据 x 0 x_0 x0

数学描述

  1. 反向分布假设
    假设反向过程每一步服从高斯分布:
    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θ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))
    在简化模型(如DDPM)中,通常固定方差 Σ t = σ t 2 I \Sigma_t = \sigma_t^2 I Σt=σt2I,仅需学习均值 μ θ \mu_\theta μθ

  2. 均值参数化
    通过推导,反向过程的均值可表示为:
    μ θ ( 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)=αt 1(xt1α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:Tx0)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=1TDKL(q(xtxt1)pθ(xt1xt))logpθ(x0x1)]

这个目标由多个 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=αt x0+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(xtx0)=N(xt;αt x0,(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βt xt1+βt ϵt1,并利用高斯分布的叠加性质,最终得到闭式解。


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(xt1xt,x0)pθ(xt1xt))
通过分析, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt1xt,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(xt1xt,x0)=N(xt1;μ~(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αt1 βtx0+1αt1βt (1αt1)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(xt1xt,x0)q(xtxt1)q(xt1x0),结合高斯分布的乘积性质,可得均值和方差。


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}) xTN(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}) xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz,zN(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

  • 结合 CLIPU-NetVAELatent 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) xt1N(μθ(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=αˉt x0+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=αˉt x0+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=αˉt 1(xt1αˉt ϵθ(xt,t))

🧠 构造从 x t \mathbf{x}_t xt x t − 1 \mathbf{x}_{t-1} xt1 的公式

DDIM 将从 x t \mathbf{x}_t xt x t − 1 \mathbf{x}_{t-1} xt1 的过程构造为:

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) } xt1=αˉt1 x^0+1αˉt1 ϵθ(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} } xt1=αˉt1 x^0+1αˉt1η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αˉt1βt
  • z ∼ N ( 0 , I ) \boldsymbol{z} \sim \mathcal{N}(0, \mathbf{I}) zN(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,采样过程如下:

  1. 采样初始噪声: x t 0 ∼ N ( 0 , I ) \mathbf{x}_{t_0} \sim \mathcal{N}(0, \mathbf{I}) xt0N(0,I)

  2. 对每个时间步 t i → t i − 1 t_i \to t_{i-1} titi1,执行:

    • 计算 x ^ 0 \hat{\mathbf{x}}_0 x^0
    • 更新 x t i − 1 \mathbf{x}_{t_{i-1}} xti1 使用 DDIM 公式

📌 五、DDPM 与 DDIM 的区别

特性DDPMDDIM
采样随机采样确定性或可控噪声
速度慢(需上百步)快(几十步可生成)
训练噪声预测 MSE与 DDPM 相同
参数需固定调度表可自定义步数调度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值