diffusion模型是当下最热门的图像生成模型,但公式比较复杂。虽然网上有很多公式推导的教程,但看完这些教程我只是知道公式是怎么推导的,但不知道公式的来源,总有种知其然不知其所以然的感觉。直到看了苏剑林老师的博客,才明白diffusion model背后的思想,在此记录。
1. 核心理念
我理解的DDPM的核心在于两点
- 将未知问题转化为已知问题
- 将一步实现改为多步迭代实现
1.1 将未知问题转化为已知问题。
在VAE理论推导里有提过,生成模型的目标是利用大量目标分布的样本推断出目标分布整体,进而采样出任意多个目标分布的样本。但目标分布是未知的,很难直接表示出来,一种常见的方法是采用一个已知分布来表示目标分布,这个已知分布就是隐变量。这就是将未知问题(目标分布)转化为已知问题(隐变量)。
1.2 将一步实现改为多步迭代实现
跟其他生成模型比如VAE或者GAN不一样的是,diffusion不止有一个隐变量空间。DDPM将已知分布到目标分布的变换分为许多步(通常为1000)进行,这是diffusion模型跟其他生成模型之间的重要差异。
上面是DDPM的两个核心理念,数学公式只不过是保证两个理念能正确执行的工具而已。
2. 公式推导
DDPM定义了两个过程,分别为从目标分布转化为已知分布的过程,叫前向扩散过程。从已知分布转化为目标分布样本的过程叫反向生成过程,下面详细介绍这两个过程。
2.1 前向扩散过程
前向扩散过程可以写为条件概率p(xt∣xt−1,xt−2,...x0),但这个条件概率涉及的变量太多了,为了简化问题,采用马尔科夫链,即当前状态只跟上一步的状态有关,因此扩散过程简化为p(xt∣xt−1)。
因为q是已知分布,即由我们选择的分布,这里采用高斯分布,那么我们定义
p(xt∣xt−1)∼N(1−βtxt−1),βI)(1)
上面公式就代表了xt由xt−1决定,期望为1−βtxt−1 方差为 β。
但上边的形式不利于后面的公式推导,因此换一种形式,同时为了后面化简方便我们定义αt=1−βt,上面公式变为
xt=αtxt−1+βtϵt(2)
其中 ϵt∼N(0,I)。
回想一下前向扩散的目的是什么?是为了将目标分布转化为已知分布(高斯分布)。公式(2)直观上理解其实就是对上一步的变量xt添加高斯分布的噪声,αt和βt是权重,通过非常多次(比如1000次)的添加噪声,目标分布的信息被高斯噪声淹没,目标分布就转化为了高斯分布。
当t比较小的时候,我们只要添加少量噪声,目标分布就会有比较大的变化,而当t比较大的时候,我们就需要添加更多的噪声,才能让xt有比较大的变化,因此βt是逐渐增大的。
每一步的变化过程已经定义好了,只要将x0代入,一步步计算,就可以得到xt。
但这么计算太慢了,通过公式化简,可以一步将x0变为xt。
将xt−1=αt−1xt−2+βt−1ϵt 代入到(2)的等式右边并化简后可以得到
xt=αtαt−1xt−2+1−αtαt−1ϵ(3)
其中 ϵ∼N(0,I)。
依次代入直到等式右边只有x0
xt=αtˉx0+1−αtˉϵ(4)
αˉt=i=0∏tαt。公式(4)就是由x0变换为xt的过程,即前向扩散过程p(xt∣x0)。
2.2 反向生成过程
前向扩散过程定义的是从x0到xt的过程,但我们最终需要的是从xt到x0。根据贝叶斯公式可知
p(xt−1∣xt)=p(xt)p(xt−1)p(xt∣xt−1)(5)
我们的目标是要求p(xt−1∣xt),其中p(xt∣xt−1)是前向扩散过程,但p(xt−1)和 p(xt) 都是未知过程。
还记得文章开头说过的DDPM的两个核心吗?这里就需要用到其中一个:将未知问题转化为已知问题。
具体来说就是用p(xt−1∣x0)和 p(xt∣x0)来代替p(xt−1)和 p(xt)。公式变为
p(xt−1∣xt,x0)=p(xt∣x0)p(xt−1∣x0)p(xt∣xt−1)(6)
p(xt−1∣x0)和 p(xt∣x0)可以由公式(4)求出。
利用高斯分布的概率密度函数化简公式(6)后得到
p(xt−1∣xt,x0)∼N(1−αtˉαt(1−αˉt−1)xt+1αtˉαˉt−1βtx0,1−αˉt1−αˉt−1βt)(7)
但问题又出现了,x0是未知的,怎么办呢?DDPM给出的方案是用xt估计x0。
由公式(4)我们知道
x0=αˉtxt−1−αtˉϵ(8)
我们设计一个网络ϵθ去学习ϵ就可以了,所以定义损失函数为
L=∣∣ϵ−ϵθ(αˉtx0+1−αˉt,t)∣∣2(9)
最后当我们训练好了ϵθ,前向生成的过程就是由xt->公式(8)->x0->公式(7)->xt−1,这么反复t次,得到最终的x0。
这里有一个问题,既然我们已经使用xt估计出了x0,我们为什么还要算xt−1呢?这不是多此一举吗?
这涉及到DDPM第二个核心点,即将一步实现改为多步迭代实现,多步迭代能获得更高质量的图片,这也是diffusion模型跟其他生成模型的重要差异。
Reference
Denoising Diffusion Probabilistic Models
苏剑林老师的博客
Stable Diffusion from scratch