前言

OK,今天的话,我们来搞一下这个分散模型,来对这个玩意进行一个简略的了解,由于这个也是现在还算比较前沿的东西,也挺有用的,当然我这边和RL相同,我喜爱用来做优化,完成使命,单纯用来做生成se图是在是没什么意思(狗头)当然也是没方法,假如连这个都不去了解的话,我们在AI范畴是没法混了,得多少了解一下。

那么在开端之前的话,我们仍是需求去了解一下这个GAN网络。这个的话,我这边是没有写过专门介绍GAN的文章,这个自己去找一下,原理其实仍是很好了解的。或许看几个案例就懂了:PSO算法(优化与探究四*DDPG与GAN)

why

老规矩我们来看一下为啥要有这个东西,首要我们应该要知道这个模型,是用来处理一些GAN网络的问题。 首要我们的GAN网络呢有两个玩意,一个是生成器,还有一个是判别器

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
在练习的进程中呢,我们需求练习两个网络,关于生成器,我们期望能够生成一个图画,或许其他的使命能够去骗过判别器,关于判别器,我们希望能够精确识别出生成器生成的图画,和真实的图画的差异,进步鉴别能力。两者之间彼此对立。所这个玩意也叫作对立模型。

可是问题在于:

  1. 两个网络之间的收敛问题,两个网络一起练习不太简单收敛
  2. 在生成的进程中,生成器为了能够骗过判别器,可是骗过生成器的方法纷歧定是生成器学习到了图画的某种特征,也有或许是在单纯做拟合。因此这就导致在实践傍边作用纷歧定好。举个比方,判别器便是教师,教师会去打分,专家呢便是学霸,然后生成器便是你。你的意图是能够和学霸相同,拿到高分,可是呢,你有或许是真的学到了东西,可是也有或许是直接抄袭了学霸的试卷。那么这个就不好说了。也便是,这玩意纷歧定安稳。并且从我们数据集的视点来看,模型的搬迁能力会比较差,他或许只会生成和练习集相似的图画,假定我们做的使命是文本—》图画。为什么会这样呢,原因很简略,开始为了骗过判别器,生成器生成的图画是尽或许和方针图画相似的,否则骗不过去。

那么怎样处理这个问题呢,首要我们仍是需求像学霸学习对吧,可是呢我们是期望学习到学霸的一种方法,或许说是具有学霸的能力。可是呢刚刚也说了考试的时分呢,是或许做弊,走捷径的,那么为了避免这个问题,我们其实很简单想到一方法,大部分人应该也被厌恶过,那便是每个人的卷子假如不相同那么这个时分呢,你想直接抄是不太或许的了。抄了分数也纷歧定高,那么此刻对应生成器没啥问题了,可是关于那个改卷的教师来说,就难过了。并且我们其实发现,我们并不太关怀判别器。

所以为了处理这些问题,这个分散模型诞生了。

那么友谊提示一下,便是接下来的理论部分比较多,此外的关于曾经的一些推导笔记啥的,等我记忆回复+平板到手+心情杰出在做一个收拾。

分散简述

OK,既然我们想要去了解这个分散模型,那么我们就必须要知道什么是分散,首要我们来直接看到一张图哈:

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
他是从看起来有序到无序的进程,一起我们发现这个玩意好像是一步一步来做的,从前面到后边,从后边到前面。那么问题来了为什么要这样做呢? 这个的话,我们在来回到刚刚考试的比方,我们原来的GAN是这样的:我们把一张张图画或许一个一个班batch看做是一次次考试,并且你和学霸考同一张试卷,我们的期望是你和学霸在一次次开端中的分数能够不断挨近。可是呢,你这个平时比较机灵,喜爱狙击不讲武德。所以的话这个考试呢或许就不精确,你也纷歧定学到了东西,那么未来处理这个问题,我们刚刚说到说,把你们的标题打乱。或许标题不相同,可是都在一个考纲里边。这样就能够更好地查验你的学习作用,一起迫使你真的往学霸好的方向学习。

那么把这个比方给衍生到图画范畴,例如生成之类的,那么我们刚刚的操作呢其实就相当于上面的那张图。我们给图画加一点噪音,可是呢,我们噪音需求满足一个分布,比方正太分布,一般也是这个分布,也便是约束在一个考试大纲里边。那么此刻我们参加图画噪音是有规律的,那么天然我们也是能够恢复的。

