来源:Song 等,2021,arXiv:2011.13456,§5(可控生成,论文式 14)。 记号:$y$ 是条件(类别标签、一段文字、一张待补全的图等);$p_t(x\mid y)$ 是「给定 $y$ 时」$t$ 时刻加噪图的分布;其余沿用前面。 读法:§10.1 目标(从无条件变有条件);§10.2 一条贝叶斯把条件 score 拆成「无条件 score + 引导项」;§10.3 条件反向 SDE(式 14);§10.4 逆问题(补全/上色)用「投影回已知部分」做;§10.5 这就是下个单元 CFG 的本体。 --- ## §10.1 目标:从「随便生成」到「按条件生成」 这一步:说清可控生成要改的是哪一个量。 前面几节的反向 SDE/ODE 都在采无条件分布 $p(x)$,生成一张「随便的真实图」。可控生成要的是条件分布 $p(x\mid y)$:给定类别 $y$ 就只生成那一类、给定文字 $y$ 就生成符合描述的图。 回忆 §4 的反向 SDE:整条式子里,唯一和「采哪个分布」有关的量是那个 score $\nabla_x\log p_t(x)$。所以要从 $p(x)$ 改成采 $p(x\mid y)$,**只需把无条件 score 换成条件 score $\nabla_x\log p_t(x\mid y)$,其余 $f,g$ 一字不动**。问题就剩一个:条件 score 怎么得到? --- ## §10.2 一条贝叶斯:条件 score = 无条件 score + 引导项 这一步:用一条贝叶斯公式,把条件 score 拆成「已有的无条件 score」加「一个引导项」。 要用的规则(贝叶斯公式,《条件期望与条件方差》那块的同源东西):把联合密度两种拆法对齐, $p(x\mid y)=\frac{p(y\mid x)\,p(x)}{p(y)}$ 两边取对数(乘除变加减): $\log p(x\mid y)=\log p(y\mid x)+\log p(x)-\log p(y)$ 对 $x$ 求梯度。关键一步:$\log p(y)$ 不含 $x$,对 $x$ 的梯度是 $0$(和 §1 里「不含 $x$ 的常数项梯度为零」同一回事)。于是: $\nabla_x\log p(x\mid y)=\nabla_x\log p(x)+\nabla_x\log p(y\mid x)$ 写成带时间的版本(加噪过程每个 $t$ 都成立): > [!danger] Score-SDE 论文(§5)· 条件 score 拆分(贝叶斯) > $\underbrace{\nabla_x\log p_t(x\mid y)}_{\text{条件 score(要的)}}=\underbrace{\nabla_x\log p_t(x)}_{\text{无条件 score(已会)}}+\underbrace{\nabla_x\log p_t(y\mid x)}_{\text{引导项}}$ > 第一项就是前面训好的那个 score 网络;第二项是新加的引导,「往『更符合条件 $y$』的方向推」。 引导项 $\nabla_x\log p_t(y\mid x)$ 怎么来:**经典做法是训一个分类器 $p_t(y\mid x)$(输入加噪图、输出它属于类别 $y$ 的概率),对输入 $x$ 求梯度就得到这一项,这一路叫 classifier guidance(分类器引导)**。 --- ## §10.3 条件反向 SDE(论文式 14) 把 §4 反向 SDE 里的无条件 score 换成上面拆出的条件 score,就是可控生成的采样方程: > [!danger] Score-SDE 论文式(14) · 条件反向 SDE > $\mathrm dx=\Big[\,f-g^2\big(\nabla_x\log p_t(x)+\nabla_x\log p_t(y\mid x)\big)\Big]\mathrm dt+g\,\mathrm d\bar w$ > 和 §4 无条件反向 SDE 唯一的差别:score 项里多了一个引导项 $\nabla_x\log p_t(y\mid x)$。$f,g$ 照旧、扩散照旧。 直觉:**无条件 score 把样本往「像真实图」推,引导项再把它往「符合条件 $y$」推,两个方向相加,最终落在「既真实又符合 $y$」的图上**。概率流 ODE 版本同理(把那一对 score 整体替换即可),只是系数 $\tfrac12 g^2$、无随机项。 --- ## §10.4 逆问题:补全、上色(不用重训) 这一步:把「补全缺失区域」「黑白上色」这类逆问题也纳进同一框架,它们其实是一种特殊的条件生成,而且不用额外训模型,直接复用已训好的无条件 score 网络。 先看它们怎么算「条件 $y$」: - 图像补全(inpainting):$y$ = 没被遮住的那些像素(已知),要生成被遮住的部分。 - 上色(colorization):$y$ = 灰度图(已知亮度),要生成颜色。 共同点:条件 $y$ 就是图本身的一部分已知,要补的是其余部分。这类问题有个干净做法(论文 §5),每一步两个动作: - 未知区域:照常做一次反向 SDE 步(用无条件 score,§4 那条)。 - 已知区域:不让模型自由生成,而是直接用已知真值加噪到当前时刻 $t$ 的版本覆盖它(已知真值在手,按 §3 前向核加噪到 $t$ 即可,不需要网络)。 **每步都这样「未知部分由 score 生成、已知部分用加噪真值钉住」,一路走到 $t=0$,最后未知区域被补成与已知部分协调一致的内容。** 为什么成立(直觉):把已知部分每步钉在「真值的加噪版」上,等于强行让整条轨迹待在「与观测一致」的那个切片里;未知部分则被 score 往「在这些已知像素条件下最像真实图」的方向拉,网络训练时学到的像素间关联,自动让补出来的部分接得上已知部分。本质仍是 §10.2 那个条件 score,只是这里的「条件」换了进场方式:直接把已知坐标替换回去。 --- ## §10.5 这就是下个单元 CFG 的本体 这一步:点明它和下个单元 classifier-free guidance(CFG)的关系。 上面这套「无条件 score + 引导项」是 classifier guidance,需要额外训一个噪声分类器,麻烦且易出错。下个单元的 classifier-free guidance(CFG) 是它的升级: - 不再训分类器。改成一个网络同时学有条件 score $\nabla\log p_t(x\mid y)$ 和无条件 score $\nabla\log p_t(x)$(训练时随机把条件 $y$ 丢掉一部分)。 - 由本节那条拆分式反解:引导项 $\nabla\log p_t(y\mid x)=\nabla\log p_t(x\mid y)-\nabla\log p_t(x)$,正好用网络自己的两个输出之差表示,不需要外部分类器。 - 再给引导项乘一个放大系数(guidance scale),就能调「多听话」。 **所以本节的式 14 与那条拆分式,就是 CFG 的地基:CFG 不过是「用一个网络的有条件、无条件两个输出之差,替掉外部分类器的引导项」。**把本节这条拆分理解透,CFG 就只是换了引导项的来源。 --- ## 本节一条线 可控生成只改反向 SDE 里那一个量:把无条件 score 换成条件 score。一条贝叶斯把条件 score 拆成 $\nabla\log p_t(x\mid y)=\nabla\log p_t(x)+\nabla\log p_t(y\mid x)$,前者是已训好的 score,后者是新的引导项(训个噪声分类器对 $x$ 求梯度,即 classifier guidance)。代回反向 SDE 得条件反向 SDE(式 14),$f,g$ 全不变。下个单元的 CFG 就是把这个引导项改成「同一网络的有条件、无条件输出之差」,省掉外部分类器。至此整篇论文走完:前向 SDE(§3)→ 反向只缺 score(§4)→ 训 score(§5)→ 确定性概率流 ODE(§6)→ PC 采样(§7)→ 似然与隐空间编辑(§8)→ 架构与结果(§9)→ 条件生成与逆问题(§10),统一在 $\mathrm dx=f\,\mathrm dt+g\,\mathrm dw$ 加一个 score 上。