任务:从可计算后验走到可训练的反向模型
本章沿用前向步号 :干净数据是 ,噪声终端是 。生成模型从终端向零走,写成先验 与一系列反向条件 的乘积。我们将推导一个在已知干净样本时可计算的高斯后验,再说明它怎样给网络提供监督。必须区分“已知干净答案的后验”和“生成时真正可用的条件”;把二者混为一谈,会在采样函数中偷用训练标签。
假设前向日程满足 。记上一时刻累计保留率为 ,当前单步保留率为 ,则当前累计率为 。为了避免向量公式掩盖代数,先在一个坐标上推导,最后因各向同性高斯的精度矩阵是标量乘单位阵,可逐坐标得到相同式子。所有积分与条件密度均针对连续变量,不能把概率质量函数的写法直接代入。
一、完成平方得到精确条件后验
令待推断的上一状态为 ,当前观察为 。贝叶斯式给出后验正比于 。忽略与 无关的项,负对数的两倍是 。展开后, 的系数叫精度,等于 ; 的一次项决定均值。完成平方是把二次函数重写成精度乘以“变量减均值”的平方,并不是猜一个平均值。
再取一次项系数除以精度,得到均值。分母化简使用 ,并没有引入新的噪声日程。向量情况下,两个标量系数分别乘干净向量与当前观察。这两个系数一般不相加为一,因为随机变量经过了尺度变化;把它误当普通凸组合,会错误地重新归一化系数。
算例一:算出后验,而不是直接反转加噪
取第一步噪声方差零点二,第二步零点三。则上一累计率零点八,当前单步率零点七,当前累计率零点五六。后验方差是零点三乘零点二除零点四四,得到约零点一三六三六四。若干净值为二、当前带噪值为一,干净值系数约零点六零九八三七,当前值系数约零点三八零三零零,均值约一点五九九九七三。这个均值可由原二次式的一阶导数置零直接复算,方差则是二阶项精度的倒数。
简单地令上一状态为当前值除根号零点七,会得到约一点一九五二,忽略了噪声的不确定性与干净数据条件;这不是贝叶斯后验均值。另一个错误是从当前值中减去真实第二步噪声再除系数。若在训练模拟里保存了那份噪声,确实能还原当时路径,但生成时没有它。我们需要的是能仅从当前观察预测的反向分布,不是借助未提供信息进行代数撤销。
二、变分下界为什么会出现这些后验
生成边缘密度 要积分掉整条隐藏链,通常难以直接计算。把前向条件链 乘入再除去同一项,不改变积分;对其取期望后,利用对数的凹性,得到对数期望不小于期望对数。这就是本处 Jensen 不等式的作用。下界不是精确似然,二者间隔由相应的后验 KL 决定;训练下界改善不等于任意样本的视觉质量必然改善。
把前向联合分布按已知干净样本的反向条件重新分解,逐项抵消对数,就得到三个部分:终端前向边缘与先验之间的 KL;从第二步到末步,真实条件后验与模型反向条件之间的 KL 之和;以及第一步到干净数据的重建负对数项。KL 是对数密度比在第一个分布下的期望,非负但不对称。终端项若先验与日程固定,不含网络参数;第一步重建项不能被一个含零方差的高斯 KL 随意替代。
选模型反向条件为高斯,均值由网络给出,方差 固定且为正。在每个内部步骤,高斯 KL 中与均值有关的部分是两均值平方距离除以二倍模型方差,其余项只涉及给定协方差。这一步解释为何平方误差自然出现,也限定了结论的条件:若连方差也学习,不能把所有剩余项当作常数丢掉。
算例二:误差权重与噪声参数化
沿用上例方差零点一三六三六四,若网络均值在一个坐标上偏离真实条件均值零点二,均值相关 KL 增量为零点零四除以两倍零点一三六三六四,等于约零点一四六六六七。相同零点二偏差若发生在方差更小的步骤,会得到更大代价。由此可见,不同时间的未经加权 MSE,不是自动等同于这个变分目标。
训练时用第二章的直接式把 写成 与真实噪声 的函数,并代入后验均值;整理得到均值为根号 的倒数乘上当前点减去一个噪声校正。用网络的噪声预测替换真实噪声,便得到常见均值参数化。其均值误差与噪声误差是标量倍数,所以平方后产生明确的时间权重。
将 全部换为一,是一种重新加权的训练选择,通常叫简化噪声目标;它可有实践价值,但不能再称为逐项完全相同的似然下界。网络容量有限、时间采样不均或优化未收敛时,权重改变可能影响哪些时刻学得更好。本课要求把“推导所得目标”“实现选用目标”“观察到的质量”三件事分别陈述,而不是用论文名替代对实现的说明。
三、采样边界与无法被高斯公式消除的不确定性
给定已知干净样本时,第一步之前的状态就是那个样本,所以该条件后验退化;但生成时未知干净样本, 并不因此必然是一个点。常见实现最后不加随机噪声,是采样器约定,不能用条件后验退化证明真实数据后验也没有不确定性。内部步骤也一样:对所有可能的干净数据混合后,真实反向条件一般不再是单个高斯,选高斯模型是近似族。
一个可执行的反向算法还需固定终端先验、使用哪份方差、是否跳步、最后输出的坐标变换。学习均值与选方差是两项不同设计;给了噪声预测网络,并没有自动给出所有这些约定。我们的二维项目没有实现这条完整 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
对照参考解答
TRY IT YOURSELF
练习二|固定方差的代价
均值误差为0.1,模型方差从0.2改成0.05时,均值相关KL增量怎样改变?能否因此直接宣布后一模型更差?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三|发现采样中的标签泄漏
某程序反向采样时给网络输入真实干净点,并据此调用精确后验均值。它的样本非常接近训练点。为什么不算完成无条件生成?