MIT 6.S184 | 流匹配与扩散模型导论 | 2026 | Course Notes | 翻译 | Chapter 5: Guidance: Condition on a Prompt
前言
MIT6.S184: Generative AI with Stochastic Differential Equations 最新 2026 年课程笔记 An Introduction to Flow Matching and Diffusion Models 翻译,本篇文章翻译第五章节 Guidance: How To Condition on a Prompt 相关内容🤗。
Course Notes:https://diffusion.csail.mit.edu/2026/docs/lecture_notes.pdf
Course Website:https://diffusion.csail.mit.edu/2026/index.html
5 Guidance: How To Condition on a Prompt
到目前为止,我们讨论的生成模型都是 unguided(无引导的),例如,一个图像模型只会简单地生成某一张图像,从数学角度来说,这意味着模型返回的是来自 p d a t a ( z ) p_{\mathrm{data}}(z) pdata(z) 这一无条件数据分布中的样本。
然而,在大多数情况下,我们的目标并不仅仅是生成任意对象,而是 生成满足某些额外条件的对象。换句话说,我们希望 “引导(guide)” 模型,让它生成某一特定类型的对象。例如,我们可以想象一个图像生成模型输入一个文本 prompt y y y 然后生成一张图像 x x x ,并且图像 x x x 需要符合文本 prompt y y y
正如第 1 节中讨论的那样,这意味着我们希望从 p d a t a ( z ∣ y ) p_{\mathrm{data}}(z|y) pdata(z∣y) 中进行采样。也就是说,在条件 y y y 下的 guided data distribution(引导数据分布)。
本节中,我们将讨论如何实现这种 guided generation(引导生成)。
Remark 25 (Terminology)
为了避免符号与术语上的冲突,此前 conditional(条件)这个词被用于表示关于 z ∼ p d a t a z \sim p_{\mathrm{data}} z∼pdata 的条件概率路径或条件向量场。因此,在本节中,我们将使用 guided(引导)专门表示关于 y y y 的条件生成(conditioning),例如文本 prompt。
5.1 Vanilla Guidance
首先,我们来讨论构建 guided generative model(引导式生成模型)的 “标准” 方法。简短来说,其核心思想非常直接:在训练与推理时,直接将输入 prompt y y y 提供给网络即可。除此之外,其余部分都与之前保持一致,下面我们对其进行形式化描述。
我们将条件变量(conditioning variable)或 prompt y y y 看作属于某个空间 Y \mathcal{Y} Y 。例如,当 y y y 是文本 prompt 时, Y \mathcal{Y} Y 就是所有文本的空间。当 y y y 是离散类别标签时, Y \mathcal{Y} Y 就是一个离散空间。这里我们对 Y \mathcal{Y} Y 不做任何限制。
我们定义 guided diffusion model(引导扩散模型)由以下部分组成:一个 guided vector field u t θ ( ⋅ ∣ y ) u_t^\theta(\cdot|y) utθ(⋅∣y) ,由某个神经网络参数化,一个随时间变化的扩散系数 σ t \sigma_t σt ,整体形式如下:
Neural network: u θ : R d × Y × [ 0 , 1 ] → R d , ( x , y , t ) ↦ u t θ ( x ∣ y ) Fixed: σ t : [ 0 , 1 ] → [ 0 , ∞ ) , t ↦ σ t \begin{aligned} \textbf{Neural network:}\quad & u^\theta : \mathbb{R}^d \times \mathcal{Y} \times [0,1] \rightarrow \mathbb{R}^d, \quad (x,y,t)\mapsto u_t^\theta(x\mid y) \\[12pt] \textbf{Fixed:}\quad & \sigma_t : [0,1] \rightarrow [0,\infty), \quad t\mapsto \sigma_t \end{aligned} Neural network:Fixed:uθ:Rd×Y×[0,1]→Rd,(x,y,t)↦utθ(x∣y)σt:[0,1]→[0,∞),t↦σt
请注意,与 Summary 7 相比,这里额外加入了 y ∈ Y y \in \mathcal{Y} y∈Y 用于指导 u t θ u_t^\theta utθ 。对于任意 y ∈ Y y \in \mathcal{Y} y∈Y ,我们都可以如下生成样本:
Initialization: X 0 ∼ p i n i t ▶ Initialize with simple distribution (such as a Gaussian) Simulation: d X t = u t θ ( X t ∣ y ) d t + σ t d W t ▶ Simulate SDE from t = 0 to t = 1. Goal: X 1 ∼ p d a t a ( ⋅ ∣ y ) ▶ Goal is for X 1 to be distributed like p d a t a ( ⋅ ∣ y ) . \begin{align*} \textbf{Initialization:}\qquad X_0 & \sim p_{\mathrm{init}} && \qquad \blacktriangleright\ \text{Initialize with simple distribution (such as a Gaussian)} \\[12pt] \textbf{Simulation:}\qquad dX_t & = u_t^\theta(X_t\mid y)\,dt + \sigma_t\,dW_t && \qquad \blacktriangleright\ \text{Simulate SDE from } t=0 \text{ to } t=1. \\[12pt] \textbf{Goal:}\qquad X_1 & \sim p_{\mathrm{data}}(\,\cdot\mid y) && \qquad \blacktriangleright\ \text{Goal is for } X_1 \text{ to be distributed like } p_{\mathrm{data}}(\,\cdot\mid y). \end{align*} Initialization:X0Simulation:dXtGoal:X1∼pinit=utθ(Xt∣y)dt+σtdWt∼pdata(⋅∣y)▶ Initialize with simple distribution (such as a Gaussian)▶ Simulate SDE from t=0 to t=1.▶ Goal is for X1 to be distributed like pdata(⋅∣y).
当 σ t = 0 \sigma_t = 0 σt=0 时,我们称该模型为 guided flow model(引导流模型)。接下来,为了让内容更简洁,我们会主要聚焦于 flow matching 和 flow models,但所有内容同样适用于更一般的 diffusion model 情况。
接下来,我们讨论如何训练一个 guided flow model u t θ ( x ∣ y ) u_t^\theta(x|y) utθ(x∣y) 。一个简单的方法是固定某个 y y y 并将数据分布视为 p d a t a ( x ∣ y ) p_{\mathrm{data}}(x|y) pdata(x∣y) 。这样一来,我们实际上又回到了之前的无条件生成问题。因此,我们可以继续使用 conditional flow matching objective 来构造生成模型,即:
E z ∼ p d a t a ( ⋅ ∣ y ) , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ∣ y ) − u t t a r g e t ( x ∣ z ) ∥ 2 ] . (57) \mathbb{E}_{z \sim p_{\mathrm{data}}(\cdot|y),\, x \sim p_t(\cdot|z)} \left[ \left\| u_t^\theta(x|y) - u_t^{\mathrm{target}}(x|z) \right\|^2 \right]. \tag{57} Ez∼pdata(⋅∣y),x∼pt(⋅∣z)[ utθ(x∣y)−uttarget(x∣z) 2].(57)
请注意,标签 y y y 并不会影响条件概率路径 p t ( ⋅ ∣ z ) p_t(\cdot|z) pt(⋅∣z) 或条件向量场 u t t a r g e t ( x ∣ z ) u_t^{\mathrm{target}}(x|z) uttarget(x∣z)(当然,原则上我们也可以让它依赖于 y y y)。接下来,对所有可能的 y y y 进行期望展开,我们得到 guided conditional flow matching objective:
L C F M g u i d e d ( θ ) = E ( z , y ) ∼ p d a t a ( z , y ) , t ∼ U n i f [ 0 , 1 ] , x ∼ p t ( ⋅ ∣ z ) [ ∥ u t θ ( x ∣ y ) − u t t a r g e t ( x ∣ z ) ∥ 2 ] . (58) \mathcal{L}_{\mathrm{CFM}}^{\mathrm{guided}}(\theta) = \mathbb{E}_{(z,y)\sim p_{\mathrm{data}}(z,y),\, t\sim \mathrm{Unif}[0,1],\, x\sim p_t(\cdot|z)} \left[ \left\| u_t^\theta(x|y) - u_t^{\mathrm{target}}(x|z) \right\|^2 \right]. \tag{58} LCFMguided(θ)=E(z,y)∼pdata(z,y),t∼Unif[0,1],x∼pt(⋅∣z)[ utθ(x∣y)−uttarget(x∣z) 2].(58)
公式 (58) 中的 guided objective 与 公式 (26) 中 unguided objective 的一个主要区别在于:这里我们采样的是 ( z , y ) ∼ p d a t a (z,y)\sim p_{\mathrm{data}} (z,y)∼pdata 而不只是 z ∼ p d a t a z\sim p_{\mathrm{data}} z∼pdata 。原因在于现在的数据分布,本质上是一个联合分布,例如图像 z z z 和文本 prompt y y y 同时存在。在实际工程中,这意味着 PyTorch 实现 公式 (58) 时,dataloader 需要同时返回数据 z z z 和标签 y y y 。
Figure 11:使用 prompt / class y = “corgi dog” y = \text{“corgi dog”} y=“corgi dog” 进行图像生成。左图(Left)展示的是 vanilla guidance(普通引导)生成的样本。可以看到图像与 prompt 的匹配程度并不好。右图(Right)展示的是 classifier guidance(分类器引导)并使用 w = 4 w = 4 w=4 时生成的样本。正如图中所示,classifier-free guidance 提升了模型对 prompt 的遵循程度。图片来源于参考文献 [18]。
5.2 Classifier-Free Guidance
理论上来说,vanilla guidance(普通引导)应该能够忠实地生成 p d a t a ( ⋅ ∣ y ) p_{\mathrm{data}}(\cdot|y) pdata(⋅∣y) 对应的样本。然而,人们很快在实验中发现,使用这种方法生成的图像往往不能很好地符合目标标签 y y y (见 Figure 11)。这背后可能有很多原因,例如,模型欠拟合,也就是说我们实际上并没有真正学到正确的边缘向量场(marginal vector field);数据本身不完美,例如,来自互联网的 text-image pairs
往往包含大量错误。
因此,为了真正生成更符合 prompt 的样本,我们需要找到一种方法人为地增强 prompt 变量 y y y 。目前最主要的方法被称为 Classifier-Free Guidance,它已经被广泛应用于最先进(state-of-the-art)的 diffusion models 中。接下来,我们将详细讨论这一方法。
Figure 12:classifier guidance 与 classifier-free guidance 的示意图。classifier guidance 的核心思想是将 guided vector field u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y) 拆解为无条件向量场和分类器梯度 ∇ log p t ( y ∣ x ) \nabla\log p_t(y|x) ∇logpt(y∣x) ,然后使用 guidance scale w > 1 w>1 w>1 对 classifier 项进行放大。classifier-free guidance 的做法则不同。它不是显式训练一个 classifier p t ( y ∣ x ) p_t(y|x) pt(y∣x) ,而是直接放大两个 vector field 之间的差值。因此,classifier-free guidance 可以达到与 classifier guidance 相同的效果,但不需要额外训练一个独立的 classifier model。
Classifier Guidance.
为了简化讨论,这里我们聚焦于 Gaussian probability paths(高斯概率路径)的情况。回忆 公式 (15),Gaussian conditional probability path 定义为 p t ( ⋅ ∣ z ) = N ( α t z , β t 2 I d ) p_t(\cdot|z)=\mathcal{N}(\alpha_t z,\beta_t^2 I_d) pt(⋅∣z)=N(αtz,βt2Id) ,其中 noise schedulers α t , β t \alpha_t,\beta_t αt,βt 满足连续可微且单调,并且 α 0 = β 1 = 0 , α 1 = β 0 = 1 \alpha_0=\beta_1=0,\ \alpha_1=\beta_0=1 α0=β1=0, α1=β0=1 。此外,根据 Proposition 1,我们可以利用 guided score function ∇ log p t ( x ∣ y ) \nabla \log p_t(x|y) ∇logpt(x∣y) 将 guided vector field u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y) 改写为:
u t t a r g e t ( x ∣ y ) = a t ∇ log p t ( x ∣ y ) + b t x (59) u_t^{\mathrm{target}}(x|y) = a_t\nabla\log p_t(x|y) + b_tx \tag{59} uttarget(x∣y)=at∇logpt(x∣y)+btx(59)
接下来注意 p t ( x ∣ y ) p_t(x|y) pt(x∣y) 本质上是一个条件概率密度。因此,我们可以使用贝叶斯公式来改写 guided score:
p t ( x ∣ y ) = p t ( x ) p t ( y ∣ x ) p t ( y ) ∇ log p t ( x ∣ y ) = ∇ log ( p t ( x ) p t ( y ∣ x ) p t ( y ) ) = ∇ log p t ( x ) + ∇ log p t ( y ∣ x ) , \begin{align} p_t(x\mid y) &= \frac{ p_t(x)\,p_t(y\mid x) }{p_t(y)} \tag{60} \\[14pt] \nabla\log p_t(x\mid y) &= \nabla\log \left(\frac{p_t(x)\,p_t(y\mid x)}{p_t(y)}\right) = \nabla\log p_t(x) + \nabla\log p_t(y\mid x), \tag{61} \end{align} pt(x∣y)∇logpt(x∣y)=pt(y)pt(x)pt(y∣x)=∇log(pt(y)pt(x)pt(y∣x))=∇logpt(x)+∇logpt(y∣x),(60)(61)
这里使用了一个关键事实:梯度 ∇ \nabla ∇ 是对变量 x x x 求导的,因此 ∇ log p t ( y ) = 0 \nabla\log p_t(y)=0 ∇logpt(y)=0 。因此,我们可以进一步改写:
u t t a r g e t ( x ∣ y ) = b t x + a t ( ∇ log p t ( x ) + ∇ log p t ( y ∣ x ) ) = u t t a r g e t ( x ) + a t ∇ log p t ( y ∣ x ) u_t^{\mathrm{target}}(x|y) = b_tx + a_t \left( \nabla\log p_t(x) + \nabla\log p_t(y|x) \right) = u_t^{\mathrm{target}}(x) + a_t\nabla\log p_t(y|x) uttarget(x∣y)=btx+at(∇logpt(x)+∇logpt(y∣x))=uttarget(x)+at∇logpt(y∣x)
请仔细观察这个公式的结构,guided vector field u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y) 实际上由两部分组成:第一部分是无条件向量场 u t t a r g e t ( x ) u_t^{\mathrm{target}}(x) uttarget(x) ,第二部分是 Prompt 引导项 a t ∇ log p t ( y ∣ x ) a_t\nabla\log p_t(y|x) at∇logpt(y∣x) ,它表示 guidance variable y y y 在给定 x x x 时的 likelihood 梯度。
人们观察到生成的图像 x x x 往往不能很好地符合 prompt y y y ,因此,一个非常自然的想法是放大 ∇ log p t ( y ∣ x ) \nabla\log p_t(y|x) ∇logpt(y∣x) 这一项的贡献。于是得到:
u ~ t ( x ∣ y ) = u t t a r g e t ( x ) + w a t ∇ log p t ( y ∣ x ) ( classifier guidance ) (62) \tilde{u}_t(x|y) = u_t^{\mathrm{target}}(x) + wa_t\nabla\log p_t(y|x) \qquad (\text{classifier guidance}) \tag{62} u~t(x∣y)=uttarget(x)+wat∇logpt(y∣x)(classifier guidance)(62)
其中 w > 1 w>1 w>1 被称为 guidance scale。那么,如何学习 log p t ( y ∣ x ) \log p_t(y|x) logpt(y∣x) 这一项呢?注意,它本质上可以看作一个针对 noisy data 的分类器(classifier),即它给出了 y y y 在给定 x x x 时的对数似然(log-likelihood)。因此,我们完全可以通过 via supervised learning 监督学习来学习它。这就得到了 classifier guidance [11, 43](Figure 12 给出了相关示意图)
后来,classifier guidance 很大程度上被 classifier-free guidance 所取代。因此,这里不会继续深入讨论 classifier guidance。不过它仍然是 classifier-free guidance 的理论基础,接下来我们会看到这一点。
最后需要强调 classifier guidance 本质上是一个 heuristic(启发式方法)。因为当 w ≠ 1 w\neq 1 w=1 时 u ~ t ( x ∣ y ) ≠ u t t a r g e t ( x ∣ y ) \tilde{u}_t(x|y) \neq u_t^{\mathrm{target}}(x|y) u~t(x∣y)=uttarget(x∣y) ,也就是说它并不是真正的 guided vector field。
Classifier-Free Guidance.
虽然 classifier guidance 在理论上是可行的,但它存在很多实际问题。首先,我们需要额外训练一个 classifier,也就是说需要同时训练一个 flow / diffusion model 和一个 classifier,因此我们需要 2 个网络,而不是 1 个。
此外,如果 y y y 是高维的,例如文本 prompt 而不仅仅是一个类别标签,那么 p t ( y ∣ x ) p_t(y|x) pt(y∣x) 会非常难学习,对应的梯度 ∇ log p t ( y ∣ x ) \nabla \log p_t(y|x) ∇logpt(y∣x) 也很难获得,因此,提出了 classifier-free guidance(CFG)[18]。classifier-free guidance 能够达到与 classifier guidance 理论上等价的效果,但不需要训练单独的 classifier。
为此,我们再次使用下面这个恒等式:
∇ log p t ( x ∣ y ) = ∇ log p t ( x ) + ∇ log p t ( y ∣ x ) \nabla \log p_t(x|y)=\nabla \log p_t(x)+\nabla \log p_t(y|x) ∇logpt(x∣y)=∇logpt(x)+∇logpt(y∣x)
来获得:
u ~ t ( x ∣ y ) = u t t a r g e t ( x ) + w a t ∇ log p t ( y ∣ x ) = u t t a r g e t ( x ) + w a t ( ∇ log p t ( x ∣ y ) − ∇ log p t ( x ) ) = u t t a r g e t ( x ) − ( w b t x + w a t ∇ log p t ( x ) ) + ( w b t x + w a t ∇ log p t ( x ∣ y ) ) = ( 1 − w ) u t t a r g e t ( x ) + w u t t a r g e t ( x ∣ y ) . \begin{align*} \tilde{u}_t(x\mid y) &= u_t^{\mathrm{target}}(x) + wa_t\nabla\log p_t(y\mid x) \\[12pt] &= u_t^{\mathrm{target}}(x) + wa_t\left(\nabla\log p_t(x\mid y)- \nabla\log p_t(x) \right) \\[12pt]&= u_t^{\mathrm{target}}(x) - \left(wb_tx+wa_t\nabla\log p_t(x)\right)+ \left(wb_tx+wa_t\nabla\log p_t(x\mid y) \right) \\[12pt] &= (1-w)\, u_t^{\mathrm{target}}(x) + w\,u_t^{\mathrm{target}}(x\mid y). \end{align*} u~t(x∣y)=uttarget(x)+wat∇logpt(y∣x)=uttarget(x)+wat(∇logpt(x∣y)−∇logpt(x))=uttarget(x)−(wbtx+wat∇logpt(x))+(wbtx+wat∇logpt(x∣y))=(1−w)uttarget(x)+wuttarget(x∣y).
这说明 scaled guided vector field u ~ t ( x ∣ y ) \tilde{u}_t(x|y) u~t(x∣y) 本质上只是 unguided vector field 和 guided vector field 的线性组合。于是,一个自然想法是同时训练无条件模型,学习 u t t a r g e t ( x ) u_t^{\mathrm{target}}(x) uttarget(x)(例如使用 公式 (26)),训练条件模型,学习 u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y)(例如使用 公式 (58)),然后,在 inference 时将二者组合得到 u ~ t ( x ∣ y ) \tilde{u}_t(x|y) u~t(x∣y) 。
你可能会问:“等等!这不还是要训练两个模型吗?” 关键点在于实际上可以只训练一个模型。方法是我们给 label 集合新增一个特殊标签 ∅ \varnothing ∅ ,它表示 没有条件(absence of conditioning)。于是,我们可以将 u t t a r g e t ( x ) u_t^{\mathrm{target}}(x) uttarget(x) 看作 u t t a r g e t ( x ∣ ∅ ) u_t^{\mathrm{target}}(x|\varnothing) uttarget(x∣∅) ,这样同一个模型既能学习 conditional model 和 unconditional model 又无需额外训练 classifier。
这种在同一个模型中同时训练 conditional model 和 unconditional model,并在推理阶段增强 conditioning 的方法,就被称为 Classifier-Free Guidance(CFG)[18](Figure 12 给出了示意图)
Remark 26 (Derivation for general probability paths)
请注意,下面这个构造:
u ~ t ( x ∣ y ) = ( 1 − w ) u t t a r g e t ( x ) + w u t t a r g e t ( x ∣ y ) , \tilde{u}_t(x|y) = (1-w)u_t^{\mathrm{target}}(x) + wu_t^{\mathrm{target}}(x|y), u~t(x∣y)=(1−w)uttarget(x)+wuttarget(x∣y),
不仅对 Gaussian probability path 成立,而且对任意概率路径都成立。当 w = 1 w=1 w=1 时,很容易验证 u ~ t ( x ∣ y ) = u t t a r g e t ( x ∣ y ) \tilde{u}_t(x|y) = u_t^{\mathrm{target}}(x|y) u~t(x∣y)=uttarget(x∣y) 。此前我们使用 Gaussian paths 进行推导只是为了帮助理解 classifier-free guidance 的核心直觉。特别是放大一个假想 classifier ∇ log p t ( y ∣ x ) \nabla\log p_t(y|x) ∇logpt(y∣x) 的贡献。
Training and Classifier-Free Guidance.
现在我们需要修改之前的 guided conditional flow matching objective 即 公式 (58) 以便能够处理 y = ∅ y=\varnothing y=∅ 这种情况。问题在于,当我们采样 ( z , y ) ∼ p d a t a (z,y)\sim p_{\mathrm{data}} (z,y)∼pdata 时,实际上永远不会得到 y = ∅ y=\varnothing y=∅ ,因此,我们必须人为地引入 y = ∅ y=\varnothing y=∅ 的情况。
为此,定义一个超参数 η \eta η ,它表示丢弃原始 label y y y 并将其替换为 ∅ \varnothing ∅ 的概率。于是,我们得到 CFG Conditional Flow Matching Training Objective:
L C F M C F G ( θ ) = E □ [ ∥ u t θ ( x ∣ y ) − u t t a r g e t ( x ∣ z ) ∥ 2 ] □ = ( z , y ) ∼ p d a t a ( z , y ) , t ∼ U n i f [ 0 , 1 ] , x ∼ p t ( ⋅ ∣ z ) , replace y = ∅ with prob. η \begin{align} \mathcal{L}_{\mathrm{CFM}}^{\mathrm{CFG}}(\theta) &= \mathbb{E}_{\square} \left[ \left\| u_t^\theta(x\mid y) - u_t^{\mathrm{target}}(x\mid z) \right\|^2 \right] \tag{63} \\[14pt] \square\ &= (z,y)\sim p_{\mathrm{data}}(z,y), \, t\sim\mathrm{Unif}[0,1], \, x\sim p_t(\,\cdot\mid z),\, \text{replace } y=\varnothing \text{ with prob. } \eta \tag{64} \end{align} LCFMCFG(θ)□ =E□[ utθ(x∣y)−uttarget(x∣z) 2]=(z,y)∼pdata(z,y),t∼Unif[0,1],x∼pt(⋅∣z),replace y=∅ with prob. η(63)(64)

