Diffusion model理论推导

直观理解Diffusion model

生成式模型本质上是一组概率分布。如下图所示,左边是一个训练数据集,里面所有的数据 p d a t a p_{data} pdata都是从某个数据中独立同分布取出的随机样本。右边就是其生成式模型(概率分布),在这种概率分布中,找出一个分布 p θ p_θ pθ使得它离 p d a t a p_{data} pdata的距离最近。接着在上采新的样本,可以获得源源不断的新数据。
在这里插入图片描述
但是往往 p d a t a p_{data} pdata的形式是非常复杂的,而且图像的维度很高,我们很难遍历整个空间,同时我们能观测到的数据样本也有限。

Diffusion做的是什么事呢?

我们可以将任意分布,当然也包括我们感兴趣的 p d a t a p_{data} pdata,不断加噪声,使得他最终变成一个纯噪声分布 N ( 0 , I ) N(0,I) N(0,I)。怎么理解呢?

从概率分布的角度来看,考虑下图瑞士卷形状的二维联合概率分布 p ( x , y ) p(x,y) p(x,y),扩散过程q非常直观,本来集中有序的样本点,受到噪声的扰动,向外扩散,最终变成一个完全无序的噪声分布。
概率分布的变化
而diffusion model其实是图上的这个逆过程,将一个噪声分布 N ( 0 , I ) N(0,I) N(0,I)逐步地去噪以映射到 p d a t a p_{data} pdata,有了这样的映射,我们从噪声分布中采样,最终可以得到一张想要的图像,也就是可以做生成了。

而从单个图像样本来看这个过程,扩散过程 q q q就是不断往图像上加噪声直到图像变成一个纯噪声,逆扩散过程就是从纯噪声生成一张图像的过程。
单个图像样本的变化

形式化解析Diffusion model

Diffusion Models 既然叫生成模型,这意味着 Diffusion Models 用于生成与训练数据相似的数据。从根本上说,Diffusion Models 的工作原理,是通过连续添加高斯噪声来破坏训练数据,然后通过反转这个噪声过程,来学习恢复数据。

训练后,可以使用 Diffusion Models 将随机采样的噪声传入模型中,通过学习去噪过程来生成数据。也就是下面图中所对应的基本原理,不过这里面的图仍然有点粗。

更具体地说,扩散模型是一种隐变量模型(latent variable model),使用马尔可夫链(Markov Chain, MC)映射到 latent space。通过马尔可夫链,在每一个时间步 t 中逐渐将噪声添加到数据 x i x_{i} xi中以获得后验概率 q ( x 1 : T ∣ x 0 ) q(x_{1:T} | x_0) q(x1:Tx0),其中 x 1 , . . . , x T x_1,...,x_T x1,...,xT 代表输入的数据同时也是 latent space。也就是说 Diffusion Models 的 latent space与输入数据具有相同维度。

补充: 后验概率:在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率(Posterior probability)是在考虑和给出相关证据或数据后所得到的条件概率。

马尔可夫链为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马可夫性质。

Diffusion Models 分为正向的扩散过程和反向的逆扩散过程。下图为扩散过程,从 x T x_T xT到最后的 就是一个马尔可夫链,表示状态空间中经过从一个状态到另一个状态的转换的随机过程。而下标则是 Diffusion Models 对应的图像扩散过程。
单个图像样本的变化
最终,从 x 0 x_0 x0输入的真实图像,经过 Diffusion Models 后被渐近变换为纯高斯噪声的图片 x T x_T xT

模型训练主要集中在逆扩散过程。训练扩散模型的目标是,学习正向的反过程:即训练概率分布 p θ ( x t − 1 ∣ x t ) p_θ(x_{t-1}|x_t) pθ(xt1xt)。通过沿着马尔可夫链向后遍历,可以重新生成新的数据 x 0 x_0 x0

读到这里就有点意思啦,Diffusion Models 跟 GAN 或者 VAE 的最大区别在于不是通过一个模型来进行生成的,而是基于马尔可夫链,通过学习噪声来生成数据。

除了生成很好玩的高质量图片之外呢,Diffusion Models 还具有许多其他好处,其中最重要的是训练过程中没有对抗了,对于 GAN 网络模型来说,对抗性训练其实是很不好调试的,因为对抗训练过程互相博弈的两个模型,对我们来说是个黑盒子。另外在训练效率方面,扩散模型还具有可扩展性和可并行性,那这里面如何加速训练过程,如何添加更多数学规则和约束,扩展到语音、文本、三维领域就很好玩了,可以出很多新文章。

详解 Diffusion Model

上面已经清晰表示了 Diffusion Models 由正向过程(或扩散过程)和反向过程(或逆扩散过程)组成,其中输入数据逐渐被噪声化,然后噪声被转换回源目标分布的样本。

接下来会是一点点数学,只能说我尽量讲得简单一点,就是个马尔可夫链 + 条件概率分布。核心在于如何使用神经网络模型,来求解马尔可夫过程的概率分布

Diffusion 前向过程(扩散过程)

