突然火起来的diffusion model是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了突然火起来的diffusion model是什么?相关的知识,希望对你有一定的参考价值。
模型起源
2015年的时候,有几位大佬基于非平衡热力学提出了一个纯数学的生成模型 (Sohl-Dickstein et al., 2015)。不过那个时候他们没有用代码实现,所以这篇工作并没有火起来。
直到后来斯坦福大学(Song et al., 2019) 和谷歌大脑 (Ho et al., 2020) 有两篇工作延续了15年的工作。再到后来2020年谷歌大脑的几位大佬又把这个模型实现了出来(Ho et al., 2020),因为这个模型一些极其优秀的特性,所以它现在火了起来。
扩散模型可以做什么?呢它可以做一些。条件生成和非条件生成。在图像、语音、文本三个方向都已经有了一些应用,并且效果比较突出。
比较出圈的工作有我刚介绍的text to image的生成工作比如
-
谷大脑的 ImageGen
-
德国海德堡大学的Latent Diffusion
什么是扩散模型?
Diffusion model 和 Normalizing Flows, GANs or VAEs 一样,都是将噪声从一些简单的分布转换为一个数据样本,也是神经网络学习从纯噪声开始逐渐去噪数据的过程。 包含两个步骤:
- 一个我们选择的固定的(或者说预定义好的)前向扩散过程 $q$ ,就是逐渐给图片添加高斯噪声,直到最后获得纯噪声。
- 一个需要学习的反向的去噪过程 $p_\\theta$,训练一个神经网做图像去噪,从纯噪声开始,直到获得最终图像。
前向和反向过程都要经过时间步$t$,总步长是$T$(DDPM中$T=1000$)。
你从$t=0$开始,从数据集分布中采样一个真实图片$x_0$。比如你用cifar-10,用cifar-100,用ImageNet,总之就是从你数据集里随机采样一张图片作为$x_0$。
前向过程就是在每一个时间步$t$中都从一个高斯分布中采样一个噪声,将其添加到上一时间步的图像上。给出一个足够大的$T$,和每一时间步中添加噪声的表格,最终在$T$时间步你会获得一个isotropic Gaussian distribution。
我要开始上公式了!
我们令$q(x_0)$是真实分布,也就是真实的图像的分布。
我们可以从中采样一个图片,也就是$x_0 \\sim q(x_0)$ 。
我们设定前向扩散过程$q(x_t|x_t-1)$是给每个时间步$t$添加高斯噪声,这个高斯噪声不是随机选择的,是根据我们预选设定好的方差表($0 < \\beta_1 < \\beta_2 < ... < \\beta_T < 1$)的高斯分布中获取的。
然后我们就可以得到前向过程的公式为: $$ q(xt | xt-1) = \\mathcalN(xt; \\sqrt1 - \\beta_t xt-1, \\beta_t \\mathbfI). $$
$$ \\mathcalN(xt; \\sqrt1 - \\beta_t xt-1, \\beta_t \\mathbfI) 就是xt \\sim \\mathcalN( \\sqrt1 - \\beta_t xt-1, \\beta_t \\mathbfI). $$
回想一下哦。一个高斯分布(也叫正态分布)是由两个参数决定的,均值$\\mu$和方差$\\sigma^2 \\geq 0$。
然后我们就可以认为每个时间步$t$的图像是从一均值为$\\mut = \\sqrt1 - \\beta_t xt-1$、方差为$\\sigma^2_t = \\beta_t$的条件高斯分布中画出来的。借助参数重整化(reparameterization trick)可以写成
$$ xt = \\sqrt1 - \\beta_txt-1 + \\sqrt\\beta_t \\mathbf\\epsilon $$
其中$\\mathbf\\epsilon \\sim \\mathcalN(\\mathbf0, \\mathbfI)$,是从标准高斯分布中采样的噪声。
$\\beta_t$在不用的时间步$t$中不是固定的,因此我们给$\\beta$加了下标。对于$\\beta_t$的选择我们可以设置为线性的、二次的、余弦的等(有点像学习率计划)。
比如在DDPM中$\\beta_1 = 10^-4$,$\\beta_T = 0.02$,在中间是做了一个线性插值。而在Improved DDPM中是使用余弦函数。
从$x_0$开始,我们通过$\\mathbfx_1, ..., \\mathbfx_t, ..., \\mathbfx_T$,最终获得$x_T$ ,如果我们的高斯噪声表设置的合理,那最后我们获得的应该是一个纯高斯噪声。
现在,如果我们能知道条件分布$p(x_t-1 | x_t)$,那我们就可以将这个过程倒过来:采样一个随机高斯噪声$x_t$,我们可以对其逐步去噪,最终得到一个真实分布的图片$x_0$。
但是我们实际上没办法知道$p(xt-1 | xt)$。因为它需要知道所有可能图像的分布来计算这个条件概率。因此,我们需要借助神经网络来近似(学习)这个条件概率分布。 也就是$p\\theta (xt-1 | x_t)$,其中, $\\theta$是神经网络的参数,需要使用梯度下降更新。
所以现在我们需要一个神经网络来表示逆向过程的(条件)概率分布。如果我们假设这个反向过程也是高斯分布,那么回想一下,任何高斯分布都是由两个参数定义的:
- 一个均值$\\mu_\\theta$;
- 一个方差$\\Sigma_\\theta$。
所以我们可以把这个过程参数化为
$$ p_\\theta (\\mathbfxt-1 | \\mathbfxt) = \\mathcalN(\\mathbfxt-1; \\mu\\theta(\\mathbfxt,t), \\Sigma\\theta (\\mathbfx_t,t)) $$
其中均值和方差也取决于噪声水平$t$。
从上边我们可以知道,逆向过程我们需要一个神经网络来学习(表示)高斯分布的均值和方差。
带DDPM中作者固定方差,只让神经网络学习条件概率分布的均值。
之后再Improved diffusion models这篇文章中进行了改进,神经网络既需要学习均值也要学习方差。
通过重新参数化平均值定义目标函数
为了推导出一个目标函数来学习逆向过程的均值,作者观察到$q$和$p_\\theta$可以看做是一个VAE模型 (Kingma et al., 2013).
因此,变分下界(ELBO)可以用来最小化关于ground truth$x_0$的负对数似然。
这个过程的ELBO是每个时间步$t$的损失总,$L=L_0+L_1+…+L_
以上是关于突然火起来的diffusion model是什么?的主要内容,如果未能解决你的问题,请参考以下文章
ICLR 2023Diffusion Models扩散模型和Prompt Learning提示学习:prompt-to-prompt