Classifier Guidance 与 Classifier-Free Guidance

扩散模型引导技术深度解析

1. 有分类器引导 (Classifier Guidance)

概念

有分类器引导(Classifier Guidance)是一种通过引入一个**外部专家(分类器)来“纠正”和“指导”一个通用生成器(扩散模型)**的技术。

您可以将其想象成一个场景:一位画家(扩散模型)正在进行创作,他擅长画出符合物理规律和自然纹理的图像,但并不知道具体要画什么。这时,一位艺术评论家(分类器)站在旁边,他虽然不会画画,但对特定主题(如“猫”、“风景”)有深刻的鉴赏力。在画家创作的每一步,评论家都会审视半成品,并给出建议:“你这里画得更像猫一点会更好”。画家听取这个建议,并结合自己对绘画本身的理解,来调整下一步的笔触。

技术与实现

此技术需要两个独立训练好的模型:

  1. 一个标准的扩散模型 p_θ(x): 它学习了如何从噪声中生成一张普普通通的、自然的图像。
  2. 一个分类器 p_φ(y|x): 这个分类器经过特殊训练,不仅能识别清晰的图像,还能识别带噪声的图像 x_t,并判断其属于类别 y 的概率。

实现流程(推理时):
在生成图像的每一个去噪步骤(从 tt-1),流程如下:

  1. 扩散模型首先根据当前的噪声图像 x_t 预测一个基础的去噪方向。
  2. 同时,将这个 x_t 输入到分类器中。
  3. 分类器计算出梯度 ∇_x_t log p_φ(y|x_t)。这个梯度指向了能让 x_t 被识别为目标类别 y 的最快变化方向。
  4. 将这个梯度乘以一个引导强度系数 s,然后加到扩散模型原始的去噪方向上。
  5. 模型根据这个被“引导”了的新方向,来计算出下一步的图像 x_{t-1}

数学公式

其核心思想基于贝叶斯定理,将条件概率 p(x_t|y) 的对数梯度进行分解:

∇xtlog⁡p(xt∣y)=∇xtlog⁡p(xt)+∇xtlog⁡p(y∣xt)\nabla_{\mathbf{x}_t} \log p(\mathbf{x}t | y) = \nabla{\mathbf{x}_t} \log p(\mathbf{x}t) + \nabla{\mathbf{x}_t} \log p(y | \mathbf{x}_t)xtlogp(xty)=xtlogp(xt)+xtlogp(yxt)

  • ∇xtlog⁡p(xt)\nabla_{\mathbf{x}_t} \log p(\mathbf{x}_t)xtlogp(xt): 这是扩散模型自身的去噪方向。它代表了模型在没有任何特定目标时,将噪声图像变得更“真实”的趋势。在实际应用中,这通常与模型预测的噪声 ε_θ(x_t) 相关。
  • ∇xtlog⁡p(y∣xt)\nabla_{\mathbf{x}_t} \log p(y | \mathbf{x}_t)xtlogp(yxt): 这正是分类器提供的引导梯度。它告诉模型,应该如何修改 x_t 才能最大化它属于类别 y 的概率。
  • 最终的去噪方向是这两者的结合,再通过引导强度 s 来调节分类器的话语权。

2. 无分类器引导 (Classifier-Free Guidance, CFG)

概念

无分类器引导(CFG)是一种更先进、更优雅的方案。它的核心思想是不再需要外部专家,而是通过一种特殊的训练方式,让生成模型自身变得“多才多艺”,既能进行无目标的自由创作,也能进行有目标的命题创作,并最终实现自我引导。

这好比我们不再需要画家和评论家两个角色,而是培养出了一位大师级的画家。这位大师通过特殊的训练,既掌握了“随便画点什么都好看”的通用技巧,也掌握了“按照‘猫’这个主题来画”的特定技巧。在创作时,他可以先构思一个通用草图,再思考如何在这个草图的基础上,最大程度地凸显出“猫”的特征,从而实现自我引导和升华。

技术与实现

此技术仅需一个模型,但训练方式特殊。

实现流程(训练时):
在训练这个唯一的扩散模型时,会随机地(例如以10-20%的概率)丢弃或清空输入的条件信息 c(如文本描述)。

  1. 有条件训练: 大部分时间,模型接收噪声图 x_t 和条件 c,学习预测噪声 ε_θ(x_t, c)
  2. 无条件训练: 小部分时间,模型接收噪声图 x_t 和一个空的条件 ,学习在没有指导的情况下预测噪声 ε_θ(x_t, ∅)

通过这种方式,同一个模型网络 ε_θ 被迫同时学会了两种模式的预测能力。

实现流程(推理时):
在每个去噪步骤 t,模型会并行地进行两次预测

  1. 有条件预测: 使用具体的条件 c(如 “a photo of a cat”)进行一次前向传播,得到 ε_θ(x_t, c)
  2. 无条件预测: 使用空的条件 进行第二次前向传播,得到 ε_θ(x_t, ∅)
  3. 最后,通过一个公式将两者结合,得到最终的去噪方向。

数学公式

CFG的实现不依赖于贝叶斯定理,而是通过对预测噪声的直接线性组合来完成:

