首页IT科技去噪技术(去噪扩散概率模型(DDPM)的简单理解)

去噪技术(去噪扩散概率模型(DDPM)的简单理解)

时间2025-05-05 04:44:47分类IT科技浏览4755
导读:图1 DDPM 无条件控制生成的图像。 这些不是真实的人、地方、动物或物体。...

图1 DDPM 无条件控制生成的图像            。 这些不是真实的人            、地方                  、动物或物体                  。

前言

扩散模型最近在图像生成领域取得了巨大的成功            ,类似 OpenAI 的 DALL-E 2                  ,Google 的 Imagen      ,以及 Stability AI 最近发行的能够达到商业级绘画目的的 Stable Diffusion 等         ,都是基于扩散模型来进行图像生成的      。本文对知乎上各位大佬对于扩散模型(特别是 DDPM)的讲解进行了融合                  ,带领大家深入浅出理解扩散和逆扩散过程         。

数学基础

先验概率和后验概率

先验概率:根据以往经验和分析得到的概率                  。它往往作为由因求果问题中的因出现         ,如

q

(

X

t

X

t

1

)

q(X_{t}|X_{t-1})

q(XtXt1)

后验概率:是指在得到结果的信息后重新修正的概率         。是执果寻因问题中的因      ,如

p

(

X

t

1

X

t

)

p(X_{t-1}|X_{t})

p(Xt1Xt) KL 散度

对于两个单一变量的高斯分布的

p

p

p

q

q

q
而言                  ,它们的 KL 散度为:

K

L

(

p

,

q

)

=

l

o

g

σ

2

σ

1

+

σ

1

2

+

(

μ

1

μ

2

)

2

2

σ

2

2

1

2

KL(p, q)=log\frac{\sigma_{2}}{\sigma_{1}}+\frac{\sigma_{1}^{2}+(\mu_{1}-\mu_{2})^{2}}{2\sigma_{2}^{2}}-\frac{1}{2}

KL(p,q)=logσ1σ2+2σ22σ12+(μ1μ2)221 参数重整化

若希望从高斯分布

N

(

μ

,

σ

2

)

N(\mu, \sigma^{2})

N(μ,σ2) 中采样            ,可以先从标准分布

N

(

,

1

)

N(0, 1)

N(0,1)
采样出

z

z

z
   ,再得到

σ

z

+

μ

\sigma*z+\mu

σz+μ
                  ,这就是我们想要的采样结果      。这样做的好处是将随机性转移到了

z

z

z
这个常量上               ,而

σ

\sigma

σ

μ

\mu

μ
则当作仿射变换网络的一部分                  。

模型介绍

模型总览

图2 DDPM 是经过训练以逐渐去除噪声数据的参数化马尔可夫链            。我们估计生成过程的参数   。

DDPM 主要分为两个过程:

forward 加噪过程(从右往左) reverse 去噪过程(从左往右)

加噪过程是指向数据集中的真实图像逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪               ,从而还原出真实图像                  。加噪过程满足一定的数学规律                  ,不需要学习   ,而去噪过程则采用神经网络模型来学习               。这样一来            ,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。

扩散过程 逐步加噪

给定初始数据分布

x

q

(

x

)

x_{0} \sim q(x)

x0q(x)                  ,我们定义一个前向扩散过程(forward diffusion process):我们向数据分布中逐步添加高斯噪声      ,加噪过程持续

T

T

T
次         ,产生一系列带噪声的图片

x

1

,

.

.

.

,

x

T

x_{1},...,x_{T}

x1,...,xT
               。在由

x

t

1

x_{t-1}

xt1
加噪至

x

t

x_{t}

xt
的过程中                  ,噪声的标准差/方差是以一个在区间

(

,

1

)

(0, 1)

(0,1)
内的固定值

β

T

\beta_{T}

βT
来确定的         ,均值是以固定值

β

T

\beta_{T}

βT
和当前时刻的图片数据

x

t

1

x_{t-1}

xt1
来确定的                  。以上描述的加噪过程可以写成公式:

q

