AI大模型教程
一起来学习

【扩散模型】DDPM论文理解

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}timesepsilon_t+sqrt{alpha_t}times x_{t-1}

xt=1αt
×
ϵt+αt
×
xt1

x

t

x_t

xt

x

t

2

x_{t-2}

xt2的关系式:

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}}timesepsilon_{t}+sqrt{a_{t}a_{t-1}}times x_{t-2}

xt=at(1at1)
ϵt1+
1at
×
ϵt+atat1
×
xt2

利用正态分布和重参数化技巧可以将两个单独采样的正太分布化为一个正太分布,即

x

t

=

1

α

t

α

t

1

×

ϵ

+

α

t

α

t

1

×

x

t

2

x_t=sqrt{1-alpha_talpha_{t-1}}timesepsilon+sqrt{alpha_talpha_{t-1}}times x_{t-2}

xt=1αtαt1
×
ϵ+αtαt1
×
xt2

同理,可以推断

x

t

=

1

α

t

×

ϵ

+

α

t

×

x

0

x_t=sqrt{1-overline{alpha}_t}timesepsilon+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=atat1at2at3a2a1
论文里使用正太分布的公式表示:

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:Tx0):=t=1Tq(xtxt1),q(xtxt1):=N(xt;1βt
xt1,β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(xt1xt,x0)=P(xtx0)P(xtxt1,x0)P(xt1x0)
化简得到

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 Nleft(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(xt1xt,x0)N(1aˉtat
(1aˉt1)
xt+1aˉtat1
(1at)
x0,(1aˉt
1at
1aˉt1
)
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 Nleft(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.\&timesfrac{x_{t}-sqrt{1-bar{a}_{t}}timesepsilon}{sqrt{bar{a}_{t}}},left(sqrt{frac{beta_{t}(1-bar{a}_{t-1})}{1-bar{a}_{t}}}right)^{2}end{aligned}

P(xt1xt,x0)N(1aˉtat
(1aˉt1)
xt+1aˉtaˉt1
(1at)
×aˉt
xt1aˉt
×ϵ
,
1aˉtβt(1aˉt1)

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}

xt1,再将得到的

x

t

1

x_{t-1}

xt1

t

1

t-1

t1输入神经网络得到

x

t

2

x_{t-2}

xt2,从而一步步计算最终得到

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=1Tpθ(xt1xt),pθ(xt1xt):=N(xt1;μθ(xt,t),Σθ(xt,t))
使用神经网络来估计参数。

训练过程Loss推导

模型的输出为

p

(

x

(

0

T

)

)

=

p

(

x

(

T

)

)

t

=

1

T

p

(

x

(

t

1

)

x

(

t

)

)

pbig(mathbf{x}^{(0cdots T)}big)=pbig(mathbf{x}^{(T)}big)prod_{t=1}^Tpbig(mathbf{x}^{(t-1)}|mathbf{x}^{(t)}big)

p(x(0T))=p(x(T))t=1Tp(x(t1)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} pbig(mathbf{x}^{(0)}big)=int dmathbf{x}^{(1cdots T)}pbig(mathbf{x}^{(0cdots T)}big)frac{qbig(mathbf{x}^{(1cdots T)}|mathbf{x}^{(0)}big)}{qbig(mathbf{x}^{(1cdots T)}|mathbf{x}^{(0)}big)} \ =int dmathbf{x}^{(1cdots T)}qbig(mathbf{x}^{(1cdots T)}|mathbf{x}^{(0)}big)frac{pbig(mathbf{x}^{(0cdots T)}big)}{qbig(mathbf{x}^{(1cdots T)}|mathbf{x}^{(0)}big)} \ =int dmathbf{x}^{(1cdots T)}qbig(mathbf{x}^{(1cdots T)}|mathbf{x}^{(0)}big)cdot pbig(mathbf{x}^{(T)}big)prod_{t=1}^{T}frac{pbig(mathbf{x}^{(t-1)}|mathbf{x}^{(t)}big)}{qbig(mathbf{x}^{(t)}|mathbf{x}^{(t-1)}big)}. end{gathered}

p(x(0))=dx(1T)p(x(0T))q(x(1T)x(0))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))q(x(1T)x(0))p(x(0T))=dx(1T)q(x(1T)x(0))p(x(T))t=1Tq(x(t)x(t1))p(x(t1)x(t)).
则negative log likelihood:

L

=

d

x

(

0

)

q

(

x

(

0

)

)

l

o

g

p

(

x

(

0

)

)

-L=dmathbf{x}^{(0)}qbig(mathbf{x}^{(0)}big)mathrm{log}int pbig(mathbf{x}^{(0)}big)

L=dx(0)q(x(0))logp(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[-logfrac{p_theta(mathbf{x}_{0:T})}{q(mathbf{x}_{1:T}|mathbf{x}_0)}]=mathbb{E}_q[-log p(mathbf{x}_T)-sum_{tgeq1}logfrac{p_theta(mathbf{x}_{t-1}|mathbf{x}_t)}{q(mathbf{x}_t|mathbf{x}_{t-1})}]

Eq[logq(x1:Tx0)pθ(x0:T)]=Eq[logp(xT)t1logq(xtxt1)pθ(xt1xt)]
继续转化为论文里的公式

关于最后一步化为

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(xtx0)在前向过程中推导过了,在前向过程中除了随机采样,其他的所有量都是已知的,因此

L

T

L_T

LT就是一个已知的正态分布进行随机采样,故不需要训练。

L

t

1

L_{t-1}

Lt1项的

q

(

x

t

1

x

t

,

x

0

)

q(mathbf{x}_{t-1}|mathbf{x}_{t},mathbf{x}_{0})

q(xt1xt,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θ(xt1xt):=N(xt1;μθ(xt,t),Σθ(xt,t))
根据两个高斯分布的KLD公式:

log

σ

2

σ

1

+

σ

1

2

+

(

μ

1

μ

2

)

2

2

σ

2

2

1

2

logfrac{sigma_2}{sigma_1}+frac{sigma_1^2+(mu_1-mu_2)^2}{2sigma_2^2}-frac12

logσ1σ2+2σ22σ12+(μ1μ2)221
由于两个时刻的高斯分布的方差相差无几,故

log

σ

2

σ

1

logfrac{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}_qleft[frac{1}{2sigma_t^2}|widetilde{boldsymbol{mu}}_t(mathbf{x}_t,mathbf{x}_0)-boldsymbol{mu}_theta(mathbf{x}_t,t)|^2right]+C

Lt1=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}{2sigma_{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}{2sigma_{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}

Lt1C=Ex0,ϵ[2σt21μ
t
(xt(x0,ϵ),α
t
1
(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

文章来源于互联网:【扩散模型】DDPM论文理解

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 【扩散模型】DDPM论文理解
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们