Diffusion Model详解

扩散模型(Diffusion Model)是一种新的图像生成范式,有着与其他生成方法比如GAN、VAE以及Flow-based models不同而且有意思的特性。最近也有许多基于diffusion model的图像生成方法涌现出来,比如DALLE2、Imagen、GLIDE, CogView1&2,本文主要依据Lil’Log 的博客进行翻译整理,方便学习记录。可以先看一下基于diffusion model的一些下游方法基于text-to-image图像生成结果。

图像生成(text2image)

上面各类基于diffusion模型生成的图片都非常真实,而且有些生成出来的风格画很有意境。接下来就开始介绍diffusion model,在介绍diffusion model之前首先看一下各类生成模型的对比:

上图对比了GAN,VAE、以及基于Flow的模型,它们在生成高质量样本方面显示出巨大的成功,但每一种都有其自身的一些局限性。GAN模型由于其对抗性训练的性质,以潜在的不稳定的训练和较少的生成多样性而闻名。VAE依赖于代用损失。基于Flow的模型必须使用专门的架构来构建可逆变换。

什么是Diffusion Models?

如图所示,diffusion model通常包含俩个过程,从信号到噪声的正向过程/扩散过程(forward/diffusion process)以及从噪声逐步到信号的逆向/重建过程(reverse process),这里主要介绍Google 的DDPM(Denoising Diffusion Probabilistic Model),近些年出来的基于diffusion model的方法大都是基于DDPM的框架所设计。

正向过程

正向过程采用的是一个固定的Markov chain形式(每个时刻$t$只与$t-1$时刻有关),即逐步地向图片中添加高斯噪声的过程:

上面公式表示的是,$xt$ 采样自 $x{t-1}$并服从高斯分布$N(\sqrt{1-\beta{t}},\beta{t})$,在这个过程中随着$t$的增大,$xt$ 越来越接近纯噪声,当$T \rightarrow \infty$ ,$x_T$ 是完全的高斯噪声(isotropic Gaussian distribution)。在实际应用中$\beta{t}$是随着t增大而递增的,在DDPM中,$\beta_{t}$是预先设置的常量参数。在介绍diffusion的实现和推导过程中需要了解俩个重要特性:

特性1:重参数技巧(re-parameterization trick)

如果我们要从某个分布中随机采样(高斯分布)一个样本,这个过程是无法反传梯度的。而这个通过高斯噪声采样得到$xt$的过程在diffusion中到处都是,因此我们需要通过重参数技巧来使得他可微。最通常的做法是把随机性通过一个独立的随机变量$\epsilon$引导过去。举个例子,如果要从高斯分布$z \sim \mathcal{N}\left(z ; \mu{\theta}, \sigma{\theta}^{2} \mathbf{I}\right)$采样一个z,我们可以写成:$z=\mu{\theta}+\sigma_{\theta} \odot \epsilon, \epsilon \sim \mathcal{N}(0, \mathbf{I})$;

上式的z依旧是有随机性的, 且满足均值$\mu{\theta}$为方差为$\sigma{\theta}^{2}$的高斯分布。这里的($\mu{\theta}$,$\sigma{\theta}^{2}$)可以是由参数 $\theta$ 的神经网络推断得到的。整个“采样”过程依旧梯度可导,随机性被转嫁到了$\epsilon$上。

特性2:任意时刻的$x_t$可以有$x_0$和$\beta$ 表示

将$\alpha{t}=1-\beta{t}$以及$\bar{\alpha}{t}=\prod{t=1}^{T} \alpha{t}$ ,则可以得到:$q\left(x{t} \mid x{0}\right):=\mathcal{N}\left(x{t} ; \sqrt{\bar{\alpha}{t}} x{0},\left(1-\bar{\alpha}_{t}\right) \boldsymbol{I}\right)$

该公式意味着我们可以直接获得任意程度的加噪图片,方便后续的训练。

反向过程

反向过程是一个去噪的过程,

扩散过程有一个重要的特性是,可以直接采样任意时刻t下的加噪结果$x_t$。

https://zhuanlan.zhihu.com/p/525106459

https://zhuanlan.zhihu.com/p/449284962