上一篇的链接:多模态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陆续横空出世之前,它一直在吃灰,就是因为它的算法太晦涩难懂了,作者最缺德的一点是把公式的好多推导步骤都给省略了。
今天我给大家简单梳理一下,我是如何理解的,希望对你们看论文或者直接理解算法有帮助。
一切从这个经典的图开始讲起。
这个图很好得描述了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时刻:
我们来解读一下这个式子,首先βt满足越来越大,所以αt就会越来越小,那么上式中,加号左边的权重就会越来越小,也就是上个时刻的图片的影响会越来越小,而针对噪音Z1的权重就会越来越大。这也就满足了我们噪音越来加地越多的想法到算法的基础。
那么把这个式子再延伸一下,其实Xt-1时刻我们也可以用这个式子来表达出来。
把Xt-1代入Xt的式子。
这个式子可以继续拆解为一个关键的式子,我们称它为A:
式子A
然后有意思的来了,这块注意看,因为Z1和Z2都是符合正态分布的噪声,那么正态分布的东西乘上一个值相当于什么?相当于方差做了改变而已(不是1了)。
Z1和Z2的正态分布:
Z1:
Z2:
又因为符合正态分布的两个分布相加还是得到正态分布。
所以我们把式子A的后两项合并:
这部分式子按着刚才讲的都符合正态分布加法的方法来合并。
第一步:
第二步:
第二步的式子就是把Z1和Z2的正态分布加一起了,得到Z1+2这个分布。
Xt-2的前面的式子也合并掉,就得到了下面的式子B。
式子B
细心的读者可能会把式子B和初始求Xt的式子做对比,我们很容易就发现问题了,如下:
我用X-2去求Xt,就比X-1在加法左端和右端的根号里,多乘一个αt-1呗,那用Xt-3时刻来算,就是多乘个αt-2,一路累乘上去,(Z那边也就是噪音那边就是累加过去)。
那么好玩的来了,如果是X0呢?
式子C
现在我们得出了式子C,它的数学意义是什么?很好理解,在给定的时刻Xt,只要知道X0(初始图片),我就可以求出任意时刻Xt的噪声图应该是啥样子,然后不断得累成α的t,t-1,t-2时刻就完了。换句话说,对于扩散模型DDPM来讲,你只需要告诉我初始啥样,扩散多少步,我就直接能算出来噪声图。
那么好,DDPM的前向计算部分,我们把思路整理完了,下节课,我们讲DDPM更复杂部分,去噪,也就是从噪声图还原出我们的图片,AI存在的意义就是反复折腾算力让英伟达股票超过1000美金...