Difussion Model

Why we introduce diffusion in generative modeling

  • x为复杂分布无法表达,但是可以通过“扩散”,形成可以建模的简单分布z~N(0, I)

  • 核心思路:如果能够逆转这一过程,则可以重新得到x,完成生成模型的目标

image.png

  • 问题:
    1. 高维image如何变成噪声
    2. 如何逆转这一过程z -> x
    3. 如何训练模型

Forward process

image.png

  • forward pass:image -> noise

  • 标记法:

    1. image -> x0
    2. image(data)服从的分布:q(x0)
    3. 随机变量x服从高斯分布:N(𝑥; 𝜇, 𝜎²𝐼)
    4. 从高斯分布中采样:𝑥 = 𝜇 + 𝜖𝜎
  • 前传的过程不断加噪,一共加T次,每次加一点

image.png

  • 可以从中sample中x1:

image.png

  • 式子的前项可以理解为减弱x0中原来含有的信息,而后一项可以认为加入噪声信息𝜖1

  • 后续的加噪过程与q(x1|x0),相似,可以依次计算q(x2|x1),采样出x2,……

image.png

  • 从而可得递推公式:

image.png

  • 计算和上上时间步的关系可得:

image.png

  • 可以使用数学归纳法推得xt+1和x0之间的关系:

image.png

  • 从而可以写成条件概率的形式表示xt+1和x0关系:

image.png

  • 当t -> ∞时,αt+1 -> 0,从而xt+1 -> N(0, 1),当加噪步骤t足够多时,结果接近于N(0, 1)的高斯噪声

Backward process: reverse denoising

  • 回看前向传播过程,若已知q(x0)则可以根据概率密度公式计算出q(x1):𝑞1(𝑥1) = ∑𝑞(𝑥0)𝑞1(𝑥1|𝑥0),从而可以递推计算出qT

image.png

  • 前向传播给定任何image 𝑥0~q(x0),都可以得到:

image.png

image.png

  • 反向传播的去噪过程涉及神经网络θ,概率密度用p表示:𝑝𝑡−1(𝑥𝑡−1|𝑥𝑡;θ),最后得到由θ生成的分布

  • forward的最后如果T足够大可近似认为qT(.)为N(0, 1),严格等于backward的开始PT(.)

  • 𝑥𝑡−1 ~ 𝑝𝑡−1(𝑥𝑡−1|𝑥𝑡;𝜃) = 𝑁(𝑥𝑡−1;𝜇𝜃(𝑥𝑡,𝑡),𝜎𝑡²𝐼)

  • q0(.)是真实data分布,p0(.;θ)是生成过程的终止,最后生成模型得到的data

image.png

  • 目标:希望每个时间步的p和q都尽可能接近(diffusion的核心),不仅是q0和p0相近

  • 前向传播过程是定死的,βt和αt是不可学习的参数

  • 问题:如何学习θ使得noise分布和denoise分布的每一步都尽可能相似


DDPM

Training

  • 由于q(x0)位置,因此需要从中采样samples,对于每个真实data,希望计算出x0由模型θ生成出的概率大

  • 训练目标:

image.png

  • 问题:q可以显式计算,但是计算x0在p0的分布是困难的(经过若干神经网络的变换)

Training objective through ELBO

  • 希望加入x1,x2,…等中间过程化简从而使得不可算的过程近似可算

  • 将x1,…,xT的过程简写为z,则可有以下化简:

image.png

  • 将p(x0;θ)视为x0和θ的联合分布,由贝叶斯公式可以化简为:

image.png

  • 其中后式是定义在z上的两个分布,本质上是(p, q)的KL散度,≥0

  • 因此前式是ELBO,可以通过优化ELBO来优化Training loss

Training loss

  • 计算过程:从q0中sample出x0,forward出x1,…,xT,计算p和q(以下内容不考)

image.png

  • 可将联合概率密度拆分成多个条件概率密度分布

  • 无法计算qp,…,T(x0:xT),但是可以通过sample得出,可以把所有和q相关的序列sample出从forward process获得

  • -logp0(x0|x1;θ)表示给定x1,经过θ后,能否还原x0完成去噪

  • KL散度中后面一项表示加噪后的data能以多大概率还原加噪铅的data

  • KL散度两项表示已知x0,xT希望q的xT-1分布和P的xT-1分布相近

image.png

image.png

  • 由于只关心和θ相关的(uq)进行最小化,所以可以去掉DKL(p||q)中的首尾两项

  • 从而得到最后的优化目标:

image.png

  • 任何一个xT和x0,利用显式计算得到෦𝑢𝑡(𝑥𝑡,𝑥0),再用神经网络计算uθ(xt, x0),希望二者尽可能相似

  • DDPM loss的本质:

image.png

Reparameterization

image.png

  • 化简目标是均值相减的二范数

  • 问题:ut(xt, x0)和t, x0, xt相关,计算复杂;而uθ之和t, xt相关无需x0,因此希望ut的计算也能去掉x0

  • forward pass推导出的x0, xt关系,αt和t相关,t越大,αt越小。可以用xt消掉xo

image.png

  • 希望后式的形式参数化和前式相同,只有𝜖作为神经网络学习的目标:

image.png

  • 从而带入优化目标可化简得:

image.png

  • model去噪方法:

    1. 利用model去噪,重建去噪后的image
    2. 用模型预测噪声,生成噪声,减去噪声得到image
  • 优化目标中的模型预测的是噪声,使用的为第二种去噪方法

image.png

  • 模型和xt, t相关,其中t决定加噪的强度,问题:模型该如何构建?用什么模型结构?

Implementation consideration——architecture

  • 输入是加噪后的image xt,输出是噪声的方向。可以选用U-net和transformer架构的模型

  • 问题:如何加入t的信息

image.png

  • 由于θ处理的使高维数据,而t是一维的,因此需要先将t映射到高维空间(e.g. sin, cos)

  • 然后再把映射后的t在不同频率上展开,将t的信息插入到每一层中

image.png

  • summary of DDPM(核心:预测noise和加的noise一样)

image.png


Connection between DDPM and score function

image.png

  • score function:先取对数,再对关心变量求导

  • 预测目标:再t时刻match对应的score function

  • score function指的不是match image(data)的score function,而是在forward过程中任意t时刻的score function,𝜖θ需要与之对应

image.png


Understand DDPM through stochastic differential equation(随机微分方程)

image.png

Infinite-step DDPM

  • 加噪过程是不断加入小的噪声,希望将其连续化,变成无限步

  • 离散化 -> 连续化:取很大的T,再每个时间步t,计算t/T从而映射到[0, 1],当T足够大时可以认为是无限的,连续的

  • 此时关心的x的范围从R变为[0, 1]

image.png

  • 考察(x+1)/T,1/T可以写成无穷小量δT,t/T重参数化为t,可以化简为:

image.png

  • 做泰勒展开,将高阶无穷小量(δt²)约去,代入x(t+δt)-x(t)=dx(t)可得:

image.png