少步生成·分布篇:从轨迹转向分布
这是“少步生成”系列的第三篇,也是收官篇。第一篇(轨迹篇)在轨迹形状上做文章(跳过/掰直),第二篇(映射篇)学任意两点的流映射/平均速度。这两条都还在“逐点对齐某个映射或轨迹”。这一篇彻底换轴:不要求学生一步的输出等于教师某条轨迹的终点,只要求“学生输出的整体分布 = 数据分布”。
换轴的回报是:问题从“回归一个映射”变成“最小化两个分布的散度”,而散度的梯度恰好化成两个 score 之差。本篇所有方法(DMD/SiD/Diff-Instruct/f-distill/TDM/Uni-Instruct)连同对抗支(GAN),都围着这一条 score 之差转,区别在于给它配什么权重、施加在哪一层、以及用什么方式估出来。要推的关键恒等式有五处:§1 的 score 差、GAN logit = 对数密度比、f-distill 的逐点权重、TDM 的代理目标、SiD 的三条 score 恒等式。
0. 换轴:从“对齐映射”到“对齐分布”
三根轴还是老三样(见第一篇 §0.4):
- 轴 A|匹配什么:轨迹/端点映射 · 边际分布 · 判别器。
- 轴 B|学什么映射:端点 · 任意两点 · 拉直。
- 轴 C|要不要教师。
前两篇都站在轴 A 的“轨迹/端点映射”格子里。这一篇整篇都在填轴 A 的“边际分布”与“判别器”两格,而这两格其实是同一条 score 之差的显式估法与隐式估法。
为什么要换。 逐点回归有个绕不开的通病:只要给定网络输入之后,回归靶还是个有分布的随机量,平方损失的最优解就是它的条件均值(见第一篇 §1.1),几个模式一平均就糊。无教师的自举、独立耦合下的 \(x_0\) 或 flow-map 回归,都是这种情形。就算靶是教师 ODE 给出的确定点(第一篇的 KD/CM、第二篇的蒸馏式 flow-map 都是),一步学生仍要用有限容量去逼一个强非线性映射,逼不动照样发糊。分布匹配绕开这一层:我不管你这一跳落到哪个具体点,我只要求你落点的整体分布对上数据分布。落点可以在模式之间跳来跳去,只要边际对齐,就不逼你去取那个“发糊的平均”。
代价与办法。 直接比“学生分布 \(q_\theta\)”和“数据分布 \(p\)”很难(密度都难算)。分布匹配支的统一技巧是:把两者都加噪到同一噪声级 \(t\) 再比——因为加噪后的边际 score 有现成的扩散模型可估。而“比”的方式,归结为下面这条恒等式。
1. 公共恒等式:分布散度的梯度 = score 之差
设一步生成器 \(x_0=G_\theta(z),\ z\sim\mathcal N(0,I)\),其输出分布记 \(q_\theta\);数据分布 \(p\)。把两者都加噪到级别 \(t\),\(x_t=\alpha_t x_0+\sigma_t\varepsilon\),得扩散边际 \(q_t^\theta\) 与 \(p_t\)。目标是逐 \(t\) 的 KL 积分:
加噪那一层是散度有定义的前提:\(q_0^\theta\) 是高斯经 \(G_\theta\) 的推前,一般支撑在低维集上、对 \(p_0\) 不绝对连续,\(D_{\mathrm{KL}}(q_0^\theta\|p_0)\) 往往就是 \(+\infty\);而每个 \(t>0\) 上两边都有正密度,被积函数有限。端点为无穷并不使积分失效——权重选得当时它仍可积,§2 的 Diff-Instruct 正是用这一点说明,即使支撑完全不重合、KL 退化成 \(+\infty\),这个积分仍取有限值。真正把下限抬到某个 \(t_{\min}>0\) 的是实现层面的考虑:下面的梯度里带 \(1/\sigma_t\),\(\sigma_t\to0\) 时方差爆,所以采样时把 \(t\) 限在远离两端的窗口内(DMD 取的是 \([0.02T,\,0.98T]\))。
定理(KL 对生成器参数的梯度 = fake/real score 之差)。
点开看证明(score-function 恒等式)
用重参数化 \(x_t=\alpha_t G_\theta(z)+\sigma_t\varepsilon\),给定 \(z,\varepsilon\) 时 \(x_t\) 是 \(\theta\) 的确定函数,于是
对 \(\theta\) 求梯度,\(\log q_t^\theta(x_t)\) 对 \(\theta\) 有两条依赖:显式(密度 \(q_t^\theta\) 自带下标 \(\theta\))与隐式(经 \(x_t\))。分开写:
关键一步 \((\mathrm I)=0\)(很多推导默认跳过,这里显式写清):
这正是 score-function / likelihood-ratio 恒等式(积分与求导交换、总概率恒为 1)。于是只剩 \((\mathrm{II})\),即所证。\(\blacksquare\)
换成噪声/去噪器。 score 与预测噪声 \(\varepsilon_\bullet\)、去噪器 \(D_\bullet\) 的关系(Tweedie)是 \(s_\bullet=-\varepsilon_\bullet/\sigma_t=(\alpha_t D_\bullet-x_t)/\sigma_t^2\),故 \(s_{\text{fake}}-s_{\text{real}}=(\varepsilon_{\text{real}}-\varepsilon_{\text{fake}})/\sigma_t\)——梯度也常写成预测噪声之差。\(\partial x_t/\partial\theta=\alpha_t\,\partial x_0/\partial\theta\) 里的 \(\alpha_t\)、以及上面这个 \(1/\sigma_t\),后文一律吸进权重 \(w(t)\);所以同一条梯度在不同论文里会差一个只依赖 \(t\) 的因子,不影响最优解。
双网络结构由来。 两个 score 从哪来?\(s_{\text{real}}\) = 冻结教师(直接用);\(s_{\text{fake}}=\nabla_x\log q_t^\theta\) = 学生当前输出分布的 score,没有现成的,得在线训一个辅助扩散模型 \(s_\psi\) 去拟合(对学生样本做标准去噪 DSM,最优即条件期望)。这就是分布匹配支“一个生成器 + 一个在线 fake-score”双网络结构的根。后面的变体基本都在这条恒等式上做文章:换写法、换散度、换施加位置。
2. 从近似到忠实:SDS → VSD → Diff-Instruct
SDS(Score Distillation Sampling, DreamFusion 2022)是定理的第一个、也是最粗糙的特例:它把 \(s_{\text{fake}}\) 近似成单粒子高斯 score——假设“学生这一个样本”加噪后的分布就是以 \(\alpha_t x_0\) 为中心、方差 \(\sigma_t^2\) 的高斯。这个高斯的 score 恰为 \(-\varepsilon/\sigma_t\),就是加进去的那个 \(\varepsilon\)。代入定理:
因为用单粒子近似 \(s_{\text{fake}}\),SDS 过度 mode-seeking、产出过饱和/糊。
VSD(Variational Score Distillation, ProlificDreamer 2023)把这个近似修好:不近似,而真的训一个 \(s_\psi\)(LoRA)去拟合学生当前分布的 score,再代回定理。这修正了 SDS 的偏差、恢复多样性。VSD 就是定理的忠实实现,也是 DMD 的直接前身(差别只在 VSD 面向 per-scene 3D 优化、DMD 面向一步图像生成器)。
Diff-Instruct(Luo et al. 2023)把“逐 \(t\) 的 KL 积分”正式命名为 Integral-KL(IKL),并写出显式梯度(对 \(t\) 逐点套定理、再积分、用 \(s_\bullet=-\varepsilon_\bullet/\sigma_t\) 换成预测噪声差):
它给出“把任意预训练扩散蒸成任意隐式一步生成器”的通用配方,DMD、SiD、f-distill 都从这里出发。
3. 落地一步图像生成器:DMD → DMD2
DMD(Distribution Matching Distillation, Yin et al. 2023)把 IKL 落到一步文生图。主损失就是定理的 reverse-KL 梯度,双网络:冻结 \(s_{\text{real}}=s_\phi\)(教师)+ 在线 \(s_{\text{fake}}=s_\psi\)(拟合学生输出,交替更新)。但纯 reverse-KL 易 mode collapse,DMD 额外加一个回归正则:预存少量教师多步采样对 \((z^{(i)},y^{(i)})\),令 \(\mathcal L_{\text{reg}}=\mathbb E\,\mathrm{LPIPS}(G_\theta(z^{(i)}),y^{(i)})\),把学生“钉”在教师流形附近防塌缩。总损失 = IKL + \(\lambda\mathcal L_{\text{reg}}\)。
DMD2(2024)去掉那个又贵、又把学生上限钉死在教师的回归项,改用三条交替更新:
- 生成器 \(\theta\)(reverse-KL / IKL 梯度):\(\nabla_\theta\mathcal L_G=\mathbb E[w(t)(s_\psi-s_\phi)^\top\partial x_t/\partial\theta]\);
- fake-score \(\psi\)(对学生样本做 DSM):\(\min_\psi\mathbb E\,\gamma(t)\|f_\psi(x_t,t)-x_0\|^2\),最优 \(f_{\psi^*}=\mathbb E[x_0\mid x_t]\)(平方损失最优 = 条件期望);
- 判别器 \(\eta\)(GAN,真实图为正):\(\max_\eta\mathbb E_{p}\log d_\eta+\mathbb E_{q_\theta}\log(1-d_\eta)\),其损失回传给 \(\theta\) 让学生可超教师。
这里靠双时标更新(Two Time-Scale Update Rule,TTUR) 撑住:\(\psi\)(及 \(\eta\))用更大学习率 / 更多内步先追上当前学生分布,\(\theta\) 用较小步慢走。原因是定理的梯度只有在 \(s_\psi\approx\nabla\log q_t^\theta\) 时才无偏,fake-score 追不上则梯度有偏、易塌缩。整合成无需配对数据集的纯分布匹配,SDXL 上一步/四步质量推到接近甚至超过教师。
DMD2 的“把 score 差包成回归”手法,正是第一篇 §2.5 rCM 那条代理损失的来源——\(\|x_0-\mathrm{sg}[x_0-g]\|^2\) 自动微分即得 \(2g^\top\partial x_0/\partial\theta\),这里 \(g\propto(f_\psi-f_\phi)\)。所以 rCM 的“寻峰项”就是把 DMD 塞进一致性模型。
4. 换个 score 写法降方差:SiD
SiD(Score identity Distillation) 不写 KL,而从 Fisher 散度(model score matching) \(\mathcal L_\theta=\mathbb E_{x_t\sim q_t^\theta}\|s_\phi(x_t)-\nabla\log q_t^\theta(x_t)\|^2\) 出发,用三条 score 恒等式改写成 data-free、低方差的生成器损失。(沿用 §1 的记号:\(p_t\) 是数据加噪后的边际,\(q_t^\theta\) 是学生输出加噪后的边际。这里叫 Fisher 散度是名副其实的:两项分别是 \(p_t\) 与 \(q_t^\theta\) 的 score,都能积成密度,不像第一篇 §0.3 里那个自由向量场——严格起见还要把 \(s_\phi\) 理想化成 \(\nabla\log p_t\)。)
点开看:SiD 用到的三条 score 恒等式
沿 SiD 设 \(\alpha_t{=}1\) 的 VE 简化。这一节的 \(x_0\) 按 SiD 原文指真实数据、\(x_g=G_\theta(z)\) 指生成样本,与 §1 里 \(x_0=G_\theta(z)\) 的用法不同。记教师去噪器 \(f_\phi\approx\mathbb E[x_0\mid x_t]\)、fake 去噪器 \(f_\psi\approx\mathbb E[x_g\mid x_t]\):
- 真数据 Tweedie:\(\mathbb E[x_0\mid x_t]=x_t+\sigma_t^2\nabla\log p_t(x_t)\)(\(p_t\) 是加噪后边际,非 \(p_{\text{data}}\)),故 \(s_\phi=\sigma_t^{-2}(f_\phi-x_t)\);
- fake 数据 Tweedie:\(\mathbb E[x_g\mid x_t]=x_t+\sigma_t^2\nabla\log q_t^\theta(x_t)\),故 \(s_\psi=\sigma_t^{-2}(f_\psi-x_t)\),score 差 \(\delta_{\phi,\psi}=\sigma_t^{-2}(f_\phi-f_\psi)\);
- score-投影恒等式(SiD 的关键):边际 score 是条件 score 的条件期望(与第一篇 §0.3 里 DSM 证明的第二步同一件事),于是对任意只依赖 \(x_t\) 的场 \(u\)(这个限制是要紧的,\(u\) 若还依赖 \(x_g\) 就不成立),
右端只用到加噪时那个已知的 \(\varepsilon_t\),不可算的 \(\nabla\log q_t^\theta\) 就被消掉了。
三条恒等式合起来做的事,是把不可算的边际 score \(\nabla\log q_t^\theta\) 换成可算的条件 score \(-\varepsilon_t/\sigma_t\)——这正是 data-free 的来源。
\(\alpha\)-融合生成器损失。 先设 fake 去噪器已取到最优 \(f_\psi=\mathbb E[x_g\mid x_t]\),此时 \(s_\psi\) 就是 \(q_t^\theta\) 的真边际 score,Fisher 散度可以写成 \(\mathbb E\big[\delta_{\phi,\psi}^\top(s_\phi-s_\psi)\big]\),而右边那份 \(s_\psi\) 正好能用第 3 条恒等式换掉(\(\delta_{\phi,\psi}\) 只依赖 \(x_t\),满足限制),效果等于把 \(f_\psi\) 换成 \(x_g\):
最后一步只是把 \(f_\phi-x_g\) 拆成 \((f_\phi-f_\psi)+(f_\psi-x_g)\),两项之和就是散度本身。
这条等式只在 \(\psi\) 取到最优时成立,而在线训练的 \(f_\psi\) 永远只是近似——\(\alpha\) 就活在这道缝里。直接拿左边的 \(\mathbb E\|\delta_{\phi,\psi}\|^2\) 当损失是行不通的:能构造出这样的例子,最小化真散度会把 \(\theta\) 推到最优,而这个平方式给出的梯度对最优 \(\theta\) 毫无指向。于是给平方项单独配一个系数:
\(\alpha{=}1\) 抵消平方项、只留稳定的交叉项(那一项里的 \(f_\psi-x_g\) 是 fake 去噪器在生成样本上的残差,与教师无关)。fake-score 训练 \(\min_\psi\mathbb E\,\gamma(t)\|f_\psi(x_t,t)-x_g\|^2\)(对生成样本 DSM)。data-free:\(f_\phi\)(冻结教师)、\(f_\psi\)(只在 \(x_g\) 上训)、\(x_g\)(自采样)都不含真实图。
SiD 的方差优势是相对朴素平方估计而言(\(\alpha{=}1\) 那步避开了会放大梯度的项),它并没有证明“方差低于 DMD”,超越 DMD 是经验 FID 上的结果。它也不是 \(\eqref{eq:score-diff}\) 的等价改写:SiD 对两个去噪器都反传,生成器梯度里还多出 \(\partial f_\phi/\partial x_t\) 与 \(\partial f_\psi/\partial x_t\) 两个 Jacobian 项,这是它与 Diff-Instruct、DMD 的实质区别(代价是每步迭代慢三成左右),\(\eqref{eq:score-diff}\) 给不出这些项。
5. 换散度:f-distill
DMD/VSD 用的都是 reverse-KL——mode-seeking、丢模式。f-distill 把它推广到任意 \(f\)-散度 \(D_f(p_t\|q_t)=\int q_t f(p_t/q_t)\)。
定理(梯度与逐点权重)。 记密度比 \(r_t=p_t/q_t\)。三步。先对 \(q\) 求变分:\(\partial_q\big[q\,f(r)\big]=f(r)-rf'(r)\),于是 \(\nabla_\theta D_f=\int\big(f(r_t)-r_tf'(r_t)\big)\,\partial_\theta q_t\,\mathrm dx\)。再看 \(\theta\) 一动 \(q_t\) 怎么动:记 \(v_\theta(x)=\mathbb E\big[\partial_\theta x_t\mid x_t=x\big]\) 为参数扰动诱导的速度场,则 \(q_t\) 满足连续性方程 \(\partial_\theta q_t=-\nabla_x\!\cdot\!(q_tv_\theta)\);代入后做一次分部积分,把 \(\nabla_x\) 搬到括号上,得 \(\mathbb E_{q_t}\big[v_\theta^\top\nabla_x(f-rf')\big]\)。最后 \(\nabla_x\big[f(r)-rf'(r)\big]=-r f''(r)\nabla_x r\)(\(f'\) 就是在这一步相消的),配上 \(\nabla_x r_t=r_t(\nabla\log p_t-\nabla\log q_t)\);括号里只依赖 \(x_t\),于是 \(v_\theta\) 可以按定义换回 \(\partial_\theta x_t\),\(\alpha_t\) 照例吸进权重,得
即“两 score 之差 × 逐点权重 \(h(r)=r^2f''(r)\)”。密度比 \(r_t\) 由辅助 GAN 判别器读出:\(r_t\approx d_\lambda/(1-d_\lambda)\)。
reverse-KL = DMD 常权特例。 reverse-KL 由 \(f(r)=-\log r\) 生成:\(f'(r)=-1/r,\ f''(r)=1/r^2\),故 \(h(r)=f''(r)r^2=1\)(常数)——梯度退化为 \(\mathbb E[(s_\psi-s_\phi)\nabla_\theta G]\),正是 DMD/VSD。其余 \(f\) 的权重:softened-RKL \(h=\tfrac1{r+1}\)、JS \(h=\tfrac{r}{r+1}\)、squared-Hellinger \(h=\tfrac14 r^{1/2}\)、forward-KL \(h=r\)。规律:越 mode-seeking,\(h\) 增长越慢(RKL 恒为 1);越 mode-covering,\(h\) 随 \(r\) 增大而下调低教师密度区(那里教师 score 不可靠)。代价分两种,看 \(h\) 有没有界:forward-KL 的 \(h=r\)、Jeffreys 的 \(h=r+1\) 都无界,两分布一拉开梯度方差就爆;JS 的 \(h=\tfrac{r}{r+1}\le1\) 有界,方差稳,代价落在小 \(r\) 那一侧:学生把质量堆到教师几乎没有密度的地方时 \(r\to0\)、权重也跟着趋零,而那正是最该被压下去的区域,训练早期于是推不动。没有哪个 \(f\) 全面最优:CIFAR-10 上 mode-covering 更强的 forward-KL 更好,ImageNet-64 与文生图上则是 JS(一步 FID 1.16)。
6. 把分布匹配搬到轨迹:TDM
前面的分布匹配只对齐干净端 \(x_0\) 的边际(定理施加在 \(x_0=G_\theta(z)\) 上),天然偏一步、多步不灵活;而第一篇的轨迹蒸馏做实例级逐点对齐,容量吃紧、还受教师 ODE 截断误差拖累。TDM(Trajectory Distribution Matching) 取两者之长:不在实例级、而在分布级对齐轨迹——让 \(K\) 步学生轨迹上每个中间点的边际都对齐教师在对应噪声级的扩散边际。
四步流程。 每次迭代先用 ODE 求解器跑 \(K\) 步学生,存下中间样本 \(\{x_{t_i}\}\)。
① 目标 = 逐锚点的边际 reverse-KL:
让学生第 \(i\) 个中间点的边际 \(q_\theta\) 对齐教师同噪声级的扩散边际(\(p_\phi\) = 冻结教师)。
② 扩散到区间、接上定理:把每个锚点再加噪到区间 \([t_i,t_{i+1}]\) 上。记 \(q^{(i)}_{\theta,\tau}\) 为“取 \(x_{t_i}\sim q_{\theta,t_i}\)、再加噪到 \(\tau\)”所得的边际,实际优化的是
\(L_\lambda\) 不是 ① 的等价改写:同一个加噪核作用在两边只会让它们更近(数据处理不等式),每一项都不超过对应的 \(D_{\mathrm{KL}}(q_{\theta,t_i}\|p_{\phi,t_i})\)。换它的理由和 §1 一样——只有加噪之后的 score 才有现成模型可估;而两者的零点是同一个:高斯卷积可逆,各噪声级上都对齐就意味着锚点本身也对齐。
③ 梯度 = 定理的 score 差(学生 score 用在线 fake score \(s_\psi\) 近似):
④ 可反传 surrogate:把该梯度写成对锚点的一步回归,目标是“沿 reverse-KL 走一步梯度下降后的修正样本”\(\tilde x_{t_i}\)(实现时 \(\tau\) 是采样的,故写成期望):
验证:\(\nabla_\theta\|x_{t_i}-\mathrm{sg}(\tilde x_{t_i})\|_2^2=2(x_{t_i}-\tilde x_{t_i})^\top\tfrac{\partial x_{t_i}}{\partial\theta}=2\lambda_\tau[s_\psi-s_\phi]^\top\tfrac{\partial x_{t_i}}{\partial\theta}\),与 ③ 逐字相符(与 DMD2 同一手法)。关键:这条梯度就是 DMD/Diff-Instruct 用的那条(即 §1 的恒等式 \(\eqref{eq:score-diff}\)),只是把施加位置从“唯一干净端”扩成“轨迹上多个中间锚点”。
两个设计要点。(i)区间不重叠 ⇒ 单个 fake score 够用:不同 \(t_i\) 的轨迹样本本属不同分布,但只要相邻区间不交,时间戳本身就能把它们分开,共用一个 \(s_\psi\) 即可。(ii)灵活步数(TDM-unify):把步数 \(K\) 作条件同时喂进学生与 fake score。若两个步数共享一个 fake score,其最优解会是按密度加权的混合 score、对任一单独 \(K\) 都不是真 score(有偏);注入 \(K\) 后各分布被分开、偏差消除,一个模型支持任意确定性步数。
落地:完全 image-free / data-free,把 PixArt-α 蒸成 4 步、在 1024 分辨率真实用户偏好上超过其多步教师,仅约教师训练成本的 0.01%;并扩到视频(CogVideoX)。它还有个把 reward 学进 fake score 的 RL 扩展 TDM-R1,这条线留到后面另开的《对齐系列》细讲。
7. 统一与规模化:Uni-Instruct / SiD-DiT / Phased DMD / CDM
Uni-Instruct 把这一支的几条线收到了一起。DMD 用 reverse-KL、SiD 用 Fisher/score-identity、f-distill 换任意 \(f\)-散度——看似各走各路,Uni-Instruct 证明它们是同一个目标在不同 \(f\) 上的投影。它先把干净端的 \(f\)-散度沿扩散时间展开成一条“score 差的加权 Fisher 型积分”:
被积权重 \(h(r)=r^2f''(r)\) 正是 f-distill 那条 \(\eqref{eq:fdiv}\) 里的权重——同一条展开;\(f=-\log r\)(reverse-KL)时 \(h\equiv1\),退化为 de Bruijn 型恒等式——KL 沿扩散时间的导数就是 Fisher 散度(经典的 de Bruijn 讲的是微分熵与 Fisher 信息,这里是它的相对熵版本)。它与 §1 的 \(\eqref{eq:score-diff}\) 是两条不同的恒等式,只是都长成 score 差的样子:一条对扩散时间求导、给出散度本身的积分展开,一条对参数求导、给出梯度。Uni-Instruct 的路径是先用前者展开、再对 \(\theta\) 求梯度。它进一步证明该积分对 \(\theta\) 的梯度可拆成两块可算梯度,由密度比的高阶导做门控:\(\mathcal C_1=r^3f'''(r)\)、\(\mathcal C_2=2r^2f''+4r^3f'''+r^4f''''\);于是选不同 \(f\) 只改两块权重:
- \(f=\chi^2\Rightarrow\mathcal C_1\equiv0\),只剩 Diff-Instruct / DMD;
- \(f=\) reverse-/forward-/Jeffrey-KL \(\Rightarrow\) 只剩 SiD / SIM;
- f-distill = 再多乘一个时间权重。
这里的 \(f\) 与 §5 的 \(f\) 索引的不是同一个对象:§5 的 \(f\) 定在每个噪声级上的 \(D_f(p_t\|q_t)\),这里的 \(f\) 定在干净端 \(D_f(p_0\|q_0^\theta)\)、再沿时间展开。所以“reverse-KL 给出 DMD”与上面“\(\chi^2\) 给出 DMD”并不矛盾,是两套参数化各自的说法。
这里的密度比仍是 §5 那个 \(r=p_t/q_t^\theta\),用 GAN 判别器估(即 §8 那条“logit = 对数密度比” \(\eqref{eq:logit}\))。一步 ImageNet-64 FID 1.02(超过其 79 步教师 2.35)。
其余三篇各补一个方向。
SiD-DiT 先证“扩散与 flow-matching 只是同一去噪目标的重参数化”——线性 FM 教师(速度 \(v^{\text{FM}}_\phi=\varepsilon-x_0\))的干净预测由一步代数给出 \(f_\phi(x_t)=x_t-t\,v^{\text{FM}}_\phi(x_t)\),不解任何 ODE 就把 FM 教师翻成 SiD 需要的去噪器。再把 §4 那条低方差 score 投影损失开箱搬过来:
其中 \(f_\phi\) 是把 CFG 烘进后的教师去噪器、\(f_\psi\) 用标准 FM 损失在线训练。对 SANA/SD3.5/FLUX(0.6B–12B)开箱即用、且 data-free。
Phased DMD 把 SNR 轴分段、每段一个 MoE 专家渐进匹配。难点是中间段停在中间 SNR \(s\)、根本没有干净 \(x_0\) 训 fake score。它只用手头的 \(x_s\),配上高斯条件核 \(p(x_t\mid x_s)\),把 DSM 恒等式里的 \(\nabla_{x_t}\log p(x_t\mid x_s)\) 代进去,得到一个只依赖 \(x_s\)、却对区间边际 score 无偏的回归目标。以下取线性 FM 参数化(\(\alpha_t+\sigma_t=1\)、速度靶 \(v=\varepsilon-x_0\)),并把 \(x_t\) 按条件核分解成 \(x_t=\tfrac{\alpha_t}{\alpha_s}x_s+\sigma_{t\mid s}\varepsilon_{t\mid s}\)、\(\sigma_{t\mid s}^2=\sigma_t^2-\tfrac{\alpha_t^2}{\alpha_s^2}\sigma_s^2\):
\(\varepsilon_{t\mid s}\) 是条件核 \(p(x_t\mid x_s)\) 那一层的噪声,不是 §1 里从 \(x_0\) 加到 \(x_t\) 的那个 \(\varepsilon\)。这恰好保住 DMD 无偏性所需的“fake 网络是合法 score 估计器”条件——没有 \(x_0\) 也能无偏地训中间段 fake score。蒸 Qwen-Image-20B、Wan2.2-28B。
CDM 把匹配推到连续时间,并用一条离轨(off-trajectory)对齐直接压少步截断漂移:在当前点 \(x_t\) 用学生速度一步 Euler 外推到随机远处 \(x_{t'}=x_t+(t'-t)v_t\),在那里算学生干净预测 \(\hat x_0^{(\prime)}=D_\theta(x_{t'},t',c)\),局部重加噪成目标锚 \(\hat z_{\hat\tau}=(1-\hat\tau)\,\mathrm{sg}[\hat x_0^{(\prime)}]+\hat\tau\varepsilon\),再用“教师 − fake 去噪器差”往回拽:
由于外推点 \(x_{t'}\) 由学生自己的速度决定,这一项约束的是速度沿轨迹的变化率,作用相当于正则化少步 Euler 的二阶截断项,于是去掉 GAN 与奖励仍能强保真(SD3-Medium,4 NFE)。
8. 对抗支:同一条 score 差的隐式估法
GAN 看上去和前面几节是两套东西,其实估的是同一个量。
为什么少步需要对抗信号。 回归型损失的最优解是条件均值(见第一篇 §1.1):靶一带随机性、或者容量不足只能折中,输出就往均值靠,在强不确定处发糊;GAN 判别器提供的是分布级信号(判“像不像真实分布里的样本”),不做平均,故在 1~4 步能给锐利细节。
GAN 信号 = 隐式散度最小化。 固定生成器分布 \(q_\theta\) 解出逐点最优判别器,代回 minimax,生成器实际在最小化 \(D_{\mathrm{JS}}(p\|q_\theta)\)(Goodfellow 2014)。这是原始饱和形式的结论;实践中常用的非饱和形式对应另一个散度,本节末会算出来。
点开看:最优判别器怎么解出来
判别器目标 \(\max_\eta\mathbb E_{p}\log d_\eta+\mathbb E_{q_\theta}\log(1-d_\eta)\) 的被积函数 \(p\log d+q_\theta\log(1-d)\) 对 \(d\) 求导置零 \(\tfrac{p}{d}-\tfrac{q_\theta}{1-d}=0\),得
更关键的是判别器 logit 恰为对数密度比:
符号要留意:§1 的 \(\eqref{eq:score-diff}\) 算的是散度的梯度 \(s_{\text{fake}}-s_{\text{real}}\),生成器要沿它下降,实际用的更新方向本就是 \(s_{\text{real}}-s_{\text{fake}}\)——判别器 logit 的空间梯度直接给出的正是这个方向。
所以对抗支与分布匹配支估的是同一条 score 差:§4–7 用两个显式扩散模型之差直接给 \(s_{\text{real}}-s_{\text{fake}}\);对抗支用一个判别器隐式估这条对数比。
但“同一条 score 差”不等于“同一个散度”,差别落在逐点权重上,正好就是 §5 那个 \(h(r)\)。以最常用的非饱和生成器损失为例(判别器固定在最优 \(d^*\)):\(\nabla_x\log d^*=\tfrac{1}{1+r}(s_{\text{real}}-s_{\text{fake}})\),于是
而 \(h=\tfrac1{1+r}\) 恰是 f-distill 那张表里的 softened reverse-KL;hinge 判别器又对应另一个散度(下面 DMDX 那条 TV)。DMD 的 \(h\equiv1\)、GAN 的 \(h=\tfrac1{1+r}\)——同一条 score 差,不同的权重。这也解释了对抗支通用配方“对抗 + score 正则”为何互补:二者估的是同一对数比,一个隐式给锐度、一个显式给稳定。(这条“判别器 logit = 对数密度比”的恒等式,后面另开的《对齐系列》里 DDO 还会再用到。)
代表工作(通用配方 = 对抗损失保锐度 + 蒸馏/score 正则保稳定):
- ADD(SDXL-Turbo, 2023):学生少步输出 \(\hat x_0\),\(\mathcal L_{\text{ADD}}=\underbrace{-\mathbb E\,\mathcal D_\eta(\hat x_0)}_{\text{hinge 对抗项}}+\lambda\underbrace{\mathbb E_{t'}[c(t')\|\hat x_0-\hat x_\phi(\mathrm{sg}(\hat x_0)_{t'},t')\|^2]}_{\text{score-distillation(SDS 式)}}\)。判别器建在冻结的视觉特征网(DINOv2)上做多尺度打分、配 R1 正则,对抗项用的是 hinge 而非对数形式,实时 1–4 步 SDXL。
- LADD(SD3-Turbo, 2024):把判别从像素搬到潜空间,判别器复用教师特征当主干、在多噪声级判别,可扩到 SD3 级。
- UFOGen(2023):动机来自 DDGAN 那条论证——大步长下真实反向核 \(p(x_{t-1}\mid x_t)\) 非高斯(此处 \(p\) 指数据前向过程的真实反向核,不是本篇别处的学生分布),标准扩散的高斯参数化必失真,于是改用隐式(GAN)分布去拟合它。目标 \(\mathcal L=\sum_t[\mathcal L^{\text{GAN}}_t+\lambda\,\mathcal L^{\text{recon}}_t]\) 里那个重建项来自 SIDDM:它把匹配对象从条件反向核换成联合分布,判别器不再吃 \(x_t\)、只比边际,KL 那一半则因高斯性化成重建项。UFOGen 在此之上动了两处——生成器改成从前向核采 \(x_{t-1}\)(而非从后验 \(q(x_{t-1}\mid x_t,x_0)\))、重建项挪到 \(x_0\) 级——两处合起来才让一步采样成立。
- SDXL-Lightning(2024):渐进 + 对抗,分阶段先 MSE 保结构、后对抗保锐度——\(\mathcal L=\|\hat x_\theta-\tilde x\|^2\)(早期)\(\to-\mathbb E\log d_\eta(\hat x_0)\)(后期),并分段保多样。
- Hyper-SD(2024):轨迹分段一致性蒸馏 + RLHF + score distillation 三合一 \(\mathcal L=\mathcal L_{\text{TSCD}}+\lambda_1\mathcal L_{\text{RLHF}}+\lambda_2\mathcal L_{\text{score}}\),把三类信号并进同一个训练流程。
- ADM / DMDX(2025):不预设散度,让扩散判别器在真/伪 score 各走一步 PF-ODE 的预测之间做 Hinge GAN,并证其等价最小化全变差 \(\mathrm{TV}\)(对称有界,避开 reverse-KL 的零强迫)。一步 SDXL 超 DMD2。这是本节的对抗视角与 §4 显式 score 差的又一次交汇。
9. 架构/系统续作:视频与分数步
- TMD(Transition Matching Distillation, 2026, NVIDIA+NYU)——把多步去噪压成几步“概率转移”,架构上把教师解耦为“语义主干 + 小的循环 flow head”。训练分两段:Stage 1 用 MeanFlow 恒等式(第二篇 §2.2)训 flow head(主干随之更新),Stage 2 在每个转移步做 DMD2-v 并穿过全部内层流步反传。它是“DMD2 分布匹配 × flow-map 轨迹”在视频上的合体:蒸 Wan2.1 14B,有效 NFE≈1.38 达 VBench 84.24。(名字里的 “Transition Matching” 源自第二篇 §6 那条同名生成范式,两者一蒸馏一生成、不可混。)
- 1.x-Distill(2026)——首个分数步(1.x-step)DMD,靠三招做到:时间步感知的教师-CFG 控制(把 reverse-KL 塌缩归因于早期强 CFG)、分阶段聚焦蒸馏、蒸馏-缓存联合训练。SD3-Medium/3.5-Large 有效 NFE 1.67/1.74。
10. 收官:三篇合到一处
三篇讲完,把整张地图钉回三根轴。下表列前两根——轴 A 匹配什么、轴 B 学什么映射:
| 支线 | 匹配什么 | 学什么映射 | 核心恒等式 |
|---|---|---|---|
| 一致性(篇一) | 轨迹/端点 | 端点 \(t\to0\) | 同一轨迹映同一终点;sCM 连续时间化 |
| 直线化(篇一) | 轨迹/端点 | 拉直路径 | 掰直即一步 Euler 精确 |
| flow-map(篇二) | 轨迹/端点 | 任意两点 \(t\to s\) | 半群 → MeanFlow \(u=v-(t-r)(\partial_t+v\partial_x)u\) |
| 分布匹配(篇三) | 边际分布 | 端点或多锚点 | 式 \(\eqref{eq:score-diff}\):\(\nabla_\theta D=(s_{\text{fake}}-s_{\text{real}})\partial x_t/\partial\theta\) |
| 对抗(篇三) | 判别器 | 端点 | logit = 对数密度比,梯度 = 同一 score 差 |
有两条恒等式贯穿三篇,反复出现:
- 换算环(Tweedie):\(\hat x_0/\varepsilon/s/v\) 四个头互为仿射,让“预测什么”变成表述自由——篇一到篇三处处在用它换头。
- score 差 = 对数密度比的梯度:\(s_{\text{fake}}-s_{\text{real}}=\nabla_x\log(q_\theta/p)\)——本篇分布匹配与对抗两支共用的就是它,DMD/SiD/f-distill/Uni-Instruct 是它的显式投影,GAN 是它的隐式估计;rCM 把它显式借去当“寻峰”正则,AYF 则用轻量对抗取它的隐式版,两者都把这条恒等式回注了前两篇。
这些方法的分歧,落到最后就是三个选择:对齐什么(轨迹/分布/判别器)、学哪种映射(端点/两点/直线)、要不要教师。握住这三根轴和上面两条恒等式,再读到新论文时,多半能直接把它放进这张表的某一格。
后面写什么
“少步生成”三篇到这里收官。但本篇里反复擦肩而过的另一条线——把 reward / 偏好学进生成器的对齐与后训练(DDO、DiffusionNFT、TDM-R1 都是它的入口)——还没展开。这条线我打算另开一个《对齐系列》专门讲:同样一条“score 差 = 对数密度比梯度”,在那边怎么摇身变成 RL 目标、又怎么和这里的分布匹配接上。有兴趣的话可以先蹲一个。