专栏名称: 极市平台
极市平台是由深圳极视角推出的专业的视觉算法开发与分发平台,为视觉开发者提供多领域实景训练数据库等开发工具和规模化销售渠道。本公众号将会分享视觉相关的技术资讯,行业动态,在线分享信息,线下活动等。 网站: http://cvmart.net/
目录
相关文章推荐
你的Sneaker  ·  全国多地发售!Nike Kobe 6 ... ·  17 小时前  
你的Sneaker  ·  全国多地发售!Nike Kobe 6 ... ·  17 小时前  
新消费日报  ·  苹果+阿里=iPhone中国AI? ·  22 小时前  
新消费日报  ·  苹果+阿里=iPhone中国AI? ·  22 小时前  
天都新闻  ·  微信、抖音、快手,同日出手! ·  昨天  
天都新闻  ·  微信、抖音、快手,同日出手! ·  昨天  
艾锋降级  ·  紧急发布!iOS 18.3.1 ... ·  昨天  
晋城城区  ·  退钱啦!退钱啦!请留意~ ·  2 天前  
51好读  ›  专栏  ›  极市平台

小白也可以清晰理解diffusion原理: DDPM

极市平台  · 公众号  · 科技自媒体  · 2024-09-28 22:00

正文

↑ 点击 蓝字 关注极市平台
作者丨梦想成真@知乎(已授权)
来源丨https://zhuanlan.zhihu.com/p/693535104
编辑丨极市平台

极市导读

本文以易于理解的方式介绍了DDPM的基本原理,包括其前向加噪和反向去噪过程,以及如何通过最小化两个高斯分布之间的KL散度来训练模型。同时,文章还简要提及了DDIM作为DDPM的加速方法,以及如何将条件信息融入diffusion模型进行生成控制。 >> 加入极市CV技术交流群,走在计算机视觉的最前沿

前言

现在大火的stable diffusion系列,Sora,stable video diffusion等视频生成模型都是基于了diffusion模型。而diffusion模型的基石就是DDPM算法(之后有一些diffusion的加速方法,但是原理上还是DDPM),所以需要我们对DDPM有一定的了解,了解了DDPM可以帮助我们更好的理解diffusion模型。

DDPM全称是Denoising Diffusion Probabilistic Models,最开始提出是用于去噪领域。原始论文中数学公式比较多,需要一定的数理基础。

https://arxiv.org/pdf/2006.11239.pdf

实际上,DDPM也没那么复杂,我们两个层面上理解下DDPM的过程,分别是基于vae和基于傅立叶变换。 下文中diffusion默认指代的是DDPM文中的diffusion model。

首先,我们可以简单对比下vae和diffusion的推理过程

  1. vae 把图像可学习的方式压缩到一个latent space
  2. diffusion 把图像通过n step 压缩成噪声,噪声再通过n step 去噪成图像

不同于vae encoder/decoder的叫法, diffusion 的两个过程称为前向过程(加噪)和反向过程(去噪),这两个过程的中间态是一个和输入图像相同尺寸的高斯噪声。 而vae是通过数据驱动的方式压缩到一个一维隐空间,这个隐空间也是一个高斯分布,并且不需要n step,而是只需要 1 step。

那其实主观上,可能我们觉得vae多直接啊,而且非常优雅!为啥不用vae?确实,生成模型用了很长时间vae,最后gan变成主流,现在是diffusion。 生成模型越来越复杂了。 为什么越来越复杂大家还要用?最简单的解释就是,diffusion虽然很麻烦,但是效果好啊,架不住可以新发(水)几篇paper啊 ️。了解光流的同学一定听过RAFT等一个网络不够,我就cascade(级联)多个网络去学习的范式,diffusion也是类似的想法,但是这里并不是简单的把级联, diffusion建模的是信号本身的restoration,意味着diffusion这套建模可以用到1维分布、2维分布、一直到N维分布都可以。 这非常重要,接下来我们从第二个点进一步了解。

第二,我们可以通过傅立叶变换的思路去理解diffuison。不了解傅立叶变化的我简单说下,就是用一系列不同频率的余弦函数我们可以逼近任意的时域分布。

我们看最右边蓝色时域分布是一个非常奇怪的分布,实际上可以在频域拆解成若干 不同频率的余弦去表达。 那么理论上,余弦可以表达任意分布!

我们学过中心极限定理: 无论原始数据的分布如何,只要样本量足够大,这些样本均值的分布将近似为正态分布。我们再回过头看看,为什么我们能从一个高斯分布,通过diffusion model 还原出clear image,甚至是segmentation mask,depth等等表达,都是因为我们的源头是一个包含了所有可能分布的总和啊!

