Guidance

前面讨论的是无条件生成,即从 pdata(z)p_{data}(z) 采样。实际应用通常需要按 prompt 或其他信息生成特定样本,这类额外信息称为 Guidance

Vanilla Guidance

最直接的方法是在训练和推理阶段将条件变量 yy 输入神经网络,学习条件向量场 utθ(y)u_t^\theta(\cdot|y)

定义

基础引导式扩散/流模型由条件神经网络向量场和时间扩散系数 σt\sigma_t 定义:

  • 神经网络定义uθ:Rd×Y×[0,1]Rd,(x,y,t)utθ(xy)u^\theta: \mathbb{R}^d \times \mathcal{Y} \times [0, 1] \rightarrow \mathbb{R}^d, \quad (x,y,t) \mapsto u_t^\theta(x|y)。输入为带噪状态 xx、条件 yy 和时间 tt,输出 dd 维去噪方向。
  • 固定扩散系数σt:[0,1][0,+)tσt\sigma_t: [0, 1] \rightarrow [0, +∞) \quad t \mapsto \sigma_t

采样步骤

  1. 初始化:从先验分布采样 X0pinitX_0 \sim p_{init},通常为 N(0,Id)\mathcal{N}(0, I_d)
  2. 微分方程模拟:从 t=0t=0 积分到 t=1t=1,模拟 dXt=utθ(Xty)dt+σtdWtdX_t = u_t^\theta(X_t|y) dt + \sigma_t dW_t。其中 σt=0\sigma_t=0 时退化为 ODE 流模型。
  3. 优化目标:终点满足 X1pdata(y)X_1 \sim p_{data}(\cdot|y)

流匹配目标

训练条件网络 utθ(xy)u_t^\theta(x|y) 时,真实数据来自联合分布 pdata(z,y)p_{data}(z,y),目标是学习 pdata(xy)p_{data}(x|y)

对应的 Guided Conditional Flow Matching Objective 为:

LCFMtarget(θ)=E(z,y)pdata(z,y),tUnif,xpt(z)utθ(xy)uttarget(xz)2\mathcal{L}_{CFM}^{target}(\theta) = \mathbb{E}_{(z,y)\sim p_{data}(z,y), t\sim Unif, x\sim p_t(\cdot|z)} \|u_t^\theta(x|y) - u_t^{target}(x|z)\|^2

各项含义:

  • 联合分布采样 (z,y)pdata(z,y)(z,y)\sim p_{data}(z,y):采样真实样本及其条件。
  • 时间采样 tUnift\sim Unif:随机采样时间步。
  • 状态采样 xpt(z)x\sim p_t(\cdot|z):按条件路径生成中间带噪状态。
  • 回归目标:在给定 x,yx,y 时预测 uttarget(xz)u_t^{target}(x|z)。条件 yy 不改变 pt(z)p_t(\cdot|z),只作为神经网络上下文输入。

Vanilla Guidance 的局限

理论上,充分数据和模型容量可使 Vanilla Guidance 学到 pdata(y)p_{data}(\cdot|y)。实际中,生成结果常与提示词契合不足。

主要原因:

  1. 高维条件信号稀释:图像空间维度高,文本条件信号容易被通用视觉特征淹没。
  2. 数据质量缺陷与错配:现实世界中的图文对存在大量的噪声、描述不全或错误匹配。这种弱监督信号导致模型无法建立 yy 与特定视觉特征之间的强对应关系。
  3. 决策边界模糊:高噪声阶段不同条件的分布重叠,基础模型缺少显式放大条件差异的机制。

因此需要在采样阶段放大条件信号,即 Classifier GuidanceClassifier-Free Guidance

Classifier Guidance

Classifier Guidance 使用额外分类器在采样阶段修正生成方向。下面以高斯概率路径说明其分数函数推导。

向量场与分数函数的等价转换

在条件高斯路径 pt(z)=N(αtz,βt2Id)p_t(\cdot|z) = \mathcal{N}(\alpha_t z, \beta_t^2 I_d) 下,向量场和分数函数存在线性关系:

uttarget(xy)=atlogpt(xy)+btxu_t^{target}(x|y) = a_t \nabla \log p_t(x|y) + b_t x

系数为:

  • 比例系数 ata_t:定义为 at=(βt2α˙tαtβ˙tβt)a_t = \left(\beta_t^2 \frac{\dot{\alpha}_t}{\alpha_t} - \dot{\beta}_t \beta_t\right)
  • 偏移系数 btb_t:定义为 bt=α˙tαtb_t = \frac{\dot{\alpha}_t}{\alpha_t}
  • 导数α˙t\dot{\alpha}_tβ˙t\dot{\beta}_t 是噪声调度函数对时间 tt 的一阶导数。

该关系说明:给定 t,xt,x 后,条件向量场由条件分数 logpt(xy)\nabla \log p_t(x|y) 决定。

