AI多模态技术介绍:理解多模态大语言模型的原理

embedded/2024/12/28 0:03:45/

本文目标是解释多模态LLMs的工作原理,虽然多模态的输入可以有音频,文本,图像和视频,但这里主要讨论的还是以图文为主的多模态大语言模型

参考文章:https://magazine.sebastianraschka.com/p/understanding-multimodal-llms

作者:Sebastian Raschka - 畅销书《Python机器学习》作者)。

一个多模态大型语言模型(LLM)的示意图,该模型能够接受不同的输入模态(音频、文本、图像和视频),并以文本作为输出模态返回。

一、构建多模态LLMs的常见方法

构建多模态LLMs主要有两种方法:

  • 方法A:统一嵌入解码器架构方法;
  • 方法B:跨模态注意力架构方法。
开发MLLM的两种方法

如上图所示,统一嵌入-解码器架构利用单一的解码器模型,类似于未经修改的大型语言模型(LLM)架构,如GPT-2或Llama 3.2。在这种方法中,图像被转换成与原始文本令牌相同嵌入大小的令牌,这允许LLM在连接后一起处理文本和图像输入令牌。跨模态注意力架构采用跨注意力机制,直接在注意力层中集成图像和文本嵌入。在接下来的部分,我们将探讨这些方法在概念层面的工作原理。


二、方法A:统一嵌入解码器架构

统一嵌入解码器架构的示意图,展示了一个未经修改的解码器风格的大型语言模型(LLM),如GPT-2、Phi-3、Gemma或Llama 3.2,它接收由图像令牌和文本令牌嵌入组成的输入

在统一嵌入-解码器架构中,图像被转换成嵌入向量,类似于标准Text-only的大型语言模型(LLM)中输入文本被转换成嵌入的方式。

对于一个典型的仅处理文本的LLM,文本输入通常会被分词(例如,使用字节对编码Byte-Pair Encoding),然后通过一个嵌入层,如下图所示:


 2.1 理解图像编码器

类似于文本的分词和嵌入,图像嵌入是使用图像编码器模块(而不是分词器)生成的,如下图所示:

编码图像到图像块嵌入的过程的示意图

 上图中展示的图像编码器内部发生了什么?为了处理一张图像,我们首先将其划分成更小的块,这很像在标记化过程中将单词分解成子词。然后,这些块由预训练的视觉变换器(ViT)进行编码,如下图所示:

经典视觉变换器(ViT)设置的示意图,类似于2020年提出的“An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale”

请注意,ViTs通常用于分类任务,因此在上面的图中包含了分类头。然而,在MLLM场景我们只需要图像编码器部分。


2.2 线性投影模块的作用

前图中所示的“线性投影”由一个线性层(即全连接层)组成。这一层的目的是将被展平为向量的图像块投影到与Transformer 编码器兼容的嵌入尺寸。下面的图示展示了这种线性投影。一个被展平为256维向量的图像块,被上投影到一个768维的向量。

线性投影层的图示,该层将展平的图像块从256维投影到768维的嵌入空间

 


2.3 图像与文本的标记化对比

现在我们已经简要讨论了图像编码器(以及编码器中线性投影部分)的目的,让我们回到之前提到的文本标记化类比,并将文本和图像的标记化及嵌入并排对比查看,如下图所示:

图像标记化和嵌入(左)与文本标记化和嵌入(右)并排对比

正如您在上图中看到的,图中图像编码器之后增加了一个Projector。这个投影器通常只是另一个线性投影层,目的是将图像编码器的输出投影到与嵌入文本标记的维度相匹配的维度,如下图所示。(这个投影器有时也被称为适配器或连接器):

图像标记化与文本标记化的另一次并排比较,其中投影器的作用是匹配文本标记嵌入的维度

 现在图像块嵌入与文本标记嵌入具有相同的嵌入维度,我们可以简单地将它们连接起来作为输入到LLM,如本节开头的图所示。下面是同一图表,以便更容易参考:

将图像块标记投影到与文本标记嵌入相同的维度后,我们可以简单地将它们连接起来,作为输入到标准LLM

顺便说一下,这里讨论的图像编码器通常是预训练的视觉变换器。一个流行的选择是CLIP或OpenCLIP。然而,也有直接在块上操作的A方法版本,比如Fuyu,下图展示了这一点:

