AI Hero Club

扩散模型与 Flow Matching · 第 3 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 7 个小节
全课目录 8 章
完整课程计划 ↗
扩散模型与 Flow Matching / 课程计划 ↗

CHAPTER 03 / 8建议学习 180 分钟

DDPM后验、变分目标与反向采样边界

已知带噪样本和干净端点,怎样算出前一步的高斯后验,并连接训练目标?

本章要解决的 3 个问题
  • 完成平方推导高斯条件后验
  • 从Jensen下界得到重建项与内部KL
  • 推导噪声MSE权重并识别标签泄漏
课程项目 ZIP ↓

任务:从可计算后验走到可训练的反向模型

本章沿用前向步号 jj:干净数据是 x0x_0,噪声终端是 xJx_J。生成模型从终端向零走,写成先验 p(xJ)p(x_J) 与一系列反向条件 pθ(xj−1∣xj)p_\theta(x_{j-1}\mid x_j) 的乘积。我们将推导一个在已知干净样本时可计算的高斯后验,再说明它怎样给网络提供监督。必须区分“已知干净答案的后验”和“生成时真正可用的条件”;把二者混为一谈,会在采样函数中偷用训练标签。

假设前向日程满足 0<βj<10<\beta_j<1。记上一时刻累计保留率为 a=αˉj−1a=\bar\alpha_{j-1},当前单步保留率为 α=αj\alpha=\alpha_j,则当前累计率为 αa\alpha a。为了避免向量公式掩盖代数,先在一个坐标上推导,最后因各向同性高斯的精度矩阵是标量乘单位阵,可逐坐标得到相同式子。所有积分与条件密度均针对连续变量,不能把概率质量函数的写法直接代入。

一、完成平方得到精确条件后验

令待推断的上一状态为 y=xj−1y=x_{j-1},当前观察为 x=xjx=x_j。贝叶斯式给出后验正比于 q(x∣y)q(y∣x0)q(x\mid y)q(y\mid x_0)。忽略与 yy 无关的项,负对数的两倍是 (x−αy)2/βj+(y−ax0)2/(1−a)(x-\sqrt\alpha y)^2/\beta_j+(y-\sqrt a x_0)^2/(1-a)。展开后,y2y^2 的系数叫精度,等于 α/βj+1/(1−a)\alpha/\beta_j+1/(1-a);yy 的一次项决定均值。完成平方是把二次函数重写成精度乘以“变量减均值”的平方,并不是猜一个平均值。

β~j=(αjβj+11−αˉj−1)−1=βj(1−αˉj−1)1−αˉj\tilde\beta_j=\left(\frac{\alpha_j}{\beta_j}+\frac{1}{1-\bar\alpha_{j-1}}\right)^{-1}=\frac{\beta_j(1-\bar\alpha_{j-1})}{1-\bar\alpha_j}
本式要求 j≥2;第零时刻已知干净样本时是退化边界。

再取一次项系数除以精度,得到均值。分母化简使用 αj+βj=1\alpha_j+\beta_j=1,并没有引入新的噪声日程。向量情况下,两个标量系数分别乘干净向量与当前观察。这两个系数一般不相加为一,因为随机变量经过了尺度变化;把它误当普通凸组合,会错误地重新归一化系数。

μ~j=αˉj−1βj1−αˉjx0+αj(1−αˉj−1)1−αˉjxj\tilde\mu_j=\frac{\sqrt{\bar\alpha_{j-1}}\beta_j}{1-\bar\alpha_j}x_0+\frac{\sqrt{\alpha_j}(1-\bar\alpha_{j-1})}{1-\bar\alpha_j}x_j
精确的是 q(x_{j−1}|x_j,x₀),它仍显式使用训练时已知的 x₀。

算例一:算出后验,而不是直接反转加噪

取第一步噪声方差零点二,第二步零点三。则上一累计率零点八,当前单步率零点七,当前累计率零点五六。后验方差是零点三乘零点二除零点四四,得到约零点一三六三六四。若干净值为二、当前带噪值为一,干净值系数约零点六零九八三七,当前值系数约零点三八零三零零,均值约一点五九九九七三。这个均值可由原二次式的一阶导数置零直接复算,方差则是二阶项精度的倒数。

简单地令上一状态为当前值除根号零点七,会得到约一点一九五二,忽略了噪声的不确定性与干净数据条件;这不是贝叶斯后验均值。另一个错误是从当前值中减去真实第二步噪声再除系数。若在训练模拟里保存了那份噪声,确实能还原当时路径,但生成时没有它。我们需要的是能仅从当前观察预测的反向分布,不是借助未提供信息进行代数撤销。

二、变分下界为什么会出现这些后验

