多模态语言模型发展观察

本文最后更新于:2023年5月8日 晚上

多模态语言模型发展观察

这篇博客介绍的多模态语言模型指:通过视觉提示生成器将其他模态(图像)的数据转换为Prompt Embedding再提供给大型语言模型(LLM)从而构建出来的具备多模态对话能力的模型

本文对这些模型的基本方法和贡献进行简单介绍,将涉及以下模型:

BLIP-2

论文链接:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models (arxiv.org)

代码链接:LAVIS/projects/blip2 at main · salesforce/LAVIS (github.com)

Demo:官方HF Demo,但是已不可用非官方HF Demo

我之前写过一篇详细介绍BLIP-2的博客:论文笔记 BLIP-2 - Kamino’s Blog,这里再简单介绍一下。

BLIP2

BLIP-2的整体架构如上所示,使用Image Encoder(现在很多也叫作visual foundation model)提取图像特征,然后通过一个Query Transformer(Q-Former,现在也叫visual prompt generator)将特征降维并凝练,之后通过一个映射层,得到固定数量的visual prompt,再送LLM中。

BLIP-2的训练分为两个阶段,第一阶段进行视觉-语言表征学习,即利用Image Encoder和Q-Former进行语义对齐,使Q-Former能够提炼到关键的视觉特征。第二阶段进行视觉-语言生成学习,引入LLM,将提炼的特征作为visual prompt,进行LM生成任务。

在整个过程中,占参数量大头的Image Encoder和LLM都冻结参数不进行训练,从而使BLIP-2的学习效率上升。使用这种方法,可以在不训练LLM的情况下,将LLM打造成多模态LLM。

数据上,BLIP-2使用了来自COCO、VG、CC、SBU、LAION的129M的图像,使用BLIP的方式获得对应的文本。预训练模型的选择上,Image Encoder选择了ViT-L和EVA ViT-G,LLM选择了OPT和FlanT5的多个版本,整体参数从3.1B到12.1B。训练效率上,16张A100(40G)在第一阶段6天,第二阶段3天。

BLIP-2使语言模型初步获得了多模态的能力,为将来的发展探索出了一条高效率的道路,但是训练数据不包含对话,外部知识也不够全面,目前只能问一些简单的问题。

LLaVA🌋

论文链接:Visual Instruction Tuning (arxiv.org)

项目主页:LLaVA (llava-vl.github.io)

这篇文章主要贡献在于构建了一个多模态的instruction-following数据集和使用这个数据集训练出来的LLaVA模型。致力于对标GPT-4的性能。

这篇文章使用ChatGPT来帮助构建Visual Instruction Data,如下图所示,Response的类型包括对话、详细描述和复杂推理三类,使用众包收集人类标注的成本过于高昂,所以通过提供图像的Caption和Bounding Box标注,让ChatGPT来生成数据集。

具体的构建过程可以查看论文,他们总共收集了158K个样例,其中58K是对话、23K是详细描述、77K是复杂推理。

LLaVA数据

这篇文章以数据为重点,于是只设计了一个简单的模型如下图所示。其中,Xv\boldsymbol{X}_v是图像,Zv\boldsymbol{Z}_v是使用Visual Encoder(gg)得到的特征,特征经过一个简单的映射矩阵W\boldsymbol W得到visual promptHv\boldsymbol{H}_v,其与语言模型的Embedding维度相同。之后,添加Instruction送入LLM里面进行训练。

训练过程分为两个阶段,第一阶段为了特征对齐,冻结了Vision Encoder和LLM,就是为了学习一个好的Projection矩阵,使用了CC3M中的595K个图像文本对。第二阶段开始使用instruct的数据,训练映射层和LLM

LLaVA使用CLIP ViT-L/14作为视觉编码器,使用指令微调的Vicuna作为LLM。

在项目主页有Demo可以随意尝试例子,这里就放一个论文里的:

这篇文章在结尾放出了一些将来的工作:

  1. 数据量扩大。这种自动生成的数据集构建流程可以利用更多的数据集来构建Instruction数据。
  2. 连接更多视觉模型。比如连接SAM。

MiniGPT-4

论文链接:MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models (arxiv.org)

项目主页:Minigpt-4