带有注释的Fuyu多模态LLM图示,该模型直接在图像块上操作,无需图像编码器。(带注释的图示来自 https://www.adept.ai/blog/fuyu-8b.)

正如上图所示,Fuyu直接将输入块传递到线性投影(或嵌入层)中,以学习自己的图像块嵌入,而不是依赖于其他模型和方法所使用的额外预训练图像编码器。这极大地简化了架构和训练设置。


三、方法B:跨模态注意力架构

我们已经讨论了通过统一嵌入解码器架构来构建多模态LLMs的方法,并理解了图像编码背后的基本概念,现在让我们来谈谈通过跨注意力实现多模态LLMs的另一种方式,如下图总结所示:

构建多模态LLMs的跨模态注意力架构方法的图示

在上图所示的跨模态注意力架构方法中,我们仍然使用之前讨论过的相同的图像编码器设置。然而,我们不是将编码后的块作为输入到LLM,而是通过跨注意力机制在多头注意力层中连接输入块。这个想法与2017年的论文《Attention Is All You Need》中提出的原始Transformer架构相关,下图中对此进行了强调:

原始Transformer架构中使用的交叉注意力机制的高级图示。(带注释的图示来自“Attention Is All You Need”论文:https://arxiv.org/abs/1706.03762.)

 请注意,上图中展示的原始Transformer最初是为语言翻译而开发的。因此,它包括一个文本编码器(图的左半部分),它接收要翻译的句子,并通过文本解码器(图的右半部分)生成翻译。在多模态LLM的上下文中,编码器是图像编码器而不是文本编码器。

跨注意力是如何工作的?让我们来看一下常规自注意力机制内部发生的事情的概念图。

常规自注意力机制的概述。(这个流程图展示了常规多头注意力模块中的一个头)

在上面的图中,x是输入,Wq是用于生成查询(Q)的权重矩阵。同样,K代表键(keys),V代表值(values)。A代表注意力分数矩阵,Z是输入(x)转换成的输出上下文向量。

相比之下,在交叉注意力中,与自注意力不同,我们有两个不同的输入源,如下图所示:

交叉注意力的图示,其中可以有两个不同的输入x1和x2

正如前面两个图示所示,在自注意力中,我们处理的是同一个输入序列。在交叉注意力中,我们混合或结合两个不同的输入序列。

在“Attention Is All You Need”论文中原始Transformer架构的情况下,两个输入x1和x2分别对应于左侧编码器模块返回的序列(x2)和右侧解码器部分正在处理的输入序列(x1)。在多模态LLM的上下文中,x2是图像编码器的输出。(注意,查询通常来自解码器,而键和值通常来自编码器。)

请注意,在交叉注意力中,两个输入序列x1和x2可以有不同的元素数量。然而,它们的嵌入维度必须匹配。如果我们设置x1 = x2,这相当于自注意力。


四、统一解码器和交叉注意力模型训练

现在我们已经讨论了两种主要的多模态设计选择,让我们简要讨论一下在模型训练期间如何处理三大组成部分,这些在下图中进行了总结。

多模态大型语言模型(LLM)中不同组件的概览。在多模态训练过程中,编号为1-3的组件可以被冻结或解除冻结

类似于传统纯文本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模型量化和推理


http://www.ppmy.cn/embedded/149303.html

相关文章

使用linux 命令上传文件到百度网盘

使用linux 命令上传文件到百度网盘 文章目录 使用linux 命令上传文件到百度网盘说明一,准备工作二,下载文件三, 上传文件四,查看百度网盘bypy下的内容五,退出登陆 说明 在我们日常部署的时候需要将linux上的安装包上传…

Ubuntu20.04安装搜狗输入法

Ubuntu20.04安装搜狗输入法 文章目录 Ubuntu20.04安装搜狗输入法1. 下载linux版本的安装包2. 设置fcitx3. 安装输入法Reference 1. 下载linux版本的安装包 进入搜狗官网:https://shurufa.sogou.com/linux 选择x86_64版本的安装包进行下载 2. 设置fcitx 首先安装f…

讯飞语音听写WebApi(流式)【React Native版】

假设已有 Base64 编码的音频文件(16kHz, s16le, pcm) 1、获取websocket url import * as CryptoJS from crypto-js;/*** 获取websocket url*/ const getWebSocketUrl () > {const config {// 请求地址hostUrl: "wss://iat-api.xfyun.cn/v2/iat",host: "i…

springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic

摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…

Move AI技术浅析(五):动作识别与分类

一、动作识别与分类模块概述 动作识别与分类 的主要任务是从提取到的运动特征中,识别出具体的动作类型,并对动作进行分类。该模块包括 动作识别 和 动作分类 。 动作识别:从运动特征中识别出具体的动作类型,如走路、跑步、跳跃等…

vue2前端导出pdf文件

目录 1、安装依赖 ?2、demo 2.1 demo1导出效果 2.2?demo2导出效果 2.3?demo3导出效果 3、源码? 3.1 demo1 3.2 demo2 3.3 demo2 1、安装依赖 导出PDF通常涉及将HTML内容转换为图片(截图),然后将这些图片插入到PDF文档中。这个过…

.NET重点

B/S C/S B/S: 浏览器端:JavaScript,HTML,CSS 服务器端:ASP(.NET)PHP/JSP 优势:维护方便,易于升级和扩展 劣势:服务器负担沉重 C/S java/.NET/VC系列 …

c#多线程之生产者-消费者模型

在 C# 中实现 生产者-消费者模式&#xff0c;通常需要多个线程来处理数据的生产和消费。我们可以使用 Queue<T> 来作为存储数据的队列&#xff0c;并使用 Thread、Mutex 或 Monitor 来确保线程安全。BlockingCollection<T> 是 C# 提供的一个线程安全的集合&#xf…