欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Diffusion Model

Diffusion Model

2025/3/13 12:02:33 来源:https://blog.csdn.net/handsomeboysk/article/details/142997420  浏览:    关键词:Diffusion Model

扩散模型 (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(xtxt1)=N(xt;1βt xt1,β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} xt1 是时间步 t − 1 t-1 t1 的数据。
  • β t \beta_t βt 是随时间变化的噪声系数(称为噪声调度)。

这个公式表示,在每个时间步 t t t x t \mathbf{x}_t xt 是由 x t − 1 \mathbf{x}_{t-1} xt1 加入了一定量的噪声之后得到的。这是一种马尔科夫过程,因为 x t \mathbf{x}_t xt 仅依赖于 x t − 1 \mathbf{x}_{t-1} xt1,不依赖于更早的时间步。

2. 一步正向扩散解释

在第 t t t 步时,新的数据 x t \mathbf{x}_t xt 是通过从上一时间步 t − 1 t-1 t1 的数据 x t − 1 \mathbf{x}_{t-1} xt1 中采样得到的,具体公式为:

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βt xt1+β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} xt1 在生成数据 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(xtx0)=N(xt;αˉt x0,(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=1t(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θ(xt1xt),使得我们能够从噪声中逐渐生成逼真的数据。

根据贝叶斯定理,逆扩散过程的条件概率为:

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θ(xt1xt)=N(xt1;μθ(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} xt1 的条件概率:

p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) pθ(xt1xt)

其中, θ \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θ(xt1xt)=N(xt1;μθ(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} xt1 的均值,由神经网络模型输出。
  • Σ θ ( 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} xt1。这个过程通过模型预测出每一步的均值和方差,并采样得到下一步的数据。

对于每一步 t t t t − 1 t-1 t1,我们使用以下公式:

x t − 1 = μ θ ( x t , t ) + σ t ϵ \mathbf{x}_{t-1} = \mu_\theta(\mathbf{x}_t, t) + \sigma_t \epsilon xt1=μθ(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} xt1 是由当前时间步的数据 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(xt1xt) 和模型预测的 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 之间的差异来学习。这种差异通常使用变分下界 (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(xt1xt,x0)pθ(xt1xt))

  • q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0) 是正向扩散过程中的真实后验分布,即真实数据逐步扩散成噪声时,在时间 t − 1 t-1 t1 时的分布。
  • p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 是模型逆向过程中的预测分布,即模型从噪声去噪时预测的每一步的分布。

通过最小化这个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)=αt 1(xt1αˉ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θ(xT1xT)pθ(xT2xT1)pθ(x0x1)

最终从 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 等生成系统中。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词