浅谈多模态领域的Transformer

张开发
2026/4/3 20:50:24 15 分钟阅读
浅谈多模态领域的Transformer
本次跟大家简单聊下从最早的纯视觉单模态模型卷积神经网络CNN到多模态视觉模型 Transformer。大家想了解单模态模型建议大家看下我上一篇写的 # 单模态视觉识别模型从应用到原理的初步解析 。它们是从单模态模型通过卷积核进行识别图片然后一步一步的用Transformer来替代卷积神经网络进行视觉识别。然后到CLIP的横空出世第一次打通了人类的语言与视觉的间隔让他们一一对应一对图文对它的相似度就是最高的。这样的理论为后面的多模态模型产生非常大的影响也让之后的模型可以做更多的事情。再到文生图模型你给一个文字我生成一个图片我把你这个文字形成向量然后通过Transformer Decoder解码器还原成一个相似度高的图片向量在把图片向量还原成图片。Transformer Decoder 是自回归的多模态模型的诞生并不意味着卷积神经网络的淘汰世间万事万物都有其规律存在即合理。简单说下当模型做的很小所属的场景很窄比如该模型专门识别零件上的缺陷正常工厂内的流水线上每生产一万个零件总会有几个零件存在缺陷。这个时候使用Transformer模型效果就会比较差还不如用卷积神经网络效果好。原因是Transformer适合做场景多、通用类型很多活都能干而且要做的很大就特别适合用Transformer。卷积神经网络就恰恰相反它的模型小适合场景窄。我们在挑选模型时要根据使用场景做到性能最大话这也是AI大模型开发工程师的能力之一。在文生图领域中大多数使用的是扩散模型当文生图扩散到文生视频等领域。Transformer可以很好的跟扩散模型做交融并且可以得到非常牛逼的效果如果只用扩散模型是达不到这样的效果后面我们会聊到为什么会这样。多模态模型ResNetResidual neural network残差学习框架ViTVision Transformer视觉版的TransformerSwin Transformer视觉版的TransformerCLIPContrastive Language-Image Pre-training视觉与语言的统一学习ViLTVision-and-Language TransformerResNet残差学习框架参考资料 ResNet论文当你把神经网络层数变得越来越多时越靠后的层能提取更深度的特征在 # 揭秘Transformer架构设计 2补全版 的有讲到Tansformer Decoder解码器Tansformer Decoder解码器内部会进过96轮次解码操作层度越深它就能找到更深层次的语义信息甚至一些句子与句子之间的隐含关系也可以提取出更深的特征信息。按正常道理来说神经网络层数越多它能提取的特征信息也就越深度你用它来做图像识别它的准确率应该越高而且在模型比较小的时候确实也是这样。所以当时的模型内神经网络就做到了几十到上百层。这里声明卷积神经网络的层数与Transformer的层数不是一个概念卷积神经网络的一层不是相当于Transformer的一层Transformer的一层有非常多的神经网络。但是慢慢的人们发现一个问题层数越多效果并没有越来越好。然后他们就做了很多测试同样的卷积核的逻辑当我把20层提到56层的时候56层的表现不如20层如下图所示有些物体我们光看轮廓是知道它是什么东西有些物体光看轮廓是不知道它是什么东西有时候我们不需要提取那么深度的特征有时候神经网络层度过深的时候它会提取出来没有必要的特征信息。我们以 # 单模态视觉识别模型从应用到原理的初步解析 的飞机图片案例来说在飞机图片上有草地草地上的草有些是深绿色、有些是墨绿色有些是枯色有些草在一起有些草有高有低等等。这都属于图片的细节这些细节并不是我们希望模型去提取出来的我们不希望模型去把周边的不重要的细节去提取特征在下面这张图草地里草长什么样是否有护栏护栏长什么样这些树有多高等等信息对于整张图片来说这些都属于噪声所以当我们网络层数变多时它没有必要有那么深的层数因为网络层数变多会把算力、时间消耗在那么没有必要的噪声上。这个时候就衍生了ResNet在视觉任务时神经网络层数变多它就能提取更深度的特征但是我的浅层/纹理特征也很重要。曲线identity也叫残差链接以Transformer - Decoder解码器来解释案例有一段1300字的文案给Transformer去理解输出理解后的新1300个数学向量。1300个12288维数学向量输入到Decoder解码器内Decoder解码器输出新1300个12288维向量。这里面每个12288维数学向量都做了特征提取以及信息聚合如果把Decoder里面做的工作叫做F(x)你输入一个X1300个12288维数学向量过来我对你做了FDecoder解码器计算然后输出F(x)新1300个12288维向量输入的X与输出的F(x)不一样就像Transformer - Decoder 解码器输入的1300个12288维数学向量与输出的新1300个12288维数学向量是不一样这个链接线的意思是我把X直接传送到输出端不经过F计算在输出端会进行计算F(x) X。再用Transformer - Decoder 解码器来看输入1300个12288维数学向量经过Decoder解码器得到新的1300个12288维向量然后把新的向量 输入的向量X 输入的向量[a1, a2, a3, …, a1299]F(x)新的向量[b1, b2, b3,…, b1299]F(x) X输出的向量[a1 b1, a2 b2, a3 b3, …, a1299 b1299]为什么要这样做你输入X向量进来经过一系列的计算在输出端有F(x)然后X向量也通过identity曲线把传送到输出端输出端就等于F(x) X这样的好处有2个如果没有identity曲线把X向量传送到输出端输出端只有F(x)那么经过多层神经网络处理后图片的纹理信息就会丢失但是通过F(x) X的话每次输出都会把X向量带上它的纹理信息就不会丢失越深层的卷积层处理的都是结构和形状信息越浅层它处理的都是纹理与颜色信息所以这样做到信息不丢。当神经网络较深时担心神经网络没事干它会对一些噪声信息进行提取特征层数越多累加的噪声信息也越多对最后的向量有很大的影响。但是有了这个结构后你的F(x)计算可以把这个概率趋近于0它只会把X向量传递给下一轮次。在神经网络不添乱的情况下F(x) 0的话我也可以把原始信息X向量向下传导。如下图所示同样是34层网络左边不加任何的残差链接右边是每一层都加了残差链接对于右边来说右边有机会把所有的神经网络都跳跃也可以全部不跳过或者只跳过部分哪些层在我整个过程当中扮演的是重点哪些层在当前影响会轻点完全可以在模型训练过程确定对于整个神经网络来说都是可调配的。对于左边来说每层神经网络都要先卷积再池化而且必须串行执行一溜串的计算下来你的特征图势必会越来越小你的特征值就必须要越来越长而且特征值越来越长、特征图越来越小的情况下你的每一层只能从上一层提取特征这样就会导致你的细节、纹理的信息会越来越被折损越来越被抹杀掉越来越靠近下一个阶层甚至到最下面的阶层时可能你的细节都被抹杀没了。还是以Transformer - Decoder 解码器来解释1300个12288维数学向量通过Decoder解码器到第49层的时候发现信息量过多提取的特征是无用或者是噪声导致总误差变大这个时候就会调整WqWkWv的参数是0让这一层不做任何事情避免影响总误差1300个12288维的数学向量怎么进来的就怎么出去这也是残差链接的作用进行调控神经网络避免神经网络层数过多导致效果不如神经网络层次少的好。不加任何残差链接的情况下34层的神经网络比18层的神经网络的错误率还高训练出来的模型进行识别图片的错误率如下图所示加残差链接的情况下34层的错误率就是低于18层如下图所示有了ResNet后神经网络才开始爆发性的成长能做到几百到上千层。ResNet是在卷积神经网络后面发明出来的它是让卷积神经网络在视觉识别这件事情上做到了非常高的识别正确率。[ResNet论文]([1512.03385] Deep Residual Learning for Image Recognition) 这个论文最大的贡献就是残差链接它让整个神经网络变得越来越深并且进化到了深度神经网络。比如一个10分钟的视频并且有问答文案模型要进行回答。首先会用一个维度特别高的数学向量容纳这10分钟的特征信息、并且进行信息聚合这是需要一个深度神经网络里面的层数比较多要不然很难提取10分钟的视频10分钟的视频信息特征比较多因为有了ResNet使神经网络的层级没有了瓶颈。ResNet论文的出现是2015年在Transformer论文是2017年发出的早好几年。Transformer - Decoder是抄了卷积神经网络的多头卷积核转换为多头然后拿了ResNet的残差链接进行组合创新。ViTVision Transformer参考资料ViT论文ViT是视觉版的Transformer架构图在ViT内部使用了Transformer Encoder编码器它设定的场景比较简单只做最简单的图片识别。因为Transformer Encoder编码器比较适合做分析、理解工作Transformer Decoder解码器比较适合做生成所以ViT内部使用了Transformer Encoder编码器。ViT设定的场景比较简单只做最简单的图片识别。虽然卷积神经网络CNN比较适合做图片与视频的识别但是我只想用Transformer来替代卷积神经网络CNN如果能成功的话未来是不是就有可能形成大一统的多模态模型架构这也是这个论文的思路。这个ViT有一个新概念Patch与大语言模型LLM的Token的概念类似。把图片切成9个小方块每个小方块就是一个PatchToken是有总数的比如10万个、20万个是有字典的并且可穷举。但Patch不同它是任何一个图片都可以切成小方格每个小方格都是一个Patch所以Patch不能被穷举也没有定数。Transformer只知道怎么处理序列数据所以就要把9个小方块摆成一排。每个Patch就是一张小图片每个图片里面都有像素每个像素都是0 ~ 255的数值每个图片都可以转换成向量比如 16 * 16 像素的图片就等于 256个数值每个数值都是 0 ~ 255的数值相当于256维向量就等于每个Patch可以转换为一个256维的数学向量。每个256维的数学向量基于Linear线性层做一个处理就会得到一个新的向量。Linear Projection of Flattened Patches类似Transformer Encoder编码器9个Patch经过Linear线性层输出为9个新向量并且每个新向量都有位置编码Position。然后让它做图片识别任务就要在向量集最前面加个“0 * ” 向量专门用来做抽取本来有9个向量加上抽取向量就是10个向量。这10个向量输入到Transformer - Encoder编码器进行特征提取、信息聚合最后“0 * ” 向量涵盖整个图片的信息又因为它的初始不涵盖任何其他信息具有中立性质所以把“0 * ” 向量做为输出口。然后把“0 * ” 向量输入到一个线性层也叫全连接层MLP Head 或者叫分类头输出的向量数据最后再通过softmax归一化输出类型的概率。VIT模型有3个版本ViT-Base基础款有12层编码器每层有768维数学向量有3072个分类头有12头自注意机制模型有86M参数。ViT-Large大尺寸款有24层编码器每层有1024维数学向量有4096个分类头有16头自注意机制模型有307M参数。ViT-Huge超大尺寸款有32层编码器每层有1280维数学向量有5120个分类头有16头自注意机制模型有632M参数。STSwin Transformer参考资料ST论文ST是在ViT上做了优化也属于视觉版的Transformer。ST的基于ViT模型改进ViT是把每个图片都切成若干个小方格每个小方格都是一个向量每一个小方格都会做多头自注意力机制并且都会进行相关度系数计算。视觉任务与文字任务是不一样的文字任务哪怕你有一万个字你最开始的一个段落讲的一件事情和最后段落讲的一件事情可能都会有相关性。但是图片不一样图片里出现的东西都是物理世界客观存在的东西物理世界是有一定客观规律的比如一个人站在图片里人脑在左上角手在右上角人的肚子在左下角这样的情况是不可能出现的。这也叫刚性知识。在物理世界里物体都是具有刚性属性的这样刚性属性就注定着它是有连接的极少有物体一个物体的某部分在左上角另一个部分在右上角。基于刚性属性可以得到这样的结论2个距离比较远的Pacth它们的相关度系数最低模型无需去进行相关计算避免资源的浪费。简而言之这2个Patch不需要做任何的信息交换或者是信息聚合。STSwin Transformer只让红色方格内的小灰色方格进行自注意力机制操作计算相关度系数与信息聚合。然后到达下一轮时红色方格会进行重新拼接组成更大的红色方格它的自注意力机制也仅在红色方格内让灰色小方格做相关度系数计算与信息聚合以此类似每个轮次都是进行类似的操作红色方格与红色方格是不会进行交换数据。最开始第一层时红色小方块都很小ST只允许灰色的小方格在红色小方格里通过自注意力机制做聚合和信息交换。到了第二层我的红色小方格就变大一点我就允许灰色小方格在更大的红色小方格里通过自注意力机制做信息聚合与信息交换。然后再到第三层我把红色小方格变得更大我允许任一灰色小方格通过自注意力机制做相关度系数计算与信息聚合。ST模型用这样的方式进行处理它每一层还是Transformer但是ST在每一层限制了哪些Patch之间可以做信息聚合和信息交换而且这样的话自注意力机制进行计算它的计算量也会小很多比如在第一层红色小方格里灰色小方格也就16个patch16个patch之间做相关度系数计算它的计算量就很小如果按照ViT模型它就会把左下角的patch与右上角的patch做相关度系数计算它的计算量就会很大每2个patch都会计算相关度系数这个计算量是很大很大了。ST模型内颗粒度一层层变大是为了尺度这件事情。在图片上一个数学向量代表什么区域比如第一层一个向量只能代表非常小的一个格子每一层向量在原图上所代表的区域会越来越大直到顶层的向量表达的灰色小格子就很大了。在视觉领域里面尺度的概念是很重要的一个东西离近看就是能看到很多细节离远的来看我只能看到一个轮廓细节的特征与轮廓的特征都很重要一定不能把尺度的事情给忘记了。ViT模型做的过于极致它没有微观与宏观的概念所以也没有细节与形状的概念它的概念太过理想化了。人们为了推进多模态模型的大一统对于整个人工智能领域来说是非常重要的但是ViT做的太过极致如果ViT能为了图片稍微做些改变它的性能一定能得到显著的提升。而STSwin Transformer的创新就在于针对Patch进行改变它的性能得到了极大的提升如下图所示ST模型在每一层的每个灰色的小格子都是一个向量也能说一个向量可以代表一个小的图片。在视觉领域里面一个向量代表一个patch一个patch就是一小格图片。它在同一层Transformer - Encoder编码器里面其实要做2次自注意力机制的计算它就把Transformer做了升级在每一层里面都要做2次自注意力机制的计算。第一次会让4个大方格内的小灰格子做自注意力机制计算的信息聚合就是在每个大红色方格里面让灰色小格子与灰色小格子patch与patch做信息聚合和信息交换。第二次它会把红色方格打乱顺序变成Layer 1 1的结构这里也会要求灰色的小方格只能在各自的红色小方格内做自注意力机制计算做信息聚合和信息交换这样的好处是它通过间接的形式让左上角的patch信息可以与右下角的patch信息做信息聚合与数据交换。然后通过不断变换的窗口window进行切不同的红色方块每个红色方块都会在内部让灰色方块做自注意力机制。CLIP视觉与语言的统一学习参考资料CLIP论文在同一时期2021年也是多模态爆发的一年出现了CLIP它是OpenAI研发的。跟ViT模型类似但是在模型上走的是另外一条路径。因为ViT模型是Google研发的Google擅长在模型和算法结构上做创新。OpenAI擅长简单的东西甚至从别人那里拿东西过来然后把整个模型做大用足够大的数据集通过简单的方式做到比较好的效果这也是CLIP的背景由来。当时很多视觉识别的任务都有很多数据集我做为一个模型比如刚刚讲到的ResNet模型我要去不同的数据集上重新做一些模型训练每个模型最后都有个Linear层我前面的那些卷积层的参数可能会固定不变但是我去不同的榜单里面去刷榜单我就要根据榜单的数据集做模型训练调整我的Linear层的分类数据类型。一般来说那些视觉识别的任务它都要把模型的Linear层重新训练下甚至有些模型是整个模型都会在那个榜单所对应的数据集里面重新训练下。在当时最有名的榜单ImageNetImageNet里面有1400万张照片里面的标签都是物理世界内真实的标签/ID。CLIP模型比ViT模型还要创新它在2021年第一次直接打通了人类的语言与视觉。ViT、Swin Transformer模型表现都很不错但是毕竟还都是单模态的东西你的模型输入就是一张图片你的输出就是标签模型也不直接输出的“狗、猫、车、人”是什么东西它只给标签也只知道标签。Transformer是很强大的可以做文字的处理也可以做图片的处理。但是不能说ViT、Swin Transformer模型很强大。CLIP的强大在于它把非常多的数据集它利用互联网上的4亿对文字-图片数据进行预训练实现了零样本图像分类可以用一段文字或者一句话去对应一张图片。Text Encoder Transformer EncoderImage Encoder ViT把对角线的数值相加 - 不在对角线的数据之和 这个数值越大越好它的总误差值就越小这也是这个模型训练的目的。对角线的数值一定是最大的因为它们是文字与图片一一对应的它们的相关度系数是最高非对角线的T/I向量数值要尽可能的小它们的原图与原文字是不对应的它们的相似度肯定是最低的。由此可以得出对角线之和 - 非对角线之和 新数值这个新数值肯定是最大的如果数值比较小就说明这个总误差肯定很大就需要调整模型内的参数。这也叫对比学习因为有2个模型需要调整。只要在新数值实在没办法变得更大时模型训练才会结束。CLIP模型训练完成后就会去各大榜单去刷榜。每次刷榜都会获取榜单内的测试数据CLIP模型拿榜单的测试数据进行识别是比较吃亏的。因为CLIP模型训练是通过一句话或者一段话做为参数进行训练的。但是CLIP用了一个很巧妙的做法它用了一个模板话术来套用测试数据的标签比如A photo of a {object}object里面就是放测试数据的标签。CLIP模型内就有很多这样的文字模板直接把标签套进来就能形成一句话或者一段话。然后通过CLIP模型输入图片、标签CLIP模型把标签套到相应文字模板内形成一句话然后用这句话与图片进行相关度系数计算最后输出数值最高的标签/图片。过去的图像识别模型的Linear层都需要做修改的要提前告诉它有多少类别才能参加训练的。如果Linear层有200个类型它就要输出200个概率所以导致没有任何一个模型在换另外一个数据集之后类别数据会自动改变的。但是CLIP模型做到了它不需要修改Linear层的类别它是先把标签通过文字模板变成一句话然后拿图片与这句话对比相似度就可以了这也是CLIP模型的强大第一次打通了人类的文字与图片。这也对之后的文生图、文生视频做了很好的奠基并且对之后的多模态模型产生了非常大的影响之后的多模态模型也很好的借鉴了CLIP模型。CLIP模型的核心思想它要像人类一样学习我们人类小时候学东西都是语言与物体做对应进行学习。神经网络本来就是在尽可能的模拟人脑所以学习方式也要一样。ViLTVision-and-Language Transformer参考资料ViLT论文ViLT模型是基于CLIP模型与ViT模型理论演变而来。ViLT模型跟ViT模型差不多它是在ViT模型的基础上加上文字的组合。文字向量与图片向量通过1 0 * 分割符拼接到一起形成一个长向量这个长向量再给Transformer Encoder编码器最后输出一批数学向量通过这批数学向量可以识别这句话与图片是不是对应的或这句话说的是不是图片上的事情这句话的语义信息是不是在描述图片上的事情。

更多文章