本章交付:把生成任务写成可检查的分布
本课程的对象是一对实数,而不是一张图像。一次样本写作向量 x=(x₁,x₂),两个坐标可以理解为平面上的横、纵位置。我们的任务不是找到一个看起来舒服的点,而是建立一个随机程序,使大量输出在平面上的分布接近事先指定的四个高斯簇。这个尺度让理论均值、方差、密度和采样误差都能算出来,也使错误生成器无法躲在漂亮图片后面。后面训练的网络只有几千个参数,不能据此宣称已实现图像扩散大模型。
需要的预备知识是向量加减、导数和有限概率。概率密度 p(x) 是对小区域概率的局部刻画:区域 A 的概率是对 A 积分 p(x),不是把某一点的密度直接当成该点的概率。连续分布中单个点的概率通常为零,即使那里密度很高。我们使用的标准二维正态 N(0,I) 中,I 是二乘二单位矩阵,两坐标独立、均值为零、方差为一;这几个条件要分别核对,不能只看到“随机数”就认为满足。
一、从潜在类别构造目标分布
令离散变量 K 在四个编号上等概率取值,每个概率为四分之一。对应中心 μₖ 依次为负二负二、负二正二、正二负二、正二正二。令 ξ 是与 K 独立的标准二维正态,簇内标准差 σ=0.3。目标样本定义为 X=μ_K+σξ。这里大写 X 表示随机向量,小写 x 表示已经观察到的取值;σ 是标准差,其平方才进入协方差。采样时先选类别再加扰动,不是同时输出四个中心的平均。
下标一预告本课流模型的时间约定:零时刻是容易采样的标准正态,一时刻是目标数据。本课介绍离散 DDPM 时会用另一个下标 j 表示从数据向噪声的步号,不能直接把两套方向互换。密度式中欧氏范数的平方等于两个坐标差的平方之和;二维归一化常数是二πσ平方,不能误用一维的平方根常数。常数错了可能不改变某些比值,却会使密度和似然失去正确单位。
混合模型有一个重要的计算区分:给定类别时的均值很容易知道,但类别被隐藏后,观察点属于哪一簇的概率还要重新计算。这些后验类别概率以后叫责任度。位于两个簇之间的点不能硬指定给最近簇后声称做了精确条件期望;最近中心只是某种评价划分,不是贝叶斯后验。这个区别会在第五章的解析速度场中直接出现。
算例一:四个簇的均值和协方差
先按类别求均值。四个中心的第一坐标为负二、负二、正二、正二,相加为零;第二坐标同样为零,所以 E[X]=(0,0)。再用全协方差分解:簇内协方差是 σ²I=0.09I,中心本身的协方差是四个 μₖμₖᵀ 的平均。每个对角项为四,交叉项分别为正四、负四、负四、正四,平均为零。相加得到目标协方差 4.09I。两个坐标不相关;本例实际上还因中心符号独立而独立,但“协方差为零必然独立”一般不成立。
独立检查可以直接展开一个坐标的平方:E[(μ_K,₁+σξ₁)²]=E[μ_K,₁²]+2σE[μ_K,₁ξ₁]+σ²E[ξ₁²]。中间交叉项因独立且噪声均值零而消失,余下四加零点零九。若把标准差零点三直接加到四得到四点三,就是把量纲不同的量相加。若把四个簇先平均成中心零再加噪声,则只剩零点零九,已换成另一个分布。
二、可采样的噪声与概率路径
令 X₀ 为标准二维正态,X₁ 为上述混合数据,并明确让两个端点独立。定义中间随机向量 X_t=(1−t)X₀+tX₁,t 在零到一之间。这是随机端点之间的线性插值;每条抽到的条件轨迹是直线,但所有轨迹组成的中间分布会改变形状。以后由神经网络定义的确定性常微分方程轨迹不一定是这些抽样直线,二者的联系需要条件期望,不能从插值图直接断言。
写出这条路径并不需要训练网络,也不等于已经会从噪声生成数据。构造 X_t 时我们使用了真实端点 X₁;生成时只能抽 X₀,不能偷偷把一个目标样本放进更新公式。训练的任务是把可访问真实端点时构造的局部监督,转换成仅依赖当前状态与时间的场。这个信息可用性边界贯穿全课:训练标签可以含有真实数据,采样函数不能访问未来答案。
算例二:中间分布不一定越来越分散
在 t=0.25 时,单坐标方差是零点七五平方加四点零九乘零点二五平方,即零点五六二五加零点二五五六二五,等于零点八一八一二五,反而小于起始的一。t=0.5 时是零点二五加一点零二二五,等于一点二七二五。方差先减后增并不违反从噪声搬运到更宽目标的任务,因为独立端点插值在早期会收缩噪声。最小值出现在导数 −2(1−t)+8.18t=0,即 t=1/5.09;代回可得约零点八零三五。
这个算例还提供一个失败检测:若代码写成 sqrt(1−t)X₀+sqrt(t)X₁,方差将变成一加三点零九乘 t,得到另一条路径。两者端点一样,却有不同的中间监督和速度。只检查 t=0、t=1 无法发现这种错误,至少应加入一个内部时刻的矩检验。我们不把“端点相同”偷换成“训练任务相同”,后面的速度目标必须对实际路径求导。
三、为什么均值与协方差不能完成验收
总输出零的程序具有正确的理论均值,却丢掉所有模式。一个输出 N(0,4.09I) 的程序甚至具有相同均值和协方差,但它在四个数据中心之间填充大量本不该有的概率。还有一种程序等概率输出四个中心,不加任何簇内噪声;它覆盖四个区域,却把连续簇压成四个点。三个错误分别提醒我们检查模式质量、区域形状和簇内宽度,不能用一个指标替代整个分布。
项目会记录到最近中心的平方距离。目标中该距离的均值约为两个坐标噪声方差之和,即零点一八;这里“约”是因为极少数跨越中心分界的样本会被分到另一簇。输出中心的程序得到零距离,不代表更好。这个指标要比较与目标的差异,不应一律向越小越好优化。项目还记录模式质量、离群比例及多方向投影距离,让指标盲点相互补充。
有限样本本身也有波动。若抽取 n 个独立样本,单坐标样本均值的标准差是 sqrt(4.09/n),所以 n=100 时约零点二零二,而 n=10000 时约零点零二零二。看到均值不恰好为零不能立即判失败;同样,换许多随机种子只展示最接近零的一次也不能证明算法稳定。比较求解器时将固定同一批初始噪声,比较训练泛化时则使用独立生成的验证端点。
对一个指定模式,独立样本落入该模式的次数可近似看成二项计数。目标比例为四分之一时,比例估计的标准差是根号下三除以十六倍样本数;两千零四十八个点时约零点零零九六。四个模式计数之间不是独立的,因为它们总和固定为样本数。因此不能把四个单独看起来合理的误差区间直接解释成一个已经校准的联合置信结论;本课先完整报告计数,不伪造未执行的统计认证。
from math import sqrt
means=[(-2,-2),(-2,2),(2,-2),(2,2)]
assert sum(x for x,y in means)==0
assert sum(x*y for x,y in means)==0
variance=4+0.3**2
t=0.25
path_variance=(1-t)**2+t*t*variance
assert abs(path_variance-0.818125)<1e-12
wrong_variance=(1-t)+t*variance
assert abs(path_variance-wrong_variance)>0.1
print(variance,path_variance,sqrt(variance/10000))练习:把分布、路径和验收分开
TRY IT YOURSELF
练习一|另一种混合权重
若只保留两个中心(−2,0)、(2,0),权重为四分之一、四分之三,簇内仍为0.09I,求均值与协方差。
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习二|端点相关时的路径
若同一个标准正态Z同时用作X₀=Z、X₁=2Z,计算t=1/2时方差,并说明为何不能使用独立端点公式。
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三|设计阳性失败对照
分别说明总输出零、只输出四中心、矩匹配单高斯最容易被哪些指标发现。为何真实样本与另一批真实样本的距离不必为零?