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
  • 第5章:分数生成模型(Score-Based Generative Models)

第5章:分数生成模型(Score-Based Generative Models)

条件生成与指导采样(Classifier-Guided Sampling)

1. 核心思想

条件生成与指导采样(Classifier-Guided Sampling)是一种通过外部分类器(或条件信息)引导扩散模型生成过程的技术。其核心思想是:

  • 条件控制:在生成过程中引入类别标签、文本描述或其他辅助信息,实现对生成样本的精确控制。
  • 梯度引导:利用分类器输出的梯度信息调整逆向扩散过程的噪声预测方向,使生成样本满足特定条件。

数学上,该技术通过修改分数函数(score function)实现:

∇xlog⁡pθ(x∣y)=∇xlog⁡pθ(x)+∇xlog⁡pϕ(y∣x)\nabla_x \log p_\theta(x|y) = \nabla_x \log p_\theta(x) + \nabla_x \log p_\phi(y|x) ∇x​logpθ​(x∣y)=∇x​logpθ​(x)+∇x​logpϕ​(y∣x)

其中:

  • pθ(x)p_\theta(x)pθ​(x) 是无条件扩散模型的分数
  • pϕ(y∣x)p_\phi(y|x)pϕ​(y∣x) 是分类器给出的条件概率
  • yyy 是目标条件(如类别标签)

2. 实现步骤

(1)分类器训练

需预训练一个分类器 pϕ(y∣x)p_\phi(y|x)pϕ​(y∣x),能够对噪声数据 xtx_txt​ 预测条件 yyy。关键点:

  • 分类器需在不同噪声级别的数据上训练(与扩散过程同步)
  • 通常使用与扩散模型相同的U-Net结构,但输出改为类别概率

(2)采样过程改进

在逆向扩散的每一步中:

  1. 计算无条件分数 ∇xlog⁡pθ(xt)\nabla_x \log p_\theta(x_t)∇x​logpθ​(xt​)
  2. 计算分类器梯度 ∇xlog⁡pϕ(y∣xt)\nabla_x \log p_\phi(y|x_t)∇x​logpϕ​(y∣xt​)
  3. 组合分数并调整步长:

    ϵ^θ(xt,t)=ϵθ(xt,t)−1−αˉt⋅s⋅∇xlog⁡pϕ(y∣xt)\hat{\epsilon}_\theta(x_t,t) = \epsilon_\theta(x_t,t) - \sqrt{1-\bar{\alpha}_t} \cdot s \cdot \nabla_x \log p_\phi(y|x_t) ϵ^θ​(xt​,t)=ϵθ​(xt​,t)−1−αˉt​​⋅s⋅∇x​logpϕ​(y∣xt​)

    其中 sss 是指导强度系数(guidance scale)

3. 代码示例(PyTorch伪代码)

def classifier_guided_sample(model, classifier, y, s=1.0):
    # 初始化噪声
    x_T = torch.randn(shape)
    
    for t in reversed(range(T)):
        # 无条件噪声预测
        eps_uncond = model(x_t, t)
        
        # 分类器梯度计算
        with torch.enable_grad():
            x_in = x_t.detach().requires_grad_(True)
            logits = classifier(x_in, t)
            log_probs = F.log_softmax(logits, dim=-1)
            selected = log_probs[range(batch_size), y]
            grad = torch.autograd.grad(selected.sum(), x_in)[0]
        
        # 组合分数
        eps = eps_uncond - s * (1 - alpha_bar[t])**0.5 * grad
        x_{t-1} = denoising_step(x_t, eps, t)
    
    return x_0

4. 应用案例

(1)ImageNet条件生成

  • 使用预训练的ResNet分类器引导256×256图像生成
  • 指导强度 s=10s=10s=10 时,FID从3.85降至2.97(DDPM论文结果)

(2)文本到图像生成

  • 在Stable Diffusion中,CLIP文本编码器充当隐式分类器
  • 通过调整指导系数控制生成图像与文本的匹配度

5. 技术优势与局限

优势局限
无需重新训练扩散模型需额外训练噪声鲁棒分类器
可灵活调整控制强度高指导系数可能导致样本质量下降
兼容离散和连续条件分类器与扩散模型的噪声分布需对齐

6. 扩展变体

  • 无分类器指导(Classifier-Free Guidance):通过联合训练条件/无条件模型避免分类器依赖
  • 多条件融合:支持文本+类别+分割图等多模态条件输入

图表建议

  1. 逆向扩散过程梯度修正示意图(对比原始采样与指导采样路径)
  2. 不同指导系数下的生成样本对比网格
  3. 分类器结构与传统分类器的噪声适应对比图
Last Updated:: 5/28/25, 11:37 PM