第11章:可控生成与条件扩散
无分类器指导(Classifier-Free Guidance)
核心思想
无分类器指导(Classifier-Free Guidance, CFG)是一种在扩散模型中实现条件生成的技术,它通过联合训练条件模型和无条件模型,避免了传统分类器指导(Classifier Guidance)需要额外训练分类器的缺点。其核心公式为:
其中:
- 是噪声预测网络
- 是条件(如文本描述)
- 表示无条件(空条件)
- 是指导权重(通常 )
数学推导
条件与无条件联合训练: 在训练时,以概率 随机丢弃条件 ,使模型同时学习:
- 条件预测
- 无条件预测
指导强度控制: 当 时退化为普通条件生成; 当 时增强条件控制效果; 极端情况 时近似于分类器指导。
代码实现(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的典型工作流程:
- 文本提示通过CLIP文本编码器转换为条件嵌入
- 采样时使用 的指导权重
- 生成过程同时考虑:
- 文本条件路径(强语义对齐)
- 无条件路径(保持图像自然性)
图:无分类器指导的双路径噪声预测机制
参数选择建议
权重 的影响:
- 适用于大多数场景
- 过高会导致模式崩溃(生成多样性下降)
- 过低会使条件控制力减弱
条件丢弃概率 :
- 通常设为 0.1-0.2
- 影响无条件预测的质量
扩展讨论
CFG可以与以下技术结合使用:
- 动态权重调整:在采样过程中变化 值
- 多条件融合:处理多个条件的加权组合
- 负向提示:通过 实现特定属性的抑制
实验对比:在文本到图像生成任务中,CFG相比传统分类器指导可将FID分数提升15-20%,同时减少30%的计算开销。