ϵ^θ(xt,c)=ϵθ(xt,∅)+w⋅(ϵθ(xt,c)−ϵθ(xt,∅))\hat{\epsilon}_\theta(\mathbf{x}_t, c) = \epsilon_\theta(\mathbf{x}_t, \emptyset) + w \cdot (\epsilon_\theta(\mathbf{x}t, c) - \epsilon_\theta(\mathbf{x}_t, \emptyset))ϵ^θ(xt,c)=ϵθ(xt,)+w(ϵθ(xt,c)ϵθ(xt,))

  • ϵθ(xt,∅)\epsilon_\theta(\mathbf{x}_t, \emptyset)ϵθ(xt,): 无条件预测。这是模型的“基线”或“通用创作”方向。
  • ϵθ(xt,c)\epsilon_\theta(\mathbf{x}_t, c)ϵθ(xt,c): 有条件预测。这是模型在遵循具体指令时的“命题创作”方向。
  • (ϵθ(xt,c)−ϵθ(xt,∅))(\epsilon_\theta(\mathbf{x}_t, c) - \epsilon_\theta(\mathbf{x}_t, \emptyset))(ϵθ(xt,c)ϵθ(xt,)): 这是整个技术的精髓——纯粹的引导向量。它代表了从“通用”到“特定”所需的方向差异,即条件c带来的纯粹的、额外的信息。
  • w: 引导强度系数 (CFG Scale)。它控制着我们要在多大程度上强调这个“引导向量”。当 w=1 时,公式简化为 ε_θ(x_t, c)。当 w>1 时,引导效果被放大。

详细区别

  1. 架构区别
    • Classifier Guidance: 需要两个独立模型(一个生成器,一个分类器)。架构更复杂,需要分别维护和调用。
    • CFG: 只需要一个统一模型。架构更简洁、更优雅。
  2. 引导来源区别
    • Classifier Guidance: 引导信号来自一个外部模型(分类器)。这个分类器可能没有在与生成器完全相同的数据或方式上进行训练,两者之间可能存在“认知偏差”,有时会导致奇怪或对抗性的结果。
    • CFG: 引导信号是内部生成的。它是模型自身在有条件和无条件两种状态下的预测差异。因为来源相同,所以引导和生成之间高度协调,“不存在认知偏差”,效果更稳定、质量更高。
  3. 训练过程区别
    • Classifier Guidance: 两个模型可以完全分开训练。但分类器必须在带噪声的图像上进行额外训练,这是一个不小的负担。
    • CFG: 训练过程是统一的,只需在训练生成模型时加入“随机丢弃条件”这一简单而有效的技巧即可。
  4. 灵活性和能力区别
    • Classifier Guidance: 灵活性较差。它的能力受限于分类器所能识别的固定类别。很难扩展到能理解任意自然语言描述的复杂场景。
    • CFG: 灵活性极高。它的条件c可以非常通用,能够轻易地与强大的文本编码器(如CLIP)结合,从而理解和生成基于任意复杂、细腻文本描述的图像,这是其成为现代文生图模型标配的关键原因。

最终总结

从技术实现的核心差异来看,Classifier Guidance 代表了一种外部组合式的引导方案。它在架构上依赖于一个生成器和一个独立的分类器两个模型,其引导信号是通过计算外部自分类器的梯度来产生,并将其“注入”到生成过程中。这种方式的技术关键在于如何让分类器有效地在带噪声的数据上工作,并将其梯度与生成器的更新步调相协调。

相比之下,Classifier-Free Guidance (CFG) 则是一种内部差分式的引导方案。它在架构上仅需一个统一模型,技术核心在于其独特的训练范式——通过随机丢弃条件,使单一模型同时掌握有条件和无条件两种生成模式。其引导信号完全在内部产生,通过计算模型自身两种模式预测结果的向量差来获得纯粹的引导方向。这种“自我引导”的方式不仅在架构上更为优雅,也因其引导源和执行者的高度同源性,带来了更强的保真度和对复杂语义(如长文本)的卓越解析能力,从而成为当前技术的主流。

### Classifier-Free Guidance in Machine Learning and Diffusion Models Classifier-free guidance is an important technique that enhances the performance of generative models, particularly diffusion models. In traditional conditional generation tasks, a classifier guides the generator towards producing samples with desired attributes. However, this approach requires training both a generator and a separate classifier, which increases complexity. In contrast, classifier-free guidance simplifies the process by eliminating the need for a dedicated classifier[^1]. Instead, during inference time, two types of predictions are made using only one unified network: unconditional prediction (without any class information) and conditional prediction (with class information). The final output combines these two predictions through weighted summation based on a guidance scale parameter \( \lambda \). The mathematical formulation involves adjusting the noise prediction step within the reverse diffusion process: \[ \epsilon_{\theta}(x_t, c) = \epsilon_{\theta}(x_t | c) + \lambda (\epsilon_{\theta}(x_t | c) - \epsilon_{\theta}(x_t)) \] where: - \( x_t \) represents noisy data at timestep t, - \( c \) denotes conditioning information like text embeddings or labels, - \( \lambda \) controls how strongly the condition influences the generated sample. This method not only reduces computational overhead but also improves quality control over outputs because users can easily manipulate conditions without retraining classifiers[^2]. For practical implementation, integrating LoRA into frameworks supporting stable diffusion enables efficient tuning while applying classifier-free guidance techniques effectively. This combination facilitates rapid adaptation to new styles or concepts without extensive dataset preparation or long training periods[^3]. ```python def apply_classifier_free_guidance(noise_pred_uncond, noise_pred_cond, guidance_scale): """ Applies classifier-free guidance. Parameters: noise_pred_uncond (Tensor): Unconditional noise prediction from the model. noise_pred_cond (Tensor): Conditional noise prediction given some context. guidance_scale (float): Scale factor controlling strength of guidance. Returns: Tensor: Final guided noise prediction. """ return noise_pred_uncond + guidance_scale * (noise_pred_cond - noise_pred_uncond) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkw017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值