解耦条件分数

根据贝叶斯公式,条件分数可分解为:

pt(xy)=pt(x)pt(yx)pt(y)p_t(x|y) = \frac{p_t(x) p_t(y|x)}{p_t(y)}

对两边取对数并对 xx 求梯度:

logpt(xy)=log(pt(x)pt(yx)pt(y))=logpt(x)+logpt(yx)logpt(y)\nabla \log p_t(x|y) = \nabla \log \left( \frac{p_t(x) p_t(y|x)}{p_t(y)} \right) = \nabla \log p_t(x) + \nabla \log p_t(y|x) - \nabla \log p_t(y)

因为 pt(y)p_t(y)xx 无关,最后一项为 0:

logpt(xy)=logpt(x)+logpt(yx)\nabla \log p_t(x|y) = \nabla \log p_t(x) + \nabla \log p_t(y|x)

条件分数被分解为:

  • 无条件分数 logpt(x)\nabla \log p_t(x):保证样本落在真实数据分布上。
  • 似然梯度 logpt(yx)\nabla \log p_t(y|x):由分类器给出,推动样本更符合条件 yy

构建与放大分类器引导向量场

代回向量场线性关系:

uttarget(xy)=btx+at(logpt(x)+logpt(yx))=(btx+atlogpt(x))无条件向量场 uttarget(x)+atlogpt(yx)=uttarget(x)+atlogpt(yx)\begin{aligned} u_t^{target}(x|y) &= b_t x + a_t (\nabla \log p_t(x) + \nabla \log p_t(y|x)) \\ &= \underbrace{\left( b_t x + a_t \nabla \log p_t(x) \right)}_{\text{无条件向量场 } u_t^{target}(x)} + a_t \nabla \log p_t(y|x) \\ &= u_t^{target}(x) + a_t \nabla \log p_t(y|x) \end{aligned}

条件向量场等于无条件向量场加上分类器似然梯度项。

为增强条件对齐,引入 Guidance Scale ww,将分类器梯度放大为 watlogpt(yx)w a_t \nabla \log p_t(y|x)

u~t(xy)=uttarget(x)+watlogpt(yx)(Classifier Guidance)\tilde{u}_t(x|y) = u_t^{target}(x) + w a_t \nabla \log p_t(y|x) \quad \text{(Classifier Guidance)}

增大 ww 可增强条件对齐。

分类器引导的局限

分类器引导的工程问题:

  1. 额外模型依赖:需要独立分类器估算 pt(yx)p_t(y|x),增加复杂度和显存压力。
  2. 噪声分类困难:采样早期 xtx_t 接近高斯噪声,普通分类器不能直接使用,需要训练噪声感知分类器。
  3. 开放文本条件困难:自由文本条件难以用传统分类器稳定建模。

因此引入无分类器引导(CFG)。

Classifier-Free Guidance

CFG 在不依赖外部分类器的情况下,实现与分类器引导类似的条件放大效果。

消除额外分类器的依赖

使用前面的贝叶斯分解:

logpt(xy)=logpt(x)+logpt(yx)\nabla \log p_t(x|y) = \nabla \log p_t(x) + \nabla \log p_t(y|x)

条件分数可由条件生成模型预测,无条件分数可由无条件生成模型预测。因此分类器梯度可写为二者差值:

logpt(yx)=logpt(xy)logpt(x)\nabla \log p_t(y|x) = \nabla \log p_t(x|y) - \nabla \log p_t(x)

条件模型与无条件模型的差值可看作隐式分类器梯度。

代回带放大因子 ww 的引导公式:

u~t(xy)=uttarget(x)+watlogpt(yx)=uttarget(x)+wat(logpt(xy)logpt(x)隐式分类器梯度)\begin{aligned} \tilde{u}_t(x|y) &= u_t^{target}(x) + w a_t \nabla \log p_t(y|x) \\ &= u_t^{target}(x) + w a_t \Big( \underbrace{\nabla \log p_t(x|y) - \nabla \log p_t(x)}_{\text{隐式分类器梯度}} \Big) \end{aligned}

利用 atlogpt(x)=uttarget(x)btxa_t \nabla \log p_t(x) = u_t^{target}(x) - b_t x 及条件版本,化简为:

u~t(xy)=uttarget(x)w(btx+atlogpt(x))+w(btx+atlogpt(xy))=uttarget(x)wuttarget(x)+wuttarget(xy)=(1w)uttarget(x)+wuttarget(xy)\begin{aligned} \tilde{u}_t(x|y) &= u_t^{target}(x) - w (b_t x + a_t \nabla \log p_t(x)) + w (b_t x + a_t \nabla \log p_t(x|y)) \\ &= u_t^{target}(x) - w u_t^{target}(x) + w u_t^{target}(x|y) \\ &= (1 - w) u_t^{target}(x) + w u_t^{target}(x|y) \end{aligned}

得到 CFG 核心公式:

