《生成扩散模型漫谈(二):DDPM = 自回归式VAE》 —— 苏剑林
《生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪》 —— 苏剑林
《生成扩散模型漫谈(四):DDIM = 高观点DDPM》 —— 苏剑林
从单步 VAE 到多步隐变量
普通 VAE 用一步编码 x→z 和一步生成 z→x。当编码分布、先验和生成分布都限制为容易计算的高斯分布时,一步映射要独自承担整个复杂数据分布,表达能力容易受限。
DDPM 把一个困难的大变化拆成 T 个局部变化:
x0→x1→⋯→xT,xT→xT−1→⋯→x0.
每一步仍然可以是条件高斯分布,但多个局部高斯转移复合后不再等同于单个简单高斯映射。这里的“自回归”发生在扩散时间轴上:生成 xt−1 时只依赖 xt,是一个一阶马尔可夫生成过程。
沿用原文第二篇的记号,p 表示固定的正向编码分布,q 表示需要学习的反向生成分布;这与 DDPM 原论文常见的 pθ、q 记号刚好相反:
p(x0:T)qθ(x0:T)=p~(x0)t=1∏Tp(xt∣xt−1),=q(xT)t=1∏Tqθ(xt−1∣xt).(1)
其中 p~(x0) 是数据分布,q(xT)=N(0,I) 是生成起点。训练可以理解为最小化两个完整轨迹分布之间的
KL(p∥qθ)。
联合 KL 怎样拆成逐步去噪
正向过程固定为
p(xt∣xt−1)=N(xt;αtxt−1,βt2I),αt2+βt2=1.(2)
反向过程则设为
qθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2I),
其中只有均值网络含可训练参数。把公式 (1) 代入联合 KL 后,正向分布自身的对数项、固定先验 q(xT) 和高斯归一化常数都不依赖 θ。与第 t 步模型有关的部分只剩
Ep(x0,xt−1,xt)[2σt21∥xt−1−μθ(xt,t)∥2].(3)
从完整轨迹降到 (x0,xt−1,xt),用到的是马尔可夫结构:xt+1:T 的条件分布可积分为 1,x1:t−2 则可边缘化为 p(xt−1∣x0)。因此这不是把联合 KL 直接假设成若干独立 loss,而是逐项积分后的结果。
令 αˉt=∏s=1tαs、βˉt=1−αˉt2,正向边缘分布为
p(xt∣x0)=N(xt;αˉtx0,βˉt2I),xt=αˉtx0+βˉtε.(4)
用单步关系 xt−1=αt−1(xt−βtεt) 参数化反向均值,公式 (3) 就会变成噪声回归。再把两份相关噪声旋转成正交高斯变量、对不出现在模型输入中的那一维精确求期望,最终得到常见的简化目标:
Lsimple=Ex0,t,ε[ε−εθ(αˉtx0+βˉtε,t)2].(5)
从联合 KL 严格推下来的目标在公式 (5) 前还有只依赖 t 的权重。实践中把它去掉,会改变各时间步的相对权重,因此这是训练目标的简化,不是纯代数恒等变换。
这种视角也解释了 DDPM 为什么更像“只保留生成能力的 VAE”:正向核没有可训练编码器,而且 Noise Scheduler 要让 αˉT≈0,使 p(xT∣x0) 几乎与 x0 无关。模型得到的是从公共噪声先验出发的生成器,而不是能保留单个输入身份的语义编码器。
贝叶斯后验直接给出反向一步
联合 KL 说明了目标来自哪里,但要看清反向分布的结构,更直接的路线是条件贝叶斯。不能直接计算
p(xt−1∣xt),因为真实边缘分布 p(xt−1) 和 p(xt) 都依赖未知数据分布;给定 x0 后,三项却都已知:
p(xt−1∣xt,x0)=p(xt∣x0)p(xt∣xt−1)p(xt−1∣x0).(6)
三个分布都是高斯。把它们的指数项合并并对 xt−1 配方,可得
p(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),σ~t2I),(7)
其中
μ~t(xt,x0)σ~t2=βˉt2αtβˉt−12xt+βˉt2αˉt−1βt2x0,=βˉt2βˉt−12βt2.(8)
关键限制是生成时没有 x0。因此先训练去噪器,由当前状态估计最终干净样本:
x^0,θ(xt,t)=αˉt1[xt−βˉtεθ(xt,t)].(9)
把公式 (9) 代替后验中的真实 x0,就得到只依赖 xt 的近似反向核:
pθ(xt−1∣xt)≈N(xt−1;αt1[xt−βˉtβt2εθ(xt,t)],βˉt2βˉt−12βt2I).(10)
这里的 x^0,θ 不需要一次就准确。它只是先给出终点的粗估计,再借助精确条件后验结构从 xt 前进一步;下一步重新估计、重新修正。逐步采样可以看成不断执行“远期预估 + 局部修正”。
两个极端数据分布还能解释 DDPM 常见的两种固定方差:若数据分布退化为单点,后验方差就是公式 (8) 中的 σ~t2;若数据本身就是标准高斯,则正反向平稳,反向方差为 βt2。真实数据介于这些特例之外,所以两者是有理论来源的可用选择,不是对一般数据的最优性证明。
DDIM 只保留真正需要的边缘分布
DDPM 的训练只用到 p(xt∣x0),采样只用到反向核。于是可以不再把单步正向核 p(xt∣xt−1) 当作出发点,只要求不同时间的边缘分布保持为公式 (4)。
在未知正向联合耦合的情况下,设一个更一般的条件后验:
p(xt−1∣xt,x0)=N(xt−1;κtxt+λtx0,σt2I).
它必须满足边缘一致性
∫p(xt−1∣xt,x0)p(xt∣x0)dxt=p(xt−1∣x0).(11)
将 xt=αˉtx0+βˉtε1 代入待定的条件采样式后,得到
xt−1=(κtαˉt+λt)x0+κtβˉtε1+σtε2.
要让它与
xt−1=αˉt−1x0+βˉt−1ε 同分布,只需匹配均值系数和噪声方差:
αˉt−1=κtαˉt+λt,βˉt−12=κt2βˉt2+σt2.(12)
两个方程只有三个未知量,所以 σt 成为自由参数,并有
κt=βˉtβˉt−12−σt2,λt=αˉt−1−βˉtαˉtβˉt−12−σt2.(13)
这说明 DDPM 的那一种后验只是满足相同边缘分布的一种耦合。只要每个 p(xt∣x0) 不变,公式 (5) 就不变,训练好的噪声预测器可以直接复用;改变的是反向采样轨迹。
把 x0 替换成公式 (9) 后,一步采样可写为更有解释力的形式:
xt−1=αˉt−1x^0,θ+βˉt−12−σt2εθ(xt,t)+σtz,z∼N(0,I).(14)
三项分别是预测的干净样本、沿当前预测噪声方向保留的部分,以及新注入的随机噪声。取
σt=βˉt−1βt/βˉt 会回到 DDPM 的后验方差;取 σt=0,最后一项消失,从 xT 到 x0 成为确定性映射,这才是通常狭义所称的 DDIM。
子序列为什么能够加速采样
训练目标对每个 t 都独立采样,并只依赖 (αˉt,βˉt)。因此一个在 1,2,…,T 上训练的模型,也同时覆盖任意子序列
τ1<τ2<⋯<τK 上的那些训练条件。采样时可以直接从 xτi 跳到 xτi−1,把公式 (14) 中的相邻累计系数替换为子序列两端的累计系数。
这里不能把单步 αt 机械替换为 ατi。跨步的有效信号系数应为
αˉτi/αˉτi−1;随机方差也要按两个端点重新计算。加速成立的条件是网络在被选时间点上已经学好相应的去噪任务,并不意味着跳过的区间没有离散化误差。步数越少,每次预测误差影响越大。
当 σt=0 时,DDIM 还把固定初始噪声变成固定输出,因而可以像确定性生成器一样编辑隐变量。若要在两个标准高斯向量间插值,应尽量沿近似保持范数的球面路径,而不是用会缩小中段方差的普通线性插值。
确定性 DDIM 的连续极限
把 σt=0 的更新重新排列:
αˉtxt−αˉt−1xt−1=(αˉtβˉt−αˉt−1βˉt−1)εθ(xt,t).(15)
当时间网格足够密,令连续时间为 s,累计系数变为平滑函数 αˉ(s)、βˉ(s),公式 (15) 就是下面 ODE 的 Euler 离散化:
dsd(αˉ(s)x(s))=εθ(x(s),t(s))dsd(αˉ(s)βˉ(s)).(16)
这个联系的价值不只是换一种写法:DDPM/DDIM 的逐步更新对应一阶 Euler 方法,既然生成已经成为初值 ODE 求解问题,就可以使用 Heun、Runge–Kutta 等更高阶数值方法,在相同网络调用次数下减小离散误差。
需要区分两条加速逻辑:子序列采样是在原时间网格上跳步;高阶求解器则利用局部多个斜率改善一步近似。二者都复用同一个时间条件噪声网络,但误差来源和网络调用方式不同。