1 前言
本文是在参考了网上的多个高质量教程之后,对Score-based Generative Model的相关内容进行的一次梳理。
大部分内容来自B站UP主VictorYuki的视频,可以认为是学习视频内容时的笔记,参考的视频为【扩散模型 Diffusion Model 3-x】 。
文中不会涉及过于复杂的公式推导,尽量以结论性的内容为主,让读者对其整体框架有一个清晰了解。
在阅读前,建议先阅读我的另一篇博客论文阅读 - Understanding Diffusion Models: A Unified Perspective,先对DDPM有一个认知。
2 不同的生成模型
生成模型可以分为likelyhood-based models(基于似然)和implicit generative models(隐式生成)。
基于似然的模型直接对数据分布的概率密度进行学习,代表模型有VAE和normalizing flow。这类模型存在的缺点是。基于似然的模型要么需要对模型架构进行严格限制,以确保似然计算的归一化常数易于处理,要么必须依赖代理目标来近似最大似然训练。比如VAE要求经过编码器后的隐变量是一个高斯分布(这不一定符合实际情况),normalizing flow要求网络是可逆的。
隐式生成模型间接对数据分布进行拟合,代表模型为GAN。这类模型的缺点是需要对抗学习,训练不稳定,容易模式坍缩。
基于分数的模型是另一种表示概率分布的方法,它可以规避其中的几个限制。关键思想是对对数概率密度函数的梯度进行建模。这种基于分数的模型不需要有一个可处理的归一化常数,可以通过分数匹配直接学习。
3 基于分数的模型
2019年,在《Generative Modeling by Estimating Gradients of the Data Distribution》这篇文章中,宋飏博士提出了通过估计分数,也就是数据的梯度,来进行图像生成。这在当时是一种全新的图像生成方法,文章还通过加入不同强度的高斯噪声来解决ill-defined gradients问题。ill-defined gradients指的是真实数据分布中数据密度低的区域,如图3-2中的Inaccurate区域所示。
那么,这里的分数,指的是什么呢?
如图3-1所示,我们令需要生成的内容为
x
x
x,在图像生成任务中,
x
x
x就是真实图像。
p
θ
(
x
)
p_\theta(x)
pθ(x)就代表
x
x
x的概率分布,
∇
x
l
o
g
p
θ
(
x
)
\nabla_x log p_\theta(x)
∇xlogpθ(x)就是对概率取对数后在
x
x
x上的梯度,通常用
s
θ
(
x
)
s_\theta (x)
sθ(x)表示。图3-2左图为真实图片集合的概率分布示意图,颜色越浅的位置,就代表概率密度越小,越深就表示概率密度越大。颜色浅的位置占大多数,几乎没有对应的真实图片数据,颜色深的位置占较少数,有大量的真实图片数据。
真实图片数据的分布呈现出大片低密度,局部高密度的特点也是比较容易理解的。直观地来设想一下,尺寸为
1024
×
1024
×
3
1024 \times 1024 \times 3
1024×1024×3的图片,每个像素点存在
[
0
,
255
]
[0, 255]
[0,255]这256种可能,每个像素点位置的颜色独立,那所有的颜色可能组合就存在
25
6
1024
×
1024
×
3
256^{1024\times1024\times3}
2561024×1024×3种情况,真实有意义的图片,像素之间是存在联系的,这也就意味着
25
6
1024
×
1024
×
3
256^{1024\times1024\times3}
2561024×1024×3种组合中,大部分的图片都是真实世界不可能出现的,也就是数据概率为0或者极低的位置。
那这些大片低密度区域有什么影响呢?这和我们生成模型的方式有关,生成模型也成为采样。假设我们已经训练好了一个模型,这个模型可以给我们如图3-2右图所示的每个位置的概率密度的梯度,也就是我们所说的分数。采样时,会在随机位置生成一个初始数据,然后随着梯度的方向进行移动,每一步的移动遵循朗之万动力学的迭代过程,如式3-1所示。
x i + 1 ← x i + ϵ ∇ x l o g p ( x ) + 2 ϵ z i , i ∈ 0 , 1 , . . . , K , (3-1) x_{i+1} \leftarrow x_i + \epsilon \nabla_x log p(x) + \sqrt{2 \epsilon} z_i, i \in 0, 1, ..., K, \tag{3-1} xi+1←xi+ϵ∇xlogp(x)+2ϵzi,i∈0,1,...,K,(3-1)
其中,
z
i
∼
N
(
0
,
I
)
z_{i} \sim N(0, I)
zi∼N(0,I)。当
ϵ
→
0
\epsilon \rightarrow 0
ϵ→0且
K
→
∞
K \rightarrow \infty
K→∞时,从式(3-1)中得到的
x
K
x_K
xK收敛于真实数据分布的一个点,也即是图3-2右图中"Accurate"的一个点。
ϵ
\epsilon
ϵ是一个步长,
∇
x
l
o
g
p
(
x
)
\nabla_x log p(x)
∇xlogp(x)是方向,
z
i
z_{i}
zi是随机扰动。
朗之万动力学迭代可以将数据点从一个任意分布走到一个目标分布,如果想要进一步了解,可以参考朗之万动力学原理简介。我们在这里就把它当成结论来用,也就是使用朗之万动力学迭代进行采样可以收敛于真实数据分布。
从采样的过程中,可以看出,分数的准确性直接影响了最终的图像生成,如果
x
i
x_i
xi落在图3-2中"Inaccurate"的区域,则下一步的方向很有可能是错误的。这些"Inaccurate"区域,也就是数据密度低的区域,也就是我们最开始说的ill-defined gradients区域。
这里再补充一点,缺少数据的地方预测的分数不准是和模型的损失函数有关,如下式(3-2)所示,
∇
x
l
o
g
p
(
x
)
\nabla_x log p(x)
∇xlogp(x)是真实的分数,
s
θ
(
x
)
s_\theta(x)
sθ(x)是估计分数的模型,在低密度区域的
p
(
x
)
p(x)
p(x)接近于0,对期望值没有贡献,模型也就学不到正确的分数了。
E p ( x ) [ ∣ ∣ ∇ x l o g p ( x ) − s θ ( x ) ∣ ∣ 2 2 ] = ∫ p ( x ) ∣ ∣ ∇ x l o g p ( x ) − s θ ( x ) ∣ ∣ 2 2 d x (3-2) E_{p(x)}[||\nabla_x log p(x) - s_{\theta}(x)||^2_2] = \int p(x) ||\nabla_x log p(x) - s_{\theta}(x)||^2_2 dx \tag{3-2} Ep(x)[∣∣∇xlogp(x)−sθ(x)∣∣22]=∫p(x)∣∣∇xlogp(x)−sθ(x)∣∣22dx(3-2)
为了解决这个问题,使用了给原始数据加噪的方式来使得估计的分数的方向更加准确。
如图3-4所示,对数据进行加噪,以扩大数据的范围,从而使原本低密度的数据区域"膨胀"。这也可以认为是一种数据增广。不过加噪也有自身的问题,加噪得到的数据并属于原始数据的分布,只是接近而已,而且加的噪声越大,越偏离原始的数据分布。我们总结一下不同程度噪声的特点,较大的噪声扩大的数据范围广,但是偏离原始数据分布;较小的噪声扩大的数据范围窄,但是接近原始数据分布。
为了利用这些特点,我们可以在采样的不同阶段使用不同程度的噪声。起始阶段,噪声大,将偏远距离的点往真实数据分布的方向引导,然后噪声逐渐减小直到没有,将邻近真实数据分布的采样点往更真实准确的方向引导。这就是退火朗之万动力学迭代,具体步骤如下图3-5所示。
L
L
L表示
L
L
L种不同程度的噪声,随着
L
L
L增大不断减小;
T
T
T表示每种程度的噪声采样的步数。不难发现,当
L
=
1000
L=1000
L=1000并且
T
=
1
T=1
T=1时,就变成了DDPM。
最后我们再来看,要怎么求分数呢?
这里套用DDPM的方法,用denoising score matching的方法来求解score。
在DDPM中,有
x
t
∼
N
(
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
x_t \sim N(\sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)I)
xt∼N(αˉtx0,(1−αˉt)I)的噪声假设。由于高斯分布是
f
(
x
)
=
1
σ
2
π
e
x
p
{
−
(
x
−
μ
)
2
2
σ
2
}
f(x)=\frac{1}{\sigma \sqrt{2\pi}}exp\{-\frac{(x - \mu)^2}{2\sigma^2}\}
f(x)=σ2π1exp{−2σ2(x−μ)2},我们这里不考虑常系数的问题,将
x
t
x_t
xt的概率函数写作
p ( x t ) ∝ e x p { − ( x t − α ˉ t x 0 ) T ( x t − α ˉ t x 0 ) 2 ( 1 − α ˉ t ) } (3-3) p(x_t) \propto exp\{-\frac{(x_t - \sqrt{\bar{\alpha}_t}x_0)^T(x_t - \sqrt{\bar{\alpha}_t}x_0)}{2(1-\bar{\alpha}_t)}\} \tag{3-3} p(xt)∝exp{−2(1−αˉt)(xt−αˉtx0)T(xt−αˉtx0)}(3-3)
对式(3-3)对 x t x_t xt进行求导可得
∇
x
t
l
o
g
p
(
x
t
)
=
−
x
t
−
α
ˉ
t
x
0
1
−
α
ˉ
t
(3-4)
\nabla_{x_t} logp(x_t)= -\frac{x_t - \sqrt{\bar{\alpha}_t} x_0}{1 - \bar{\alpha}_t} \tag{3-4}
∇xtlogp(xt)=−1−αˉtxt−αˉtx0(3-4)
根据DDPM中的式(4-1)可以得到
x
t
−
α
ˉ
t
x
0
=
1
−
α
ˉ
t
ϵ
x_t - \sqrt{\bar{\alpha}_t} x_0 = \sqrt{1- \bar{\alpha}_t}\epsilon
xt−αˉtx0=1−αˉtϵ,也就是估计噪声和估计分数之间只差了一个系数。
∇ x t l o g p ( x t ) = − ϵ 1 − α ˉ t (3-5) \nabla_{x_t} logp(x_t) = - \frac{\epsilon}{\sqrt{1- \bar{\alpha}_t}} \tag{3-5} ∇xtlogp(xt)=−1−αˉtϵ(3-5)
这就是根据DDPM中的式(4-11)。估计噪声就是估计分数,也就是估计数据分布的对数梯度。
4 从SDE看分数模型
2021年,在《Score-Based Generative Modeling through Stochastic Differential Equations》这篇文章中,宋飏博士又从SDE的角度重新说明了基于分数生成模型。
在一个完整的采样序列
{
x
T
,
.
.
.
,
x
t
,
.
.
.
,
x
0
}
\{x_T, ..., x_t, ..., x_0\}
{xT,...,xt,...,x0}中,当
t
t
t固定时,
x
t
∼
N
(
α
ˉ
t
x
0
,
(
1
−
α
ˉ
t
)
I
)
x_t \sim N(\sqrt{\bar{\alpha}_t}x_0, (1 - \bar{\alpha}_t)I)
xt∼N(αˉtx0,(1−αˉt)I)是一个随机变量;当
x
x
x固定时,也就是完成了整个采样时,
{
x
T
,
.
.
.
,
x
t
,
.
.
.
,
x
0
}
\{x_T, ..., x_t, ..., x_0\}
{xT,...,xt,...,x0}时一个轨迹。因此可以认为
x
t
x_t
xt是一个随机过程,而SDE就是描述随机过程的一个工具。
之前的描述都是以离散的方式进行描述的,使用SDE时,希望用连续的方式来描述。令
t
∈
[
0
,
1
]
t \in [0, 1]
t∈[0,1],当
Δ
t
→
0
\Delta t \rightarrow 0
Δt→0时,
x
t
→
x
t
+
Δ
t
x_t \rightarrow x_{t+\Delta t}
xt→xt+Δt表示的是扩散(加噪)过程,
x
t
+
Δ
t
→
x
t
x_{t+\Delta t} \rightarrow x_t
xt+Δt→xt表示的是采样(去噪)过程。
SDE的表达式如式(4-1)所示,其中
x
x
x表示的是图片,或者说是噪声图,
f
(
x
,
t
)
d
t
f(x, t)dt
f(x,t)dt表示一个确定性的过程(均值),
g
(
t
)
d
w
g(t)dw
g(t)dw表示一个不确定的过程(方差)。
d x = f ( x , t ) d t + g ( t ) d w (4-1) dx = f(x, t)dt+g(t)dw \tag{4-1} dx=f(x,t)dt+g(t)dw(4-1)
式(4-1)可以写作
x
t
+
Δ
t
−
x
t
=
f
(
x
,
t
)
Δ
t
+
g
(
t
)
Δ
t
ϵ
,
ϵ
∼
N
(
0
,
I
)
x
t
+
Δ
t
=
x
t
+
f
(
x
,
t
)
Δ
t
+
g
(
t
)
Δ
t
ϵ
,
ϵ
∼
N
(
0
,
I
)
(4-2)
x_{t+\Delta t} - x_t = f(x, t)\Delta t + g(t)\sqrt{\Delta t}\epsilon, \epsilon \sim N(0, I)\\ x_{t+\Delta t} = x_t + f(x, t)\Delta t + g(t)\sqrt{\Delta t}\epsilon, \epsilon \sim N(0, I) \tag{4-2}
xt+Δt−xt=f(x,t)Δt+g(t)Δtϵ,ϵ∼N(0,I)xt+Δt=xt+f(x,t)Δt+g(t)Δtϵ,ϵ∼N(0,I)(4-2)
这里将
d
w
dw
dw表示为
Δ
t
ϵ
\sqrt{\Delta t}\epsilon
Δtϵ就当成一个结论性的东西来记,想深入了解的可以去学习一下随机过程这门课。
如果将式(4-2)写作概率分布的形式,就是
p
(
x
t
+
Δ
t
∣
x
t
)
∼
N
(
x
t
+
f
(
x
,
t
)
Δ
t
,
g
2
(
t
)
Δ
t
I
)
p(x_{t+\Delta t}|x_t) \sim N(x_t + f(x, t)\Delta t, g^2(t)\Delta tI)
p(xt+Δt∣xt)∼N(xt+f(x,t)Δt,g2(t)ΔtI)。
我们现在要用加噪的公式来推导去噪的公式,也就是求解
p
(
x
t
∣
x
t
+
Δ
t
)
p(x_t|x_{t+\Delta t})
p(xt∣xt+Δt)。
p
(
x
t
∣
x
t
+
Δ
t
)
=
p
(
x
t
+
Δ
t
∣
x
t
)
p
(
x
t
)
p
(
x
t
+
Δ
t
)
贝叶斯公式
=
p
(
x
t
+
Δ
t
∣
x
t
)
e
x
p
{
l
o
g
p
(
x
t
)
−
l
o
g
p
(
x
t
+
Δ
t
)
}
取对数
对
l
o
g
p
(
x
t
+
Δ
t
)
进行二元泰勒展开
≈
p
(
x
t
+
Δ
t
∣
x
t
)
e
x
p
{
l
o
g
p
(
x
t
)
−
(
l
o
g
p
(
x
t
)
+
(
x
t
+
Δ
t
−
x
t
)
∇
x
t
l
o
g
p
(
x
t
)
+
Δ
t
∂
∂
t
l
o
g
p
(
x
t
)
)
}
=
p
(
x
t
+
Δ
t
∣
x
t
)
e
x
p
{
−
(
x
t
+
Δ
t
−
x
t
)
∇
x
t
l
o
g
p
(
x
t
)
−
Δ
t
∂
∂
t
l
o
g
p
(
x
t
)
)
}
将
p
(
x
t
+
Δ
t
∣
x
t
)
使用类似式
(
3
−
3
)
的高斯分布展开
∝
e
x
p
{
−
(
x
t
+
Δ
t
−
x
t
−
f
(
x
t
,
t
)
Δ
t
)
2
2
g
2
(
t
)
Δ
t
−
(
x
t
+
Δ
t
−
x
t
)
∇
x
t
l
o
g
p
(
x
t
)
−
Δ
t
∂
∂
t
l
o
g
p
(
x
t
)
)
}
这里将平方展开,并进行配方
=
e
x
p
{
−
1
2
g
2
(
t
)
Δ
t
(
(
x
t
+
Δ
t
−
x
t
)
2
−
(
x
t
+
Δ
t
−
x
t
)
(
2
f
(
x
t
,
t
)
Δ
t
−
2
g
2
(
t
)
Δ
t
∇
x
t
l
o
g
p
(
x
t
)
)
)
−
Δ
t
∂
∂
t
l
o
g
p
(
x
t
)
)
−
f
2
(
x
t
,
t
)
Δ
t
2
g
2
(
t
)
}
=
e
x
p
{
−
1
2
g
2
(
t
)
Δ
t
(
(
x
t
+
Δ
t
−
x
t
)
−
(
f
(
x
t
,
t
)
−
g
2
(
t
)
∇
x
t
l
o
g
p
(
x
t
)
)
Δ
t
)
2
−
Δ
t
∂
∂
t
l
o
g
p
(
x
t
)
)
−
f
2
(
x
t
,
t
)
Δ
t
2
g
2
(
t
)
+
(
f
(
x
t
,
t
)
−
g
2
(
t
)
∇
x
t
l
o
g
p
(
x
t
)
)
2
Δ
t
2
g
2
(
t
)
}
当
Δ
t
→
0
时,后三项可以认为是
0
,且
t
≈
t
+
Δ
t
≈
e
x
p
{
−
1
2
g
2
(
t
+
Δ
t
)
Δ
t
(
(
x
t
+
Δ
t
−
x
t
)
−
(
f
(
x
t
+
Δ
t
,
t
+
Δ
t
)
−
g
2
(
t
+
Δ
t
)
∇
x
t
+
Δ
t
l
o
g
p
(
x
t
+
Δ
t
)
)
Δ
t
)
2
}
(4-3)
\begin{align} p(x_t|x_{t+\Delta t}) &= \frac{p(x_{t+\Delta t}|x_t)p(x_t)}{p(x_{t+\Delta t})} {\kern 120pt} 贝叶斯公式\\ &= p(x_{t+\Delta t}|x_t) exp\{log p(x_t) - log p(x_{t+\Delta t})\} {\kern 30pt} 取对数\\ &对logp(x_{t+\Delta t})进行二元泰勒展开\\ &\approx p(x_{t+\Delta t}|x_t) exp\{log p(x_t) - (log p(x_t) + (x_{t+\Delta t} - x_t)\nabla_{x_t}logp(x_t) + \Delta t \frac{\partial}{\partial t} log p(x_t))\}\\ &=p(x_{t+\Delta t}|x_t) exp\{-(x_{t+\Delta t} - x_t)\nabla_{x_t}logp(x_t) - \Delta t \frac{\partial}{\partial t} log p(x_t))\}\\ &将p(x_{t+\Delta t}|x_t)使用类似式(3-3)的高斯分布展开\\ &\propto exp\{-\frac{(x_{t+\Delta t} - x_t - f(x_t, t)\Delta t)^2}{2g^2(t)\Delta t} - (x_{t+\Delta t} - x_t)\nabla_{x_t}logp(x_t) - \Delta t \frac{\partial}{\partial t} log p(x_t))\}\\ &这里将平方展开,并进行配方\\ &=exp\{-\frac{1}{2g^2(t)\Delta t}((x_{t+\Delta t} - x_t)^2 - (x_{t+\Delta t} - x_t)(2f(x_t, t)\Delta t - 2g^2(t)\Delta t \nabla_{x_t}logp(x_t))) \\ &- \Delta t \frac{\partial}{\partial t} log p(x_t)) - \frac{f^2(x_t, t)\Delta t}{2g^2(t)}\}\\ &=exp\{-\frac{1}{2g^2(t)\Delta t}((x_{t+\Delta t} - x_t) - (f(x_t, t) - g^2(t)\nabla_{x_t}logp(x_t))\Delta t)^2 \\ &- \Delta t \frac{\partial}{\partial t} log p(x_t)) - \frac{f^2(x_t, t)\Delta t}{2g^2(t)} + \frac{(f(x_t, t) - g^2(t)\nabla_{x_t}logp(x_t))^2\Delta t}{2g^2(t)}\}\\ &当\Delta t \rightarrow 0时,后三项可以认为是0,且t \approx t+\Delta t\\ &\approx exp\{-\frac{1}{2g^2(t+\Delta t)\Delta t} ((x_{t+\Delta t} - x_t) - (f(x_{t+\Delta t}, t+\Delta t) - g^2(t+\Delta t)\nabla_{x_{t+\Delta t}}logp(x_{t+\Delta t}))\Delta t)^2\} \end{align} \tag{4-3}
p(xt∣xt+Δt)=p(xt+Δt)p(xt+Δt∣xt)p(xt)贝叶斯公式=p(xt+Δt∣xt)exp{logp(xt)−logp(xt+Δt)}取对数对logp(xt+Δt)进行二元泰勒展开≈p(xt+Δt∣xt)exp{logp(xt)−(logp(xt)+(xt+Δt−xt)∇xtlogp(xt)+Δt∂t∂logp(xt))}=p(xt+Δt∣xt)exp{−(xt+Δt−xt)∇xtlogp(xt)−Δt∂t∂logp(xt))}将p(xt+Δt∣xt)使用类似式(3−3)的高斯分布展开∝exp{−2g2(t)Δt(xt+Δt−xt−f(xt,t)Δt)2−(xt+Δt−xt)∇xtlogp(xt)−Δt∂t∂logp(xt))}这里将平方展开,并进行配方=exp{−2g2(t)Δt1((xt+Δt−xt)2−(xt+Δt−xt)(2f(xt,t)Δt−2g2(t)Δt∇xtlogp(xt)))−Δt∂t∂logp(xt))−2g2(t)f2(xt,t)Δt}=exp{−2g2(t)Δt1((xt+Δt−xt)−(f(xt,t)−g2(t)∇xtlogp(xt))Δt)2−Δt∂t∂logp(xt))−2g2(t)f2(xt,t)Δt+2g2(t)(f(xt,t)−g2(t)∇xtlogp(xt))2Δt}当Δt→0时,后三项可以认为是0,且t≈t+Δt≈exp{−2g2(t+Δt)Δt1((xt+Δt−xt)−(f(xt+Δt,t+Δt)−g2(t+Δt)∇xt+Δtlogp(xt+Δt))Δt)2}(4-3)
可以看到
p
(
x
t
∣
x
t
+
Δ
t
)
p(x_t|x_{t+\Delta t})
p(xt∣xt+Δt)也变成了一个高斯分布的形式,其均值为
x
t
+
Δ
t
−
(
f
(
x
t
+
Δ
t
,
t
+
Δ
t
)
−
g
2
(
t
+
Δ
t
)
∇
x
t
+
Δ
t
l
o
g
p
(
x
t
+
Δ
t
)
)
Δ
t
x_{t+\Delta t} - (f(x_{t+\Delta t}, t+\Delta t) - g^2(t+\Delta t)\nabla_{x_{t+\Delta t}}logp(x_{t+\Delta t}))\Delta t
xt+Δt−(f(xt+Δt,t+Δt)−g2(t+Δt)∇xt+Δtlogp(xt+Δt))Δt,方差为
g
2
(
t
+
Δ
t
)
Δ
t
g^2(t+\Delta t)\Delta t
g2(t+Δt)Δt。写成SDE的形式就是
d x = [ f ( x t , t ) − g 2 ( t ) ∇ x t l o g p ( x t ) ] d t + g ( t ) d w (4-4) dx = [f(x_t, t) - g^2(t)\nabla_{x_t}logp(x_t)]dt + g(t)dw \tag{4-4} dx=[f(xt,t)−g2(t)∇xtlogp(xt)]dt+g(t)dw(4-4)
这里看不懂怎么变成式(4-4)的话,回忆一下, d x = x t + Δ t − x t dx = x_{t+\Delta t} - x_t dx=xt+Δt−xt且 d t = Δ t dt=\Delta t dt=Δt。如果写成DDPM中的形式的话,就有
x t − 1 = x t − [ f ( x t , t ) − g 2 ( t ) ∇ x t l o g p ( x t ) ] − g ( t ) ϵ (4-5) x_{t-1} = x_t - [f(x_t, t) - g^2(t)\nabla_{x_t}logp(x_t)] - g(t)\epsilon \tag{4-5} xt−1=xt−[f(xt,t)−g2(t)∇xtlogp(xt)]−g(t)ϵ(4-5)
不难看出,如果已经知道了
f
f
f和
g
g
g的话,就只需要用模型对分数
∇
x
t
l
o
g
p
(
x
t
)
\nabla_{x_t}logp(x_t)
∇xtlogp(xt)进行估计就可以了。
SDE中,分为VE-SDE和VP-SDE,其中VE表示的式方差爆炸variance exploding,VP表示的是方差保留variance preserving。VE-SDE对应于第三节中将的噪声条件分数网络NCSN,VP-SDE对应于DDPM。
在VE-SDE中,
x
t
=
x
0
+
σ
t
ϵ
x_t = x_0 + \sigma_t \epsilon
xt=x0+σtϵ且
x
t
+
1
=
x
t
+
σ
t
+
1
2
−
σ
t
2
ϵ
x_{t+1} = x_t + \sqrt{\sigma^2_{t+1} - \sigma^2_t}\epsilon
xt+1=xt+σt+12−σt2ϵ。当
t
=
T
t = T
t=T时,
σ
t
\sigma_t
σt需要非常大,才能将
x
0
x_0
x0变成噪声图。
在VP-SDE中,
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon
xt=αˉtx0+1−αˉtϵ且
x
t
+
1
=
1
−
β
t
+
1
x
t
+
β
t
+
1
ϵ
x_{t+1} = \sqrt{1 - \beta_{t+1}}x_t + \sqrt{\beta_{t+1}}\epsilon
xt+1=1−βt+1xt+βt+1ϵ。当
t
=
T
t = T
t=T时,
α
ˉ
t
≈
0
\bar{\alpha}_t \approx 0
αˉt≈0,完全保留了
ϵ
\epsilon
ϵ。
接下来看下VE-SDE和VP-SDE中的
f
f
f和
g
g
g分别是什么。
(1)VE-SDE
根据VE-SDE的加噪策略
x t + Δ t = x t + σ t + Δ t 2 − σ t 2 ϵ = x t + σ t + Δ t 2 − σ t 2 Δ t Δ t ϵ = x t + Δ σ t 2 Δ t Δ t ϵ (4-6) \begin{align} x_{t+\Delta t} &= x_t + \sqrt{\sigma^2_{t+\Delta t} - \sigma^2_t}\epsilon\\ &= x_t + \sqrt{\frac{\sigma^2_{t+\Delta t} - \sigma^2_t}{\Delta t}}\sqrt{\Delta t}\epsilon\\ &= x_t + \sqrt{\frac{\Delta \sigma^2_t}{\Delta t}}\sqrt{\Delta t}\epsilon \end{align} \tag{4-6} xt+Δt=xt+σt+Δt2−σt2ϵ=xt+Δtσt+Δt2−σt2Δtϵ=xt+ΔtΔσt2Δtϵ(4-6)
将式(4-6)与式(4-2)进行对照,则有
f ( x t , t ) = 0 g ( t ) = d d t σ t 2 (4-7) f(x_t, t) = 0 \\ g(t) = \sqrt{\frac{d}{dt}\sigma^2_t} \tag{4-7} f(xt,t)=0g(t)=dtdσt2(4-7)
(2)VP-SDE
根据VP-SDE的加噪策略
x t + 1 = 1 − β t + 1 x t + β t + 1 ϵ 构造 β ˉ i = T β i = 1 − β ˉ t + 1 T x t + β ˉ t + 1 T ϵ 当 T → ∞ 时, { β ˉ i } i = 1 T 趋近于一个函数记作 β ( t ) , t ∈ [ 0 , 1 ] 且 β ( i T ) = β ˉ i , Δ t = 1 T x t + Δ t = 1 − β ( t + Δ t ) Δ t x t + β ( t + Δ t ) Δ t ϵ 当 a 很小时,有 ( 1 − x ) a ≈ 1 − a x ≈ ( 1 − 1 2 β ( t + Δ t ) Δ t ) x t + β ( t + Δ t ) Δ t ϵ 由于 Δ t → 0 ≈ ( 1 − 1 2 β ( t ) Δ t ) x t + β ( t ) Δ t ϵ (4-8) \begin{align} x_{t+1} &= \sqrt{1 - \beta_{t+1}}x_t + \sqrt{\beta_{t+1}}\epsilon\\ &构造\bar{\beta}_i = T\beta_i\\ &=\sqrt{1 - \frac{\bar{\beta}_{t+1}}{T}}x_t + \sqrt{\frac{\bar{\beta}_{t+1}}{T}}\epsilon\\ &当T\rightarrow \infty时,\{\bar{\beta}_i\}^T_{i=1}趋近于一个函数记作\beta(t), t \in [0, 1]且\beta(\frac{i}{T})=\bar{\beta}_i, \Delta t=\frac{1}{T}\\ x_{t+\Delta t} &= \sqrt{1 - \beta(t+\Delta t) \Delta t}x_t + \sqrt{\beta(t+\Delta t)\Delta t}\epsilon\\ &当a很小时,有(1-x)^a \approx 1-ax\\ &\approx (1 - \frac{1}{2}\beta(t+\Delta t) \Delta t) x_t + \sqrt{\beta(t+\Delta t)}\sqrt{\Delta t}\epsilon\\ &由于\Delta t \rightarrow 0\\ &\approx (1 - \frac{1}{2}\beta(t) \Delta t) x_t + \sqrt{\beta(t)}\sqrt{\Delta t}\epsilon \end{align} \tag{4-8} xt+1xt+Δt=1−βt+1xt+βt+1ϵ构造βˉi=Tβi=1−Tβˉt+1xt+Tβˉt+1ϵ当T→∞时,{βˉi}i=1T趋近于一个函数记作β(t),t∈[0,1]且β(Ti)=βˉi,Δt=T1=1−β(t+Δt)Δtxt+β(t+Δt)Δtϵ当a很小时,有(1−x)a≈1−ax≈(1−21β(t+Δt)Δt)xt+β(t+Δt)Δtϵ由于Δt→0≈(1−21β(t)Δt)xt+β(t)Δtϵ(4-8)
将式(4-8)与式(4-2)进行对照,则有
f ( x t , t ) = − 1 2 β ( t ) x t g ( t ) = β ( t ) (4-9) f(x_t, t) = -\frac{1}{2}\beta(t)x_t \\ g(t) = \sqrt{\beta(t)} \tag{4-9} f(xt,t)=−21β(t)xtg(t)=β(t)(4-9)
所以,通过指定不同的
f
f
f和
g
g
g,SDE就可以把基于分数的模型和DDPM统一到一个框架下。
这里补充一下,VE-SDE和VP-SDE也是可以相互转换的。
对于VE-SDE,我们有
x
t
=
x
0
+
σ
t
ϵ
x
t
1
+
σ
t
2
=
x
0
1
+
σ
t
2
+
σ
t
1
+
σ
t
2
ϵ
令
x
^
t
=
x
t
1
+
σ
t
2
,
α
ˉ
t
=
1
1
+
σ
t
2
则
1
−
α
ˉ
t
=
σ
t
1
+
σ
t
2
x
^
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
(4-10)
\begin{align} x_t &= x_0 + \sigma_t \epsilon\\ \frac{x_t}{\sqrt{1+\sigma^2_t}} &= \frac{x_0}{\sqrt{1+\sigma^2_t}} + \frac{\sigma_t}{\sqrt{1+\sigma^2_t}} \epsilon\\ 令\hat{x}_t = \frac{x_t}{\sqrt{1+\sigma^2_t}}&, \sqrt{\bar{\alpha}_t} = \frac{1}{\sqrt{1+\sigma^2_t}} 则 \sqrt{1 - \bar{\alpha}_t} = \frac{\sigma_t}{\sqrt{1+\sigma^2_t}}\\ \hat{x}_t &=\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1 - \bar{\alpha}_t}\epsilon \end{align} \tag{4-10}
xt1+σt2xt令x^t=1+σt2xtx^t=x0+σtϵ=1+σt2x0+1+σt2σtϵ,αˉt=1+σt21则1−αˉt=1+σt2σt=αˉtx0+1−αˉtϵ(4-10)
这样就变成了VP-SDE的形式。
5 guided diffusion
我们现在在模型的输入中加入一个条件 y y y, y y y在这里讲的是一个类别。要想让条件发挥其作用,一个非常直观的做法就是将分数 ∇ x t l o g p ( x t ) \nabla_{x_t} log p(x_t) ∇xtlogp(xt)变为 ∇ x t l o g p ( x t ∣ y ) \nabla_{x_t} log p(x_t|y) ∇xtlogp(xt∣y)。根据贝叶斯公式,有
∇ x t l o g p ( x t ∣ y ) = ∇ x t l o g p ( y ∣ x t ) p ( x t ) p ( y ) = ∇ x t l o g p ( y ∣ x t ) + ∇ x t l o g p ( x t ) (5-1) \begin{align} \nabla_{x_t} log p(x_t|y) &= \nabla_{x_t} log \frac{p(y|x_t)p(x_t)}{p(y)}\\ &= \nabla_{x_t} log p(y|x_t) + \nabla_{x_t} log p(x_t) \end{align} \tag{5-1} ∇xtlogp(xt∣y)=∇xtlogp(y)p(y∣xt)p(xt)=∇xtlogp(y∣xt)+∇xtlogp(xt)(5-1)
其中的后一项
∇
x
t
l
o
g
p
(
x
t
)
\nabla_{x_t} log p(x_t)
∇xtlogp(xt)就是没有条件时的分数
s
θ
(
x
t
,
t
)
s_\theta(x_t, t)
sθ(xt,t),有条件其实就是增加了一项
∇
x
t
l
o
g
p
(
y
∣
x
t
)
\nabla_{x_t} log p(y|x_t)
∇xtlogp(y∣xt)来对原来的生成方式进行引导。
将
p
(
y
∣
x
t
)
p(y|x_t)
p(y∣xt)建模为一个分类器,该分类器输入
x
t
x_t
xt和
t
t
t,输出类别
y
y
y。其代码实现为
def cond_fn(x, t, y=None):
assert y is not None
with th.enable_grad():
x_in = x.detach().requires_grad_(True)
logits = classifier(x_in, t)
log_probs = F.log_softmax(logits, dim=-1)
selected = log_probs[range(len(logits)), y.view(-1)]
return th.autograd.grad(selected.sum(), x_in)[0] * args.classifier_scale
分类器引导的条件生成就是多了这一样,非常直观明了。
参考资料
[1] 【扩散模型 Diffusion Model 3-1 Score-based Model】的3-1~3-5
[2] Generative Modeling by Estimating Gradients of the Data Distribution