DDPM(Denoising Diffusion Probabilistic Models)
更详细解读可以参考(这几个视频看完基本对DDPM的原理就能够把握了)
李宏毅
大白话AI
b站公式推导1
b站公式推导2
基本过程
扩散模型受扩散现象的启发,通过逐步向图片中加入高斯噪声来模拟这种现象,并通过逆向过程从(随机)噪声中生成图片。
添加噪声的两个条件:(1)整个过程的状态都服从马尔科夫性质(2)每一步加入的噪声变化都比较少,则变化过程可以近似为高斯分布。
前向过程
加入噪声的混合公式:
将原始干净的图片x0通过此公式多次叠加噪声直到xT。
可以用式子来表达前一时刻和后一时刻的关系:
式中每一步的
ϵ
\epsilon
ϵ都是基于标准正太分布的重新采样的随机数。而且每一步的
β
\beta
β并不相同,从最开始某个接近0的数逐渐递增,到最后接近1,以模拟扩散过程的速度越来越快。即
为简化推导,令
α
t
=
1
−
β
t
\alpha_t=1-\beta_t
αt=1−βt得到
x
t
=
1
−
α
t
×
ϵ
t
+
α
t
×
x
t
−
1
x_t=\sqrt{1-\alpha_t}\times\epsilon_t+\sqrt{\alpha_t}\times x_{t-1}
xt=1−αt
×ϵt+αt
×xt−1
则
x
t
x_t
xt和
x
t
−
2
x_{t-2}
xt−2的关系式:
x
t
=
a
t
(
1
−
a
t
−
1
)
ϵ
t
−
1
+
1
−
a
t
×
ϵ
t
+
a
t
a
t
−
1
×
x
t
−
2
x_{t}=\sqrt{a_{t}(1-a_{t-1})}\epsilon_{t-1}+\sqrt{1-a_{t}}\times\epsilon_{t}+\sqrt{a_{t}a_{t-1}}\times x_{t-2}
xt=at(1−at−1)
ϵt−1+1−at
×ϵt+atat−1
×xt−2
利用正态分布和重参数化技巧可以将两个单独采样的正太分布化为一个正太分布,即
x
t
=
1
−
α
t
α
t
−
1
×
ϵ
+
α
t
α
t
−
1
×
x
t
−
2
x_t=\sqrt{1-\alpha_t\alpha_{t-1}}\times\epsilon+\sqrt{\alpha_t\alpha_{t-1}}\times x_{t-2}
xt=1−αtαt−1
×ϵ+αtαt−1
×xt−2
同理,可以推断
x
t
=
1
−
α
‾
t
×
ϵ
+
α
‾
t
×
x
0
x_t=\sqrt{1-\overline{\alpha}_t}\times\epsilon+\sqrt{\overline{\alpha}_t}\times x_0
xt=1−αt
×ϵ+αt
×x0
其中,
α
‾
t
=
a
t
a
t
−
1
a
t
−
2
a
t
−
3
.
.
.
a
2
a
1
\overline{\alpha}_t=a_ta_{t-1}a_{t-2}a_{t-3}...a_2a_1
αt=atat−1at−2at−3...a2a1
论文里使用正太分布的公式表示:
q
(
x
1
:
T
∣
x
0
)
:
=
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
,
q
(
x
t
∣
x
t
−
1
)
:
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
q(\mathbf{x}_{1:T}|\mathbf{x}_{0}):=\prod_{t=1}^{T}q(\mathbf{x}_{t}|\mathbf{x}_{t-1}),\quad q(\mathbf{x}_{t}|\mathbf{x}_{t-1}):=\mathcal{N}(\mathbf{x}_{t};\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I})
q(x1:T∣x0):=t=1∏Tq(xt∣xt−1),q(xt∣xt−1):=N(xt;1−βt
xt−1,βtI)
到最终
β
t
\beta_t
βt会趋于1,均值趋于0,方差趋于1,即最终的图像近似为高斯分布的随机噪声图像。
反向过程
由后一时刻的图片求解出前一时刻的图片,利用贝叶斯公式
P
(
x
t
−
1
∣
x
t
,
x
0
)
=
P
(
x
t
∣
x
t
−
1
,
x
0
)
P
(
x
t
−
1
∣
x
0
)
P
(
x
t
∣
x
0
)
P(x_{t-1}|x_t,x_0)=\frac{P(x_t|x_{t-1},x_0)P(x_{t-1}|x_0)}{P(x_t|x_0)}
P(xt−1∣xt,x0)=P(xt∣x0)P(xt∣xt−1,x0)P(xt−1∣x0)
化简得到
P
(
x
t
−
1
∣
x
t
,
x
0
)
∼
N
(
a
t
(
1
−
a
ˉ
t
−
1
)
1
−
a
ˉ
t
x
t
+
a
t
−
1
(
1
−
a
t
)
1
−
a
ˉ
t
x
0
,
(
1
−
a
t
1
−
a
ˉ
t
−
1
1
−
a
ˉ
t
)
2
)
P(x_{t-1}|x_{t},x_{0})\sim N\left(\frac{\sqrt{a_{t}}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}x_{t}+\frac{\sqrt{a_{t-1}}(1-a_{t})}{1-\bar{a}_{t}}x_{0},\left(\frac{\sqrt{1-a_{t}}\sqrt{1-\bar{a}_{t-1}}}{\sqrt{1-\bar{a}_{t}}}\right)^{2}\right)
P(xt−1∣xt,x0)∼N(1−aˉtat
(1−aˉt−1)xt+1−aˉtat−1
(1−at)x0,(1−aˉt
1−at
1−aˉt−1
)2)
由于反向过程的
x
t
x_t
xt已知,
x
0
x_0
x0需要求解,故通过前向过程的关系式将
x
0
x_0
x0替换,得到
P
(
x
t
−
1
∣
x
t
,
x
0
)
∼
N
(
a
t
(
1
−
a
ˉ
t
−
1
)
1
−
a
ˉ
t
x
t
+
a
ˉ
t
−
1
(
1
−
a
t
)
1
−
a
ˉ
t
×
x
t
−
1
−
a
ˉ
t
×
ϵ
a
ˉ
t
,
(
β
t
(
1
−
a
ˉ
t
−
1
)
1
−
a
ˉ
t
)
2
\begin{aligned}P(x_{t-1}|x_{t},x_{0})&\sim N\left(\frac{\sqrt{a_{t}}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}x_{t}+\frac{\sqrt{\bar{a}_{t-1}}(1-a_{t})}{1-\bar{a}_{t}}\right.\\&\times\frac{x_{t}-\sqrt{1-\bar{a}_{t}}\times\epsilon}{\sqrt{\bar{a}_{t}}},\left(\sqrt{\frac{\beta_{t}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}}\right)^{2}\end{aligned}
P(xt−1∣xt,x0)∼N(1−aˉtat
(1−aˉt−1)xt+1−aˉtaˉt−1
(1−at)×aˉt
xt−1−aˉt
×ϵ,
1−aˉtβt(1−aˉt−1)
2
其中的
ϵ
\epsilon
ϵ是
x
0
x_0
x0到任意时刻
t
t
t的图片
x
t
x_t
xt直接加噪的噪声,因此可以训练神经网络对输入
x
t
x_t
xt和步骤
t
t
t,输出估计的
ϵ
\epsilon
ϵ,从而求解出
x
t
−
1
x_{t-1}
xt−1,再将得到的
x
t
−
1
x_{t-1}
xt−1和
t
−
1
t-1
t−1输入神经网络得到
x
t
−
2
x_{t-2}
xt−2,从而一步步计算最终得到
x
0
x_0
x0。
论文里提到反向过程可以看成如下公式:
p
θ
(
x
0
:
T
)
:
=
p
(
x
T
)
∏
t
=
1
T
p
θ
(
x
t
−
1
∣
x
t
)
,
p
θ
(
x
t
−
1
∣
x
t
)
:
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
p_\theta(\mathbf{x}_{0:T}):=p(\mathbf{x}_T)\prod_{t=1}^Tp_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t),\quad p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t):=\mathcal{N}(\mathbf{x}_{t-1};\boldsymbol{\mu}_\theta(\mathbf{x}_t,t),\boldsymbol{\Sigma}_\theta(\mathbf{x}_t,t))
pθ(x0:T):=p(xT)t=1∏Tpθ(xt−1∣xt),pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t))
使用神经网络来估计参数。
训练过程Loss推导
模型的输出为
p
(
x
(
0
⋯
T
)
)
=
p
(
x
(
T
)
)
∏
t
=
1
T
p
(
x
(
t
−
1
)
∣
x
(
t
)
)
p\big(\mathbf{x}^{(0\cdots T)}\big)=p\big(\mathbf{x}^{(T)}\big)\prod_{t=1}^Tp\big(\mathbf{x}^{(t-1)}|\mathbf{x}^{(t)}\big)
p(x(0⋯T))=p(x(T))t=1∏Tp(x(t−1)∣x(t))
由于我们只对最终的输出
x
0
x_0
x0感兴趣,因此对联合概率密度求积分得到
x
0
x_0
x0的边缘分布
p
(
x
(
0
)
)
=
∫
d
x
(
1
⋯
T
)
p
(
x
(
0
⋯
T
)
)
q
(
x
(
1
⋯
T
)
∣
x
(
0
)
)
q
(
x
(
1
⋯
T
)
∣
x
(
0
)
)
=
∫
d
x
(
1
⋯
T
)
q
(
x
(
1
⋯
T
)
∣
x
(
0
)
)
p
(
x
(
0
⋯
T
)
)
q
(
x
(
1
⋯
T
)
∣
x
(
0
)
)
=
∫
d
x
(
1
⋯
T
)
q
(
x
(
1
⋯
T
)
∣
x
(
0
)
)
⋅
p
(
x
(
T
)
)
∏
t
=
1
T
p
(
x
(
t
−
1
)
∣
x
(
t
)
)
q
(
x
(
t
)
∣
x
(
t
−
1
)
)
.
\begin{gathered} p\big(\mathbf{x}^{(0)}\big)=\int d\mathbf{x}^{(1\cdots T)}p\big(\mathbf{x}^{(0\cdots T)}\big)\frac{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)}{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)} \\ =\int d\mathbf{x}^{(1\cdots T)}q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)\frac{p\big(\mathbf{x}^{(0\cdots T)}\big)}{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)} \\ =\int d\mathbf{x}^{(1\cdots T)}q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)\cdot p\big(\mathbf{x}^{(T)}\big)\prod_{t=1}^{T}\frac{p\big(\mathbf{x}^{(t-1)}|\mathbf{x}^{(t)}\big)}{q\big(\mathbf{x}^{(t)}|\mathbf{x}^{(t-1)}\big)}. \end{gathered}
p(x(0))=∫dx(1⋯T)p(x(0⋯T))q(x(1⋯T)∣x(0))q(x(1⋯T)∣x(0))=∫dx(1⋯T)q(x(1⋯T)∣x(0))q(x(1⋯T)∣x(0))p(x(0⋯T))=∫dx(1⋯T)q(x(1⋯T)∣x(0))⋅p(x(T))t=1∏Tq(x(t)∣x(t−1))p(x(t−1)∣x(t)).
则negative log likelihood:
−
L
=
d
x
(
0
)
q
(
x
(
0
)
)
l
o
g
∫
p
(
x
(
0
)
)
-L=d\mathbf{x}^{(0)}q\big(\mathbf{x}^{(0)}\big)\mathrm{log}\int p\big(\mathbf{x}^{(0)}\big)
−L=dx(0)q(x(0))log∫p(x(0))
可化为
E
q
[
−
log
p
θ
(
x
0
:
T
)
q
(
x
1
:
T
∣
x
0
)
]
=
E
q
[
−
log
p
(
x
T
)
−
∑
t
≥
1
log
p
θ
(
x
t
−
1
∣
x
t
)
q
(
x
t
∣
x
t
−
1
)
]
\mathbb{E}_q[-\log\frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_0)}]=\mathbb{E}_q[-\log p(\mathbf{x}_T)-\sum_{t\geq1}\log\frac{p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)}{q(\mathbf{x}_t|\mathbf{x}_{t-1})}]
Eq[−logq(x1:T∣x0)pθ(x0:T)]=Eq[−logp(xT)−t≥1∑logq(xt∣xt−1)pθ(xt−1∣xt)]
继续转化为论文里的公式
关于最后一步化为
D
K
L
D_{KL}
DKL,即KL散度。
可以查看对KL散度简短的理解介绍
KL散度
其中,
L
T
L_T
LT项的
p
(
x
T
)
p(x_T)
p(xT)是已知的要变化的图像,近似为高斯噪声图像,
q
(
x
t
∣
x
0
)
q(\mathbf{x}_t|\mathbf{x}_0)
q(xt∣x0)在前向过程中推导过了,在前向过程中除了随机采样,其他的所有量都是已知的,因此
L
T
L_T
LT就是一个已知的正态分布进行随机采样,故不需要训练。
而
L
t
−
1
L_{t-1}
Lt−1项的
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(\mathbf{x}_{t-1}|\mathbf{x}_{t},\mathbf{x}_{0})
q(xt−1∣xt,x0)是在反向过程中推导的已知的后验概率,而后一部分就是神经网络需要找到的分布
p
θ
(
x
t
−
1
∣
x
t
)
:
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_{t}){:}=\mathcal{N}(\mathbf{x}_{t-1};\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t},t),\boldsymbol{\Sigma}_{\theta}(\mathbf{x}_{t},t))
pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t))
根据两个高斯分布的KLD公式:
log
σ
2
σ
1
+
σ
1
2
+
(
μ
1
−
μ
2
)
2
2
σ
2
2
−
1
2
\log\frac{\sigma_2}{\sigma_1}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac12
logσ1σ2+2σ22σ12+(μ1−μ2)2−21
由于两个时刻的高斯分布的方差相差无几,故
log
σ
2
σ
1
\log\frac{\sigma_2}{\sigma_1}
logσ1σ2可视为一个常数,因此的目标就是最小化两个均值差
L
t
−
1
=
E
q
[
1
2
σ
t
2
∥
μ
~
t
(
x
t
,
x
0
)
−
μ
θ
(
x
t
,
t
)
∥
2
]
+
C
L_{t-1}=\mathbb{E}_q\left[\frac{1}{2\sigma_t^2}\|\widetilde{\boldsymbol{\mu}}_t(\mathbf{x}_t,\mathbf{x}_0)-\boldsymbol{\mu}_\theta(\mathbf{x}_t,t)\|^2\right]+C
Lt−1=Eq[2σt21∥μ
t(xt,x0)−μθ(xt,t)∥2]+C
同理,替换
x
0
x_0
x0得到
L
t
−
1
−
C
=
E
x
0
,
ϵ
[
1
2
σ
t
2
∥
μ
~
t
(
x
t
(
x
0
,
ϵ
)
,
1
α
t
(
x
t
(
x
0
,
ϵ
)
−
1
−
α
‾
t
ϵ
)
)
−
μ
θ
(
x
t
(
x
0
,
ϵ
)
,
t
)
‾
∥
2
]
=
E
x
0
,
ϵ
[
1
2
σ
t
2
∥
1
α
t
(
x
t
(
x
0
,
ϵ
)
−
β
t
1
−
α
ˉ
t
ϵ
)
−
μ
θ
(
x
t
(
x
0
,
ϵ
)
,
t
)
∥
2
]
\begin{aligned}L_{t-1}-C&=\mathbb{E}_{\mathbf{x}_{0},\boldsymbol{\epsilon}}\left[\frac{1}{2\sigma_{t}^{2}}\|\widetilde{\boldsymbol{\mu}}_{t}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),\frac{1}{\sqrt{\boldsymbol{\alpha}}_{t}}\big(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon})-\sqrt{1-\overline{\alpha}_{t}}\boldsymbol{\epsilon}\big)\right)-\underline{\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),t)}\|^{2}\right]\\&=\mathbb{E}_{\mathbf{x}_{0},\boldsymbol{\epsilon}}\left[\frac{1}{2\sigma_{t}^{2}}\|\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon})-\frac{\beta_{t}}{\sqrt{1-\bar{\alpha}_{t}}}\boldsymbol{\epsilon}\right)-\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),t)\|^{2}\right]\end{aligned}
Lt−1−C=Ex0,ϵ[2σt21∥μ
t(xt(x0,ϵ),α
t1(xt(x0,ϵ)−1−αt
ϵ))−μθ(xt(x0,ϵ),t)∥2]=Ex0,ϵ[2σt21∥αt
1(xt(x0,ϵ)−1−αˉt
βtϵ)−μθ(xt(x0,ϵ),t)∥2]
再将系数比值简化化为1,得到最核心的最小化目标:
L
s
i
m
p
l
e
(
θ
)
:
=
E
t
,
x
0
,
ϵ
[
∥
ϵ
−
ϵ
θ
(
α
‾
t
x
0
+
1
−
α
‾
t
ϵ
,
t
)
∥
2
]
L_{\mathrm{simple}}(\theta){:}=\mathbb{E}_{t,\mathbf{x}_{0},\boldsymbol{\epsilon}}\big[\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_{\theta}(\sqrt{\overline{\alpha}_{t}}\mathbf{x}_{0}+\sqrt{1-\overline{\alpha}_{t}}\boldsymbol{\epsilon},t)\|^{2}\big]
Lsimple(θ):=Et,x0,ϵ[∥ϵ−ϵθ(αt
x0+1−αt
ϵ,t)∥2]
因此,DDPM的核心就是模拟预测输入图像的noise。
而对于第三项
L
0
L_0
L0按如下公式进行离散化处理
对于此处的边界认为从
x
0
x_0
x0到
x
1
x_1
x1和从
x
1
x_1
x1到
x
0
x_0
x0是完全相同的,实际上也可以将
x
1
x_1
x1直接当作最后的输出了。(CVPR2024有篇论文Tackling the Singularities at the Endpoints of Time Intervals in Diffusion Models针对
x
1
x_1
x1到
x
0
x_0
x0处进行处理从而解决了扩散模型生成纯白和纯黑的问题)
神经网络训练和采样过程
训练过程
采样过程生成图片
进行采样时加入增加随机性,方差对结果影响不大。
相关论文和代码下载
有时候论文网站arXiv.org打开比较慢,已经将相关论文和代码上传到网盘,需要的可以自取
链接: https://pan.baidu.com/s/1J1h8R4KyY7k6NgS2t7YOZg?pwd=3ss8
总结