本文目标是解释多模态LLMs的工作原理,虽然多模态的输入可以有音频,文本,图像和视频,但这里主要讨论的还是以图文为主的多模态大语言模型。
参考文章:https://magazine.sebastianraschka.com/p/understanding-multimodal-llms
作者:Sebastian Raschka - 畅销书《Python机器学习》作者)。
一、构建多模态LLMs的常见方法
构建多模态LLMs主要有两种方法:
- 方法A:统一嵌入解码器架构方法;
- 方法B:跨模态注意力架构方法。
如上图所示,统一嵌入-解码器架构利用单一的解码器模型,类似于未经修改的大型语言模型(LLM)架构,如GPT-2或Llama 3.2。在这种方法中,图像被转换成与原始文本令牌相同嵌入大小的令牌,这允许LLM在连接后一起处理文本和图像输入令牌。跨模态注意力架构采用跨注意力机制,直接在注意力层中集成图像和文本嵌入。在接下来的部分,我们将探讨这些方法在概念层面的工作原理。
二、方法A:统一嵌入解码器架构
在统一嵌入-解码器架构中,图像被转换成嵌入向量,类似于标准Text-only的大型语言模型(LLM)中输入文本被转换成嵌入的方式。
对于一个典型的仅处理文本的LLM,文本输入通常会被分词(例如,使用字节对编码Byte-Pair Encoding),然后通过一个嵌入层,如下图所示:
2.1 理解图像编码器
类似于文本的分词和嵌入,图像嵌入是使用图像编码器模块(而不是分词器)生成的,如下图所示:
上图中展示的图像编码器内部发生了什么?为了处理一张图像,我们首先将其划分成更小的块,这很像在标记化过程中将单词分解成子词。然后,这些块由预训练的视觉变换器(ViT)进行编码,如下图所示:
请注意,ViTs通常用于分类任务,因此在上面的图中包含了分类头。然而,在MLLM场景我们只需要图像编码器部分。
2.2 线性投影模块的作用
前图中所示的“线性投影”由一个线性层(即全连接层)组成。这一层的目的是将被展平为向量的图像块投影到与Transformer 编码器兼容的嵌入尺寸。下面的图示展示了这种线性投影。一个被展平为256维向量的图像块,被上投影到一个768维的向量。
2.3 图像与文本的标记化对比
现在我们已经简要讨论了图像编码器(以及编码器中线性投影部分)的目的,让我们回到之前提到的文本标记化类比,并将文本和图像的标记化及嵌入并排对比查看,如下图所示:
正如您在上图中看到的,图中图像编码器之后增加了一个Projector。这个投影器通常只是另一个线性投影层,目的是将图像编码器的输出投影到与嵌入文本标记的维度相匹配的维度,如下图所示。(这个投影器有时也被称为适配器或连接器):
现在图像块嵌入与文本标记嵌入具有相同的嵌入维度,我们可以简单地将它们连接起来作为输入到LLM,如本节开头的图所示。下面是同一图表,以便更容易参考:
顺便说一下,这里讨论的图像编码器通常是预训练的视觉变换器。一个流行的选择是CLIP或OpenCLIP。然而,也有直接在块上操作的A方法版本,比如Fuyu,下图展示了这一点:
正如上图所示,Fuyu直接将输入块传递到线性投影(或嵌入层)中,以学习自己的图像块嵌入,而不是依赖于其他模型和方法所使用的额外预训练图像编码器。这极大地简化了架构和训练设置。
三、方法B:跨模态注意力架构
我们已经讨论了通过统一嵌入解码器架构来构建多模态LLMs的方法,并理解了图像编码背后的基本概念,现在让我们来谈谈通过跨注意力实现多模态LLMs的另一种方式,如下图总结所示:
在上图所示的跨模态注意力架构方法中,我们仍然使用之前讨论过的相同的图像编码器设置。然而,我们不是将编码后的块作为输入到LLM,而是通过跨注意力机制在多头注意力层中连接输入块。这个想法与2017年的论文《Attention Is All You Need》中提出的原始Transformer架构相关,下图中对此进行了强调:
请注意,上图中展示的原始Transformer最初是为语言翻译而开发的。因此,它包括一个文本编码器(图的左半部分),它接收要翻译的句子,并通过文本解码器(图的右半部分)生成翻译。在多模态LLM的上下文中,编码器是图像编码器而不是文本编码器。
跨注意力是如何工作的?让我们来看一下常规自注意力机制内部发生的事情的概念图。
在上面的图中,x是输入,Wq是用于生成查询(Q)的权重矩阵。同样,K代表键(keys),V代表值(values)。A代表注意力分数矩阵,Z是输入(x)转换成的输出上下文向量。
相比之下,在交叉注意力中,与自注意力不同,我们有两个不同的输入源,如下图所示:
正如前面两个图示所示,在自注意力中,我们处理的是同一个输入序列。在交叉注意力中,我们混合或结合两个不同的输入序列。
在“Attention Is All You Need”论文中原始Transformer架构的情况下,两个输入x1和x2分别对应于左侧编码器模块返回的序列(x2)和右侧解码器部分正在处理的输入序列(x1)。在多模态LLM的上下文中,x2是图像编码器的输出。(注意,查询通常来自解码器,而键和值通常来自编码器。)
请注意,在交叉注意力中,两个输入序列x1和x2可以有不同的元素数量。然而,它们的嵌入维度必须匹配。如果我们设置x1 = x2,这相当于自注意力。
四、统一解码器和交叉注意力模型训练
现在我们已经讨论了两种主要的多模态设计选择,让我们简要讨论一下在模型训练期间如何处理三大组成部分,这些在下图中进行了总结。
类似于传统纯文本LLMs(大型语言模型)的发展,多模态LLMs的训练也涉及两个阶段:预训练和指令微调。然而,与从头开始不同,多模态LLM训练通常以预训练的、经过指令微调的纯文本LLM作为基础模型开始。
对于图像编码器,通常使用CLIP(最近也比较流行SigLIP或者InterViT),并且在整个训练过程中通常保持不变,尽管也有一些例外情况。在预训练阶段保持LLM部分冻结也是常见的做法,只专注于训练投影器——一个线性层或一个小的多层感知器。鉴于投影器的学习容量有限,通常只包含一到两层,因此在多模态指令微调(第二阶段)期间通常解冻LLM,以允许更全面的更新。然而,请注意,在基于交叉注意力的模型(方法B)中,交叉注意力层在整个训练过程中都是解冻的。
在介绍了两种主要方法(方法A:统一嵌入解码器架构和方法B:跨模态注意力架构)之后,你可能会想知道哪种更有效。答案取决于具体的权衡。
统一嵌入解码器架构(方法A)通常更容易实现,因为它不需要对LLM架构本身进行任何修改。
跨模态注意力架构(方法B)通常被认为在计算上更高效,因为它不会用额外的图像标记超载输入上下文,而是在交叉注意力层中稍后引入它们。此外,如果保持LLM参数在训练期间冻结,这种方法还保持了原始LLM的纯文本性能。
英伟达的论文NVLM中讨论了两种结构的适用范围,得出的结论是:decoder-only(即方法A)的架构会优于Flamingo-like的cross attention(即方法B)架构,尤其是在OCR&Chart类型数据上,对于text-only generation也是更好的。而方法B这种结构会额外增加很多参数量,不看好这种方法的发展潜力,所以基于方法A的工作明显更多一些。
推荐阅读
社区简介:
《AIGCmagic星球》,五大AIGC方向正式上线!让我们在AIGC时代携手同行!限量活动中!
《三年面试五年模拟》版本更新白皮书,迎接AIGC时代
AI多模态核心架构五部曲:
AI多模态模型架构之模态编码器:图像编码、音频编码、视频编码
AI多模态模型架构之输入投影器:LP、MLP和Cross-Attention
AI多模态模型架构之LLM主干(1):ChatGLM系列
AI多模态模型架构之LLM主干(2):Qwen系列
AI多模态模型架构之LLM主干(3):Llama系列
AI多模态模型架构之输出映射器:Output Projector
AI多模态模型架构之模态生成器:Modality Generator
AI多模态实战教程:
AI多模态教程:从0到1搭建VisualGLM图文大模型案例
AI多模态教程:Mini-InternVL1.5多模态大模型实践指南
AI多模态教程:Qwen-VL升级版多模态大模型实践指南
AI多模态实战教程:面壁智能MiniCPM-V多模态大模型问答交互、llama.cpp模型量化和推理