搞懂Score-based Generative Model

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 分数说明图

如图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-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+1xi+ϵxlogp(x)+2ϵ zi,i0,1,...,K,(3-1)

其中, z i ∼ N ( 0 , I ) z_{i} \sim N(0, I) ziN(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是随机扰动。
朗之万动力学迭代可以将数据点从一个任意分布走到一个目标分布,如果想要进一步了解,可以参考朗之万动力学原理简介。我们在这里就把它当成结论来用,也就是使用朗之万动力学迭代进行采样可以收敛于真实数据分布。
朗之万动力学示意图

图3-3 朗之万动力学示意图

从采样的过程中,可以看出,分数的准确性直接影响了最终的图像生成,如果 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-4所示,对数据进行加噪,以扩大数据的范围,从而使原本低密度的数据区域"膨胀"。这也可以认为是一种数据增广。不过加噪也有自身的问题,加噪得到的数据并属于原始数据的分布,只是接近而已,而且加的噪声越大,越偏离原始的数据分布。我们总结一下不同程度噪声的特点,较大的噪声扩大的数据范围广,但是偏离原始数据分布;较小的噪声扩大的数据范围窄,但是接近原始数据分布。
为了利用这些特点,我们可以在采样的不同阶段使用不同程度的噪声。起始阶段,噪声大,将偏远距离的点往真实数据分布的方向引导,然后噪声逐渐减小直到没有,将邻近真实数据分布的采样点往更真实准确的方向引导。这就是退火朗之万动力学迭代,具体步骤如下图3-5所示。
退火朗之万动力学

图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) xtN(αˉt x0,(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αˉt x0)T(xtαˉt x0)}(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αˉt x0(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αˉt x0=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) xtN(αˉt x0,(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 Δt0时, x t → x t + Δ t x_t \rightarrow x_{t+\Delta t} xtxt+Δt表示的是扩散(加噪)过程, x t + Δ t → x t x_{t+\Delta t} \rightarrow x_t xt+Δtxt表示的是采样(去噪)过程。
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+Δtxt=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+Δtxt)N(xt+f(x,t)Δt,g2(t)ΔtI)
我们现在要用加噪的公式来推导去噪的公式,也就是求解 p ( x t ∣ x t + Δ t ) p(x_t|x_{t+\Delta t}) p(xtxt+Δ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(xtxt+Δt)=p(xt+Δt)p(xt+Δtxt)p(xt)贝叶斯公式=p(xt+Δtxt)exp{logp(xt)logp(xt+Δt)}取对数logp(xt+Δt)进行二元泰勒展开p(xt+Δtxt)exp{logp(xt)(logp(xt)+(xt+Δtxt)xtlogp(xt)+Δttlogp(xt))}=p(xt+Δtxt)exp{(xt+Δtxt)xtlogp(xt)Δttlogp(xt))}p(xt+Δtxt)使用类似式(33)的高斯分布展开exp{2g2(t)Δt(xt+Δtxtf(xt,t)Δt)2(xt+Δtxt)xtlogp(xt)Δttlogp(xt))}这里将平方展开,并进行配方=exp{2g2(t)Δt1((xt+Δtxt)2(xt+Δtxt)(2f(xt,t)Δt2g2(t)Δtxtlogp(xt)))Δttlogp(xt))2g2(t)f2(xt,t)Δt}=exp{2g2(t)Δt1((xt+Δtxt)(f(xt,t)g2(t)xtlogp(xt))Δt)2Δttlogp(xt))2g2(t)f2(xt,t)Δt+2g2(t)(f(xt,t)g2(t)xtlogp(xt))2Δt}Δt0时,后三项可以认为是0,且tt+Δtexp{2g2(t+Δt)Δt1((xt+Δtxt)(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(xtxt+Δ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+Δtxt 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} xt1=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=αˉt x0+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+1 xt+βt+1 ϵ。当 t = T t = T t=T时, α ˉ t ≈ 0 \bar{\alpha}_t \approx 0 αˉt0,完全保留了 ϵ \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+1 xt+βt+1 ϵ构造βˉi=Tβi=1Tβˉt+1 xt+Tβˉt+1 ϵT时,{βˉi}i=1T趋近于一个函数记作β(t),t[0,1]β(Ti)=βˉi,Δt=T1=1β(t+Δt)Δt xt+β(t+Δt)Δt ϵa很小时,有(1x)a1ax(121β(t+Δt)Δt)xt+β(t+Δt) Δt ϵ由于Δt0(121β(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+σt2 xtx^t=1+σt2 xtx^t=x0+σtϵ=1+σt2 x0+1+σt2 σtϵ,αˉt =1+σt2 11αˉt =1+σt2 σt=αˉt x0+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(xty)。根据贝叶斯公式,有

∇ 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(xty)=xtlogp(y)p(yxt)p(xt)=xtlogp(yxt)+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(yxt)来对原来的生成方式进行引导。
p ( y ∣ x t ) p(y|x_t) p(yxt)建模为一个分类器,该分类器输入 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值