Diffusion model原理

基本流程

Diffusion model分为前向与逆向两个过程,前向的过程是加噪音的过程,而后向的过程则是通过训练的Denoise函数进行去噪的过程。
在这里插入图片描述下面将VAE与Diffusion model进行对比,其对比过程如下所示:
在这里插入图片描述其实可以把Diffusion model的加噪声的过程看成Encdoer的过程,而把Denoise的过程看作是Decoder的过程。

具体算法实现

下面看DDPM中具体的算法实现。
在这里插入图片描述
主要有两个过程,分为Training与Sampling。

Training

首先看Training的过程,
在这里插入图片描述
首先需要sample出一张干净的图像,这里将其称为x_0,也就是我们想要生成的图像(从自己收集得到的影像的资料库里面采样得到的)。而后从1~T中随机出一个数值t,并通过正态分布(mean是0,varience是1)得到一个noise,这里称之为ε。
第五行式子较为复杂,是通过梯度下降法进行训练的过程,我们逐层向外剖析该式。
在这里插入图片描述上式实际上就是按照一定的比例将我们想要生成的图像x_0与噪声ε进行混合,得到的就是一张加杂讯的图像(没错,这就是我们在基本流程中看到的前向过程中加的noise的过程)。
在这里插入图片描述

其中,α_t的大小是从α_1到α_T逐渐递减的,这样的设计是有意义的,因为α_t越大那么说明干净图像的占比越大,也就是说我们加的噪声越小,即通过α_t的大小来衡量我们加噪声的程度。
在这里插入图片描述我们再来看这个梯度的含义,这实际上是一个噪声减噪声的式子,也就是说真正需要训练的东西是,对于一组加了杂讯的输入图像以及一个整数t,训练一组数据θ,使得能够产生与前面正态分布得到的噪声足够相近的噪声。这也就是对应了我们Denoise的过程,我们来看一下Denoise的过程是如何操作的。
在这里插入图片描述用一张加了杂讯的图像以及整数t(表征加杂讯的程度)作为输入,而后通过Noise Predicter产生一张noise而后与原图像相减。这个就是前面梯度想要训练的东西,就是来训练Noise Predicter。

Sampling

现在再来看一下产生图的过程,
在这里插入图片描述
首先是通过正态分布产生一张全部都是杂讯的图X_T,这个我们之前说过t越大代表加杂讯越多,那么X_T代表的就是全都是杂讯的图像。而后做一个循环,循环中要做的事情如下:
首先从正态分布中采样一个噪声z,而后按照一定的算式从x_t得到x_{t-1}其实就是不断Denoise的过程,这个式子代表的意义如下图所示:
在这里插入图片描述

数学原理(非常劝退)

影像生成模型本质上的共同目标

在这里插入图片描述给定一个已知的分布,比如就是正态分布,从其中sample出一个z而后经过network以后能够得到一张生成的图像x,也就是G(z)=x。而后期望得到的目标数,G(z)的分布与真实图像的分布(数据集)足够接近。
那么如何评估两个分布之间的相似度呢?这里需要采用的方法是最大似然估计。
在这里插入图片描述
也就是想办法让产生真实图像概率的累乘越大越好。为什么这么算呢?数学推导如下:
在这里插入图片描述但是我们生成的图像的分布Pθ(x)并不是那么好算的,正常我们去算Pθ(x)应该是如下图所示这样按照积分式去计算,但是实作效果是不好的。
在这里插入图片描述这里的解决方案如下:
在这里插入图片描述
我们假设network生成的G(z)是一个高斯分布的均值,那么Pθ(x|z)应该是正比于e^{||G(z)-x||_2}的,这是很直觉的,就是距离均值越近那么越相似。
这里直接算max的logP(x)并不好算,因此在实作的时候往往是取它的一个下界,推导较为麻烦,可以直接看下图:
在这里插入图片描述

Diffusion model

那么Diffusion model的推导过程也是同理(下图exp少了一个负号)。
在这里插入图片描述
那么DDPM的lower bound长什么样子呢?其实它与VAE的不同就是把q(z|x)换掉就可以。这里的z就是x1~xT,z就是x0。在VAE中q(z|x)其实就是Encoder的过程,而在DDPM中的q其实就是前向过程(加噪音)。
在这里插入图片描述
那么我们现在再来看如何计算这个q呢?下图描述的是一个从x_{t-1}产生x_t的过程
在这里插入图片描述这个过程就是一个继续加噪音的一个过程,首先从正态分布中得到一个noise,然后按照我们提前设定好的比例加到x_{t-1}中。那么可以看出这仍然是一个q(x_t|x_{t-1})的分布仍然是一个正态分布,他的均值是根号1-β_t,方差是根号β_t。
现在新的问题是如何计算q(xt|x0)呢?这里是可以一步到位的,拿两次取样为例,因为两次正态分布中取样是彼此独立的,那么其实可以按照一定的数学等式代换为一次代换,如下图所示:
在这里插入图片描述
上图所描述的过程是从x0直接生成x2的过程。也就是变成只生成一次的过程。
在这里插入图片描述那么把t次过程全部合起来的过程就可以进行计算了,
在这里插入图片描述
下面是我们真的要max的对象(推导过程太复杂了)。在这里插入图片描述
把式子放大一下是下面这样。从这个式子里可以看出第二项KL是跟θ没有关系的因此不需要我们进行训练,也就是跟network么有关系是人为订好的。
在这里插入图片描述
现在来看如何最小化这个式子在这里插入图片描述
这个q(x_{t-1}|x_t,x_0)如何计算呢?通过前面的一些推导只有一个条件的q我们已经能算了,那么通过一定推导便可以计算。
在这里插入图片描述
但是这个式子并不好算,原论文推导过于麻烦,因此直接给出结果。
在这里插入图片描述那么现在有了个这个q的分布,问题及时如何去算一个KL divergence了。
在这里插入图片描述这里采用了一种简单的方式进行计算,那么就是如果两个分布的均值越接近那么两个分布就越接近。
在这里插入图片描述现在看的是,我们希望我们产生的图像与q的分布的均值越接近越好,因为x0与xt是有一定的关系的,那么可以进行化简。
在这里插入图片描述
这个东西是不是很眼熟,其实就是之前Sampling里面的那个过程。我们只需要预测噪音就好。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值