扩散模型之DDPM

扩散模型之DDPM

  • 文章前置
  • 生成模型
    • 总结
  • Design of DDPM
    • 正向加噪过程
    • 反向去噪过程

文章前置

最原文链接(英文):What are Diffusion Models?
原文链接:Diffusion扩散模型大白话讲解,看完还不懂?不可能
原文链接:DDPM解读(一)| 数学基础,扩散与逆扩散过程和训练推理方法
hugging face diffusers(扩散模型包):huggingface diffusers code
本文并非全部是个人理解,是觉得其他作者的博客和文章通过不同的角度将DDPM讲的更加通俗易懂,希望自己能通过写一些东西加深理解,并且能够将其他人的优质内容进行分享。

生成模型

生成模型的主流网络结构应该可以分成三类,GAN、VAE 和基于流的模型。他们在生成高质量样本方面取得了巨大成功,但每个都有自己的局限性。

  1. GAN:由生成器和判别器构成。先训练判别器,使其能够区分图片的真伪(二分类),再继续训练生成器生成图像,在通过判别器判别图像的真伪,使生成图像的分布逐渐逼近于真实分布。由于 GAN 模型具有对抗性训练的性质,因此以潜在的不稳定训练和较少的生成多样性而闻名。
  2. VAE:与GAN通过判别器判断生成图像的真假不同,VAE直接通过分布的变换来生成图像。将真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。但VAE的方法输出模糊,常会失真。
  3. 基于流模型的方法,是建立训练数据和生成数据之间的概率关系,然后用可逆的神经网络来训练,这种关系是一一对应的。代价就是模型设计比较麻烦,因为要保证可逆而且逆函数可以算,还要有足够的灵活度。流模型必须使用专门的体系结构来构建可逆变换。
  4. 扩散模型的灵感来自非平衡热力学。他们定义了一个扩散步骤的马尔可夫链,以缓慢地将随机噪声添加到数据中,然后学习反转扩散过程以从噪声中构建所需的数据样本。与 VAE 或流模型不同,扩散模型是通过固定过程学习的,并且潜在变量具有高维性(与原始数据相同)。
    扩散模型之DDPM_第1张图片

总结

从图中我们可以看到,GAN、VAE和基于流的模型的共同点在于期望“一步跨十个台阶”,直接实现图像的生成,而扩散模型期望“一步跨一个台阶”,这可能是扩散模型生成的图像质量比较高的原因。

Design of DDPM

如下图所示。DDPM模型主要分为两个过程:forward加噪过程(从右往左)和reverse去噪过程(从左往右)。加噪过程意思是指向数据集的真实图片中逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图片。加噪过程满足一定的数学规律,而去噪过程则采用神经网络来学习。这么一来,神经网络就可以从一堆杂乱无章的噪声图片中生成真实图片了。
扩散模型之DDPM_第2张图片

正向加噪过程

给定一个从真实数据分布中采样的数据点 x 0 ∼ q ( x ) \rm{x_0} \sim q(\rm{x}) x0q(x),定义一个 T T T step 的正向的加噪过程,逐步向样本中添加少量高斯噪声,以产生一连串的噪声样本 x 1 , . . . , x T \rm{x_1},...,\rm{x_T} x1,...,xT。步长的大小是由 β t \beta_t βt控制 β t ∈ ( 0 , 1 ) t = 1 T {\beta_t \in(0,1)}^T_{t=1} βt(0,1)t=1T
在这里插入图片描述
这种公式看起来比较难理解比较抽象,其实就是
x t = 1 − β t x t − 1 + β t ϵ t − 1 \rm{x_t}=\sqrt{1-\beta_t}\rm{x}_{t-1}+\sqrt{\beta_t}\epsilon_{t-1} xt=1βt xt1+βt ϵt1
其中 ϵ t ∼ N ( 0 , I ) \epsilon_t \sim N(0,I) ϵtN(0,I),这样就非常容易理解了,正向的加噪过程是通过公式推导的,不涉及网络参数的学习。随着 t t t不断增大,采样数据 x 0 \rm{x_0} x0逐渐失去可辨别的特征,当 T T T比较大时, x T \rm{x_T} xT就等同于一个高斯分布了。我们可以看到, x T \rm{x_T} xT只由 β T \beta_T βT x T − 1 \rm{x_{T-1}} xT1来确定,是一个不通过学习就可以直接得到的过程。因此,只要我们有了 x 0 \rm{x_0} x0,并且提前确定每一步的固定值 β 1 \beta_1 β1,…, β T \beta_T βT,我们就可以推出任意一步的加噪数据 x 1 \rm{x_1} x1,…, x T \rm{x_T} xT。这里的前向加噪过程被称为是一个马尔科夫链过程。

反向去噪过程

反向的过程是复杂的,需要逐步反向计算,即计算 q ( x t − 1 ∣ x t , x 0 ) q(\rm{x_{t-1}}|\rm{x_t},\rm{x_0}) q(xt1xt,x0)。这里为什么不是直接计算 q ( x t − 1 ∣ x t ) q(\rm{x_{t-1}}|\rm{x_t}) q(xt1xt),这是因为在正向加噪的过程中,我们已知的只有各种条件概率 q ( x t ∣ x t − 1 ) q(\rm{x_{t}}|\rm{x_{t-1}}) q(xtxt1),而像 q ( x t ) q(\rm{x_t}) q(xt)这样的先验概率不能得到,所以需要计算 q ( x t − 1 ∣ x t , x 0 ) q(\rm{x_{t-1}}|\rm{x_t},\rm{x_0}) q(xt1xt,x0)。这里我们可以由贝叶斯公式得出(公式真的不想手打了,直接复制粘贴):
在这里插入图片描述
根据正向的加噪过程,我们很容易计算贝叶斯公式中的各个成分
扩散模型之DDPM_第3张图片
在这里 α t = 1 − β t \alpha_t = 1-\beta_t αt=1βt α t ‾ = α t α t − 1 . . . α 1 \overline{\alpha_t} = \alpha_t \alpha_{t-1}...\alpha_1 αt=αtαt1...α1。标准正态分布可以表示为:
在这里插入图片描述
所以贝叶斯公式的表示可以转化为:
在这里插入图片描述
将平方展开并合并同类项我们可以得到:
扩散模型之DDPM_第4张图片
因为KaTeX parse error: Undefined control sequence: \x at position 1: \̲x̲_t x 0 x_0 x0都是已知的,所以最后一项可以作为一个常数项。对比标准的正态分布展开项为:
在这里插入图片描述
对比两个指数形式的分布,我们就可以分别计算 σ \sigma σ μ \mu μ,而且可以发现这里的 σ \sigma σ是一个固定值,而 μ \mu μ可以得到:
在这里插入图片描述
通过正向加噪的过程可以有 x t x_t xt计算 x 0 x_0 x0,所以可以得到:
在这里插入图片描述
而在反向去噪的过程中, ϵ t \epsilon_t ϵt并不知道是什么样的,所以就可以通过神经网络来拟合了,并且可以通过与正向加噪的过程中使用的噪声计算mse损失来训练这个网络。这就是一个标准的扩散模型DDPM的过程。

你可能感兴趣的:(深度学习,人工智能,机器学习)