《生成扩散模型漫谈(二十九):用DDPM来离散编码》 —— 苏剑林
连续噪声序列就是 DDPM 的隐变量
写出 DDPM 的随机反向一步:
xt−1=μt(xt)+σtεt,εt∼N(0,I).(1)
连同初始 xT,一条生成轨迹共使用 T+1 个高维高斯变量。DDCM 为每一步预采样独立码本
Ct={ct,1,…,ct,K},ct,k∼i.i.d.N(0,I),
并把公式 (1) 中的噪声限制为 εt∈Ct。生成过程便成为离散序列到图像的映射:
(iT,…,i1)∈{1,…,K}T⟼x0.(2)
每个时间步应使用独立码本,因为不同 t 的噪声扮演不同局部修正角色;共享码本会显著降低可选方向的组合多样性,通常需要更大的 K 才能补偿。
有限码本的经验前提是:从高斯分布抽取的一组固定方向已足以近似每一步所需随机性。它不表示离散分布严格等于高斯;K 增大时,经验分布才逐渐逼近连续分布。
编码不能从 x0 直接倒推
给定目标图像 x0∗,希望找到索引序列使解码结果接近它。直接由
x0∗=μ1(x1)+σ1ε1
倒推会同时遇到未知 x1 和未知码字,形成组合搜索。DDCM 改为从固定 xT 正向执行反向采样,并在每一步选择最能把当前预测推向 x0∗ 的码字。
令 μˉt(xt) 表示模型由 xt 预测的干净数据。DDPM 的反向均值可写成
μt(xt)=atxt+btμˉt(xt),
其中在常用记号下
at=βˉt2αtβˉt−12,bt=βˉt2αˉt−1βt2.
目标残差为 rt=x0∗−μˉt(xt)。原方法选择
εt=argmaxc∈Ct⟨c,rt⟩,(3)
再用公式 (1) 更新。内积最大意味着码字方向最能补偿当前干净图预测的残差。每一步记录 c 的索引,最终得到天然有序的一维离散编码。
从条件后验理解选择规则
已知真实 x0∗ 时,DDPM 的解析后验为
q(xt−1∣xt,x0∗)=N(atxt+btx0∗,σt2I).
把 x0∗=μˉt(xt)+rt 代入,其均值等于无条件均值再加 btrt。所以条件采样希望噪声修正 σtc 接近 btrt:
ct∗=argminc∈Ct∥btrt−σtc∥2.(4)
若码字范数近似相等,展开平方后与公式 (3) 等价,因为只剩最大化 ⟨c,rt⟩。这说明 argmax 规则是有限候选集上的条件引导近似,而不是任意的启发式最近邻。
为什么还需要随机化版本
纯 argmax 在 K→∞ 时会选择越来越极端地对齐残差的方向,不会退化回原 DDPM 随机采样。更一致的有限近似是在码本上按
pt(c∣rt)∝exp(−21c−σtbtrt2),c∈Ct(5)
采样。残差为零时,它近似原标准高斯的有限经验采样;随着 K 增大,也更有希望恢复连续条件高斯。argmax 是公式 (5) 的 MAP 选择,重建更确定,但牺牲了连续极限与多样性。
编码长度、码本大小与压缩率
若有效记录 T′ 个索引,每个索引需要 log2K bit,总码长约为 T′log2K。减少采样步数同时缩短编码,却会提高压缩率并增加重建误差;因此普通扩散加速技巧不能无代价地移植到 DDCM。
相比保留二维网格的 VQ 编码,DDCM 的索引按扩散时间天然排列成一维序列,便于接入自回归模型。代价是编码也必须运行完整的多步扩散过程,速度与原 DDPM 同阶,并且码本质量、时间步数和随机/确定选择共同决定率失真权衡。