【深度学习】扩散模型(Diffusion Model)详解
文章目录
1. 介绍
扩散模型有两个过程:
-
扩散过程:如上图所示,扩散过程为从右到左 的过程,表示对图片逐渐加噪,且是在 上加躁得到的,其只受的影响。因此扩散过程是一个马尔科夫过程。
- 表示从真实数据集中采样得到的一张图片,对添加 次噪声,图片逐渐变得模糊。当 足够大时,为标准正态分布。在训练过程中,每次添加的噪声是已知的,即 是已知的。根据马尔科夫过程的性质,我们可以递归得到 ,即 是已知的。
其中,扩散过程最主要的是 和 的推导。
-
逆扩散过程:如上图所示,逆扩散过程为从左到右 的过程,表示从噪声中逐渐复原出图片。如果我们能够在给定 条件下知道 的分布,即如果我们可以知道 ,那我们就能够从任意一张噪声图片中经过一次次的采样得到一张图片而达成图片生成的目的。
- 显然我们很难知道 ,因此我们才会用 来近似 ,而 就是我们要训练的网络,在原文中就是个U-Net。而很妙的是,虽然我们不知道 ,但是 却是可以用 和 表示的,即 是可知的,因此我们可以用 来指导 进行训练。
其中,逆扩散过程最主要的是 的推导。
2. 具体方法
在上面的介绍中,我们已经明确了要训练 ,但是目标函数如何确定?
有两个很直接的想法:
- 负对数的最大似然概率,即 ;
- 真实分布与预测分布的交叉熵,即 。
但是这两种方法都很难去求解(求积分)和优化。因此扩散模型参考了VAE,不去优化这两个东西,而是优化他们的变分上界(variational lower bound),定义 ,如下:
由上式不难发现,就是逆扩散过程中 和 的 散度,即用 来指导 进行训练。这部分主要就是(1)式和(2)式的推导,细节部分见下文的损失函数。
2.1 扩散过程
如上图所示,扩散过程为从右到左 的过程,表示对图片逐渐加噪。
- 是在 上加躁得到的,其只受的影响。因此扩散过程是一个马尔科夫过程。
下面,我们对扩散过程进行推导:
由于每一步扩散的步长受变量 的影响。 可写为如下形式,即给定 的条件下,服从均值为 ,方差为 的正态分布:
至此,我们推出了 和 ,完成了扩散过程。
2.2 逆扩散过程
如上图所示,逆扩散过程为从左到右 的过程,表示从噪声中逐渐复原出图片。
- 如果我们能够在给定 条件下知道 的分布,即如果我们可以知道 ,那我们就能够从任意一张噪声图片中经过一次次的采样得到一张图片而达成图片生成的目的。
- 显然我们很难知道 ,因此我们才会用 来近似 ,而 就是我们要训练的网络。
虽然我们不知道 ,但是 却是可以用 和 表示的,即 是可知的。
- 因此我们可以用 来指导 进行训练。
下面我们对逆扩散过程进行推导:
先对 进行推导:
2.3 损失函数
我们已经明确了要训练 ,那要怎样进行训练?有两个很直接的想法:
- 一个是负对数的最大似然概率,即 ;
- 另一个是真实分布与预测分布的交叉熵,即 。
然而,类似于VAE,由于我们很难对噪声空间进行积分,因此直接优化 或都是很困难的。
因此我们不直接优化它们,而是优化它们的变分上界,其定义如下:
3. 总结
总结来说,扩散模型的目的是希望学习出一个 ,即能够从噪声图恢复出原图。
为了达到这一个目的,我们使用 来监督 进行训练,而 是可以用 和 进行表示的,即 是已知的。
4. 参考
【1】https://blog.csdn.net/Little_White_9/article/details/124435560
【2】https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
【3】https://arxiv.org/abs/2105.05233
【4】https://arxiv.org/abs/1503.03585
【5】https://arxiv.org/abs/2006.11239
文章出处登录后可见!