Diffusion Models: 生成扩散模型数学推导
本文基于2020年提出的DDPM[1](Denoising diffusion probabilistic models)模型,对扩散模型的原理进行详细的介绍。对于扩散过程,在满足马尔科夫链的条件下,我们应用了重参数技巧证明了基于原始数据我们可以对任意步进行采样,并且可以使用数学表达式进行表示;对于逆扩散过程,我们应用了贝叶斯公式和高斯分布的性质进行数学推导得到了逆扩散过程的后验分布,并且应用于目
本着“饮水不忘掘井人”的态度,博主基于参考文献和自身的理解,编写了本篇博客,如有不妥的地方欢迎大家在评论区指正!
目录
摘要
本文基于2020年提出的DDPM[1](Denoising diffusion probabilistic models)模型,对扩散模型的原理进行详细的介绍。对于扩散过程,在满足马尔科夫链的条件下,我们应用了重参数技巧证明了基于原始数据我们可以对任意步进行采样,并且可以使用数学表达式进行表示;对于逆扩散过程,我们应用了贝叶斯公式和高斯分布的性质进行数学推导得到了逆扩散过程的后验分布,并且应用于目标优化;对于目标优化,在已知真实数据的条件下,我们应用了极大似然估计将模型参数估计转换为对数似然估计,结合了变分推断和KL散度将极大化对数似然转换为最小化变分下界的问题,通过数学推导将原来预测均值转换成预测噪声从而简化了模型的目标优化;在得到目标函数之后,我们完成了模型设计的算法流程介绍,并给出了训练模型;最后,我们基于扩散模型对于非条件生成图像和有条件生成图像进行了代码实现并且分析了结果。
关键词:DDPM,扩散模型,重参数技巧,变分推断,KL散度
1 绪论
最近最火的方向无疑是基于文本用AI生成图像,继Open-AI在2021提出的文本转图像模型DALL·E之后,越来越多的大公司卷入这个方向,像谷歌在2022年推出的Imagen,同时Open-AI在2022年也推出了DALLE的升级版本DALLE2。下图所示分别为Imagen模型(图1-1)与DALL·E2模型(图1-2)的文本生成图像的结果,可谓是插画效果和联想效果都达到非常惊人的效果。
我们可以进一步探究其背后的生成原理,通过其文本生成图像原理可以发现,他们都使用了一个相同的模型——生成扩散模型(Diffusion Models)。下图分别为Imagen 的体系结构概述(图1-3)和DALLE2 的体系结构概述(图1-4)。
Diffusion Models 的灵感来自non-equilibrium thermodynamics (非平衡热力学)[2],而目前所采用的扩散模型大都是来自于2020年的工作DDPM[1],DDPM对之前的扩散模型[2]进行了简化,并通过变分推断来进行建模,这主要是因为扩散模型也是一个隐变量模型(latent variable model),相比VAE这样的隐变量模型,扩散模型的隐变量是和原始数据是同维度的,而且扩散过程往往是固定的。相比于GAN模型,扩散模型训练模型更加稳定,而且那个生成更多的样本,Open-AI的论文[3]已经证明了扩散模型能够超越GAN模型。扩散模型与其它主流生成模型的对比如下图1-5所示:
本文将基于DDPM详细介绍扩散模型的原理,并且通过数学公式完成每个原理的证明与推导,并结合两个实例进行实现与分析。
2 生成扩散模型原理
生成扩散模型包括两个过程:前向过程(forward process)和反向过程(reverse process),其中前向过程又称为扩散过程,反向过程又称为逆扩散过程,如下图2-1所示。无论是前向过程还是反向过程都是一个参数化的马尔可夫链(Markov Chain),其中反向过程可以用来生成数据,这里我们将通过变分推断来进行建模和求解。
2.1 扩散过程
2.1.1扩散过程的原理
所谓扩散过程,即在图片上加噪声的过程。对于原始数据 ,总共包含T步的扩散过程的每一步都是对上一步得到的数据按如下方式添加高斯噪声:
其中 表示对角协方差矩阵, 为每一步所采用的方差,表示用于控制随机程度的参数,且满足 (在 DDPM 中: ),如果扩散步数T足够大,那么最终得到的 就完全丢失了原始数据而变成了一个纯高斯噪音,过程如图2-2所示。
扩散过程的每一步都生成一个带噪音的数据,整个扩散过程也就是一个马尔卡夫链,如下式:
表示在给定 时, 的联合概率分布。
2.1.2马尔可夫链
马尔可夫链(Markov ChaIn)为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马可夫性质。
假设状态序列为:
由马尔科夫链的定义可知,时刻 的状态只与 有关,用数学公式来描述就是:
2.1.3 重参数技巧
一般情况下,我们在机器学习或者深度学习常常看到这种形式的优化目标:
采用梯度下降的方法进行优化如下:
通过上式推导,可以发现期望和求梯度是可交换的,这使得我们可以通过:采样 z∼P → 对每一个样本计算梯度 ( ) → 求平均,这种训练过程来近似上式。然而,在有些情形下(像VAE、diffusion model和强化学习等),优化目标中的概率分布也由参数 θ 决定:
如果尝试求解它的梯度:
通过公式推导可以发现,结果的第一项( )无法通过采样近似——即假设通过 采样,采出来的样本却无法告知我们如何更新θ ,也就是说采样过程是一个不可导的操作,此时应该采用重参数技巧。
在不能直接从 中采用的情况下,我们先从无参数分布Q 中采样一个ϵ ,再通过变换 得到z,即梯度在不经过采样操作就可以传递给θ :
故训练过程变为:采样 → 对每一个样本计算梯度 → 求平均,此时和一般情况一样了。整个过程如图2-3所示。目前存在的问题是:如何确定分布Q 和变换 ,使得变换后的结果满足 ,这需要具体问题具体分析。
通过上面的推导,可知diffusion model通过高斯噪声采样得到的 ,这个过程是无法反传梯度的,因此我们需要通过重参数技巧来使得他可微。最通常的做法是把随机性通过一个独立的随机变量ϵ 引导过去,即如果要从高斯分布 采样一个z,我们可以写成:
此时 , ,公式中的z依旧是有随机性的,且满足均值为 方差为 的高斯分布。这里的 可以是由参数为θ 的神经网络推断得到的。整个 “采样” 过程依旧梯度可导,随机性被转嫁到了ϵ 上。
2.1.4扩散过程的数学推导
扩散过程的一个重要特性就是我们可以直接基于原始数据来对任意步的进行采样,即任意时刻的 可以由 和 表示:
对于公式 ,首先我们令 ,并且 ,根据重参数化技巧从高斯分布 中对 采样可以得到:
将对 的采样代入上式可得:
依次将 , 采样结果代入可得:
其中: 、
通过反重参数技巧后,我们可以得到:
上述推导过程利用了两个方差不同的高斯分布 和 相加等于一个新的高斯分布 ,即:
2.2逆扩散过程
2.2.1逆扩散过程的原理
扩散过程是加噪的过程,那逆扩散过程就是一个去噪的过程。如果我们知道反向过程的每一步的真实分布 ,那么从一个高斯噪音 开始,逐渐去噪就能生成一个真实的样本,所以反向过程也就是生成数据的过程。如图2-4所示。
对于真实分布 ,我们可以采用神经网络来近似估计分布,此时,我们将反向过程也定义为一个马尔可夫链,它是由一系列用神经网络参数化的高斯分布来组成:
其中, , 表示在给定 时, 的联合概率分布,并且 为参数化的高斯分布,它们的均值和方差由训练的网络 和 给出,扩散模型就是要得到这些训练好的网络,因为它们构成了最终的生成模型。根据DDPN论文,为了方便优化,设 ,其中 是一个与时间有关,但不需要训练的参数,根据DDPN论文作者的经验在 ,就是取得不错的效果,故有 ,本文的实验也是根据这个经验值进行的。
2.2.2贝叶斯公式
(1)贝叶斯公式
其中,P(A)为事件A发生的概率,P(B)为事件B发生的概率,P(A|B)表示在事件B发生的条件下事件A发生的概率,同理P(B|A)则表示在事件A发生的条件下B发生的概率。
(2)条件概率
设A、B为任意两个事件,若P(A)>0,称在已知事件A发生的条件下,事件B发生的概率为条件概率,记为P(B|A),即:
根据条件概率的乘法定理,若P(A)>0,则有 P(AB) =P(A)P(B|A) ;
一般地,若 ,则有:
如果满足马尔科夫链关系A->B->C,则有:
(3)贝叶斯公式+条件概率公式
本文将应用贝叶斯公式对逆扩散过程进行数学推导。
2.2.3 高斯分布
高斯分布(Gaussian Distribution)又称正态分布(Normal Distribution)。若随机变量X服从一个数学期望为μ ,方差为 的正态分布,则记为 。高斯分布的概率密度函数为正态分布,期望值μ 决定了其位置,其标准差σ 决定了分布的幅度。当μ=0 ,标准差σ=1 时的正态分布是标准正态分布。高斯分布的概率密度函数为:
2.2.4 逆扩散过程的数学推导
我们可以知道在逆扩散过程中真实分布 是无法直接获得的,但是在加上条件 的后验概率 却是可以进行推导的,即有:
根据贝叶斯公式+条件概率公式,有:
由上述公式推导可见,逆扩散过程的后验概率 巧妙地转换为与扩散过程有关的后验概率 、 和 。
由于扩散过程符合马尔科夫链的特性,则有:
又由扩散过程的推导可知:
结合高斯分布的概率密度函数:
有:
即可有:
其中, 是一个与 无关的部分,所以可以忽略。根据高斯分布的概率密度函数有:
与上述推导结合可得后验分布 的方差和均值为:
由扩散过程可知 是一个已知量,故方差 是一个定量。
通过在扩散过程应用重参数技巧可得:
即有:
将结果代入 可得:
可见均值 只和超参数 和 有关,正因为如此,这个分布将用于推导扩散模型的优化目标。
故推导的后验分布 的公式为:
2.3优化目标
2.3.1目标函数
在理解了扩散过程和逆扩散过程的基本原理,以及其数学推导之后,为了实现基于扩散模型的生成,DDPM采用了一个 U-Net 结构的Autoencoder来对t时刻的噪声进行预测,即
,网络训练时采用的训练目标函数的简化形式如下:
一般的求法,就是代入给定模型(比如高斯分布),那不知道的就是μ 和σ ,如果要求极大似然估计,就是把观测到的值代入给定的模型,连乘求导(极值)即可。(连乘的原因,把这些观测样本看作独立同分布的联合概率(joint probability)。
在diffusion model 中,对于真实的训练样本数据已知,要求模型的参数,可以使用极大似然估计。
2.3.3 KL散度
KL散度(Kullback-Leibler Divergence)一般用于度量两个概率分布函数之间的“距离”(差异程度)。公式定义如下:
当 和 都是高斯分布时,其公式为:
KL散度的性质如下:
- 非对称性: ;
- 非负性:
2.3.4变分推断
变分推理的目标是近似潜在变量(latent variables)在观测变量(observed variables)下的条件概率。解决该问题,需要使用优化方法。在变分推断中,需要使用到的一个重要理论,是平均场理论。变分推断等价于最小化KL散度,即:
其中,q(z) 为近似分布,p(z|x) 为所求的后验分布。之所以对q(z|x) 进行近似,是因为其不容易计算。
为了近似目标,我们引入ELBO,全称Evidence Lower Bound,即证据下界。这里的证据指数据或可观测变量的概率密度。假设 表示一系列可观测数据集, 为一系列隐变量(latent variables)。则可用 p(z,x) 表示联合概率,p(z|x) 为条件概率,p(x) 为证据。那么,贝叶斯推理需要求解的就是条件概率,即:
但是,对于很多模型而言,计算P(x) 是很困难的,即:
由于无法直接计算P(z|x) ,故可以使用变分推断:
其中:
由KL散度非负的性质有:
上式体现了证据下界,即公式的左边的证据的对数形式,右边为其下界。因此,我们有:
在使用变分推断时,首先需要计算的便是ELBO。从上面的公式可以看到,要计算ELBO,需要写出联合概率密度 和 。在写出这两个式子之后,带入ELBO公式,分别求对数。之后,分别求期望。在期望计算完之后,针对具体的变分参数,求偏导,并令偏导为0,即可得到变分参数的更新公式。在实际公式推导过程中,关键点就在于如何求期望。其计算期望往往需要用到指数分布族的性质,即可以将期望计算转化成求导计算。
2.3.5目标函数的数学推导
本模型因为已知真实的训练样本数据,要求模型的参数,所以采用极大似然估计的方法,来寻找逆扩散过程中马尔科夫链转换的概率分布,即最大化模型预测分布的对数似然,从Loss下降的角度就是最小化负对数似然,数学表示为:
下面将使用变分下界(VLB)来优化负对数似然,根据KL散度定义与非负性质,可得:
其中 应用贝叶斯公式有:
将结果代入原式可得:
由变分推断有:
其中变分推断 等价于最小化KL散度,即最小化 的变分上界。
将已知条件、 代入可得:
其中 (符合马尔科夫链),应用贝叶斯公式+条件概率有:
将结果代入原式可得:
其中:
将结果代入原式可得:
简化上述推导结果为:
其中:
下面将对 、 、 进行讨论:
(1)对于
计算的是最后得到的噪声分布 和先验分布 的KL散度,在扩散过程 q 没有需要学习的参数,且最后得到的随机噪声 近似于 ,而 ,故 ,所以在训练过程中可以忽略。
(2)对于
可以看成是原始数据重建,优化的是负对数似然, 可以用估计的 来构建一个离散化的decoder来计算,分析如下:
在DDPM中,会将原始图像的像素值从[0, 255]范围归一化到[-1, 1],像素值属于离散化值,这样不同的像素值之间的间隔其实就是2/255,我们可以计算高斯分布落在以ground truth为中心且范围大小为2/255时的概率积分即CDF,后面我们的简化版优化目标并不会计算这个对数似然。
(3)对于
表示的是估计分布 和真实后验分布 的KL散度,我们的目标是希望估计的逆扩散过程和依赖真实数据的逆扩散过程近似一致,其表示如下图2-5所示:
已知两个高斯分布如下:
后验分布:
其中,均值为:
方差为:
网络期望拟合的目标分布:
其中,均值为: 需要通过网络训练得到,DDPM为了简化,采用固定的方差为: ,这里的 可以设为 或者 ,本文采用 ,故有:
且
由两个分布均为高斯分布的KL散度公式:
可得:
因为这两个分布的方差全是常数,和优化无关,所以其实优化目标就是两个分布均值的二范数,故有优化目标函数为:
由上述公式可知,目标是我网络学习到的均值 和后验分布的均值 一致,但是在DDPM的模型中发现,预测均值所得到的结果并不是最好的选择,我们将作进一步推导,根据扩散过程的推导得到的公式:
代入 可得:
当前优化需要做的是使用网络直接预测 ,由公式可知 的目标
是去尽可能预测 ,因为 是 的输入,其他的量都是常数,所以其中的未知量只有ϵ ,故我们可以把 定义为:
是一个基于神经网络的拟合函数。
即有:
DDPM近一步对上述目标进行了简化,即去掉了权重系数,变成了:
这意味着我们由原来的预测均值而换成预测噪声 ,其中, ,从DDPM的实验结果来看,预测噪音比预测均值效果要好,采用简化版本的优化目标比VLB目标效果要好。
3 模型设计
虽然扩散模型背后的推导比较复杂,但是我们最终得到的优化目标非常简单,就是让网络预测的噪音和真实的噪音一致。下面基于DDPM模型进行算法流程与训练模型的介绍。
3.1算法流程
DDPM的算法流程如下图3-1所示:
(1) 训练过程如图3-1左边 Algorithm 1 Training 部分:
1)从数据集中采样 ;
2)随机选取 time step t;
3)从标准高斯分布采样一个噪声 ;
4)调用模型预估 ;
5)通过梯度下降最小化损失 ,并利用反向传播训练模型;
6)训练到收敛为止(训练时间比较长,T 代码中设置为 500)。
(2) 测试(采样)如图3-1右边 Algorithm 2 Sampling 部分:
1)从标准高斯分布采样一个噪声 ;
2)按照T,…,1的顺序进行迭代;
3)如果t=1 ,令z=0 ;如果t>1 ,从高斯分布中采用 ;
4)然后计算条件分布的均值: ;
5)然后通过重参数技巧采样: ;
6)经过以上过程的迭代,最终恢复 。
3.2 训练模型
前面我们已经介绍了扩散模型的原理以及优化目标,那么扩散模型的核心就在于训练噪音预测模型,由于噪音和原始数据是同维度的,所以我们可以选择采用AutoEncoder架构来作为噪音预测模型。DDPM所采用的模型是一个基于residual block和attention block的U-Net模型,其中包括模型训练步骤,如下图3-2所示:
U-Net属于encoder-decoder架构,其中encoder分成不同的stages,每个stage都包含下采样模块来降低特征的空间大小(H和W),然后decoder和encoder相反,是将encoder压缩的特征逐渐恢复。U-Net在decoder模块中还引入了skip connection,即concat了encoder中间得到的同维度特征,这有利于网络优化。DDPM所采用的U-Net每个stage包含2个residual block,而且部分stage还加入了self-attention模块增加网络的全局建模能力。 另外,扩散模型其实需要的是个噪音预测模型,实际处理时,我们可以增加一个time embedding(类似transformer中的position embedding)来将time step编码到网络中,从而只需要训练一个共享的U-Net模型。具体地,DDPM在各个residual block都引入了time embedding。
4 实验与分析
本实验的实验平台为飞浆 AI Studio,下面的实验是基于这个平台来完成的,建议下面的实验详细的部分可以参考这个博主的文章:【diffusion】扩散模型详解!理论+代码! - 飞桨AI Studio (baidu.com) 并结合下面内容一起食用效果更佳!
4.1 非条件生成
非条件生成即为随机生成图片。我们使用前向过程采样得到标签,训练时使用U-net网络结构,同时在模型的输入中嵌入时间步的编码。这类似于transformer模型中的位置编码,让模型更容易训练。如下图4-1所示:
其中, 的标签从扩散过程中得到,t为时间编码,因为每个时间步添加的噪声不一样多,故加入时间帮忙,可以让模型更加容易学习。
4.1.1数据集介绍
非条件生成使用的数据集为stanford_cars,其中总共有16185张图片,8144张作为训练集,8041张作为测试集。U-Net网络输入的图片为640480间步t=500。数据集中的部分图片如下图4-2所示。
4.2 条件生成
同非条件生成一样,我们使用前向过程采样得到标签,训练时使用U-net网络结构,同时在模型的输入中嵌入时间步的编码。这类似于transformer模型中的位置编码,让模型更容易训练。 这里我们额外添加类别的标签编码,也作为模型的输入。其中cfg表示条件生成与非条件生成之间的比值,cfg越大,生成的图像中条件生成的比例就越大,即:
生成图像=(1-alpha)* 条件生成+(alpha)* 非条件生成
其中alpha与cfg相关。
另一方面,下面这个训练使用了上一代模型与当前模型参数的指数平均,削减因为离群点对模型参数更新的影响,从而实现更稳定的梯度更新。如下图4-3所示:
其中, 的标签从扩散过程中得到,t为时间编码,因为每个时间步添加的噪声不一多,故加入时间帮忙,可以让模型更加容易学习。clas从数据集中得到,类似于conditional GAN,并且clas表示类别编码,可以让我们指定类别进行生成。
4.2.1数据集介绍
条件生成使用的数据集为flowers鲜花数据集,其中总共有1223张图片,3458张作为训练集,865张作为测试集。U-Net网络输入的图片为64x64,时间步t=500。数据集中的部分图片如下图4-4所示。
5 总结
本文对当前流行的文本生成图像Diffusion Models生成扩散模型的原理进行了数学推导,可以发现生成扩散模型的理论相对复杂一些,但是最后推导得到的优化目标和具体的实现并不复杂,总的来说是:复杂的数学推导,得到简单的结论的一个过程。
生成扩散模型通过参数化的方式表示马尔科夫链,让扩散过程中产生的隐变量 都满足当前时间步t只依赖于上一个时间步t-1,为我们进行逆扩散过程的数学计算提供了便利;而且马尔科夫链中的转变概率分布 服从高斯分布,在正向扩散过程当中高斯分布的参数是直接设定的,而逆向过程中的高斯分布参数是通过学习得到的;在实验部分我们可以发现Diffusion Models网络模型扩展性和鲁棒性比较强,可以选择输入和输出维度相同的网络模型,例如类似于U-Net的架构,保持网络模型的输入和输出 Tensor dims 相等;模型通过对输入数据求极大似然函数,实际表现为通过训练来调整模型参数以最小化数据的负对数似然的变分上限来求解并简化了模型的优化目标;在概率分布的转换过程中,通过应用马尔科夫链的假设将变分上限转换为KL散度的求解,避免了使用蒙特卡洛采样的复杂形式,从而简化了数学推导过程。
参考文献
[3] Diffusion Models Beat GANs on Image Synthesis
[4]《What are Diffusion Models?》https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
[5]《KL散度》https://zhuanlan.zhihu.com/p/372835186
[6]《极大似然估计》https://zhuanlan.zhihu.com/p/26614750
[7]《变分推断》https://blog.csdn.net/qy20115549/article/details/93074519
[8]《重参数化技巧》 The Reparameterization Trick - xyfJASON
[9] Diffusion Models:生成扩散模型 (yinglinzheng.netlify.app)
[10] 生成模型(四):扩散模型 - 知乎 (zhihu.com)
[11] 怎么理解今年 CV 比较火的扩散模型(DDPM)? - 知乎 (zhihu.com)
[12] Diffusion Models:生成扩散模型 - 知乎 (zhihu.com)
[13] 由浅入深了解Diffusion Model - 知乎 (zhihu.com)
[14] 漫谈重参数:从正态分布到Gumbel Softmax - 科学空间|Scientific Spaces
[15] 朴素贝叶斯算法 — 超详细公式讲解+代码实例_飞天小牛肉的博客-CSDN博客
[16] 扩散模型(Diffusion Model)最新综述+GitHub论文汇总-A Survey On Generative Diffusion - 知乎 (zhihu.com)
更多推荐
所有评论(0)