Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第4章:去噪扩散概率模型(DDPM)

第4章:去噪扩散概率模型(DDPM)

4.2 前向扩散与后向去噪过程详解

4.2.1 前向扩散过程(Forward Diffusion Process)

前向扩散过程是一个马尔可夫链,通过逐步添加高斯噪声将数据分布 q(x0)q(x_0)q(x0​) 转化为简单的高斯分布 q(xT)≈N(0,I)q(x_T) \approx \mathcal{N}(0, I)q(xT​)≈N(0,I)。其数学形式为:

q(x1:T∣x0)=∏t=1Tq(xt∣xt−1),q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)q(x_{1:T}|x_0) = \prod_{t=1}^T q(x_t|x_{t-1}), \quad q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I) q(x1:T​∣x0​)=t=1∏T​q(xt​∣xt−1​),q(xt​∣xt−1​)=N(xt​;1−βt​​xt−1​,βt​I)

其中:

  • βt\beta_tβt​ 是噪声调度参数(0<βt<10 < \beta_t < 10<βt​<1)
  • 通过重参数化技巧,可直接从 x0x_0x0​ 计算 xtx_txt​:

    xt=αˉtx0+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=1tαs\bar{\alpha}_t = \prod_{s=1}^t \alpha_sαˉt​=∏s=1t​αs​

关键性质:当 T→∞T \to \inftyT→∞ 时,xTx_TxT​ 收敛到各向同性高斯分布。

图4.2.1:数据逐步被噪声化的过程示例(从清晰图像到纯噪声)


4.2.2 逆向去噪过程(Reverse Denoising Process)

逆向过程通过学习条件概率 pθ(xt−1∣xt)p_\theta(x_{t-1}|x_t)pθ​(xt−1​∣xt​) 逐步去噪。根据DDPM原文,其形式为:

pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t,t), \Sigma_\theta(x_t,t)) pθ​(xt−1​∣xt​)=N(xt−1​;μθ​(xt​,t),Σθ​(xt​,t))

其中:

  • 均值 μθ\mu_\thetaμθ​ 通过预测噪声 ϵθ\epsilon_\thetaϵθ​ 得到:

    μθ(xt,t)=1αt(xt−βt1−αˉtϵθ(xt,t))\mu_\theta(x_t,t) = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(x_t,t)\right) μθ​(xt​,t)=αt​​1​(xt​−1−αˉt​​βt​​ϵθ​(xt​,t))

  • 方差 Σθ\Sigma_\thetaΣθ​ 通常固定为 β~t=1−αˉt−11−αˉtβt\tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_tβ~​t​=1−αˉt​1−αˉt−1​​βt​

训练目标:最小化噪声预测误差(简化版ELBO):

Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]\mathcal{L}_{\text{simple}} = \mathbb{E}_{t,x_0,\epsilon}\left[\|\epsilon - \epsilon_\theta(x_t,t)\|^2\right] Lsimple​=Et,x0​,ϵ​[∥ϵ−ϵθ​(xt​,t)∥2]


4.2.3 算法实现细节

前向扩散伪代码

def forward_diffusion(x0, t, betas):
    """计算第t步的加噪样本"""
    sqrt_alpha_bar = np.prod([(1 - betas[:t])**0.5])
    sqrt_one_minus_alpha_bar = (1 - sqrt_alpha_bar**2)**0.5
    noise = torch.randn_like(x0)
    xt = sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * noise
    return xt, noise

逆向去噪伪代码

def reverse_step(xt, t, model, alphas, betas):
    """执行单步去噪"""
    alpha_t = alphas[t]
    sqrt_one_minus_alpha_bar_t = (1 - np.prod([(1 - betas[:t])]))**0.5
    eps_theta = model(xt, t)  # 噪声预测网络
    mu = (xt - (betas[t]/sqrt_one_minus_alpha_bar_t)*eps_theta)/alpha_t**0.5
    return mu + (betas[t]**0.5)*torch.randn_like(xt)

4.2.4 案例研究:图像生成过程可视化

以CIFAR-10图像生成为例:

  1. 前向过程:清晰图像在20步内逐渐变为噪声(见图4.2.1)
  2. 逆向过程:噪声通过U-Net预测噪声,逐步重建图像:
    • 早期阶段(t≈T)恢复全局结构
    • 后期阶段(t≈0)细化局部细节

图4.2.2:逆向去噪的阶段性效果(右→左为时间方向)


4.2.5 数学推导补充

逆向过程的推导基于以下关键观察:

  1. 当 βt→0\beta_t \to 0βt​→0 时,q(xt−1∣xt,x0)q(x_{t-1}|x_t,x_0)q(xt−1​∣xt​,x0​) 也是高斯分布:

    q(xt−1∣xt,x0)=N(xt−1;μ~(xt,x0),β~tI)q(x_{t-1}|x_t,x_0) = \mathcal{N}(x_{t-1}; \tilde{\mu}(x_t,x_0), \tilde{\beta}_t I) q(xt−1​∣xt​,x0​)=N(xt−1​;μ~​(xt​,x0​),β~​t​I)

  2. 通过贝叶斯定理可证明:

    μ~(xt,x0)=αˉt−1βt1−αˉtx0+αt(1−αˉt−1)1−αˉtxt\tilde{\mu}(x_t,x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}x_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}x_t μ~​(xt​,x0​)=1−αˉt​αˉt−1​​βt​​x0​+1−αˉt​αt​​(1−αˉt−1​)​xt​

  3. 用 ϵθ\epsilon_\thetaϵθ​ 替换 x0x_0x0​ 的估计(因 x0=xt−1−αˉtϵαˉtx_0 = \frac{x_t - \sqrt{1-\bar{\alpha}_t}\epsilon}{\sqrt{\bar{\alpha}_t}}x0​=αˉt​​xt​−1−αˉt​​ϵ​)

参考文献

  1. Ho et al. "Denoising Diffusion Probabilistic Models" (NeurIPS 2020)
  2. Feller. "On the Theory of Stochastic Processes" (1951)

注:实际书籍中需补充完整的图表代码和更详细的推导步骤,此处为简洁展示核心内容结构。
Last Updated:: 5/28/25, 11:37 PM