这个比LLaVA更露骨地体现了要对标GPT-4的想法,和LLaVA差了三天发布。MiniGPT-4使用了BLIP-2的架构,引入了经过调优的Vicuna模型,并构建了一个规模较小但是质量非常高的数据集。同时,MiniGPT-4也注重了训练时间,在4张A100上训练10小时就够。

上图是MiniGPT-4的基本架构,和BLIP-2就是一样的。MiniGPT-4和LLaVA一样采用了两个阶段的训练,第一阶段也是通过图像文本对来训练一个好的映射层,这里使用了5M个图像文本对,训练了10个小时,是最耗时间的一步。第二阶段使用自建的高质量数据集,在单卡上就训练了7分钟就能达到很好的效果。

MiniGPT-4的数据收集方式比LLaVA简单,它在第一阶段训练结束后,使用

1
2
###Human: <Img><ImageFeature></Img> Describe this image in detail. Give as many details as
possible. Say everything you see. ###Assistant:

这个prompt让模型详细地描述约5000张图像,然后使用ChatGPT来修复生成中的语法错误并润色。之后,他们手动过了这5000个样本,从中选取了3500个样本并施以润色,保证了数据的高质量……

同样,MiniGPT-4给出了很多样例和在线的Demo,这里从论文摘一张图:

mPLUG-Owl🦉

论文链接:mPLUG-Owl: Modularization Empowers Large Language Models with Multimodality (arxiv.org)

论文代码:X-PLUG/mPLUG-Owl: mPLUG-Owl🦉: Modularization Empowers Large Language Models with Multimodality (github.com)

论文Demo:mPLUG-Owl Multimodal Chatbot · 创空间 (modelscope.cn)

国产多模态LLM,来自阿里达摩院,mPLUG系列模型使用模块化的训练,这个模型也使用了类似BLIP-2的架构,但没用他们自己的mPLUG-2,和其他工作不一样的是,他们还做了LLM的PEFT。除此以外,这篇文章还构建了一个Instruction Evaluation set,名为OwlEval。

模型的整体框架如上图所示,图像经过视觉编码器fVf_V之后得到patch级别的特征,然后通过一个视觉摘要器fKf_K得到降维特征,这里和BLIP-2的思想类似,但是论文里居然没有介绍清楚??

他们的mPLUG-2模型我也写过博客介绍,那篇论文的模型框架在文中就没有解释清楚,这篇论文的Visual Abstractor也只是在论文里给了个图,两篇论文的一作都相同,感觉赶工严重,有为了专门蹭上热度的嫌疑。

总之,得到视觉的prompt之后,和Instruction组合成输入,送到LLMfLf_L中让模型输出。

他们也是进行两个阶段的训练,第一阶段为多模态预训练,他们说提出了一种新颖的训练范式(但是……别人都已经用了,没怎么新颖啊……),学习fVf_VfKf_K,冻住fLf_L。第二阶段是指令微调,冻住所有原本的参数,在LLM上进行LoRA微调。他们说这也是一个新颖的视觉-语言联合指令微调策略。然后还说这种方式不需要视觉-语言模型的重新对齐(你都把视觉编码器和提示生成器一起训练了,那肯定不需要重新对齐了呀……)

mPLUG-Owl使用ViT-L/14作为视觉编码器,使用没有经过指令微调版本的LLaMA-7B来训练(用来证明模型的有效性和泛化性,同期的miniGPT-4和LLaVA都用了Vicuna),总参数量7.2B。

第一阶段的训练使用了LAION-400M、COYO-700M、CC、COCO,以2.1M token的batchsize训练(好像没见过以token计数的batchsize)。第二阶段的训练同时使用文本的指令数据和多模态的指令数据,文本的来自Alpaca、Vicuna和Baize,多模态的来自LLaVA。训练没有突出时长的。

对于实验结果,他们构建了OwlEval评价数据集,呃……其中包含50张图片、82个人工构建的问题,部分图片还有多轮的问题。问题包含了自然图像理解、表格、流程图、OCR、多模态创造、知识QA、 referential interaction QA。因为缺少较好的评价,所以使用了另一个论文Self-Instruct中使用的人工评估方法。

人工评价

同样,他们提供了Demo可以自己跑例子,这里给出比较有趣的多语言的例子:

