人类通过视觉、语言等多种表征媒介(模态)与世界互动,每种模态都可能在某个方面的表达和交流上有它自己的优势,融合在一起帮助我们更系统、更完整地理解这个世界。随着技术的发展,大预言模型基本实现独立自然的表达,视觉编码表征能力也逐渐增强,自然而然,我们就会想要把两方面的能力结合在一起,用一个大一统的模型完成语言+视觉的综合理解&表达,这也更靠近大家所理解的AGI-通用人工智能。
视觉+语言的多模态大模型目前主流方法是:借助预训练好的大语言模型和图像编码器,用一个图文特征对齐模块来连接,从而让语言模型理解图像特征并进行更深层的问答推理。这样可以利用已有的大量单模态训练数据训练得到的单模态模型,减少对于高质量图文对数据的依赖,并通过特征对齐、指令微调等方式打通两个模态的表征。
对此,强烈推荐读者完整阅读多模态大模型综述 MM-LLMs: Recent Advances in MultiModal Large Language Models 。将会帮助大家快速建立对多模态大模型领域的整体把握。
接下来我们将对以下几个工作进行介绍:
CLIP (Contrastive Language-Image Pre-training)
基本思想
CLIP的基本算法原理是文本和图像在特征域进行对齐。
模型结构
- 为了对image和text建立联系,首先分别对image和text进行特征提取,image特征提取的backbone可以是resnet系列模型也可以是VIT系列模型;text特征提取目前一般采用bert模型。
- 特征提取之后,由于做了normalize,直接相乘来计算余弦距离,同一pair对的结果趋近于1,不同pair对的结果趋近于0,因为就可以采用对比损失loss(info-nce-loss)【这里要比较大的batch size才能有效果,类似于维护一个大的特征相似度矩阵】
- 利用clip进行图像分类有两种方式,一种是直接利用zero-shot 方式进行预测,如下图所示,将text假设为 a photo of [object], 分别对image 和 text进行特征提取以及余弦距离,当object为目标类别时,相似度最高,即为预测结果(效果好);还有一种方式就是再重新finetune,同样也是对类别设计几种不同的文本,这样效果能够达到sota的水平!
训练损失函数
参考对比学习损失,采用了info-nce-loss。
Info-NCE:是NCE的一个简单变体,把噪声样本从一个类别又划分为多个类看待。公式中的temp是一个温度超参数(标量),如果忽略temp,那么infoNCE loss其实就是cross entropy loss,只是在cross entropy loss里,k指代的是数据集里类别的数量,而InfoNCE loss里,k指的是负样本的数量。公式分母中的sum是在1个正样本和k个负样本上做的,做的是一个k+1类的分类任务,目的就是想把query这个图片分到k+这个类。
细节
CLIP用了大量的训练数据以及训练资源,大力出奇迹。CLIP用了400 million的image-text pair对进行训练,对于image backbone,CLIP尝试了两种结构,DN50x64 和 vit-L,分别用了592 个 V100 + 18天 的时间 和 256 个 V100 + 12天 的时间,非大公司直接劝退。
BLIP(Bootstraping language image pre-training)
基本思想
兼顾图文理解和生成的多模态模型(Multimodal mixture of Encoder-Decoder),同时在三个视觉语言目标上联合预训练:图像文本对比学习ITC、图像文本匹配ITM、图像条件语言建模LM;同时提出了一种高效利用网络收集的嘈杂图文对的采样+过滤机制。
模型结构
- 图像块的编码(ViT):图像打成patches块后进行编码,增加cls token来记录全局的特征(作用类似位置编码,保留patches的空间特征)
- 文本的编码(BERT):对句子进行编码,增加cls token记录句子的全局特征
Image-grounded text encoder:在文本embedding中注入了图像特征,通过在self-attention和FFN中间增加一层cross-attention来对齐text-encoder和img-encoder的特征。 - Image-grounded text decoder:用causal self-attention层(预测下一个token)代替了双向自注意力层(建立当前输入token的表达)【和左边的encoder共享除了self-attention之外的层】
训练损失函数
预训练阶段同时优化3个loss项,每个图文对只过1次vision-transormer(算力消耗较大),过3次text-transormer
Image-Text Contrastive Loss (ITC)理解功能:优化vision-transormer+text-transormer,让匹配的图文对有较高相似度的表达(用了soft labels),多模态中的经典loss->使其互信息最大化;
Image-Text Matching Loss (ITM)理解功能 :优化Image-grounded text encoder,学习图文的细粒度匹配的二分类,采用了hard negative mining strategy;
Language Modeling Loss (LM)生成功能:优化image-grounded text decoder,学习如何从给定图生成连贯的文本描述,采用交叉熵代价函数以自回归方式最大化对应文本概率。
Captioning and Filtering
一种高效的数据集增强方法,从网页噪声图像文本对中学习,采样生成器+噪声过滤器,都是从相同的预训练模型初始化,并在小型人工注释数据集(COCO)上单独进行微调。
- 采样生成器captioner:基于图像的文本解码器(生成),用LM的loss进行微调
- 噪声过滤器filter:基于图像的文本编码器(判别),用ITC+ITM进行微调,判断图文是否匹配
效果
从用人工标注的图文对得到的预训练模型开始初始化,captioner生成合成文本,filter过滤合成文本和网页描述文本,得到过滤后的相对干净的网页文本和合成文本->用来训练BLIP,往复进行。
数据集
图像编码器使用 ImageNet-1K 上预训练的 ViT 初始化,文本编码器以 BERT-Base 初始化,按照Vit-B 2880/ Vit-L 2400的batch-size训练 20 Epochs,预训练阶段图像尺寸224*224,微调阶段尺寸384*384.
用了以下3部分数据集预训练,加起来大概是 14M:
- COCO
- Visual Genome
- 网络数据:Conceptual Captions,Conceptual 12M(噪声较大),SBU
Captions
还尝试了一个额外的噪声文本较多的web 数据集 LAION(115M 图像)
BLIP2
基本思想
如标题所言 Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models,分两个阶段,通过利用预训练好的视觉模型和语言模型来提升多模态效果和降低训练成本。
模型结构
BLIP-2 由预训练的Image Encoder,预训练的Large Language Model,和一个可学习的 Q-Former 组成。
- Image Encoder:从输入图片中提取视觉特征,尝试了两种网络结构,CLIP 训练的 ViT-L/14和EVA-CLIP训练的 ViT-g/14(去掉了最后一层)。
- Large Language Model:大语言模型进行文本生成,尝试了接入decoder-based LLM 和 encoder-decoder-based LLM两种结构。
- Q-Former:弥补视觉和语言两种模态的modality gap,可以理解为固定图像编码器和固定LLM之间的信息枢纽,选取最有用的视觉特征给LLM来生成文本。
Q-Former
Q-Former由Image Transformer和Text Transformer两个子模块构成,它们共享相同自注意力层。
Image Transformer:通过和image encoder交互来提取视觉特征,输入是一系列(文中用的32个768长度)可学习的 Queries,这些Query通过自注意力层相互交互,并通过交叉注意力层与冻结的图像特征交互,还可以通过共享的自注意力层与文本进行交互;输出的query尺寸是32*768,远小于冻结的图像特征257*1024(ViT-L/14)。
Text Transformer:既作为文本编码器也作为文本解码器,它的自注意力层与Image Transformer共享,根据预训练任务,用不同的self-attention masks来控制Query和文本的交互方式。
训练过程
为了减少计算成本并避免灾难性遗忘,BLIP-2 在预训练时冻结预训练图像模型和语言模型,由于简单地冻结预训练模型参数会导致视觉特征和文本特征难以对齐,为此BLIP-2提出两阶段预训练 Q-Former 来弥补modality gap:表示学习阶段和生成学习阶段。
表示学习阶段
第一个预训练阶段,vision-language表示学习,将 Q-Former 连接到冻结的图像编码器image encoder,目标是Q-Former学习与文本最相关的视觉表示。和BLIP类似,通过联合优化 ITC + ITG + ITM 三个预训练loss,并在Query和Text之间采用不同的注意力掩码策略,从而控制Image Transformer和Text Transformer的交互方式。
- ITC (Image-Text Contrastive Learning):优化目标是对齐图像特征和文本特征,也就是对齐image transformer输出的query representation与来自text transformer输出的text representation。为了避免信息泄漏,ITC采用了单模态自注意掩码,不允许query和text看到对方。计算时先计算每个query与文本embedding之间的相似度,然后选择最高的作为图文相似度。
- ITG (Image-grounded Text Generation):优化目标是给定输入图像作为条件,训练 Q-Former 生成文本,迫使query提取包含所有文本信息的视觉特征。由于 Q-Former 的架构不允许冻结的图像编码器和文本标记之间的直接交互,因此生成文本所需的信息必须首先由query提取,然后通过自注意力层传给text token。ITG采用多模态causal attention mask来控制query和text的交互,query可以相互感知,但不能看见text token,每个text token都可以感知所有query及其前面的text标记【半矩阵,生成式任务的常见做法】。这里将 [CLS] 标记替换为新的 [DEC] 标记,作为第一个文本标记来指示解码任务。
- ITM (Image-Text Matching):优化目标是进行图像和文本表示之间的细粒度对齐,学一个二分类任务,即图像-文本对是正匹配还是负匹配。这里将image transformer输出的每个query嵌入输入到一个二类线性分类器中以获得对应的logit,然后将所有的logit平均,再计算匹配分数。ITM使用双向自注意掩码,所有query和text都可以相互感知。
生成学习阶段
第二个预训练阶段,vision-to-language生成学习,将 Q-Former 连接到冻结的大语言模型LLM,将 Q-Former 的输出给到冻结的 LLM 来执行视觉到语言的生成学习,目标是训练Q-Former使其输出的视觉表示对LLM可用。
- 使用全连接层将输出的query embedding线性投影到与 LLM 的text embedding相同的维度,然后将投影的query embedding添加到输入text embedding前面。由于 Q-Former 已经过预训练,可以提取包含语言信息的视觉表示,因此它可以有效地充当信息枢纽,将最有用的信息提供给 LLM,同时删除不相关的视觉信息,减轻了 LLM 学习视觉语言对齐的负担【相当于soft visual prompts】。
- 尝试了decoder-based LLM 和 encoder-decoder-based LLM:对于decoder-based LLM,基于language modeling loss进行预训练,用Q-Former提取的视觉表示生成文本描述;对于encoder-decoder-based LLM,基于prefix language modeling loss进行预训练,把前缀和视觉表示一起输入LLM encoder,由LLM decoder生成后续文本。
VQA任务微调结构
把问题和Q-Former提取的视觉表示一起输入LLM从而得到答案,不过还多了一个把问题也加入了Q-Former的输入,使提取的图像特征和问题更相关。这种方式也用在了他们的下一篇文章InstructBLIP中,用于注入指令进行微调。
数据集
预训练数据集:
- 沿用BLIP的数据集,加起来总共129M:COCO, Visual Genome, Conceptual Captions 3M+12M, SBU Captions, 额外的 web 数据集 LAION400M 的一部分,该数据集包含 115M 图像,具有更多的噪声文本;
- 采用了 BLIP 里面提出的 CapFilt 方法从网络图像合成文本描述(选top2)。
预训练好的Image Encoder和 LLM:
视觉模型:CLIP训练的 ViT-L/14;EVA-CLIP训练的 ViT-g/14
LLM :基于解码器的LLM-OPT;基于编解码器的LLM-FlanT5
训练设定
第一阶段预训练250k步,第二阶段预训练80k步,图像输入尺寸224*224,更多细节看原文。
效果展示
可做到视觉知识推理、视觉常识推理、视觉对话、个性化图像到文本生成等,只需在视觉提示之后附加文本提示作为 LLM 的输入。
不足
上下文学习能力缺失:由于预训练数据集中的每个数据只包含一个图文对,LLM无法学习单个序列中多个图文对的相关性。
冻结参数的 LLM 的风险:比如输出攻击性语言,传播社会偏见,解决办法是指令微调,或者过滤掉有害的数据集。
LLaVA(Large Language and Vision Assistant)
基本思想
使用仅限语言的GPT-4生成多模态语言图像指令跟随数据,提出一种连接视觉编码器和LLM的端到端训练多模态大模型。
模型结构
使用视觉编码器CLIP ViT-L/14+语言解码器LLaMA构成多模态大模型,然后使用生成的数据进行指令微调。输入图片X经过与训练好的视觉编码器的到图片特征Z,图片特征Z经过一个映射矩阵W转化为视觉Token H,这样Vison Token H_v与Language Token H_q指令就都在同一个特征空间,拼接后一起输入大模型。这里的映射层W也可以替换为更复杂的网络来提升性能,比如Flamingo中用的gated cross-attention,BLIP-2中用的Q-former。
训练
使用如下图的方式组织每一轮的对话输入输出,训练模型预测助手的答案以及在哪里停止,因此仅使用绿色序列和标记来计算自回归模型中的损失,即根据所有前轮的指令和回答来预测当前目标回答X_a,也就是经典的next token prediction。
文中使用了两阶段的训练方式:
- 预训练特征对齐模块(映射层W),冻结视觉编码器和LLM,只训练映射矩阵W得到上面公式的最大似然,相当于为冻结的 LLM 训练一个适配的visual tokenizer。
- 端到端的微调语言模型+映射层。
数据
使用ChatGPT/GPT-4将数据转化为多模态指令跟随数据(multimodel instrustion-following data)。具体来说,为了将输入图像编码为视觉特征来作为纯文本 GPT的(soft) promt,文中用了两种类型的表达:
- caption描述:从不同角度描述视觉场景;
- bbox检测框:定位场景中的对象,每个框对对象概念及其空间位置进行编码。
通过这两类复合表示,将视觉内容传达给了语言大模型,然后人工设计了3种对话方式,利用GPT-4进行生成和扩充,分别是对话、细节描述和复杂推理。最后总共收集了158K独特的语言图像指令跟随样本,包括58K对话数据、23K详细描述数据、77K复杂推理数据。
MiniGPT-4
基本思想
GPT-4 具有先进的多模态生成能力的主要原因在于利用了更先进的大型语言模型(LLM),因此提出仅用一个投影层将一个冻结的视觉编码器和一个冻结的 LLM(Vicuna)对齐。
模型结构
类似BLIP2,包括一个冻结的视觉编码器(ViT-G/14 + Q-Former), 一个冻结的 LLM(Vicuna), 一个投影层。
两阶段训练
第一阶段在大量对齐的图像文本对上对模型进行预训练,以获取基础的视觉语言知识。 在第二阶段,使用规模较小但更高质量的图文对数据集和精心设计的对话模板对预训练模型进行微调,以增强模型的生成可靠性和可用性。关于loss设计论文没有讲太细,看代码里面应该主要是计算language modeling loss。
InstructBLIP(Instruction Tuning)
基本思想
基于 BLIP-2 提出指令微调的范式,借助额外的 instruction 提取更有用的视觉特征。
模型结构
InstructBLIP 的架构和 BLIP-2 相似,从预训练好的 BLIP-2 模型初始化,由图像编码器、LLM 和 Q-Former 组成。为了进行指令微调,在BLIP-2的基础上把 instruction text tokens也作为输入同时给到Q-former和LLM。其中可学习的K个queries 通过Q-former中共享的 self-attention 和输入指令交互,通过 cross-attention 和输入图片的特征交互,鼓励提取与任务相关的图像特征。
训练
和BLIP-2一致,分两个阶段
第一个vision-language表示学习阶段,将 Q-Former 连接到冻结的图像编码器image encoder,目标是Q-Former学习与文本最相关的视觉表示。
第二个vision-to-language生成学习阶段,将 Q-Former 连接到冻结的大语言模型LLM,将 Q-Former 的输出给到冻结的 LLM 来执行视觉到语言的生成学习,目标是训练Q-Former使其输出的视觉表示对LLM可用。
推理
分两种情况,对于大部分描述性任务,如 image captioning,open-ended VQA 等,InstructBLIP 可以直接使用 LLM 生成的文本作为输出;对于选择性任务,如 classification 和 multi-choice VQA ,参考vocabulary ranking method,将LLM生成的内容词汇限制为候选列表进行排序,计算每个候选的对数似然,选择最高值的一个作为最终预测。
数据集
作者将11类任务的26个数据集转化成指令微调的格式,把它们分成13个 held-in 数据集用于指令微调,和13个 held-out 数据集用于 Zero-Shot 能力的评估。held-out分两种,一种是这些数据在训练期间没被模型见过,但是同类型的任务中学过,另一种是在训练和同类型的任务都不涉及(比如下图中全为白框的4个任务)。
采样策略
在训练期间,所有的 held-in 数据集的训练集混合,总数量太大且每个数据集的规模存在显着差异,均匀混合会导致模型过拟合较小的数据集,欠拟合较大的数据集。因此,文中提出根据数据集的大小的平方根或者其他正相关比例进行采样。更多训练细节见原文。
指令模板
对于每个任务,人工制作了10-15个高质量的自然语言指令模板。对于一些偏爱简洁响应的数据集,在 instruction 中增加了 “short”, “briefly” 来减小模型过拟合的风险,防止模型始终生成很短的输出。
未来发展
-
更通用和智能的模型
扩展模态:当前的MM-LLMs主要支持图像、视频、音频、3D和文本等模态。但现实世界涉及更广泛的模态,例如网页、热图、图表和表格。扩展MM-LLMs以适应这些额外的模态将增加模型的通用性和适用性。
多样化LLMs:整合各种类型和大小的LLMs,使实践者能够根据具体需求选择最合适的模型。
提高数据集质量:当前的多模态指令数据集(MM IT)有很大的改进和扩展空间。丰富指令的多样性可以增强MM-LLMs理解和执行用户命令的效果。
增强生成能力:大多数当前的MM-LLMs主要侧重于理解多模态数据。尽管有些模型已经包含了生成能力,但生成响应的质量可能受到潜在生成模型(LDMs)能力的限制。探索基于检索的方法来补充生成过程,有望显著提升模型的整体表现。 -
更具挑战性的基准
现有的基准可能无法充分挑战MM-LLMs的能力,因为许多数据集在训练过程中可能已被模型学习。为此,需要构建更具挑战性的大规模基准,涵盖额外的模态并采用统一的评估标准。例如,GOAT-Bench设计用于评估MM-LLMs在识别和响应社交滥用方面的能力,MM-Code评估算法问题解决能力,MathVista评估数学推理能力等。 -
轻量级部署
在资源受限的平台(如低功耗移动设备和物联网设备)上部署MM-LLMs时,需要轻量级实现。例如,MobileVLM通过缩小LLaMA模型,允许无缝部署,并引入了轻量级的降采样投影器,提升计算速度。还有其他类似研究在实现高效计算和推理的同时,保持或仅略微降低性能。 -
具身智能
具身智能旨在通过理解环境、识别相关对象、评估空间关系以及制定全面的任务计划来复制人类的感知和互动能力。PaLM-E和EmbodiedGPT是该领域的典型工作,展示了多模态大语言模型在具身智能中的应用和潜力。 -
持续学习
由于MM-LLMs的巨大规模,频繁的重新训练代价高昂。但为了赋予模型新技能并保持其与快速发展的知识同步,持续学习是必要的。持续学习可以分为持续预训练和持续指令调优两个阶段,挑战在于避免遗忘旧知识和负向转移效应。 -
减轻幻觉
幻觉是指生成不存在的对象描述。当前的方法包括利用自我反馈作为视觉线索,但仍需改进训练方法以提高输出的可靠性。 -
偏见和伦理考虑:
MM-LLMs生成的信息可能延续刻板印象并对脆弱人群造成伤害。为此,可以开发新基准来评估模型的偏见,并设计更有效的对齐方法,如使用强化学习通过人类反馈(RLHF)来校准模型输出,使其符合人类价值和期望。
参考文献
本博客总结归纳了许多以下博客的内容,如果想对多模态大模型有进一步的了解,可以进一步关注以下高质量的博文,同时也感谢以下博主对知识的共享!
多模态大模型 CLIP, BLIP, BLIP2, LLaVA, miniGPT4, InstructBLIP 系列解读
多模态超详细解读 -极市平台
MM-LLMs: Recent Advances in MultiModal Large Language Models