上一篇的链接: 多模态MLLM都是怎么实现的(2)-DDPM (qq.com)
上上一篇的链接:多模态MLLM都是怎么实现的(2) (qq.com)
上上上篇的链接:多模态MLLM都是怎么实现的(1) (qq.com)
其实上一篇的名字应该是(3),可是我写错了,没事,在这里更正一下吧,因为公众号的标题名是不允许改的,那么这篇是(4)。
上一节,我们通过推导得出了一个式子。
式子的表达的意思,就是任意时刻的加了噪声的图,理论上都可以由X0时刻的干净的图片,通过当时刻的α的累成和高斯分布的噪声Z累加来求出来(但是其实也就是当时刻的噪声Zt,写成Zt也一样)。
上节课我们给图片加了噪声,这节课,我们折腾一下,要把加过的噪声给去掉,还原成原来的图片
正向其实还是很简单的,大家自己也可以推,正向训练完了以后,我们的网络主干backbone(Unet或者Transformer),已经学会了一步加噪声(参加上面的公式),但是反向就比较麻烦了。
正向我们可以一步就能加多少个时间步的噪声,那么反向可以一步去噪声吗?如果大家有这个能力,恭喜你,你已经心中无码哪都无码了....
用一个纯纯的噪音图片一步还原成干净的图片,怎么考虑,逻辑上都是不可能。
我们现在换个思路 ,如果一步不行,我可不可以多次来做这个事情呢?
假如我有100个时间步的噪声图,现在已知条件是我无法求出0时刻的X,那么我有没有可能求出99步时刻的噪声图?
这个思路好像听起来不是那么让人绝望,就是贝叶斯公式呗,如果直接求,求不出来,但是逆过程可以求(知道Xt-1时刻,可以求出Xt),也能通过贝叶斯把解求出来,基于这个理论,我们可以试试。
解释一下这个公式,就是当知道Xt时刻和X0时刻的条件下,能不能求出Xt-1?不能。
那我们把步骤反过来,等式右边,第一个式子,在知道Xt-1时刻和X0时刻的条件下,能不能求出Xt,这个是可以的(正向肯定是可以的);然后第二个式子,再分别求X0已知的情况下,Xt-1和Xt的分布,这个都是可以求的,所以既然两个式子都可以求,那么自然整个式子也可以求。
至于怎么求,上节课列好的式子,我们正好用上了。
如上面的3个式子进行拆解,正好等于贝叶斯公式的右边3个部分,Z就是多个分类累加,但是还是正态分布,所以统一用Z代替了,因为乘改变了方差(要平方),加改变了均值,所以,正态分布的区间就变了而已。
标准正态分布里面,乘法就是加法,除法就是减法,那么把这三个式子代入前面的贝叶斯公式即得:
我就不一步一步展开了,大家可以自己算,总体思路就是要拆出来以Xt-1(因为我们求的就是Xt-1)为未知项的一个1元2次方差,我们尝试配平(我光拿latexlive写这个最后一步展开式,都写吐了
)
又因为
两个式子对比,我们其实可以把Xt-1就当成x来看。最后的C是个常数项(我们的先决条件就是Xt和X0都是常数),我们不考虑它了,把上下式一起看,我们能求出来方差等于什么,因为αt是已知的,αt的累乘也是已知的。下面式子的倒数就是方差了。
比如我们把一幅照片看成是一个分布,我们只有方差可以吗?自然是不行的,我们也要求均值,这个均值μ我们可以把均值对应的式子代入进去,但是同时,这个式子还有Xt和X0作为条件(虽然是常数但是是未知项),那么问题来了,X0能被表示吗?显然不能,我求的就是X0,我要能表示,我还用折腾这么半天干啥?那么就需要通过Xt来求X0。
根据上节课的式子
我们就可以把X0用Xt来表达,通过反复的计算化简,就能得出来我们的均值μ。
这下均值和方差都有了,分布我们也就有了,那不就能求出来解了吗?看似万事俱备,但是好像有个问题,Z咋求啊???
噪音这东西没法数学求解,那就只能求近似解了,就是拿一个backbone去训练来求噪声Z,这也是为啥这个模型看起来跟Transformer一点关系也没有,但是最后Dit还能让Transformer来插一手的原因。
到此,我们通过贝叶斯来逆向操作一个通过X-1来求Xt的推导过程就完事了,因为我们推导出了最终结果(虽然有一部分是靠模型训练的猜噪声),我们这个通过Xt来推理Xt-1的猜想也就可行了,然后一直推,直到推来X0,我们的任务就OK了。
如果我们用Unet做backbone的话,整体的流程大概就是下图这样。
因为每一步都是之前学到(用"猜"更准确)的噪音的然后再做逆过程,所以用DDPM来实现百分之百的重现,理论上是不可能的。而你模型训练到了百分之95以上相似,也基本就过拟了,对它的多样性也有挑战,所以图像或者视频生成和语言NLP啥的还真是两种完全不同的灵感模式。
今天先写到这,下节写LDM和DiT,离Sora又近了一步。
后面也不会有这么多数学推导了,其实我也不愿意写推导数学的式子,但是这个东西就是只能靠数学去理解,而且它的数学理论远比transformer更复杂,各位看官多担待。最好大家跟着我的式子推一遍,就能彻底理解Diffusion模型中最重要的部分,对我个人而言,什么Dit,Sora啥的,反而是在这个巨人(讨厌)论文的肩膀上长出的花朵。