(

x

1

:

T

x

)

:

=

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(x_{1:T|x_{0}}):=\prod_{t=1}^{T}q(x_{t}|x_{t-1}), \quad q(x_{t}|x_{t-1}) := \mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1},\beta_{t}\mathbf{I})

q(x1:Tx0):=t=1Tq(xtxt1),q(xtxt1):=N(xt;1βtxt1,βtI)

上式的意思是:由

x

t

1

x_{t-1}

xt1得到

x

t

x_{t}

xt
的过程      ,满足分布

N

(

x

t

;

1

β

t

x

t

1

,

β

t

I

)

\mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}\mathbf{I})

N(xt;1βtxt1,βtI)
                  ,因此噪声只由

β

T

\beta_{T}

βT

x

t

1

x_{t-1}

xt1
来确定            ,是一个固定值而不是一个可学习的过程   。因此   ,只要有了

x

x_{0}

x0
                  ,并且提前确定每一步的固定值

β

1

,

.

.

.

,

β

T

\beta_{1},...,\beta_{T}

β1,...,βT
              ,我们就可以推出任意一部的加噪数据

x

1

,

.

.

.

,

x

T

x_{1},...,x_{T}

x1,...,xT
            。值得注意的是,这里的加噪过程是一个马尔科夫链过程               ,即当前状态的概率只与上一时刻有关                  。 加噪结果

随着

t

t

t 的不断增大                  ,最终原始数据

x

x_{0}

x0
会逐步失去它的特征      。最终当

T

T\rightarrow\infty

T
时   ,

x

T

x_{T}

xT
趋近于一个各向同性的高斯分布         。从视觉上看            ,就是将原本一张完好的照片加噪很多步后                  ,图片几乎变成了一张完全时噪声的图片                  。 任意时刻

x

t

x_{t}

xt
的计算

逐步加噪过程中      ,我们其实并不需要一步步地从

x

,

x

1

,

.

.

.

x_{0},x_{1},...

x0,x1,... 去迭代得到

x

t

x_{t}

xt
         。事实上         ,我们可以直接从

x

x_{0}

x0
和固定值序列

{

β

T

(

,

1

)

}

t

=

1

T

\{ \beta_{T}∈(0, 1)\}_{t=1}^{T}

{βT(0,1)}t=1T
直接计算得到:

q

(

x

t

x

)

=

N

(

x

t

;

α

t

x

,

(

1

α

t

)

I

)

q(x_{t}|x_{0}) = \mathcal N(x_{t};\sqrt{\overline{\alpha_{t}}}x_{0}, (1-\overline{\alpha_{t}})\mathbf{I}) \\

q(xtx0)=N(xt;αtx0,(1αt)I)

上式中                  ,

α

t

=

1

β

t

\alpha_{t}=1-\beta_{t}

αt=1βt         ,

α

t

=

i

=

1

T

α

i

\overline{\alpha_{t}}=\prod_{i=1}^T\alpha_{i}

αt=i=1Tαi
      ,中间推导过程不再罗列      。 逆扩散过程

如果我们能够将上述过程转换方法                  ,即从

q

(

x

t

1

x

t

)

q(x_{t-1}|x_{t})

q(xt1xt)中采样            ,那么我们就可以从一个随机的高斯分布

N

(

,

I

)

\mathcal N(0, \mathbf{I})

N(0,I)
中重建出一个真实的原始样本   ,也就是从一个完全杂乱无章的噪声图片中得到一张真实图片                  。但是                  ,由于需要从完整数据集中找到数据分布               ,我们没办法简单地预测

q

(

x

t

1

x

t

)

q(x_{t-1}|x_{t})

q(xt1xt)
,因此需要学习一个模型

p

θ

p_{\theta}

pθ
来近似模拟这个条件概率               ,从而运行逆扩散过程            。

p

θ

(

x

:

T

)

:

=

p

(

x

T

)

t

=

1

T

p

θ

(

x

t

1

x

t

)

,

p

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
string(【语法回顾】C++STL:string类型 ATP_ 博客园)