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
  • 第11章:可控生成与条件扩散

第11章:可控生成与条件扩散

无分类器指导(Classifier-Free Guidance)

核心思想

无分类器指导(Classifier-Free Guidance, CFG)是一种在扩散模型中实现条件生成的技术,它通过联合训练条件模型和无条件模型,避免了传统分类器指导(Classifier Guidance)需要额外训练分类器的缺点。其核心公式为:

ϵθ(xt,c,t)=w⋅ϵθ(xt,c,t)+(1−w)⋅ϵθ(xt,∅,t)\epsilon_\theta(x_t, c, t) = w \cdot \epsilon_\theta(x_t, c, t) + (1-w) \cdot \epsilon_\theta(x_t, \emptyset, t) ϵθ​(xt​,c,t)=w⋅ϵθ​(xt​,c,t)+(1−w)⋅ϵθ​(xt​,∅,t)

其中:

  • ϵθ\epsilon_\thetaϵθ​ 是噪声预测网络
  • ccc 是条件(如文本描述)
  • ∅\emptyset∅ 表示无条件(空条件)
  • www 是指导权重(通常 w≥1w \geq 1w≥1)

数学推导

  1. 条件与无条件联合训练: 在训练时,以概率 pdropp_{drop}pdrop​ 随机丢弃条件 ccc,使模型同时学习:

    • 条件预测 ϵθ(xt,c,t)\epsilon_\theta(x_t, c, t)ϵθ​(xt​,c,t)
    • 无条件预测 ϵθ(xt,∅,t)\epsilon_\theta(x_t, \emptyset, t)ϵθ​(xt​,∅,t)
  2. 指导强度控制: 当 w=1w=1w=1 时退化为普通条件生成; 当 w>1w>1w>1 时增强条件控制效果; 极端情况 w→∞w \to \inftyw→∞ 时近似于分类器指导。

代码实现(PyTorch伪代码)

class ConditionalUNet(nn.Module):
    def forward(self, x, t, c=None):
        # c为条件嵌入,None表示无条件
        if c is None:
            return self.unet(x, t)
        else:
            return self.unet(x, t, c)

def cfg_sampling(model, x_t, t, c, w=7.5):
    # 条件预测
    cond_pred = model(x_t, t, c)
    # 无条件预测
    uncond_pred = model(x_t, t, None)
    # 线性组合
    return w*cond_pred + (1-w)*uncond_pred

优势分析

特性分类器指导无分类器指导
需要额外分类器✓✗
训练稳定性较低较高
条件控制灵活性固定可动态调整
计算效率较低较高

实际案例:Stable Diffusion中的应用

在Stable Diffusion v2中,CFG的典型工作流程:

  1. 文本提示通过CLIP文本编码器转换为条件嵌入 ccc
  2. 采样时使用 w=7.5w=7.5w=7.5 的指导权重
  3. 生成过程同时考虑:
    • 文本条件路径(强语义对齐)
    • 无条件路径(保持图像自然性)

图:无分类器指导的双路径噪声预测机制

参数选择建议

  1. 权重 www 的影响:

    • w∈[5,15]w \in [5,15]w∈[5,15] 适用于大多数场景
    • 过高会导致模式崩溃(生成多样性下降)
    • 过低会使条件控制力减弱
  2. 条件丢弃概率 pdropp_{drop}pdrop​:

    • 通常设为 0.1-0.2
    • 影响无条件预测的质量

扩展讨论

CFG可以与以下技术结合使用:

  • 动态权重调整:在采样过程中变化 www 值
  • 多条件融合:处理多个条件的加权组合
  • 负向提示:通过 w<1w<1w<1 实现特定属性的抑制

实验对比:在文本到图像生成任务中,CFG相比传统分类器指导可将FID分数提升15-20%,同时减少30%的计算开销。

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