我们在下面总结这一部分的核心结论。
Summary 27 (Classifier-Free Guidance for Flow Models)
给定无条件边缘向量场 u t t a r g e t ( x ∣ ∅ ) u_t^{\mathrm{target}}(x|\varnothing) uttarget(x∣∅) ,条件边缘向量场 u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y) 以及 guidance scale w > 1 w>1 w>1 ,我们定义 classifier-free guided vector field u ~ t ( x ∣ y ) \tilde{u}_t(x|y) u~t(x∣y) 为:
u ~ t ( x ∣ y ) = ( 1 − w ) u t t a r g e t ( x ∣ ∅ ) + w u t t a r g e t ( x ∣ y ) (65) \tilde{u}_t(x|y) = (1-w)u_t^{\mathrm{target}}(x|\varnothing) + wu_t^{\mathrm{target}}(x|y) \tag{65} u~t(x∣y)=(1−w)uttarget(x∣∅)+wuttarget(x∣y)(65)
通过使用同一个神经网络,同时近似 u t t a r g e t ( x ∣ ∅ ) u_t^{\mathrm{target}}(x|\varnothing) uttarget(x∣∅) 与 u t t a r g e t ( x ∣ y ) u_t^{\mathrm{target}}(x|y) uttarget(x∣y) ,我们可以使用 classifier-free guidance CFM(CFG-CFM)objective:
L C F M C F G ( θ ) = E □ [ ∥ u t θ ( x ∣ y ) − u t t a r g e t ( x ∣ z ) ∥ 2 ] □ = ( z , y ) ∼ p d a t a ( z , y ) , t ∼ U n i f [ 0 , 1 ] , x ∼ p t ( ⋅ ∣ z ) , replace y = ∅ with prob. η \begin{align} \mathcal{L}_{\mathrm{CFM}}^{\mathrm{CFG}}(\theta) &= \mathbb{E}_{\square} \left[\left\| u_t^\theta(x\mid y) - u_t^{\mathrm{target}}(x\mid z) \right\|^2 \right] \tag{66} \\[14pt] \square\ &= (z,y)\sim p_{\mathrm{data}}(z,y), \, t\sim\mathrm{Unif}[0,1], \, x\sim p_t(\,\cdot\mid z),\, \text{replace } y=\varnothing \text{ with prob. } \eta \tag{67} \end{align} LCFMCFG(θ)□ =E□[ utθ(x∣y)−uttarget(x∣z) 2]=(z,y)∼pdata(z,y),t∼Unif[0,1],x∼pt(⋅∣z),replace y=∅ with prob. η(66)(67)
用更直白的话来说,CFG-CFM 的训练过程如下:
( z , y ) ∼ p d a t a ( z , y ) ▶ Sample ( z , y ) from data distribution. t ∼ U n i f [ 0 , 1 ] ▶ Sample t uniformly on [ 0 , 1 ] . x ∼ p t ( x ∣ z ) ▶ Sample x from the conditional probability path p t ( x ∣ z ) . with prob. η , y ← ∅ ▶ Replace y with ∅ with probability η . L ^ C F M C F G ( θ ) = ∥ u t θ ( x ∣ y ) − u t t a r g e t ( x ∣ z ) ∥ 2 ▶ Regress model against conditional vector field. \begin{align*} (z,y) & \sim p_{\mathrm{data}}(z,y) && \qquad \blacktriangleright\ \text{Sample } (z,y) \text{ from data distribution.} \\[12pt] t & \sim\mathrm{Unif}[0,1] && \qquad \blacktriangleright\ \text{Sample } t \text{ uniformly on } [0,1]. \\[12pt] x & \sim p_t(x\mid z) && \qquad \blacktriangleright\ \text{Sample } x \text{ from the conditional probability path } p_t(x\mid z). \\[12pt] \text{with prob. } & \eta,\ y\leftarrow\varnothing && \qquad \blacktriangleright\ \text{Replace } y \text{ with } \varnothing \text{ with probability } \eta. \\[12pt] \widehat{\mathcal{L}}_{\mathrm{CFM}}^{\mathrm{CFG}}(\theta) &= \left\| u_t^\theta(x\mid y) - u_t^{\mathrm{target}}(x\mid z) \right\|^2 && \qquad \blacktriangleright\ \text{Regress model against conditional vector field.} \end{align*} (z,y)txwith prob. L CFMCFG(θ)∼pdata(z,y)∼Unif[0,1]∼pt(x∣z)η, y←∅= utθ(x∣y)−uttarget(x∣z) 2▶ Sample (z,y) from data distribution.▶ Sample t uniformly on [0,1].▶ Sample x from the conditional probability path pt(x∣z).▶ Replace y with ∅ with probability η.▶ Regress model against conditional vector field.
在推理阶段,当给定某个固定 prompt y y y 时,我们可以通过下面的 ODE 进行采样:
Initialization: X 0 ∼ p i n i t ( x ) ▶ Initialize with simple distribution (such as a Gaussian) Simulation: d X t = u ~ t θ ( X t ∣ y ) d t ▶ Simulate ODE from t = 0 to t = 1. Samples: X 1 ▶ Goal is for X 1 to adhere to the guiding variable y . \begin{align*} \textbf{Initialization:}\qquad & X_0 \sim p_{\mathrm{init}}(x) && \blacktriangleright\ \text{Initialize with simple distribution (such as a Gaussian)} \\[14pt] \textbf{Simulation:}\qquad d & X_t = \tilde{u}_t^\theta(X_t\mid y)\,dt && \blacktriangleright\ \text{Simulate ODE from } t=0 \text{ to } t=1. \\[14pt] \textbf{Samples:}\qquad & X_1 && \blacktriangleright\ \text{Goal is for } X_1 \text{ to adhere to the guiding variable } y. \end{align*} Initialization:Simulation:dSamples:X0∼pinit(x)Xt=u~tθ(Xt∣y)dtX1▶ Initialize with simple distribution (such as a Gaussian)▶ Simulate ODE from t=0 to t=1.▶ Goal is for X1 to adhere to the guiding variable y.
Figure 13:展示了 classifier-free guidance 在不同 guidance scale 下的效果。实验数据集为 MNIST 手写数字数据集。左图(Left):guidance scale 设置为 w = 1.0 w = 1.0 w=1.0 ,中图(Middle):guidance scale 设置为 w = 2.0 w = 2.0 w=2.0 ,右图(Right):guidance scale 设置为 w = 4.0 w = 4.0 w=4.0 。你将在 Lab 3 中亲自生成类似的图像!
请注意,当我们使用 w > 1 w>1 w>1 时,最终的 X 1 X_1 X1 分布不再一定严格满足 X 1 ∼ p d a t a ( ⋅ ∣ y ) X_1\sim p_{\mathrm{data}}(\cdot|y) X1∼pdata(⋅∣y) 。然而。从经验上来看,这种做法往往能够带来更好的 conditioning alignment(条件对齐效果)。因此,classifier-free guidance 本质上是一个 heuristic(启发式方法),它主要是因为在实践中表现极其优秀才被广泛采用。
事实上。几乎所有你看到的 AI 生成图片或视频都严重依赖 classifier-free guidance,并通常使用 w ≥ 4 w\geq 4 w≥4 。在 Figure 11 中,我们展示了基于类别(class-based)的 classifier-free guidance 在 128×128 ImageNet 上的效果(参考文献 [18])。类似地,在 Figure 13 中,我们展示了不同 guidance scale w w w 对 MNIST 手写数字生成结果的影响。
Remark 28 (Guidance for Diffusion Models)
将前面对 flow models 的讨论扩展到 diffusion models 是非常直接的。我们只需要将 u t θ ( x ∣ y ) u_t^\theta(x|y) utθ(x∣y) 替换为 u ~ t θ ( x ∣ y ) \tilde{u}_t^\theta(x|y) u~tθ(x∣y) 即可。随后,按照第 4 节(Section 4)中介绍的方法,使用 SDEs(随机微分方程)进行采样即可。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)