无分类器引导 CFG

核心 约 20 分钟 ★ 最小路径 CFG引导采样技巧核心原理最小路径
前置知识点(建议先学)
学习状态:

一句话定义

无分类器引导(Classifier-Free Guidance,CFG)在采样的每一步把「有条件预测」与「无条件预测」的差值放大后叠加回去,用外推的方式强化提示词对生成方向的引导。

为什么重要

CFG 是文生图工具里那个出镜率最高的数字(SD 系的「CFG Scale 7」)。它直接执行 kp-004 说的「可控性 ↔ 多样性」交换:调高则句句照办但画面趋同过饱和,调低则自由发挥但提示词失灵。同时它还是负向提示词(kp-018)的实现载体——不理解 CFG,负向提示词就只能当咒语背。

前置知识

kp-006(采样公式);kp-011 的「文本条件如何进入网络」可在本节后再深入,不阻塞本节。

核心概念

原理与机制

训练侧:同一网络学两种模式——给条件时预测 p(x|c) 方向,随机丢条件时预测边缘 p(x) 方向。采样侧,每一步把两个前向合并:

ε̃(xt, c) = εθ(xt, ∅) + w · ( εθ(xt, c) − εθ(xt, ∅) )

括号内是「条件把预测拉离无条件基线的方向」,乘 w 后从基线向外推。理论根源是分类器引导:引导项近似于 log p(c|x_t) 的梯度,即「往更符合条件 c 的方向修正」;无分类器引导用两个网络输出的差值隐式构造了这个梯度,省去单独训练分类器。w 的行为分区(SD 系经验值,随模型代次浮动):w=1 无引导,提示词只起弱作用;4~8 常用区,服从与画面质量平衡;>10 明显过饱和、对比度失真、细节「烧穿」;部分模型训练时固定 w,推理端不可调(如部分蒸馏模型)。

负向提示词如何塞进来:把公式中的无条件项替换为负向条件 c₋:

ε̃ = εθ(xt, c−) + w · ( εθ(xt, c+) − εθ(xt, c−) )

即「远离负向描述、朝正向描述外推」——负向提示词因此不是独立的删除器,其效力与 w 直接耦合(kp-018 展开)。

公式与推导

从分类器引导出发:p_w(x_t|c) ∝ p(x_t|c)·p(c|x_t)^w,展开其对数梯度,条件得分项与非条件得分项相减后乘 w,即得差值外推式——CFG 等价于「用一个隐式分类器的梯度做修正」。w>1 的外推使采样分布偏离训练分布(更尖锐的 p(x|c)),这正是过饱和伪影的来源:模型被要求输出「比训练数据更符合提示」的样本。

图示

无条件基线 ∅ 条件预测 c w×外推(w>1)

实线:条件把预测从基线拉出的方向;虚线:CFG 沿该方向再推 w 倍。w 越大,越「用力」服从条件,也离训练分布越远。

直观类比

导航重算路线:无条件预测是「随便开」,条件预测是「按目的地修正的方向」,w 是「听导航的程度」。w=1 完全我行我素;w=7 认真听;w=15 疯狂打方向盘——车是听你的了,但开出马路牙子(过饱和、崩坏)。

实例或案例

常见误区

自测题

  1. 写出 CFG 合并公式并解释 w=1 的含义。

答案要点:ε̃ = ε_∅ + w(ε_c − ε_∅);w=1 时退化为普通条件采样、无额外引导。

  1. 为什么训练时要做条件 dropout?

答案要点:让同一网络同时具备条件与无条件两种预测,采样时才能求差值,无需另训分类器。

  1. w=14 时画面常见什么问题?成因是什么?

答案要点:过饱和、对比度失真、细节烧穿;外推使采样点落入训练分布之外。

与其他知识点的关系

kp-011 解释条件 c 从哪来;kp-018 把「基线分支换负向」的实践展开成方法论;kp-004 的三角权衡在 w 旋钮上最直观;kp-025 的过饱和失败模式根因在此。

延伸阅读

Ho & Salimans《Classifier-Free Diffusion Guidance》全文短小,公式 (4) 即本节核心;Dhariwal & Nichol(NeurIPS 2021)给出分类器引导的先行版本可对照。

相关知识点