所谓前向过程,即往图片上加噪声的过程。虽然这个步骤无法做到图片生成,但是这是理解 diffusion model 以及构建训练样本 GT 至关重要的一步。

给定真实图片样本 x 0 ∼ q ( x ) x_0 \sim q(x) x0q(x) ,diffusion 前向过程通过 T T T次累计对其添加高斯噪声,得 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT,如下图的 q q q过程。每一步的大小是由一系列的高斯分布方差的超参数 { β t ∈ ( 0 , 1 ) } t = 1 T \{\beta_t \in (0,1)\}_{t=1}^{T} { βt(0,1)}t=1T来控制的。 前向过程由于每个时刻 t t t只与 t − 1 t-1 t1时刻有关,所以也可以看做马尔科夫过程:
在这里插入图片描述
这个过程中,随着 t t t的增大, x t x_t xt越来越接近纯噪声。当 T → ∞ T\to \infty T x t x_t xt是完全的高斯噪声(下面会证明,且与均值系数的选择 1 − β t \sqrt{1-\beta_t} 1βt 有关。

前向过程介绍结束前,需要讲述一下 diffusion 在实现和推导过程中要用到的两个重要特性。

特性 1:重参数(reparameterization trick)

重参数技巧在很多工作(gumbel softmax, VAE)中有所引用。如果我们要从某个分布中随机采样 (高斯分布) 一个样本,这个过程是无法反传梯度的。而这个通过高斯噪声采样得到$x_t $ 的过程在 diffusion 中到处都是,因此我们需要通过重参数技巧来使得他可微。

最通常的做法是把随机性通过一个独立的随机变量 ( ϵ \epsilon ϵ) 引导过去。即如果要从高斯分布 z ∼ N ( z ; μ θ , δ θ 2 I ) z \sim N(z;\mu_{\theta},\delta^{2}_{\theta}I) zN(z;μθ,δθ2I)采样一个 ,我们可以写成:
在这里插入图片描述
上式的 z z z依旧是有随机性的, 且满足均值为 μ θ \mu_{\theta} μθ 方差为 δ θ 2 \delta^{2}_{\theta} δθ2的高斯分布。这里的 μ θ \mu_{\theta} μθ δ θ 2 \delta^{2}_{\theta} δθ2可以是由参数 θ \theta θ的神经网络推断得到的。整个 “采样” 过程依旧梯度可导,随机性被转嫁到了上 ϵ \epsilon ϵ

特性 2:任意时刻的 x t x_t xt可以由 x 0 x_0 x0 β t \beta_t βt表示

在前向过程中,有一个性质非常棒,就是我们其实可以通过 x 0 x_0 x0 β \beta β直接得到 x t x_t xt
x t = α t x t − 1 + 1 − α t ϵ t − 1  ;where  ϵ t − 1 , ϵ t − 2 , ⋯ ∼ N ( 0 , I ) = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ˉ t − 2  ;where  ϵ ˉ t − 2  merges two Gaussians (*). = … = α ˉ t x 0 + 1 − α ˉ t ϵ q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) \begin{aligned} \mathbf{x}_t &= \sqrt{\alpha_t}\mathbf{x}_{t-1} + \sqrt{1 - \alpha_t}\boldsymbol{\epsilon}_{t-1} & \text{ ;where } \boldsymbol{\epsilon}_{t-1}, \boldsymbol{\epsilon}_{t-2}, \dots \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\ &= \sqrt{\alpha_t \alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\boldsymbol{\epsilon}}_{t-2} & \text{ ;where } \bar{\boldsymbol{\epsilon}}_{t-2} \text{ merges two Gaussians (*).} \\ &= \dots \\ &= \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon} \\ q(\mathbf{x}_t \vert \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I}) \end{aligned} xtq(xtx0)=αt xt1+1αt ϵt1=αtαt1 xt2+1αtαt1 ϵˉt2==αˉt x0+1αˉt ϵ=N(xt;αˉt x0,(1αˉt)I) ;where ϵt1,ϵt2,N(0,I) ;where ϵˉt2 merges two Gaussians (*).
由于两个独立高斯分布可加性,即 N ( 0 , σ 1 2 I ) \mathcal{N}(\mathbf{0}, \sigma_1^2\mathbf{I}) N(0,σ12I) N ( 0 , σ 1 2 I ) \mathcal{N}(\mathbf{0}, \sigma_1^2\mathbf{I}) N(0,σ12I) ,所以因此在推导的第二行,我们混合两个高斯分布得到标准差为 ( 1 − α t ) + α t ( 1 − α t − 1 ) = 1 − α t α t − 1 \sqrt{(1 - \alpha_t) + \alpha_t (1-\alpha_{t-1})} = \sqrt{1 - \alpha_t\alpha_{t-1}} (1αt)+αt(1αt1) =1αtαt1 。的混合高斯分布。因此任意时刻的 x t x_t xt满足:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \color{blue}{\tilde{\boldsymbol{\mu}}}(\mathbf{x}_t, \mathbf{x}_0), \color{red}{\tilde{\beta}_t} \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)
实际上 β t \beta_t βt随着 t t t增大是递增的,即 β 1 < β 2 < ⋯ < β T \beta_1 < \beta_2 < \dots < \beta_T β1<β2<<βT 。在 GLIDE 的 code 中, 是由 0.0001 到 0.02 线性插值(以 为基准, 增加, 对应增大)。因此 α ˉ 1 > ⋯ > α ˉ T \bar{\alpha}_1 > \dots > \bar{\alpha}_T αˉ1>>αˉT