这个时分呢,我再考虑一个问题,回到刚刚便是我们考试的比方。一起对比到GAN网络,我们是说我们需求向学霸学习,一起经过考试来查验,这个考试的评分阅卷是由教师来的,可是在GAN网络傍边,这个“教师”这个人物一开端其实也是啥也不知道的,就比方,这个改卷子的教师是你同学,那个学霸是规范答案,并且此刻我们做的卷子假定是文学类的卷子,没有肯定规范的答案。那么假如我们还打乱了顺序,那么关于那个阅卷的“教师”来说是不是有点强人所难了,想要能够完成这个,那么明显这个改卷的“教师”的水平也要高才对呀。那么这个时分不就死锁了嘛,OK,现在再考虑一下,考试的意图是什么,为了查验你的学习成果和学霸的距离是吧(方便构造一个损失函数)那么只要考试才能够查验成果嘛?纷歧定吧,最牛逼的大佬完全是能够自己给自己出标题然后做出来吧,假如对一个东西把握的十分熟悉的话,完全是能够自举的。

所以不妨换一个思路,那便是“纠错恢复”我给你一个标题和解题答案,我把答案成心写错一点,或许做点四肢(也便是往图画中加点噪音)然后呢,你还能够恢复出正确答案,那么是不是阐明你现已把握了一个东西,在GAN里边那个学霸是对那个东西现已把握了很好,我们向他学习,意图是为了能够像学霸相同处理问题,而不是为了模仿学霸说一句鸡汤便是:我们需求处理问题让我成为像成功人士相同的人,而不是像成功人士相同然后再去处理问题。

说实话便是,其实我们的本质是为了处理问题,GAN是让我们先参考参考专家的做法,有一个参照。而我们的分散模型,是直接面对问题本身,经过问题来衡量。就像我们解标题相同,你只要当标题充分了解了之后才有或许解出来,在此之前我们练习了大量相似的标题,并且能够自举,那么当遇到新的相似的标题的时分就比较简单处理了。

那么稍微总结一下便是:我们的意图是学习到影藏的特征,经过特征处理问题,在加以干扰的情况下,我们假如还能够去恢复的话明显阐明或许把握了一定的特征,并且是面向问题的特征(便是总比抄答案的会强一点,对比GAN的话)

所以这个分散模型的话,其实仍是起点比较直接,经过这个起点,我们其实也是能够做到许多不同算法,这个东西相似于一个大纲,思路是很不错的。当然接下来推导的时分也十分难过,噗呲。

那么抽象一点便是: 经过连续增加高斯噪声来损坏练习数据,然后经过反转这个噪声进程,来学习恢复数据。

how

OK,接下来便是how了,怎样去做了。

怎样分散

OK,接下来处理一下我们怎样分散的问题,我们来做到这个分散。也便是加点噪音呗。

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
图中这个进程是一个打乱的一个进程,那么我们先来看一下稍微官方一点的定义:
前沿系列--简述Diffusion Model 扩散模型(无代码版本)
这个的话我们先不关怀这个,这儿边的话比较抽象。我们仍是来直接看到这个怎样来,怎样用,比方我们学习Q-learning的时分,我先直接关系那个累计奖励的更新公式就好了,后边再补。我们只需求知道一件事情,那便是我们所有的假定都是符合正太分布的就好了。

那么我们再看到这张图:

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
X0是一个初始状态

前沿系列--简述Diffusion Model 扩散模型(无代码版本)

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
前沿系列--简述Diffusion Model 扩散模型(无代码版本)
前沿系列--简述Diffusion Model 扩散模型(无代码版本)

那么在这儿的话比较重要的便是有Xt的一个公式。阿尔法和贝塔都是一个相当于超参数的存在。

OK,我们能够先抽象一下,这个公式的意思,便是协助我们打乱,只不过便是说,这个打乱是按照概率论的方法进行操作,参加高斯噪声,经过这个公式我们能够“打乱”多次。

那么关于我们打乱的话,我们由于参数都是已知的,因此我们能够直接求出来。

可是关于一个反向进程,我们只能一步一步去推,便是外面能够把门推进去,里边不能把门推出去这个意思,由于中间有噪声呗,打乱简单恢复难呀。

逆向进程

