下面我们讲的 EDM 指的是 Karras 等人在论文 Elucidating the Design Space of Diffusion-Based Generative Models 中提出的 diffusion 统一框架。它不是一个全新的扩散模型,而更像是一次“把扩散模型拆开重装”的工作:把 网络参数化、训练噪声分布、损失权重、采样 ODE、采样步长调度、数值求解器 这些设计选择分离开来,然后给出一套更清晰、更稳定、更高效的推荐方案。
EDM 可以理解为:
用 σ 作为统一噪声坐标,把扩散模型写成“从高噪声到低噪声解 ODE”的问题;网络学习在任意 σ 下把带噪图像 x 还原成干净图像 y;采样时根据 x−Dθ(x;σ) 估计噪声方向,然后沿 ODE 一步步去噪。
省流速通
EDM 的完整训练过程
训练时可以概括为:
-
采样真实图像:y∼pdata
-
采样噪声等级:σ∼ptrain(σ)
EDM 通常使用 log-normal 分布:logσ∼N(Pmean,Pstd2)
-
采样高斯噪声:ϵ∼N(0,I)
-
构造带噪样本:x=y+σϵ
-
计算网络输出:
Dθ(x;σ)=cskipx+coutFθ(cinx,cnoise)
- 最小化:
L=λ(σ)∣Dθ(x;σ)−y∣22
也就是:
LEDM=Eσ,y,ϵ[(σσdata)2σ2+σdata2∣Dθ(y+σϵ;σ)−y∣22]
EDM 的完整采样过程
采样时:
- 采样初始噪声:x0∼N(0,σmax2I)
- 构造噪声序列:σ0>σ1>⋯>σN=0
- 对每一步,计算:
di=σixi−Dθ(xi;σi)
- Euler 预测:
x^i+1=xi+(σi+1−σi)di
- Heun 修正:
di+1′=σi+1x^i+1−Dθ(x^i+1;σi+1)
- 更新:
xi+1=xi+(σi+1−σi)2di+di+1′
当 σi+1=0 时,最后一步通常只做 Euler,避免除以 0。
后面将会比较详细的说明 EDM 的具体过程推导
EDM 的核心思想
传统 DDPM 通常写成:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
也就是:
xt=αˉtx0+1−αˉtϵ,ϵ∼N(0,I)
EDM 换了一个更直观的写法:直接用噪声标准差 σ 表示噪声强度。
令真实数据为 y,加噪后的样本为:
x=y+n,n∼N(0,σ2I)
也就是:
x=y+σϵ,ϵ∼N(0,I)
这里的 σ 就是噪声等级。
σ 大,图像几乎全是噪声;σ 小,图像接近真实数据。
所以 EDM 的基本建模对象是:
p(x;σ)=pdata(y)∗N(0,σ2I)
也就是“真实数据分布经过高斯模糊后的分布”。
从 score 到 denoiser
扩散模型里有一个非常核心的量,叫 score:
∇xlogp(x;σ)
它表示:在噪声等级 σ 下,当前点 x 应该往哪个方向移动,才能更接近高概率区域。
但 EDM 不直接让网络预测 score,而是让网络预测 denoised image,即:
Dθ(x;σ)≈y
也就是:给定带噪图像 x=y+σϵ,网络输出干净图像 y 的估计。
为什么 denoiser 和 score 是等价的?这里用到 Tweedie 公式:
∇xlogp(x;σ)=σ2E[y∣x]−x
如果我们用神经网络 Dθ(x;σ) 近似条件期望:
Dθ(x;σ)≈E[y∣x]
那么 score 可以写成:
∇xlogp(x;σ)≈σ2Dθ(x;σ)−x
反过来也可以写成:
Dθ(x;σ)≈x+σ2∇xlogp(x;σ)
所以:
预测 denoised image,本质上等价于预测 score。
这点非常重要。EDM 之所以喜欢用 denoiser,是因为它在训练和采样时更稳定、更直观。
概率流 ODE 推导
EDM 把采样过程看成一个连续时间 ODE。我们从高噪声开始:
x(σmax)∼N(0,σmax2I)
然后逐渐降低噪声:
σmax→σmin→0
最终得到干净图像。
对于 variance exploding 形式的扩散过程,有概率流 ODE:
dtdx=−σ˙(t)σ(t)∇xlogp(x;σ(t))
该方程具体推导过程见文末
如果令时间变量直接等于噪声强度:
t=σ
那么:
σ˙(t)=1
于是:
dσdx=−σ∇xlogp(x;σ)
代入刚才的 score-denoiser 关系:
∇xlogp(x;σ)≈σ2Dθ(x;σ)−x
得到:
dσdx=−σ⋅σ2Dθ(x;σ)−x
化简:
dσdx=σx−Dθ(x;σ)
这就是 EDM 采样 ODE 的核心形式:
dσdx=σx−Dθ(x;σ)
它的含义很漂亮:
- x 是当前带噪图像;
- Dθ(x;σ) 是网络估计的干净图像;
- x−Dθ(x;σ) 是“当前噪声成分”;
- 除以 σ 后得到沿噪声尺度变化的速度。
所以采样过程就是沿着这个 ODE,从大 σ 积分到小 σ。
EDM 的采样公式
假设当前噪声等级是 σi,下一个噪声等级是 σi+1,其中:
σi>σi+1
当前状态为 xi。根据 ODE:
dσdx=di=σixi−Dθ(xi;σi)
用一阶 Euler 方法:
xi+1=xi+(σi+1−σi)di
即:
xi+1=xi+(σi+1−σi)σixi−Dθ(xi;σi)
因为 σi+1−σi<0,所以这一步实际上是在“减去噪声方向”。
- DDPM / DDIM 的习惯(倒计时):使用的是物理时间步 t。定义 t=0 是干净图像,t=T(如 1000)是纯噪声。因此,在采样生成时,时间是倒着走的,从 t=T→T−1→⋯→0。
- EDM 的习惯(正向计步):使用的是算法循环的步数计数器 i。定义 i=0 是采样的开始(纯噪声),i=N(如 30)是采样结束(干净图像)。因此,在采样生成时,计数器是正着走的,从 i=0→1→⋯→N。
EDM 更推荐用二阶 Heun 方法。先做 Euler 预测:
x^i+1=xi+(σi+1−σi)di
然后在新位置计算新的斜率:
di+1=σi+1x^i+1−Dθ(x^i+1;σi+1)
最后取两个斜率的平均:
xi+1=xi+(σi+1−σi)2di+di+1
也就是:
xi+1=xi+(σi+1−σi)21[σixi−Dθ(xi;σi)+σi+1x^i+1−Dθ(x^i+1;σi+1)]
这就是 EDM 采样算法的核心。论文和官方实现也提供了对应代码与采样器。
EDM 的噪声调度
EDM 认为采样时 σ 的选择非常关键。不是简单线性下降,而是使用 Karras noise schedule:
σi=(σmax1/ρ+N−1i(σmin1/ρ−σmax1/ρ))ρ
其中:
i=0,1,…,N−1
通常 ρ=7。
直觉上,这个 schedule 会在小噪声区域分配更多采样步数。
为什么?因为图像细节主要在低噪声阶段形成。高噪声阶段只决定大致结构,小噪声阶段负责纹理、边缘、颜色、局部细节。
所以 EDM 的采样噪声序列是:
σ0=σmax>σ1>⋯>σN−1=σmin>σN=0
最后一步到 σ=0,得到最终图像。
EDM 的训练目标
EDM 的训练非常直接。
从数据集中采样干净图像:
y∼pdata
采样噪声等级:
σ∼ptrain(σ)
采样标准高斯噪声:
ϵ∼N(0,I)
构造带噪输入:
x=y+σϵ
然后训练网络:
Dθ(x;σ)≈y
最基本的 denoising loss 是:
L=Ey,ϵ,σ[∣Dθ(y+σϵ;σ)−y∣22]
但 EDM 加了一个噪声相关的权重:
L=Ey,ϵ,σ[λ(σ)∣Dθ(y+σϵ;σ)−y∣22]
即:
LEDM=Eσ,y,ϵ[λ(σ)∣Dθ(y+σϵ;σ)−y∣22]
这里 λ(σ) 用来平衡不同噪声等级的训练难度。
EDM 的预条件化设计
它不直接让网络输出 Dθ(x;σ),而是写成:
Dθ(x;σ)=cskip(σ)x+cout(σ)Fθ(cin(σ)x,cnoise(σ))
其中 Fθ 是真正的神经网络。
具体推导细节见文末
这个式子的意思是:
- cskip(σ)x:保留一部分输入;
- Fθ:预测需要补充或修正的部分;
- cin(σ):把输入标准化;
- cout(σ):控制网络输出尺度;
- cnoise(σ):把噪声等级编码后送入网络。
EDM 推荐的系数是:
cskip(σ)=σ2+σdata2σdata2
cout(σ)=σ2+σdata2σσdata
cin(σ)=σ2+σdata21
cnoise(σ)=41logσ
其中 σdata 表示数据本身的标准差。对于归一化到大约 [−1,1] 的图像,论文中常用:
σdata=0.5
一些细节推导与理解
- dtdx=−σ˙(t)σ(t)∇xlogp(x;σ(t))
EDM 这里的推导,其实是直接借用了 SDE 框架中关于“方差爆炸(Variance Exploding, VE)”模型的现成结论。
在连续时间 t 下,假设一个前向加噪过程。对于 Variance Exploding (VE) 模型,它的特点是不衰减原图信号,只不断往里面加方差越来越大的噪声。
写成随机微分方程(SDE)的标准形式:
dx=f(x,t)dt+g(t)dw
- f(x,t) 是漂移项(Drift coefficient),控制信号的衰减趋势。
- g(t) 是扩散项(Diffusion coefficient),控制加入噪声的强度。
- w 是标准布朗运动(维纳过程)。
因为 VE 模型不缩放原图信号,所以漂移项为 0,即 f(x,t)=0。于是它的前向 SDE 形式非常简单:
dx=g(t)dw
- 第二步:确定扩散项 g(t) 到底是什么
我们知道,VE 模型在时刻 t 的边缘分布,相当于给原图加了方差为 σ2(t) 的噪声。也就是说,在时间从 0 积分到 t 的过程中,累积的方差必须等于 σ2(t)。
根据随机微积分的性质,SDE dx=g(t)dw 在 dt 时间内产生的方差增量是 g2(t)dt。因此,总方差对时间的导数,就是 g2(t):
dtd[σ2(t)]=g2(t)
利用微积分的链式法则展开左边:
2σ(t)σ˙(t)=g2(t)
这就是 VE 模型中极其关键的关系式。此时,我们可以把前向 SDE 具体写为:
dx=2σ(t)σ˙(t)dw
- 第三步:引入“概率流常微分方程(Probability Flow ODE)”定理
这里需要用到 Yang Song 论文中最核心的定理之一:对于任意一个 SDE,都存在一个对应的常微分方程(ODE),它们的边缘概率密度函数 pt(x) 随着时间的演化是完全一样的。
对于一般形式的 SDE:dx=f(x,t)dt+g(t)dw
它所对应的概率流 ODE (Probability Flow ODE) 的通用公式被证明为:
dx=[f(x,t)−21g2(t)∇xlogpt(x)]dt
这个公式的物理意义是:我们可以把原本带有随机性(dw)的布朗运动,等效转换成一个完全确定性的流体运动(ODE),只要我们沿着对数概率密度的梯度(也就是 Score,∇xlogpt(x))进行引导。
现在,已知 VE 模型的参数为:
- f(x,t)=0
- g2(t)=2σ(t)σ˙(t)
代入概率流 ODE 的通用公式:
dx=[0−21(2σ(t)σ˙(t))∇xlogpt(x)]dt
化简括号里的式子,21 和 2 抵消:
dx=[−σ(t)σ˙(t)∇xlogpt(x)]dt
两边同除以 dt,就得到了你在图中看到的那行概率流 ODE 核心公式:
dtdx=−σ˙(t)σ(t)∇xlogp(x;σ(t))
(注:这里的 pt(x) 和图中的 p(x;σ(t)) 是同一种东西的不同写法,都代表在时间 t 或噪声级别 σ(t) 下的边缘概率分布)。
EDM 巧妙的地方在于,它拿到这个现成的结论后,做了一个极其简单却绝妙的变量替换——直接让 t=σ,从而消灭了对抽象时间 t 的依赖,把整个微分方程变成了完全由“噪声强度 σ”主导的简洁系统。
- Dθ(x;σ)=cskip(σ)x+cout(σ)Fθ(cin(σ)x,cnoise(σ))
我们来推一下它的直觉来源。
假设数据满足:
y∼N(0,σdata2I)
加噪后:
x=y+σϵ
所以:
Var(x)=σdata2+σ2
为了让网络输入在不同噪声等级下都有相近方差,希望:
Var(cinx)≈1
因此:
cin2(σdata2+σ2)=1
所以:
cin=σdata2+σ21
接着考虑最优线性估计。若 y 和噪声都是高斯,则:
E[y∣x]=σdata2+σ2σdata2x
我们已知:
- 真实数据(先验):y∼N(0,σdata2I)
- 观测数据:x=y+σϵ,其中噪声 ϵ∼N(0,I),且 y 与 ϵ 相互独立。
因为 y 和 ϵ 都是高斯分布,且它们是线性组合的,所以 x 和 y 服从联合高斯分布(Joint Gaussian Distribution)。
在多变量高斯分布中,如果已知变量 X 的值,要估计另一个变量 Y 的条件期望 E[Y∣X],有一个标准的通用公式:
E[Y∣X]=μY+Var(X)Cov(Y,X)(X−μX)
现在,我们把具体的参数代入这个公式中进行计算:
- μY=E[y]=0
- μX=E[x]=E[y+σϵ]=E[y]+σE[ϵ]=0+0=0
因为 y 和 ϵ 是独立的,所以方差可以直接相加:
- Var(x)=Var(y+σϵ)=Var(y)+Var(σϵ)=σdata2+σ2
计算 x 和 y 的协方差(Cov(Y,X)):
- Cov(y,x)=E[(y−μY)(x−μX)T]=E[yxT]
- 将 x=y+σϵ 代入:
E[y(y+σϵ)T]=E[yyT]+E[yσϵT]
- 因为 y 和 ϵ 独立,E[yϵT]=0。而 E[yyT] 就是 y 的方差:
Cov(y,x)=σdata2
将上述结果代入标准条件期望公式:
E[y∣x]=0+σdata2+σ2σdata2(x−0)
E[y∣x]=σdata2+σ2σdata2x
所以自然得到 skip connection:
cskip=σdata2+σ2σdata2
这很好理解:
当 σ 很小时:
cskip≈1
此时输入 x 已经很干净,所以直接保留输入。
当 σ 很大时:
cskip≈0
此时输入几乎全是噪声,不能相信输入本身。
然后 cout 的作用是让网络 Fθ 的输出目标具有大致稳定的尺度。EDM 选择:
cout=σ2+σdata2σσdata
这样可以让网络在所有 σ 下看到的输入和输出尺度都比较稳定。
最后,EDM 的 loss weight 选择为:
λ(σ)=cout(σ)21
代入 cout:
λ(σ)=σ2σdata2σ2+σdata2
也就是:
λ(σ)=(σσdata)2σ2+σdata2
这样做的目的,是让不同噪声等级对训练的贡献更平衡。
- EDM 与 DDPM / DDIM 的关系
可以这样理解:
DDPM 写法:
xt=αˉtx0+1−αˉtϵ
把两边除以 αˉt:
αˉtxt=x0+αˉt1−αˉtϵ
令:
σt=αˉt1−αˉt
以及:
x~t=αˉtxt
那么:
x~t=x0+σtϵ
这就变成了 EDM 的形式:
x=y+σϵ
所以 EDM 不是和 DDPM 完全不同的东西,而是把 DDPM 的加噪过程重新参数化为 σ 形式。
DDIM 也可以放进 EDM 的 ODE 框架里。DDIM 的确定性采样本质上也是在解一个 probability flow ODE,只是它的时间参数、噪声调度、网络预测形式和 EDM 不一样。