生成边缘密度 pθ(x0)p_\theta(x_0) 要积分掉整条隐藏链,通常难以直接计算。把前向条件链 q(x1:J∣x0)q(x_{1:J}\mid x_0) 乘入再除去同一项,不改变积分;对其取期望后,利用对数的凹性,得到对数期望不小于期望对数。这就是本处 Jensen 不等式的作用。下界不是精确似然,二者间隔由相应的后验 KL 决定;训练下界改善不等于任意样本的视觉质量必然改善。

log⁡pθ(x0)≥Eq ⁣[log⁡pθ(x0:J)q(x1:J∣x0)]\log p_\theta(x_0)\geq\mathbb E_q\!\left[\log\frac{p_\theta(x_{0:J})}{q(x_{1:J}\mid x_0)}\right]
前向分布是辅助分布;模型参数只出现在生成链中。

把前向联合分布按已知干净样本的反向条件重新分解,逐项抵消对数,就得到三个部分:终端前向边缘与先验之间的 KL;从第二步到末步,真实条件后验与模型反向条件之间的 KL 之和;以及第一步到干净数据的重建负对数项。KL 是对数密度比在第一个分布下的期望,非负但不对称。终端项若先验与日程固定,不含网络参数;第一步重建项不能被一个含零方差的高斯 KL 随意替代。

Lbound=DKL(q(xJ∣x0)∥p(xJ))+∑j=2JEqDKL(q(xj−1∣xj,x0)∥pθ(xj−1∣xj))−Eqlog⁡pθ(x0∣x1)\mathcal L_{\rm bound}=D_{\rm KL}(q(x_J\mid x_0)\|p(x_J))+\sum_{j=2}^{J}\mathbb E_q D_{\rm KL}(q(x_{j-1}\mid x_j,x_0)\|p_\theta(x_{j-1}\mid x_j))-\mathbb E_q\log p_\theta(x_0\mid x_1)
这是负下界的分解;还需对真实训练数据取平均。

选模型反向条件为高斯,均值由网络给出,方差 sj2Is_j^2I 固定且为正。在每个内部步骤,高斯 KL 中与均值有关的部分是两均值平方距离除以二倍模型方差,其余项只涉及给定协方差。这一步解释为何平方误差自然出现,也限定了结论的条件:若连方差也学习,不能把所有剩余项当作常数丢掉。

算例二:误差权重与噪声参数化

沿用上例方差零点一三六三六四,若网络均值在一个坐标上偏离真实条件均值零点二,均值相关 KL 增量为零点零四除以两倍零点一三六三六四,等于约零点一四六六六七。相同零点二偏差若发生在方差更小的步骤,会得到更大代价。由此可见,不同时间的未经加权 MSE,不是自动等同于这个变分目标。

训练时用第二章的直接式把 x0x_0 写成 xjx_j 与真实噪声 ϵ\epsilon 的函数,并代入后验均值;整理得到均值为根号 αj\alpha_j 的倒数乘上当前点减去一个噪声校正。用网络的噪声预测替换真实噪声,便得到常见均值参数化。其均值误差与噪声误差是标量倍数,所以平方后产生明确的时间权重。

μθ(xj,j)=1αj(xj−βj1−αˉjϵθ(xj,j)),wj=βj22sj2αj(1−αˉj)\mu_\theta(x_j,j)=\frac{1}{\sqrt{\alpha_j}}\left(x_j-\frac{\beta_j}{\sqrt{1-\bar\alpha_j}}\epsilon_\theta(x_j,j)\right),\quad w_j=\frac{\beta_j^2}{2s_j^2\alpha_j(1-\bar\alpha_j)}
内部 KL 的均值部分等于 w_j 乘噪声预测误差平方。

将 wjw_j 全部换为一,是一种重新加权的训练选择,通常叫简化噪声目标;它可有实践价值,但不能再称为逐项完全相同的似然下界。网络容量有限、时间采样不均或优化未收敛时,权重改变可能影响哪些时刻学得更好。本课要求把“推导所得目标”“实现选用目标”“观察到的质量”三件事分别陈述,而不是用论文名替代对实现的说明。

三、采样边界与无法被高斯公式消除的不确定性

给定已知干净样本时,第一步之前的状态就是那个样本,所以该条件后验退化;但生成时未知干净样本,q(x0∣x1)q(x_0\mid x_1) 并不因此必然是一个点。常见实现最后不加随机噪声,是采样器约定,不能用条件后验退化证明真实数据后验也没有不确定性。内部步骤也一样:对所有可能的干净数据混合后,真实反向条件一般不再是单个高斯,选高斯模型是近似族。

一个可执行的反向算法还需固定终端先验、使用哪份方差、是否跳步、最后输出的坐标变换。学习均值与选方差是两项不同设计;给了噪声预测网络,并没有自动给出所有这些约定。我们的二维项目没有实现这条完整 DDPM 训练与随机反向链,因此本章交付的是推导与独立数值核对,实际神经网络项目将在第七章采用条件 Flow Matching,能力边界保持明确。

