Denoising Diffusion Probabilistic Models
1. 我们到底想解决什么问题
训练集中有许多真实图片,它们来自某个未知的数据分布:
x∼pdata(x).
我们希望训练一个生成模型 pθ(x),使它生成的图片也像是来自真实数据分布。这里 θ 表示模型中所有需要通过训练学习的参数;下标 θ 表示这个概率分布会随着模型参数改变。
“两个分布尽可能接近”可以写成最小化:
DKL(pdata∥pθ)=Epdata[logpθ(x)pdata(x)].
将它拆开:
DKL(pdata∥pθ)=与 θ 无关Epdata[logpdata(x)]−Epdata[logpθ(x)].
因此,最小化两个分布之间的 KL,等价于最大化真实图片在模型下的对数似然:
θmaxEx∼pdata[logpθ(x)].
训练集中只有有限张图片,所以实际优化的是样本平均:
θmaxN1n=1∑Nlogpθ(x(n)).
到这里,DDPM 与 VAE 的出发点完全一样:
让模型给真实图片分配更高的概率。
2. 直接学习图片分布困难
一张图片可能包含物体、纹理、姿态、光照和背景等复杂结构。让神经网络直接写出并计算 pθ(x) 很困难。
但有一件事情非常容易:把一张图片逐渐破坏成高斯噪声。
如果我们能构造下面这条过程:
真实图片⟶略带噪声的图片⟶⋯⟶高斯噪声,
那么生成就可以考虑走相反的方向:
高斯噪声⟶⋯⟶清晰图片.
从标准高斯中采样很容易。于是原来的难题被改写为:
能否学习许多个简单的“小步去噪”,最终把高斯噪声变成真实图片?
这就是扩散模型的核心思路。
然后具体的实现是预测噪声 然后带噪声的图减去噪声 多个时间步后完成图片生成