之后的话是我们的一个逆向进程。现在我们知道了我们现在需求先做出一个分散,也便是相当于打乱试卷。并且终究我们得到的公式是这样的:

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
经过这个公式能够协助我们做到一个打乱,也便是分散。

我们的意图拿到刚刚考试的比方,便是为了做查验,成心写错答案,让你恢复,那么我们的方针便是能够知道你是怎样打乱的,这样才能恢复呗。终究我给到你的是我打乱结束以后的答案,你要的是恢复成一开端没有打乱的规范答案。换一句话说便是,我们需求由Xt—>推导出X0

这个推导进程比较复杂,反正便是一步一步去往前恢复。

我们先来看到这个公式: 这个公式便是在网上推导一小步的情况

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
知乎的话,我们这边能够从贝叶斯的视点,去做一个化简推导:
前沿系列--简述Diffusion Model 扩散模型(无代码版本)
终究我们能够得到的一个公式是这样的:
前沿系列--简述Diffusion Model 扩散模型(无代码版本)
最终那个便是我们猜测的一个开始的姿态。

这儿的话参考这篇文章(推理的挺详细) zhuanlan.zhihu.com/p/572263021

小结

这儿的话我们需求搞清楚的是,我们有两个进程,一个是分散进程,便是打乱顺序,还有一个便是恢复猜测的进程。 其实有一点相识Seq2Seq里边的编码器和解码器的感觉,可是在这儿的话,我们发现便是我们的编码器便是相当于打乱的一个进程,这个进程是已知的,包括我们参加一个噪声,这些都是已知的。可是呢,我们的猜测进程中,我们一步一步去回来猜测,相当于解码器,终究也是得到一个新的序列。

那么问题来了,我们这样做有啥用呀,看到这张图:

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
假定我们在做一个图画风格搬迁的使命,前向是我们对数据集的处理,我们最终会对图画变成t=T的姿态。假定这样操作是我们按照一定的规则由A—》B风格,那么此刻我们给到一张新的图画,假定是B风格的,现在要变成A风格,那么我们就能够经过逆向轨迹去得到。

由A–》B 的改变相当所以加了一些噪音,这个是在数据集里边能够得到的。逆向的进程是也是经过“噪音”然后带入到公式得到猜测的A风格的图画。 也便是说在逆向的进程中:

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
假如我们知道了这个我们是不是就能够处理了。每次搞了半天我们想要知道的便是这个“噪音”怎样来的。 例如我们刚刚的考试的比方,我们成心写错了东西,可是这个东西,都是能够经过你在考纲内学习到的东西来处理恢复的,你恢复了便是学习到了,便是把握了相当于“学霸”了,天然就实现了相似于GAN的作用。

感兴趣的话还能够去看看原始论文: arxiv.org/pdf/2006.11…

流程

OK,我们扯完了一些基本概念之后的话,我们来看一下这玩意大概是怎样练习,怎样玩的。 首要我们能够看到论文傍边的一个伪代码

前沿系列--简述Diffusion Model 扩散模型(无代码版本)

这儿的话其实便是差不多直接用到最终推导出来的公式了。 这个伪代码就十分形象了。

练习进程

我们先直接看到练习进程,看到这个怎样了解,我们仍是假定在CV范畴吧(纯CV)

  1. 首要的话,我们仍是取到一个batch,
  2. 然后的话按照我们前向的那个分散的公式,对这个图画进行一个分散。对每一个图画的分散的次数仍是不太相同的从1到T次随机的
  3. 参加一个噪声,其实这块仍是在分散中,由于这个时分仍是需求这个噪声的
  4. 这个时分我们说我们方针是学习到这个噪声,也便是做拟合,那么这个时分这儿定义了一个损失函数,这个E0便是网络猜测的,输入的值便是第t时分散后的东西呗。

猜测进程

之后的话到了我们的猜测进程,这个进程其实更好了解了,便是逆序进程嘛。

前沿系列--简述Diffusion Model 扩散模型(无代码版本)
然后这边使用到的是unit结构的一个网络。

总结

OK,那么这个的话,大致上便是分散模型的一个概述了,主要是那个公式的推导确实是比较复杂的,这块的话也是受限于篇幅,我们不是那么关怀这个问题,我们这边既然是简述,那么知道这个大致的一个思想就好了。那么之后的话关于代码复现这一块的话,我们这边仍是需求结合到论文来细心查看查看。受限于时刻和设备以及精力的问题,我们这边就暂时先这样。