下界的松紧也能精确写成一个差:真实对数似然等于辅助分布下的对数比期望,再加“辅助隐藏链后验相对模型隐藏链后验”的KL。两份后验都在给定同一个干净观察下定义,所以KL非负;只有它们几乎处处相同,下界才达到等号。这里的辅助后验是整条链的分布,不是某一个内部高斯项。这个关系说明为何仅把几个内部均值拟合得很好,还不能自动证明完整似然已被精确计算。

计算机中还要区分方差和标准差。反向条件若规定协方差为某个正标量乘单位阵,实际加到均值上的标准正态必须乘该标量的平方根。把方差直接当采样系数会使实际协方差再次平方;均值网络和训练损失可能完全没变,终端分布却已改变。独立单步检验应固定当前点、重复抽样并测均值和方差,不能只看一次反向路径是否大致走向某个中心。

独立运行完成平方的数值核对,不读取任何训练后的图像权重。
from math import sqrt
a=0.8;alpha=0.7;beta=0.3
variance=beta*(1-a)/(1-alpha*a)
mu=sqrt(a)*beta/(1-alpha*a)*2+sqrt(alpha)*(1-a)/(1-alpha*a)*1
precision=alpha/beta+1/(1-a)
independent_mu=(sqrt(alpha)/beta+sqrt(a)*2/(1-a))/precision
assert abs(variance-1/precision)<1e-12
assert abs(mu-independent_mu)<1e-12
print(variance,mu,0.2**2/(2*variance))

三项练习与解答

TRY IT YOURSELF

练习一|精度相加

两个关于同一标量的高斯因子均值分别为零和二,方差分别为一和三。乘积归一化后的均值、方差是多少?

提示 1
高斯因子相乘时先加精度,也就是方差的倒数。
提示 2
把均值按精度加权后除总精度;再展开负log二次项,以驻点与曲率独立检查。
对照参考解答
第一个精度为一,第二个精度为三分之一,总精度为四除以三,因此方差为三除以四。均值分子是零乘一加二乘三分之一,得到三分之二,再除以总精度四除以三,得到二分之一。方差零点七五小于两个因子的方差,体现同时受到两份约束。均值并非两均值的简单平均一,而更偏向精度较高、方差较小的零。也可把乘积负对数展开为关于变量的二次函数,以一阶导数置零独立检查均值;二次项的系数给出同样的总精度。

TRY IT YOURSELF

练习二|固定方差的代价

均值误差为0.1,模型方差从0.2改成0.05时,均值相关KL增量怎样改变?能否因此直接宣布后一模型更差?

提示 1
固定均值误差时,均值相关KL项的分母含两倍模型方差。
提示 2
两种方差分别代入,再列完整KL剩余的协方差项与log行列式项,说明局部项不能排序总目标。
对照参考解答
误差平方为零点零一,先除以两倍零点二,得到零点零二五;再除以两倍零点零五,得到零点一,增大四倍。这只是均值相关部分,完整高斯KL还包含协方差比与对数行列式项。改变模型方差本身也改变了分布族和完整目标,不能仅凭这一项给整个模型排序。正确结论是:在指定步骤、指定均值误差下,较小模型方差对均值偏差惩罚更强。

TRY IT YOURSELF

练习三|发现采样中的标签泄漏

某程序反向采样时给网络输入真实干净点,并据此调用精确后验均值。它的样本非常接近训练点。为什么不算完成无条件生成?

提示 1
训练后验可用x0监督,真正无条件采样时接口允许哪些输入?
提示 2
移除真实干净点后试运行,检查当前噪声与网络是否足以继续;漂亮输出不能证明没有答案泄漏。
对照参考解答
精确条件后验需要真实干净点作为条件,训练时可用它构造监督,生成时无条件程序只应有终端噪声与已训练参数。该实现把目标答案作为输入,任务已经变成已知样本条件下的路径重建。检验方法是移除干净点输入:若函数无法继续,就没有实现要求的无条件接口。仅看输出接近训练点无法发现这种信息越界,应检查参数列表与运行时数据来源。真正的模型需从当前噪声状态预测可用的反向统计量。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. 内部后验精确条件包含什么?

查看解析训练用后验包含干净样本,生成时不能直接访问。
2. 固定正方差时均值KL项是什么?

查看解析来自高斯KL对均值的二次项。
3. 简化噪声MSE等于完整下界吗?

查看解析时间权重与边界项不能无条件省略。
4. 条件后验第一步退化说明真实生成后验必为点吗?

查看解析条件信息不同,不能移除干净样本后仍沿用退化结论。

自行标记用于记录学习进度,不代表通过项目验收。