**除了论文里说的,他们还进行了多图/视频数据的训练和多语言的训练,但是没有发布。**在5.5号他们在HuggingFace上的Demo已经可以支持视频输入了,但是实测效果不是特别好。

总的来说,作为国产的模型,开源做的还是很不错的,但是论文撰写和实际效果还是有点差,让人觉得像是在赶工,希望在沉淀之后这个模型能更好。

VPGTrans

论文链接:Transfer Visual Prompt Generator across LLMs (arxiv.org)

项目主页:VPGTrans

清华和新加坡国立大学的合作论文,这篇文章将现在的多模态LLM划分成了视觉提示生成器(Visual Prompt Generator,VPG)、Projector和LLM三部分,VPG用来提取视觉Prompt,Projector用来转换维度。这篇文章的主要贡献在于提出了有效的在多个LLM之间迁移VPG的方法,可以在更少训练数据和时间的情况下得到相当或更好的结果。同时,这篇文章的写作虽然有点花里胡哨,但是整体逻辑十分清晰,汇报了许多有趣的发现。

论文一开始总结了多模态LLM的预训练范式如下表:

论文主要研究如何在不同的模型中迁移VPG,他们使用了两阶段的迁移学习策略,接下来根据他们行文逻辑进行介绍。

作者首先通过实验发现使用其他模型训练好的VPG初始化可以加速训练。这个发现比较普通,因为有更好初始化参数肯定就学地更好。

然后,作者发现对projector进行warm up可以加速训练,这里warm up就是冻住除了projector以外所有参数先训练个3轮。但是warmup也是一个耗时很长的步骤,所以论文之后会使用更好的方法,这里先按下不表。

作者之后又发现,只调projector是不能得到很好的迁移效果的,毕竟参数量小。

由于视觉prompt其实就接近了word embedding,所以作者尝试学习一个简单的word embedding converter,通过余弦相似度作为损失,将LLMsrc每个词的embedding转化为LLMtgt。实际上,就是将一个模型的嵌入语义空间转换到另一个模型的嵌入语义空间,学习到这个转换的函数后,就可以将新的projector替换成旧的projector+converter,在数学上后者可以合并,所以就和原来的形式相同了。作者在实验这个方法后发现有效,但是又发现这个方式并不能取代warm up。

所以作者又探索有没有更快的warm up的方式,他们惊讶地发现使用5倍与原始值的大学习率来warm up projector可以得到快速的收敛。(原文说是Extremely large learning rate,但是……学习率不是按照10的倍数调吗?5倍好像也没有特别大吧)。

根据上面的实验经历,作者得出了正式的二阶段的VPG迁移方法:

  • 阶段一:Projector Warm-up
    • 继承VPG的参数
    • 使用Converter的方式进行projector的初始化。Converter的训练十分简单,以余弦距离为损失,最小化每个词在转化后与对应词的嵌入特征距离。最后ft(x)=fs(gw(x))=Ws(Wwx+bw)+bsf_t(x)=f_s(g_w(x))=W_s(W_wx+b_w)+b_s合并。
    • warm-up训练,使用5倍学习率训练1轮足以。
  • 阶段二:直接微调
    • 冻结LLM,直接对VPG和projector进行微调。

作者整体使用BLIP-2的框架,进行了大量的实验,包括从小模型迁移到大模型,从一种模型迁移到另一种模型,证明了这种方式的有效性,具体可以看原文。最后,他们使用这种方式,把BLIP-2与预训练的OPT6.7B迁移到了LLaMA7B上,得到了VL-LLaMA7B模型,相同的方法还构建了VL-Vicuna模型,并使用了MiniGPT-4的数据来微调。

总结

BLIP-2开创的这一套由LLM构建多模态LLM的训练范式十分有效,在将来这种范式可能会被更多的研究。目前进行多模态LLM的训练,数据上有LLaVA的大多模态指令数据集,也有MiniGPT-4的小人工多模态指令数据集,可以初步支持多模态LLM的训练。而且LLaVA使用的一套数据集构建流程还可以扩大到更多的数据,以取得更好的效果。训练上,VPGTrans提出了一套高效的迁移策略,mPLUG-Owl使用的更大范围的微调也能提升性能,进一步降低了研究的门槛。