3. 把图片逐步变成噪声
3.1 变量定义
现在把训练图片记作 x0。下标表示噪声时间:x0 是干净图片,xt 是经过 t 次加噪后的图片。
第 t 步的前向加噪定义为:
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI).
式中:
- q 表示人为规定的前向加噪过程,它没有可学习参数;
- q(xt∣xt−1) 表示在给定 xt−1 后,xt 的条件概率分布;
- N(x;μ,Σ) 表示变量 x 服从均值为 μ、协方差为 Σ 的高斯分布;
- I 是单位矩阵,因此 βtI 表示各维噪声方差都是 βt,并且不同维度之间不相关。
βt 表示这一步加入多少噪声,通常是一个很小的正数。对应的采样过程是:
xt=1−βtxt−1+βtzt,zt∼N(0,I).
这一步同时做了两件事:
- 用 1−βt 稍微缩小原有信号;
- 加入方差为 βt 的新高斯噪声。
为了让后续公式更简洁,这时再定义:
αt=1−βt,αˉt=s=1∏tαs.
αt 是单步信号保留比例,αˉt 是从 x0 到 xt 的累计信号保留比例。
3.2 难道训练时要一步一步加噪吗
如果每次训练都必须计算:
x0→x1→⋯→xt,
代价会很高。连续的线性高斯变换可以合并,因此我们可以直接得到任意时刻 t 的条件分布:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I).
它对应的一步采样公式是:
xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I).
展开证明:为什么多步加噪可以合并成这一个公式?
前向过程的单步采样公式是:
xt=αtxt−1+1−αtzt,zt∼N(0,I).先看前两步:
x1=α1x0+1−α1z1.将 x1 代入第二步:
x2=α2x1+1−α2z2=α2(α1x0+1−α1z1)+1−α2z2=α1α2x0+α2(1−α1)z1+1−α2z2.信号部分的系数已经变成:
α1α2=αˉ2.再看噪声部分。由于 z1,z2 相互独立,且都服从 N(0,I),它们的线性组合仍然是均值为 0 的高斯。
这里用到了“独立随机变量线性组合的方差可以相加”。这个结论可以直接由协方差的定义证明。
设两个随机向量为 X,Y,令:
U=aX+bY.根据协方差矩阵的定义:
Cov(U)=E[(U−E[U])(U−E[U])T].将 U=aX+bY 展开:
Cov(aX+bY)=a2Cov(X)+b2Cov(Y)+abCov(X,Y)+abCov(Y,X).其中交叉协方差为:
Cov(X,Y)=E[(X−E[X])(Y−E[Y])T].如果 X 与 Y 相互独立,那么:
Cov(X,Y)=E[X−E[X]]E[Y−E[Y]]T=0.同理 Cov(Y,X)=0,所以:
Cov(aX+bY)=a2Cov(X)+b2Cov(Y).注意,相加的是乘完系数后的方差 a2Cov(X) 和 b2Cov(Y),不是把标准差 a,b 直接相加。
回到 x2 的噪声部分,取:
a=α2(1−α1),b=1−α2.又因为:
Cov(z1)=Cov(z2)=I,所以这两个噪声的协方差为:
α2(1−α1)I+(1−α2)I=(α2−α1α2+1−α2)I=(1−α1α2)I=(1−αˉ2)I.所以可以用一份新的标准高斯噪声 ϵ∼N(0,I) 表示整个噪声部分:
α2(1−α1)z1+1−α2z2=1−αˉ2ϵ.于是:
x2=αˉ2x0+1−αˉ2ϵ.下面证明一般的第 t 步。假设第 t−1 步已经能够写成:
xt−1=αˉt−1x0+1−αˉt−1ϵt−1,ϵt−1∼N(0,I).把它代入第 t 步:
xt=αtxt−1+1−αtzt=αtαˉt−1x0+αt(1−αˉt−1)ϵt−1+1−αtzt.根据 αˉt=αtαˉt−1,信号部分就是:
αtαˉt−1x0=αˉtx0.后面两个独立高斯噪声的协方差之和为:
αt(1−αˉt−1)I+(1−αt)I=(1−αtαˉt−1)I=(1−αˉt)I.所以它们也能合并成一份新的标准高斯噪声:
αt(1−αˉt−1)ϵt−1+1−αtzt=1−αˉtϵ.最终得到:
xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I).因此:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I).
随着 t 增大,αˉt 越来越小:
- x0 的系数逐渐趋近于 0;
- 噪声的系数逐渐趋近于 1;
- 最终 xT 近似服从 N(0,I)。
前向过程 q 是人为规定的,不需要训练。
4. 生成图片需要学习什么
4.1 形式化
前向加噪容易计算,但我们的目标是生成,所以需要沿相反方向运行:
xT→xT−1→⋯→x0.
生成过程从:
xT∼p(xT)=N(0,I)
开始,然后反复使用一个可学习的条件分布:
pθ(xt−1∣xt).
当每一步噪声 βt 足够小时,反向的一小步也可以用高斯近似:
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)).
式中每个符号的含义是:
- pθ:需要训练的反向生成模型;
- θ:去噪网络的所有可学习参数;
- μ:希腊字母 mu,表示高斯分布的均值;
- μθ(xt,t):由模型参数 θ 决定的均值函数。它接收当前带噪图片 xt 和时间步 t,返回一个与 xt 形状相同的向量;
- Σ:希腊字母 Sigma,表示高斯分布的协方差矩阵;
- Σθ(xt,t):反向一步的不确定性;它决定从均值附近采样时可以偏离多远;
- 下标 θ:表示这个量由模型参数决定,并不是新的时间下标;
- 分号前的 xt−1:表示这个高斯分布所描述的随机变量;
- 分号后的两项:依次是该高斯分布的均值和协方差。
所以这条公式可以直接读成:
给定 xt,模型认为 xt−1 服从一个高斯分布;该分布的均值是 μθ(xt,t),协方差是 Σθ(xt,t)。
这句话不是说 xt−1 是一个固定答案,而是说:给定当前带噪图片 xt,上一步较清晰的图片 xt−1 仍有多种可能,DDPM 用一个高斯分布描述这些可能性。
- 均值 μθ(xt,t) 表示 xt−1 最可能位于哪里,也就是主要的去噪方向;
- 协方差 Σθ(xt,t) 表示这一步还保留多少不确定性。
μθ 是反向模型最终需要得到的均值参数,但在原始 DDPM 的常用实现中,U-Net 并不直接输出 μθ。网络真正输出的是噪声预测:
ϵθ(xt,t).
4.2 真正不能直接求的是什么
这里必须区分真实反向分布和模型反向分布:
真实反向分布,无法直接计算q(xt−1∣xt)模型给出的高斯近似,可以计算和采样pθ(xt−1∣xt).
无法直接处理的不是 pθ(xt−1∣xt),而是 q(xt−1∣xt)。根据 Bayes 公式:
q(xt−1∣xt)=q(xt)q(xt∣xt−1)q(xt−1).
其中分母还可以写成:
q(xt)=∫q(xt∣xt−1)q(xt−1)dxt−1.
逐项来看:
- q(xt∣xt−1):已知,因为它就是我们规定的单步高斯加噪过程;
- q(xt−1):无法直接求,因为它是所有真实图片经过 t−1 步加噪后的边缘分布;
- q(xt):无法直接求,因为它需要对所有可能的 xt−1 做积分。
4.3 加上 x0 后可以求
训练时,干净图片 x0 是已知的。加上这个条件后,可以计算:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0).
由于前向过程满足马尔可夫性,一旦知道 xt−1,xt 就不再依赖 x0,所以:
q(xt∣xt−1,x0)=q(xt∣xt−1).
因此:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1)q(xt−1∣x0).
右边三个分布都能由前向加噪公式直接得到,并且都是高斯分布,所以 q(xt−1∣xt,x0) 可以解析计算。
训练的目标就是让模型分布:
pθ(xt−1∣xt)
逼近这个可计算的真实后验:
q(xt−1∣xt,x0).
经过计算,最终得到:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI),
其中:
β~t=1−αˉt1−αˉt−1βt,
μ~t(xt,x0)=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt.
展开计算:代入三个高斯分布并完成配方
首先写出正确的 Bayes 公式:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0).由前向过程的马尔可夫性:
q(xt∣xt−1,x0)=q(xt∣xt−1).所以:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1)q(xt−1∣x0).这里要代入三个已知的高斯分布。
第一项是单步前向加噪:
q(xt∣xt−1)=N(xt;αtxt−1,βtI).第二项是从 x0 直接加噪到 xt−1:
q(xt−1∣x0)=N(xt−1;αˉt−1x0,(1−αˉt−1)I).第三项是从 x0 直接加噪到 xt:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I).将三个高斯直接代入 Bayes 公式,并使用 βt=1−αt,得到与图中式 (72) 相同的形式:
q(xt−1∣xt,x0)=N(xt;αˉtx0,(1−αˉt)I)N(xt;αtxt−1,(1−αt)I)N(xt−1;αˉt−1x0,(1−αˉt−1)I).把高斯密度写成指数形式,便得到图中的式 (73):
q(xt−1∣xt,x0)∝exp{−21[1−αt∥xt−αtxt−1∥2+1−αˉt−1∥xt−1−αˉt−1x0∥2−1−αˉt∥xt−αˉtx0∥2]}.第三项来自分母 q(xt∣x0)。它只包含已经给定的 xt,x0,不包含待求随机变量 xt−1,所以官方推导在下一步把它记入常数 C(xt,x0)。
因此,在求关于 xt−1 的分布形状时,可以去掉第三项以及其他与 xt−1 无关的归一化常数:
q(xt−1∣xt,x0)∝q(xt∣xt−1)q(xt−1∣x0)∝exp[−21(βt∥xt−αtxt−1∥2+1−αˉt−1∥xt−1−αˉt−1x0∥2)].这一步重新使用了 βt=1−αt
为了更容易看出配方结构,暂时令:
y=xt−1.只保留指数中与 y 有关的项并展开:
=βt∥xt−αty∥2+1−αˉt−1∥y−αˉt−1x0∥2(βtαt+1−αˉt−11)∥y∥2−2(βtαtxt+1−αˉt−1αˉt−1x0)Ty+C,其中 C 收集所有与 y 无关的项。
定义二次项系数:
A=βtαt+1−αˉt−11.利用:
βt=1−αt,αˉt=αtαˉt−1,可以化简:
A=βt(1−αˉt−1)αt(1−αˉt−1)+βt=βt(1−αˉt−1)1−αtαˉt−1=βt(1−αˉt−1)1−αˉt.高斯分布指数中的二次项系数是协方差的逆,因此:
β~t=A−1=1−αˉtβt(1−αˉt−1).再定义线性项中的向量:
b=βtαtxt+1−αˉt−1αˉt−1x0.对 A∥y∥2−2bTy 配方:
A∥y∥2−2bTy=A∥y−A−1b∥2−A−1∥b∥2.因此高斯均值是:
μ~t=A−1b=β~tb.分别整理 x0 和 xt 的系数:
μ~t(xt,x0)=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt.于是完成计算:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI).
4.4 继续消去 x0
上面的真实后验均值仍然含有 x0。训练时 x0 已知,但生成时只有 xt,所以还要利用:
xt=αˉtx0+1−αˉtϵ
消去 x0。直接代换后的答案是:
μ~t=αt1(xt−1−αˉtβtϵ).
展开计算
先从前向采样公式反解 x0:
x0=αˉtxt−1−αˉtϵ.把它代入刚刚求出的真实后验均值:
μ~t=1−αˉtαˉt−1βtαˉtxt−1−αˉtϵ+1−αˉtαt(1−αˉt−1)xt.因为:
αˉt=αtαˉt−1,αˉtαˉt−1=αt1,所以:
μ~t=αt(1−αˉt)βtxt−αt1−αˉtβtϵ+1−αˉtαt(1−αˉt−1)xt.合并两个 xt 项:
μ~t=αt(1−αˉt)βt+αt(1−αˉt−1)xt−αt1−αˉtβtϵ.利用:
βt+αt(1−αˉt−1)=1−αt+αt−αtαˉt−1=1−αˉt,得到:
μ~t=αt1xt−αt1−αˉtβtϵ=αt1(xt−1−αˉtβtϵ).
这个结果不再显式依赖 x0。只要模型能够从 xt 预测累计噪声 ϵ,就能得到反向分布的均值。
这个结果后面也会用到
5. 从极大似然推导
到目前为止,我们已经知道怎样构造训练样本:
xt=αˉtx0+1−αˉtϵ,
也知道只要让网络预测这份噪声:
ϵθ(xt,t)≈ϵ,
就能够构造反向均值并训练模型。因此,从实现角度看,“预测噪声 + 对噪声做MSE损失”已经足够写出训练代码。
但是仍然需要回答一个理论问题:
为什么最小化噪声预测 MSE,会让生成分布 pθ(x0) 接近真实数据分布?
答案是:它可以从最大似然的变分下界推导出来。不过要注意,原始 DDPM 实际使用的无权重 Lsimple 是对严格变分下界目标的进一步简化,并不与负对数似然逐项完全相等。
5.1 最大似然最终变成什么目标
完整的最大似然目标需要对真实数据分布中的图片取期望:
θmaxEx0∼pdata[logpθ(x0)].
真实分布 pdata 没有解析表达式,我们只有包含 N 张图片的训练集,所以使用数据集均值近似:
θmaxN1n=1∑Nlogpθ(x0(n)).
实际使用大小为 B 的 mini-batch 训练时,再用 batch 均值作为这个期望的随机估计:
B1b=1∑Blogpθ(x0(b)).
下面和 VAE 的推导一样,为了简化符号,先固定其中一张训练图片 x0,推导它的单样本目标:
logpθ(x0).
推导完成后,还要在最外层对 x0∼pdata 取期望。因此后文只写 logpθ(x0),并不表示训练时只使用一张图片。
中间变量 x1,…,xT 没有被观测,所以:
pθ(x0)=∫pθ(x0:T)dx1:T
无法直接计算。下面不是直接“写出”ELBO,而是一步一步把不可计算的积分改造成可以采样估计的期望。
首先,我们已经知道如何从干净图片 x0 采样整条前向噪声链,因此有:
q(x1:T∣x0)=t=1∏Tq(xt∣xt−1).
这是一个合法的条件概率分布,所以:
∫q(x1:T∣x0)dx1:T=1.
在 pθ(x0) 的积分中同时乘上和除以这个分布,积分值不会改变:
pθ(x0)=∫pθ(x0:T)dx1:T=∫q(x1:T∣x0)q(x1:T∣x0)pθ(x0:T)dx1:T.
根据期望的定义:
Ez∼q(z)[f(z)]=∫q(z)f(z)dz,
所以上面的积分可以写成:
pθ(x0)=Eq(x1:T∣x0)[q(x1:T∣x0)pθ(x0:T)].
这一步仍然是严格等式。两边取对数:
logpθ(x0)=logEq(x1:T∣x0)[q(x1:T∣x0)pθ(x0:T)].
问题在于对数位于期望外面,这个量仍然不方便直接优化。由于 log 是凹函数,Jensen 不等式给出:
logE[Y]≥E[logY].
令:
Y=q(x1:T∣x0)pθ(x0:T),
便得到:
logpθ(x0)≥Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]:=LELBO(x0).
符号 := 表示把右边这个期望定义为 LELBO(x0)。因为它不超过 logpθ(x0),所以称为“证据下界”。
这个下界与真实对数似然之间究竟差多少,也可以精确写出。模型的真实后验为:
pθ(x1:T∣x0)=pθ(x0)pθ(x0:T).
计算前向分布与该真实后验之间的 KL:
DKL(q(x1:T∣x0)∥pθ(x1:T∣x0))=Eq(x1:T∣x0)[logpθ(x1:T∣x0)q(x1:T∣x0)]=Eq(x1:T∣x0)[logpθ(x0:T)q(x1:T∣x0)pθ(x0)]=logpθ(x0)−Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]=logpθ(x0)−LELBO(x0).
因此有精确恒等式:
logpθ(x0)=LELBO(x0)+DKL(q(x1:T∣x0)∥pθ(x1:T∣x0)).
KL 散度始终非负,所以 ELBO 必然是下界;当 q(x1:T∣x0) 与模型真实后验完全一致时,KL 为零,ELBO 才会等于真实对数似然。
将它整理后,最终结果为:
LELBO(x0)=重建项Eq(x1∣x0)[logpθ(x0∣x1)]−先验匹配项DKL(q(xT∣x0)∥p(xT))−逐步去噪匹配项t=2∑TEq(xt∣x0)[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))].
最大化 ELBO 等价于最小化它的相反数:
LVLB=L0+t=2∑TLt−1+LT.
三个部分分别表示:
- L0=−E[logpθ(x0∣x1)]:最后一步从 x1 恢复 x0;
- LT=DKL(q(xT∣x0)∥p(xT)):让前向终点接近生成起点 N(0,I);
- Lt−1:让模型的反向一步逼近可计算的真实后验。
展开推导:从最大似然到三个 ELBO 项(对应官方式 47–58)
为缩短后面的公式,记:
Eq[⋅]:=Eq(x1:T∣x0)[⋅].首先把边缘似然写成对中间变量的积分:
logpθ(x0)=log∫pθ(x0:T)dx1:T=log∫q(x1:T∣x0)q(x1:T∣x0)pθ(x0:T)dx1:T=logEq(x1:T∣x0)[q(x1:T∣x0)pθ(x0:T)].由于 log 是凹函数,根据 Jensen 不等式:
logE[Y]≥E[logY].所以:
logpθ(x0)≥Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)].这就是官方式 (47)。接下来展开生成链和前向链:
pθ(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt),q(x1:T∣x0)=t=1∏Tq(xt∣xt−1).代入:
LELBO=Eq[log∏t=1Tq(xt∣xt−1)p(xT)∏t=1Tpθ(xt−1∣xt)].把 t=1 的项单独取出:
LELBO=Eq[logq(x1∣x0)∏t=2Tq(xt∣xt−1)p(xT)pθ(x0∣x1)∏t=2Tpθ(xt−1∣xt)].由于前向过程满足马尔可夫性:
q(xt∣xt−1)=q(xt∣xt−1,x0).对 t≥2,根据 Bayes 公式:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0).移项得到:
q(xt∣xt−1,x0)1=q(xt−1∣xt,x0)q(xt∣x0)q(xt−1∣x0).因此,前向分布乘积的倒数可以改写为:
q(x1∣x0)∏t=2Tq(xt∣xt−1,x0)1=q(x1∣x0)1t=2∏Tq(xt−1∣xt,x0)q(xt∣x0)q(xt−1∣x0).把只含边缘分布的部分单独观察:
q(x1∣x0)1t=2∏Tq(xt∣x0)q(xt−1∣x0).将乘积展开:
q(x1∣x0)1q(x2∣x0)q(x1∣x0)q(x3∣x0)q(x2∣x0)⋯q(xT∣x0)q(xT−1∣x0).相邻的分子分母全部抵消,最终只剩:
q(xT∣x0)1.所以 ELBO 可以整理为:
LELBO=Eq[logq(xT∣x0)p(xT)pθ(x0∣x1)+logt=2∏Tq(xt−1∣xt,x0)pθ(xt−1∣xt)].使用 log∏tat=∑tlogat:
LELBO=Eq[logpθ(x0∣x1)]+Eq[logq(xT∣x0)p(xT)]+t=2∑TEq[logq(xt−1∣xt,x0)pθ(xt−1∣xt)].根据 KL 散度定义:
DKL(q∥p)=Eq[logpq],所以:
Eq[logqp]=−DKL(q∥p).分别应用到第二项和第三项:
LELBO=Eq(x1∣x0)[logpθ(x0∣x1)]−DKL(q(xT∣x0)∥p(xT))−t=2∑TEq(xt∣x0)[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))].这就是官方式 (58)。
5.2 去噪 KL 为什么会变成噪声 MSE
对 t≥2,真实后验和模型反向分布都是高斯:
q(xt−1∣xt,x0)=N(xt−1;μ~t,β~tI),
pθ(xt−1∣xt)=N(xt−1;μθ,σt2I).
如果 σt2 预先固定,那么去噪 KL 中与模型参数 θ 有关的部分是:
Lt−1=E[2σt21∥μ~t−μθ∥2]+C.
把真实噪声 ϵ 和预测噪声 ϵθ 的均值参数化代入后:
Lt−1=Ex0,ϵ[2σt2αt(1−αˉt)βt2∥ϵ−ϵθ(xt,t)∥2]+C.
这就是从最大似然严格推导出来的带权噪声 MSE。
展开计算:从两个高斯的 KL 到带权噪声 MSE
先从两个一般的 d 维高斯分布开始:
q=N(μq,Σq),p=N(μp,Σp).它们的 KL 散度为:
DKL(q∥p)=21[tr(Σp−1Σq)+(μp−μq)TΣp−1(μp−μq)−d+logdetΣqdetΣp].在 DDPM 的第 t 个反向步骤中:
μq=μ~t,Σq=β~tI,μp=μθ,Σp=σt2I.因此:
Σp−1=σt21I,tr(Σp−1Σq)=dσt2β~t,logdetΣqdetΣp=dlogβ~tσt2,并且:
(μθ−μ~t)TΣp−1(μθ−μ~t)=σt21∥μ~t−μθ∥2.全部代回:
DKL(N(μ~t,β~tI)∥N(μθ,σt2I))=21[dσt2β~t+σt21∥μ~t−μθ∥2−d+dlogβ~tσt2].当 β~t 和 σt2 都预先固定时,只有均值误差依赖模型参数 θ。把其余项合并为常数 C:
DKL(N(μ~t,β~tI)∥N(μθ,σt2I))=2σt21∥μ~t−μθ∥2+C.C 包含方差、维度和对数行列式等与 θ 无关的项。
前面已经得到真实后验均值:
μ~t=αt1(xt−1−αˉtβtϵ).模型均值使用相同形式,但把真实噪声替换成网络预测:
μθ=αt1(xt−1−αˉtβtϵθ(xt,t)).两者相减,xt 项抵消:
μ~t−μθ=αt1−αˉtβt(ϵθ(xt,t)−ϵ).平方后:
∥μ~t−μθ∥2=αt(1−αˉt)βt2∥ϵ−ϵθ(xt,t)∥2.代回高斯 KL:
Lt−1=E[2σt2αt(1−αˉt)βt2∥ϵ−ϵθ(xt,t)∥2]+C.
5.3 为什么实际训练只使用普通 MSE
严格变分目标中的每个时间步带有权重:
wt=2σt2αt(1−αˉt)βt2.
原始 DDPM 发现,去掉这个权重通常能够获得更好的生成质量,于是定义简化目标:
Lsimple=Ex0∼pdata,t∼Uniform{1,…,T},ϵ∼N(0,I)[∥ϵ−ϵθ(xt,t)∥22].
其中:
xt=αˉtx0+1−αˉtϵ.
因此,最准确的结论是:
- 从实现角度:现在的信息确实已经足够训练;随机选择 t、构造 xt、预测 ϵ 并计算 MSE 即可。
- 从理论角度:最大似然经过 ELBO、高斯 KL 和噪声参数化,可以严格推出带权噪声 MSE。
- 从原始 DDPM 的实际做法看:常用的无权重 Lsimple 删除了理论权重,是与变分目标密切相关但经过经验简化的代理目标。
6. 训练与生成
6.1 训练
每次训练先采样一张真实图片、一个时间步和一份标准高斯噪声:
x0∼pdata,t∼Uniform{1,…,T},ϵ∼N(0,I).
利用前向过程的闭式公式,直接构造所抽取时间步的带噪图片:
xt=αˉtx0+1−αˉtϵ.
网络根据带噪图片和时间步预测噪声:
ϵ^=ϵθ(xt,t).
使用简化的噪声预测损失:
Lsimple=∥ϵ−ϵθ(xt,t)∥22.
然后对损失反向传播并更新模型参数:
θ←θ−η∇θLsimple,
其中 eta 是优化器当前使用的学习率。
训练过程中不需要按顺序构造整条前向链:
x0→x1→⋯→xt.
因为任意时间步的带噪状态都能由干净图片一步采样得到。
6.2 生成
训练完成后,首先从标准高斯先验中采样:
xT∼N(0,I).
然后按照:
t=T,T−1,…,1
依次执行反向去噪。每一步使用的随机噪声为:
z∼{N(0,I),δ(0),t>1,t=1,
其中 delta(0) 表示集中在零点的退化分布;也就是说,在最后一个时间步直接令噪声为零。
反向采样公式为:
xt−1=αt1(xt−1−αˉtβtϵθ(xt,t))+σtz.
这里 σtz 引入随机性,实验证明能提高生成质量
基础 DDPM 可以将反向方差设置为:
σt2=β~t=1−αˉt1−αˉt−1βt.
执行到最后一步后得到生成结果:
x0