Diffusion 逆扩散过程

如果说前向过程 (forward) 是加噪的过程,那么逆向过程(reverse) 就是diffusion 的去噪推断过程。
如果我们能够逆转上述过程并从 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt1xt)采样,就可以从高斯噪声 N ( 0 , I ) \mathcal{N}(\mathbf{0}, \mathbf{I}) N(0,I)还原出原图分布 。在文献7中证明了如果p(x_t|x_{t-1})$满足高斯分布且 β t \beta_t βt足够小, p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt1xt)仍然是一个高斯分布。然而我们无法简单推断 ,因此我们使用深度学习模型(参数为 θ \theta θ,目前主流是 U-Net+attention 的结构)去预测这样的一个逆向的分布 (类似 VAE):
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_{t=1} p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) \quad p_\theta(\mathbf{x}_{t-1} \vert \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))
然而在论文中,作者把条件概率 p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_t) pθ(xt1xt)的方差直接取了 β t \beta_t βt,而不是上面说的需要网络去估计的 Σ θ ( x t , t ) \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t) Σθ(xt,t),所以说实际上只有均值需要网络去估计(后续论文也有将其变为网络预测的做法.
讲到这里我们就发现其实正向扩散和逆扩散过程都是一个骨架对吧,都是马尔可夫,然后正态分布,然后一步一步的条件概率,唯一的区别就是正向扩散里每一个条件概率的高斯分布的均值和方差都是已经确定的(依赖于 β t \beta_t βt x 0 x_0 x0 ),而逆扩散过程里面的均值和方差是我们网络要学出来。

逆扩散条件概率推导

虽然我们无法得到逆转过程的概率分布 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt),但是如果知道 x 0 x_0 x0 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)就可以直接写出,这个玩意儿大概是这么个形式:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \color{blue}{\tilde{\boldsymbol{\mu}}}(\mathbf{x}_t, \mathbf{x}_0), \color{red}{\tilde{\beta}_t} \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)

由贝叶斯公式: P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B P(A|B)=\frac{P(A)P(B|A)}{P(B} P(AB)=P(BP(A)P(BA)
基本的条件概率定理:
乘法定理:若 P ( A ) > 0 P(A)>0 P(A)>0,则:
P ( A B = P ( B ∣ A ) P ( A ) P(AB=P(B|A)P(A) P(AB=P(BA)P(A)
P ( A B C ) = P ( A ) P ( B ∣ A ) P ( C ∣ A B ) P(ABC)=P(A)P(B|A)P(C|AB) P(ABC)=P(A)P(BA)P(CAB)
带入贝叶斯公式: P ( A ∣ B ) = P ( A B ) B P(A|B)=\frac{P(AB)}{B} P(AB)=BP(AB)
可以通过贝叶斯公式推导如下:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ∝ exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( x t 2 − 2 α t x t x t − 1 + α t x t − 1 2 β t + x t − 1 2 − 2 α ˉ t − 1 x 0 x t − 1 + α ˉ t − 1 x 0 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α ˉ t − 1 ) x t − 1 2 − ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) x t − 1 + C ( x t , x 0 ) ) ) \begin{aligned} q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) &= q(\mathbf{x}_t \vert \mathbf{x}_{t-1}, \mathbf{x}_0) \frac{ q(\mathbf{x}_{t-1} \vert \mathbf{x}_0) }{ q(\mathbf{x}_t \vert \mathbf{x}_0) } \\ &\propto \exp \Big(-\frac{1}{2} \big(\frac{(\mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1})^2}{\beta_t} + \frac{(\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0)^2}{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\ &= \exp \Big(-\frac{1}{2} \big(\frac{\mathbf{x}_t^2 - 2\sqrt{\alpha_t} \mathbf{x}_t \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \alpha_t} \color{red}{\mathbf{x}_{t-1}^2} }{\beta_t} + \frac{ \color{red}{\mathbf{x}_{t-1}^2} \color{black}{- 2 \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0} \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \bar{\alpha}_{t-1} \mathbf{x}_0^2} }{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\ &= \exp\Big( -\frac{1}{2} \big( \color{red}{(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}})} \mathbf{x}_{t-1}^2 - \color{blue}{(\frac{2\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{2\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0)} \mathbf{x}_{t-1} \color{black}{ + C(\mathbf{x}_t, \mathbf{x}_0) \big) \Big)} \end{aligned} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)exp(21(βt(xtαt xt1)2+1αˉt1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值