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
  • 第3章:扩散模型的数学原理

第3章:扩散模型的数学原理

逆向去噪过程:从噪声中恢复数据

核心思想

逆向去噪过程是扩散模型的核心创新,其目标是通过学习逐步逆转正向扩散过程,从纯噪声数据中重建原始数据分布。该过程可视为一个参数化的马尔可夫链,通过一系列逐步细化的去噪步骤实现数据生成。

数学形式化

给定正向扩散过程定义的噪声数据分布 q(xT)q(\mathbf{x}_T)q(xT​),逆向过程定义为一个参数化的转移分布:

pθ(x0:T)=p(xT)∏t=1Tpθ(xt−1∣xt)p_\theta(\mathbf{x}_{0:T}) = p(\mathbf{x}_T) \prod_{t=1}^T p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ​(x0:T​)=p(xT​)t=1∏T​pθ​(xt−1​∣xt​)

其中每个逆向步骤 pθ(xt−1∣xt)p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)pθ​(xt−1​∣xt​) 被建模为高斯分布(对于连续数据):

pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,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))

关键推导

  1. 变分推断视角:

    • 通过最小化逆向过程与真实后验 q(xt−1∣xt,x0)q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)q(xt−1​∣xt​,x0​) 的KL散度推导目标函数
    • 真实后验的闭式解(当扩散系数βt\beta_tβt​较小时):

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

      其中 μ~t=1αt(xt−βt1−αˉtϵ)\tilde{\mu}_t = \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon)μ~​t​=αt​​1​(xt​−1−αˉt​​βt​​ϵ)
  2. 分数匹配联系:

    • 逆向过程可表示为对数据对数概率梯度(分数函数)的学习:

      ∇xtlog⁡pθ(xt)≈ϵθ(xt,t)1−αˉt\nabla_{\mathbf{x}_t} \log p_\theta(\mathbf{x}_t) \approx \frac{\epsilon_\theta(\mathbf{x}_t,t)}{\sqrt{1-\bar{\alpha}_t}} ∇xt​​logpθ​(xt​)≈1−αˉt​​ϵθ​(xt​,t)​

    • 通过朗之万动力学实现采样:

      xt−1=xt+η2∇xtlog⁡pθ(xt)+ηz\mathbf{x}_{t-1} = \mathbf{x}_t + \frac{\eta}{2} \nabla_{\mathbf{x}_t} \log p_\theta(\mathbf{x}_t) + \sqrt{\eta}\mathbf{z} xt−1​=xt​+2η​∇xt​​logpθ​(xt​)+η​z

训练目标

简化后的损失函数(噪声预测形式):

Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]\mathcal{L}_{simple} = \mathbb{E}_{t,\mathbf{x}_0,\epsilon} \left[ \|\epsilon - \epsilon_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t)\|^2 \right] Lsimple​=Et,x0​,ϵ​[∥ϵ−ϵθ​(αˉt​​x0​+1−αˉt​​ϵ,t)∥2]

算法实现

def reverse_process(model, x_T, T, betas):
    """
    逆向去噪采样过程
    Args:
        model: 训练好的噪声预测模型
        x_T: 初始噪声样本
        T: 总时间步数
        betas: 噪声调度参数
    """
    alphas = 1 - betas
    alphas_cumprod = torch.cumprod(alphas, dim=0)
    
    x_t = x_T
    for t in reversed(range(T)):
        # 预测噪声分量
        epsilon_theta = model(x_t, t)
        
        # 计算均值
        alpha_t = alphas[t]
        alpha_cumprod_t = alphas_cumprod[t]
        mean = (x_t - (1-alpha_t)/torch.sqrt(1-alpha_cumprod_t)*epsilon_theta)/torch.sqrt(alpha_t)
        
        # 添加噪声(最后一步除外)
        if t > 0:
            noise = torch.randn_like(x_t)
            x_t = mean + torch.sqrt(betas[t]) * noise
        else:
            x_t = mean
    return x_t

可视化案例

图示:逆向去噪过程逐步将噪声数据(右)转化为清晰样本(左),每个步骤基于学习的噪声预测模型调整数据分布

理论性质

  1. 渐进精确性:当步长βt→0\beta_t \to 0βt​→0时,逆向过程可精确匹配数据分布
  2. 稳定训练:与GAN不同,扩散模型的逆向过程训练目标提供平滑的梯度信号
  3. 表达能力:通过足够多的扩散步骤,理论上可以建模任意复杂的数据分布

实际考虑

  • 噪声调度:βt\beta_tβt​的选择影响训练稳定性和生成质量(线性/余弦调度等)
  • 采样加速:可通过DDIM等非马尔可夫方法减少必要采样步数
  • 条件生成:通过修改ϵθ\epsilon_\thetaϵθ​的输入实现条件控制(见第11章)

注:实际书籍内容应包含:
1. 更多数学推导细节(如ELBO分解)
2. 不同参数化方式的比较(预测噪声vs预测均值)
3. 与随机微分方程理论的联系
4. 实际训练技巧(学习率调度、梯度裁剪等)
5. 配套的完整代码实现(含U-Net架构示例)
Last Updated:: 5/28/25, 11:37 PM