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

      没错,我又来蹭热点了,这次蹭Sora的...

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

      第一集我们讲完了Clip,Clip是最简单的也是我个人认为最好理解的多模态方式之一。

     因为 谢赛宁和杨丽坤都在猜测Sora是基于Dit来开发的


多模态MLLM都是怎么实现的(2)_解压缩_02

     DiT它就不是一个模型,它包含了VAEencoder+ViT + DDPM + VAE decoder,其实Transformer也不是一个模型,那attention和MLP哪个都能单拿出来混一混,大模型本来就是杂糅的,不过鉴于上来就整杂糅,囫囵吞枣的介绍,不符合本blog的调性,而且大家也不见得能听懂,所以我们这系列拆解拆解。

      这节课不会先从盘古开天讲起,我们就先从Vit和VAE开始讲起吧,讲DDPM也就是diffusion model不知道是要花3章还是2章

多模态MLLM都是怎么实现的(2)_解压缩_03

      至于有某大V说什么训练数据拿UE5生成,又什么虚拟现实黑客帝国啥的,建议大家不要看搞笑文,还是要回归到模型本身。

      先讲Vit因为它好理解,至少是学过Transformer概念的同学,理解起来不是什么大问题。

       对Transformer没概念的同学,务必先移步这个系列,要不确实没法理解。

 小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(3) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(4) (qq.com)

多模态MLLM都是怎么实现的(2)_数据_04

      我们来看看一下Vit的思路,整个网络就是一个普通的Transformer网络,包含了正常的attention层,MLP层,Norm,和LN啥的也都有。

      主要区别其实是在Transfomer的Encoder前面整了一个线性层,这个线性层是整个网络的核心。

      线性层主要作用就是mapping。

      何为mapping,就是把图片这种和文字不相干的元素也能被处理NLP的网络来进行处理,这就是mapping的含义。

      那它具体是怎么做到的?

多模态MLLM都是怎么实现的(2)_解压缩_05

      首先它把一幅图比如224*224*3的给切了,比如切成一堆块,每块给切成16*16*3的Tensor,(乘3就是RGB通道,我是当彩图处理的,大家可以忽略,就认16*16也没问题)这个玩意他们给起了一个名字叫Patch,看到这是不是有点熟悉这个词在哪见过?

      是的,就是现在网上传的玄之又玄的Sora解读,一堆人煞有其事的解读,当看到有人说什么OpenAI创新的发明了一个叫Patch的概念的时候,你就可以简单判断,这人就没看过多模态的论文,这论文2020年facebook就提出了...

      切完了以后,每个patch不是16*16吗,那你原图是224*224的,除以16*16就得到了196的patch,所以你输入到encoder的seq_number就应该是224*224/16*16=196,如果是彩图,加上rgb,每个patch的tensor形状就是16*16*3=768。

      然后这768要拿torch给做一个shape变成768就可以了,这样输入的训练数据就是[batch_size,196*768]这样的一个tensor,这里需要注意的原来这模型刚折腾出来,实际上是个分类任务,所以又加了一个cls的分类字段。也就是197维的seq_number了,真实的输入训练数据是[batch_size,197,768]

       还有一种是不加cls位,然后token算加权,最后让一个MLP去做分类,我们就不介绍了,意思也差不多。

       这个Tensor要被送入到线性层,线性层其实就是个编码层

多模态MLLM都是怎么实现的(2)_模态_06

[batch_size,197,768]

      进了Transformer以后就没啥可说的了,该过多头self-attention过多头self-attention,该MLP就过MLP,最后唯一区别输出是一个图的分类,不是输出个字的logit

      所以ViT就讲完了,也比较简单,没啥可讲的。

     还有点时间我们讲一讲VAE。

     VAE的上一任叫AE,就是Auto-encoder

多模态MLLM都是怎么实现的(2)_数据_07

其实就是个神经网络)用于压缩图片,图片到低维特征,然后NN decoder这个函数, 来对降过维的低维特征进行反向重现,或者叫解压缩吧,乐意叫什么都可以。

       AE能用不?能用,但是又不太能用。

       原因是啥?

多模态MLLM都是怎么实现的(2)_模态_08


        VAE就出现了。

        VAE怎么解决了上述问题呢?

        既然固定的数值容易过拟合,那就整不固定的呗。

 

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


多模态MLLM都是怎么实现的(2)_数据_10


      下节或者下两节课我们讲DDPM,讲完了基本Dit的底子就搭完了,后面再将Sora有哪些改进(干货)

多模态MLLM都是怎么实现的(2)_模态_11