上一篇的链接:多模态MLLM都是怎么实现的(2) (qq.com)

上上篇的链接:多模态MLLM都是怎么实现的(1) (qq.com)

      在第一篇我们简单介绍了一下多模态训练的原理,包括clip,第二篇正好Sora横空出世,也让我就Dit做了一下抛砖引玉,顺便讲了VAE和ViT的部分,上节课我说过,  DiT它就不是一个模型,它包含了VAEencoder+ViT + DDPM + VAE decoder, 其实最核心的部分就是DDPM,也就是Denoising Diffusion Probabilistic Models。

       就DDPM本身而言各个解决方案都有自己的DDPM方法,它严格说也没那么绝对统一,但是大体思路都是靠diffusion算法来搞的,为了让大家更好理解,我从Diffusion算法开始讲起。

       论文链接:2006.11239.pdf (arxiv.org)

       这个论文真的好久了,但是在DallE,MJ,SD陆续横空出世之前,它一直在吃灰,就是因为它的算法太晦涩难懂了,作者最缺德的一点是把公式的好多推导步骤都给省略了。

多模态MLLM都是怎么实现的(2)-DDPM_模态

今天我给大家简单梳理一下,我是如何理解的,希望对你们看论文或者直接理解算法有帮助。

        


多模态MLLM都是怎么实现的(2)-DDPM_正态分布_02

       一切从这个经典的图开始讲起。

      这个图很好得描述了DDPM或者Diffusion算法的前向工作方式,就是往一个好图里加噪音(符合高斯分布的噪音),有人问,它这么做不是相当于往大米里加沙子吗?

      我们先不考虑做这个事情,是否有意义,先把它当成一个数学问题来思考,那请问X2时刻的图像和谁有关呢?

      按照上图所示,肯定和X1有关,递归过去,X1是和X0有关,所以我们可以列一个式子,Xt=Xt-1+Z(Z就是噪声),基于这个顺序,我们会总结出来一条类似马尔科夫链的结构。

      第二个问题,这个Z的噪声是不是恒定的,看图就能看出来不是恒定的,因为到最后,如果还是和最开始只加一点噪声来对图像加噪,基本就起不到什么效果,所以这个噪声也是递增的,原论文是0.0001到0.02。

αt=1-βt,βt就是我刚才提到的0.0001到0.02。

       那么,便有图像Xt时刻:

       

多模态MLLM都是怎么实现的(2)-DDPM_模态_03

      我们来解读一下这个式子,首先βt满足越来越大,所以αt就会越来越小,那么上式中,加号左边的权重就会越来越小,也就是上个时刻的图片的影响会越来越小,而针对噪音Z1的权重就会越来越大。这也就满足了我们噪音越来加地越多的想法到算法的基础。

      那么把这个式子再延伸一下,其实Xt-1时刻我们也可以用这个式子来表达出来。

多模态MLLM都是怎么实现的(2)-DDPM_正态分布_04

       把Xt-1代入Xt的式子。

多模态MLLM都是怎么实现的(2)-DDPM_权重_05

       这个式子可以继续拆解为一个关键的式子,我们称它为A:

多模态MLLM都是怎么实现的(2)-DDPM_权重_06

式子A

      然后有意思的来了,这块注意看,因为Z1和Z2都是符合正态分布的噪声,那么正态分布的东西乘上一个值相当于什么?相当于方差做了改变而已(不是1了)。

Z1和Z2的正态分布:

Z1:

多模态MLLM都是怎么实现的(2)-DDPM_正态分布_07

Z2:

多模态MLLM都是怎么实现的(2)-DDPM_权重_08

   又因为符合正态分布的两个分布相加还是得到正态分布。

多模态MLLM都是怎么实现的(2)-DDPM_模态_09

    所以我们把式子A的后两项合并:

多模态MLLM都是怎么实现的(2)-DDPM_模态_10

    这部分式子按着刚才讲的都符合正态分布加法的方法来合并。

多模态MLLM都是怎么实现的(2)-DDPM_权重_11

      第一步:

多模态MLLM都是怎么实现的(2)-DDPM_权重_12

      第二步:

多模态MLLM都是怎么实现的(2)-DDPM_正态分布_13

      第二步的式子就是把Z1和Z2的正态分布加一起了,得到Z1+2这个分布。

Xt-2的前面的式子也合并掉,就得到了下面的式子B。

多模态MLLM都是怎么实现的(2)-DDPM_权重_14

式子B

      细心的读者可能会把式子B和初始求Xt的式子做对比,我们很容易就发现问题了,如下:

多模态MLLM都是怎么实现的(2)-DDPM_正态分布_15

多模态MLLM都是怎么实现的(2)-DDPM_模态_16

      我用X-2去求Xt,就比X-1在加法左端和右端的根号里,多乘一个αt-1呗,那用Xt-3时刻来算,就是多乘个αt-2,一路累乘上去,(Z那边也就是噪音那边就是累加过去)。

      那么好玩的来了,如果是X0呢?

多模态MLLM都是怎么实现的(2)-DDPM_权重_17

式子C

      现在我们得出了式子C,它的数学意义是什么?很好理解,在给定的时刻Xt,只要知道X0(初始图片),我就可以求出任意时刻Xt的噪声图应该是啥样子,然后不断得累成α的t,t-1,t-2时刻就完了。换句话说,对于扩散模型DDPM来讲,你只需要告诉我初始啥样,扩散多少步,我就直接能算出来噪声图。

       那么好,DDPM的前向计算部分,我们把思路整理完了,下节课,我们讲DDPM更复杂部分,去噪,也就是从噪声图还原出我们的图片,AI存在的意义就是反复折腾算力让英伟达股票超过1000美金...

多模态MLLM都是怎么实现的(2)-DDPM_权重_18

       

多模态MLLM都是怎么实现的(2)-DDPM_权重_19