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

去噪分数匹配(Denoising Score Matching)

核心概念

去噪分数匹配(Denoising Score Matching, DSM)是分数匹配(Score Matching)的一种变体,专门用于处理含噪声数据。其核心思想是通过学习对噪声扰动数据的梯度(即分数函数),来逼近真实数据分布的分数函数。

数学上,给定一个被噪声污染的数据样本 x~=x+ϵ\tilde{x} = x + \epsilonx~=x+ϵ(其中 ϵ∼N(0,σ2I)\epsilon \sim \mathcal{N}(0, \sigma^2 I)ϵ∼N(0,σ2I)),DSM 的目标是训练一个模型 sθ(x~)s_\theta(\tilde{x})sθ​(x~) 来匹配扰动数据分布的分数 ∇x~log⁡pσ(x~)\nabla_{\tilde{x}} \log p_\sigma(\tilde{x})∇x~​logpσ​(x~)。

理论推导

  1. 目标函数
    DSM 的损失函数定义为:

    LDSM(θ)=Ex∼pdata,ϵ∼N(0,σ2I)[∥sθ(x+ϵ)+ϵσ2∥22],\mathcal{L}_{DSM}(\theta) = \mathbb{E}_{x \sim p_{data}, \epsilon \sim \mathcal{N}(0, \sigma^2 I)} \left[ \| s_\theta(x + \epsilon) + \frac{\epsilon}{\sigma^2} \|_2^2 \right], LDSM​(θ)=Ex∼pdata​,ϵ∼N(0,σ2I)​[∥sθ​(x+ϵ)+σ2ϵ​∥22​],

    其中 ϵσ2\frac{\epsilon}{\sigma^2}σ2ϵ​ 是噪声扰动分布的真实分数(因为 ∇x~log⁡pσ(x~∣x)=−ϵσ2\nabla_{\tilde{x}} \log p_\sigma(\tilde{x}|x) = -\frac{\epsilon}{\sigma^2}∇x~​logpσ​(x~∣x)=−σ2ϵ​)。

  2. 与原始分数匹配的关系
    当噪声方差 σ2\sigma^2σ2 趋近于 0 时,DSM 退化为原始分数匹配。DSM 的优势在于避免了直接计算 pdata(x)p_{data}(x)pdata​(x) 的分数,转而通过噪声扰动数据学习。

  3. 扩散模型的联系
    在扩散模型中,DSM 被用于训练逆向过程的分数网络。通过多尺度噪声扰动(不同时间步 ttt 的噪声水平),模型学习从任意噪声水平恢复数据。

算法实现

以下是 PyTorch 伪代码示例:

def dsm_loss(model, x, sigma):
    # 1. 添加噪声
    epsilon = torch.randn_like(x) * sigma
    x_noisy = x + epsilon
    
    # 2. 预测分数
    predicted_score = model(x_noisy)
    
    # 3. 计算真实分数(噪声方向)
    true_score = -epsilon / (sigma ** 2)
    
    # 4. 计算 MSE 损失
    loss = torch.mean((predicted_score - true_score) ** 2)
    return loss

优势与特性

  1. 避免 Hessian 计算
    相比原始分数匹配(需计算二阶导数),DSM 仅需一阶梯度,计算更高效。
  2. 适用于高维数据
    通过噪声扰动,DSM 在高维空间(如图像)中表现稳定。
  3. 扩散模型的基石
    DDPM 和 SDE-based 方法均可视为 DSM 的扩展,通过时间步控制的噪声调度实现多尺度建模。

案例研究

  • 图像生成:在 CIFAR-10 数据集上,DSM 训练的模型可生成清晰图像(信噪比 σ\sigmaσ 需合理调度)。
  • 音频去噪:DSM 用于学习音频信号的分数函数,实现盲去噪(无需已知噪声分布)。

图表辅助

图:去噪分数匹配的流程(添加噪声 → 预测分数 → 匹配真实分数)

数学补充

对于高斯噪声扰动 x~=x+ϵ\tilde{x} = x + \epsilonx~=x+ϵ,其条件分布为:

pσ(x~∣x)=N(x,σ2I),p_\sigma(\tilde{x}|x) = \mathcal{N}(x, \sigma^2 I), pσ​(x~∣x)=N(x,σ2I),

因此对数梯度为:

∇x~log⁡pσ(x~∣x)=−ϵσ2.\nabla_{\tilde{x}} \log p_\sigma(\tilde{x}|x) = -\frac{\epsilon}{\sigma^2}. ∇x~​logpσ​(x~∣x)=−σ2ϵ​.

通过最小化 DSM 损失,模型间接学习到真实数据分布的分数 ∇xlog⁡pdata(x)\nabla_x \log p_{data}(x)∇x​logpdata​(x)。

Last Updated:: 5/28/25, 11:37 PM