扩散模型 / Diffusion model
https://zh.wikipedia.org/wiki/%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B
机器学习中,扩散模型或扩散概率模型是一类潜变量模型,是用变分估计训练的马尔可夫链。扩散模型的目标是通过对数据点在潜空间中的扩散方式进行建模,来学习数据集的潜结构。计算机视觉中,这意味着通过学习逆扩散过程训练神经网络,使其能对叠加了高斯噪声的图像进行去噪。计算机视觉中使用通用扩散模型框架的3个例子是去噪扩散概率模型、噪声条件得分网络和随机微分方程。
扩散模型是在2015年提出的,其动机来自非平衡态热力学。
扩散模型可以应用于各种任务,如图像去噪、图像修复、超分辨率成像、图像生成等等。例如,一个图像生成模型,经过对自然图像的扩散过程的反转训练之后,可从一张完全随机的噪声图像开始逐步生成新的自然图像。比较近的例子有2022年4月13日OpenAI公布的文生图模型DALL-E 2。它将扩散模型用于模型的先验解释器和产生最终图像的解码器。
数学原理
于所有图像的空间中生成一张图像
考虑图像生成问题。令x代表一张图,令p(x)为在所有可能图像上的概率分布。若有p(x)本身,便可以肯定地说给定的一张图的概率有多大。但这在一般情况下是难以解决的。
大多数时候,我们并不想知道某个图像的绝对概率,相反,我们通常只想知道某个图像与它的周围相比,概率有多大:一张猫的图像与它的小变体相比,概率哪个大?如果图像里有一根、两根或三根胡须,或者加入了一些高斯噪声,概率会更大吗?
因此,我们实际上对p(x)本身不感兴趣,而对∇x ln p(x)感兴趣。这有两个效果:
其一,我们不再需要标准化p(x),而是可以用任何
~p(x)=Cp(x),其中C=∫~p(x)dx > 0是任意常数,我们不需要去关心它。
其二,我们正用p(x)/p(x+dx) = e^-〈∇x ln p, dx〉比较p(x)的邻居p(x+dx)
令分数函数为是s(x):=∇x ln p(x),然后考虑我们能对s(x)做什么。
实际上,s(x)允许我们用随机梯度朗之万动力学从p(x)中取样,这本质上是马尔可夫链蒙特卡洛的无限小版本。
学习分数函数
分数函数可通过加噪-去噪学习。
主要变体
分类指导器
假设我们希望不是从整个图像的分布中取样,而是以图像描述为条件取样。我们不想从一般的图像中取样,而是从符合描述“红眼睛的黑猫”的图片中取样。一般来说,我们想从分布p(x|y)中取样,其中x的范围是图像,y的范围是图像的类别(对y而言,“红眼黑猫”的描述过于精细,“猫”又过于模糊)。
从噪声信道模型的角度来看,我们可以将这一过程理解如下:为生成可描述为y的图像x,我们设想请求者脑海中真有一张图像x,但它经过多次加噪,出来的是毫无意义可言的乱码,也就是y。这样一来图像生成只不过是推断出请求者心中的x是什么。
换句话说,有条件的图像生成只是“从文本语言翻译成图像语言”。之后,像在噪声信道模型中一样,我们可以用贝叶斯定理得到

也就是说,如果我们有一个包含所有图像空间的好模型,以及一个图像到类别的好翻译器,我们就能“免费”得到一个类别到图像的翻译器,也就是文本到图像生成模型。
SGLD使用

其中∇x ln p(x)是分数函数,如上所述进行训练,用可微图像分类器便可以找到∇x ln p(y|x)。
温度
分类器引导的扩散模型会从p(x|y)中取样,它集中在最大后验概率

周围。如果我们想迫使模型向最大似然估计

的方向移动,可以用

其中β>0可解释为逆温度,在扩散模型研究中常称其为制导尺度(guidance scale)。较高的β会迫使模型在更靠近最大似然估计的分布中采样。这通常会提高生成图像的质量。
这可以简单地通过SGLD实现,即

无分类指导器
如果我们没有分类器p(y|x),我们仍可以从图像模型本身提取一个:

这样的模型通常要在训练时提供(x, y)和(x, None),这样才能让它同时为∇x ln p(x|y)和∇x ln p(x)建模。
这是GLIDE、DALL-E和Google Imagen等系统的重要组成部分。