DDPM

我会通过尽可能简单的语言,带大家一起理解

  1. diffsuion 前向过程 和 反向过程的基本数学表达
  2. 为什么diffusion 的loss是那么设计的
  3. diffusion 训练/推理的时候是如何运作的

基本符号

diffusion原文中用 表示clear image, 表示高斯噪声, T一般都很大, 比如1000。 表示中间的图像和噪声混合的中间态, t越大, 混杂的噪声越大。

表示 去噪过程 中给定 的分布。

表示 加噪过程 中给定 的分布。

前向过程(加噪)

加噪过程为前向过程

忽略化简过程,整个马尔可夫链可以表示为

首先需要理解的是

这里的 可以表示为 , 很明显, 这个正态分布的均值方差如下:

  1. 表示均值, 均值是
  2. 方差是 的正态分布,

那么根据正态分布的性质,我们可以得到如下转换:

所以最后 , 看起来就非常清晰了。 就是 和一个高斯噪声加权 得到的。这里的权重 和噪声水平相关。当噪声比较大的时候, 信号的权重比较小, 相反, 当噪声比较小的时候, 图像权重比较大。一般来说 都比较小, 且小于1。

根据上面的式子, 我们可以直接递推出, 给定 的情况下, 的分布 。这对后面损失函数 的化简有帮助。不要惧怕新的符号, 这里的 并且 只是为了美观引入了新的变量, 让表达式更加简洁。也就是说在diffusion 加噪过程中, 只要知道了 clean image , 就能推导出任意时刻的

所以我们也需要理解

文中称 为 variance schedule。我们需要保证 足够大的T的时候, 最后的分布是一个isotropic Gaussian (各向同性的高斯分布)。 值一般在正向过程 中增加(和时间 相关)比如

反向过程(去噪)

diffusion的目标是学习reverse process(或者叫 diffusion process),即训练一个 ,从噪声还原回干净的图像。

我们可以写出最开始纯高斯分布的表达式

是已知的,我们还可以写出马尔可夫链单步的递推表达式:

安装上节的写法可以写成

注意,均值 就是DDPM要训练的单元,方差 在DDPM中是固定的,后续DDPM的优化工作也做成可训练的了。

目标函数

众所周知, 生成式网络都是为了让估计出来的分布更加接近真实的分布 。由于分布这个东西很抽象,一般都是使用一个dataset,然后都是要最大化网络估计出来的后验分布似然,也就是上图中右下角的公式。实践中,这个公式不能直接优化,需要转化,VAE中优化ELBO也是同理。这里省略推导。

对于扩散模型, 扩散模型是通过寻找使训练数据的可能性最大化反向马尔可夫转移来训练的 。在实践中,训练等同于最小化负对数似然的变分上界。

了解KL 散度的同学应该知道,这个问题就是要 优化 KL 散度,使得预测的分布更加接近真实分布。更直观的可以看下图,红色表示真实分布,蓝色表示预测分布。

DDPM 把负对数的上界叫vlb,其实就是 负的ELBO。最终要优化的目标是

其中

上式中, target distribution predicted distribution)表示KL 散度。接下来,我们分别解释下

. 没有可学习的参数, 所以在训练的时候 是一个常量, 可以直接忽略! 的取值范围是 , q (.) 没有可学习的参数, target 分布是 的原因是化简的过程中用到了贝叶斯公式。我们可以写出预测的分布 的表达式:

在DDPM中,假设 多元变量高斯分布是具有相同方差的独立高斯分布的乘积,这个方差值可以随时间t变化。 在前向过程中, 我们将这些方差设置为相同的大小。 t比较小的时候,方差比较小,t比较大的时候,方差比较大。最终方差值没有采用学习策略,而是经验设置了常数,如下:

所以预测的分布 变成了

注意! 中另外一项 都是通过配方法配的权重, 具体参数见论文下式

注意:上面的 在推理过程中是不知道的!!!所以需要利用网络进行预测!!!

这里是为了美观,设置了两个变量 并且

所以,有趣的来了,我们不难看出, 对于两个高斯分布求KL散度,变量还只有均值项,所以可以直接写成MSE的形式 ,因为它们肯定是正相关的。

, 而作者实验发现在预测 的时候给定timestep t会取得更好的效果。

还记得前向过程中, 我们推导得到给定 的情况下, 的分布 吗? 我们可以简单的表达

作者为了清晰起见定义了一个 是噪声, 符合 0 均值, 1 方差的正态分布。 变成了







请到「今天看啥」查看全文