定义
CFG(Classifier-Free Guidance,无分类器引导)是一种在采样阶段放大条件信号的技术,让生成结果更贴合文本或类别条件。它不训练额外的分类器,而是在训练时随机丢弃条件(以一定概率把条件置空),让同一个网络既能做条件生成、也能做无条件生成;采样时把「条件预测」沿「条件 − 无条件」的方向外推。
直观理解
直接条件生成的图往往偏「保守」——能满足条件,但不够鲜明。CFG 的思路是:
如果我知道「无条件时网络会画什么」,又知道「有条件时会画什么」,两者之差就是「条件带来的方向」。把这个方向放大,就能得到更「听话」的结果。
类比导航:不仅朝着目的地走,还要不断纠正「偏离目的地」的偏差,并把纠正力度调大。
名字里的「无分类器」是相对早期的 classifier guidance 说的:旧方法需要额外训练一个分类器 p(c∣xt) 来计算条件梯度,麻烦且对噪声图像不友好。CFG 干脆用「条件 vs 无条件」两个预测之差来近似这个方向,零额外组件。
代价是:训练时要随机丢条件,采样时每步要算两次网络前向(一次条件、一次无条件),计算量翻倍。
公式推导
1. 从 classifier guidance 出发
条件生成的分数可拆成:
∇xtlogp(xt∣c)=∇xtlogp(xt)+∇xtlogp(c∣xt)
引入引导强度 γ 放大分类器项:
∇xtlogpγ(xt∣c)=∇xtlogp(xt)+γ∇xtlogp(c∣xt)
2. 用贝叶斯消掉分类器
由 p(c∣xt)∝p(xt∣c)/p(xt),取对数梯度:
∇xtlogp(c∣xt)=∇xtlogp(xt∣c)−∇xtlogp(xt)
代入上式:
∇xtlogpγ(xt∣c)=(1−γ)∇xtlogp(xt)+γ∇xtlogp(xt∣c)
分类器消失了,只剩条件分数与无条件分数的加权外推。
3. 翻译成噪声预测
利用 Score SDE 中的等价关系 ϵθ(xt,t)∝−1−αˉt∇xtlogp(xt),把分数外推换成噪声预测外推:
ϵ^θ(xt,t,c)=(1+γ)ϵθ(xt,t,c)−γϵθ(xt,t)
等价写作:
ϵ^θ=ϵθ(xt,t,∅)+γ(ϵθ(xt,t,c)−ϵθ(xt,t,∅))
其中 ∅ 是空条件(空文本、无类别)。γ 是引导强度,通常取 5~10;γ=0 退化为无条件生成。
4. 训练时的条件丢弃
为了让 ϵθ 同时见过「有条件」和「无条件」两种样本,训练时以概率 puncond(常为 10%~20%)把条件替换为空。这样采样时的两项都由同一个网络输出。
相关