u~t(xy)=(1w)uttarget(x)+wuttarget(xy)\tilde{u}_t(x|y) = (1 - w) u_t^{target}(x) + w u_t^{target}(x|y)

\emptyset 表示无条件输入:

u~t(xy)=(1w)uttarget(x)+wuttarget(xy)\tilde{u}_t(x|y) = (1 - w) u_t^{target}(x|\emptyset) + w u_t^{target}(x|y)

因此可以用同一个模型同时处理有条件和无条件输入,无需额外分类器。

为何 CFG 表现优秀?

CFG 是条件输出相对无条件输出的线性外推。

增量形式为:

u~t(xy)=uttarget(x)+w(uttarget(xy)uttarget(x))\tilde{u}_t(x|y) = u_t^{target}(x|\emptyset) + w \cdot \Big( u_t^{target}(x|y) - u_t^{target}(x|\emptyset) \Big)

可分解为:

  1. 基座方向 uttarget(x)u_t^{target}(x|\emptyset):无条件生成方向。
  2. 增量方向uttarget(xy)uttarget(x)u_t^{target}(x|y)-u_t^{target}(x|\emptyset),表示条件 yy 带来的额外语义方向。
  3. 外推倍增w>1w>1 时放大条件增量,提高提示词对齐度。

从对比主成分分析角度看,CFG 可理解为:均值平移、放大条件域主成分,并抑制无条件分布中的通用特征。

CFG 的训练

CFG 需要同时得到条件和无条件输出。工程上通过联合训练让同一个网络支持两类输入。

训练策略:

  1. 引入空标签:扩展一个表示无条件的特殊标志 \emptyset
  2. 条件 Dropout:训练时以概率 η\eta 将真实条件 yy 替换为 \emptyset

训练目标为:

LCFMCFG(θ)=Eutθ(xy)uttarget(xz)2\mathcal{L}_{CFM}^{CFG}(\theta) = \mathbb{E}_{\blacksquare} \| u_t^\theta(x|y) - u_t^{target}(x|z) \|^2

其中 E\mathbb{E}_{\blacksquare} 表示如下混合采样:

  • 采样真实数据和标签对 (z,y)pdata(z,y)(z,y) \sim p_{data}(z,y)
  • 采样时间步 tUnif[0,1]t \sim Unif[0, 1]
  • 采样对应的中间噪声状态 xpt(z)x \sim p_t(\cdot|z)
  • 按固定概率丢弃标签,即 yy \leftarrow \emptyset with prob. η\eta

训练流程:

推理时,每个时间步分别输入 yy\emptyset 前向计算,再用 CFG 公式组合输出得到 u~t(xy)\tilde{u}_t(x|y)

引导尺度的选择

引导尺度 ww 控制提示词保真度与样本多样性的权衡。增大 ww 近似于从被 pt(cx)wp_t(c|x)^w 修正后的分布中采样。

  • 分布锐化w>1w>1 会提高高似然区域权重,压低低概率区域。
  • 远离决策边界:条件梯度被放大后,采样轨迹更倾向于进入明确的条件簇。

ww 不能无限增大,过强外推会导致:

  1. 多样性塌缩:分布收缩到少数模式,不同随机种子生成结果趋同。
  2. 伪影与过度饱和:线性外推可能使状态超出合理数据范围,产生颜色溢出和结构伪影。
引导尺度 w 区间 概率空间与景观效应 样本多样性 提示词保真度 视觉特征与实际表现
w1.0w \le 1.0 分布平滑,覆盖范围大 细节柔和,但主体和条件对齐较弱。
w[2.0,7.0]w \in [2.0, 7.0] 分布适度锐化,远离模糊边界 中等 主题突出,结构清晰,是常用区间。
w10.0w \ge 10.0 分布过度收缩 极低 极高但僵化 容易过饱和、失真并出现伪影。

常用动态阈值截断限制预测的无噪信号 x0x_0 范围,以缓解高 ww 带来的过饱和和伪影。

推广到扩散模型

高斯路径下,流匹配的边缘向量场与扩散模型的分数函数有仿射线性关系。因此,CFG 的贝叶斯分解可同时用于 ODE 流和 SDE 扩散采样。

将 CFG 引导场放入 SDE 采样:

dXt=u~tθ(Xty)dt+σtdWtdX_t = \tilde{u}_t^\theta(X_t|y) dt + \sigma_t dW_t

引入 CFG 后,流匹配与传统扩散采样的主要差异:

  1. 路径平滑度与步数:流匹配路径通常曲率更低,可用较少 ODE 步数生成。
  2. 确定性与随机性:带 CFG 的流匹配常采用零扩散系数的确定性 ODE 求解,避免随机项破坏优化后的轨迹。
  3. 视觉差异:同等设定下,流匹配少步采样更倾向于锐利边缘和明确结构;传统扩散更偏平滑纹理与渐变。