多模态与大型多模态模型(LMMs)
长期以来,每个机器学习模型只处理单一模态的数据——比如文本(翻译、语言建模)、图像(目标检测、图像分类)或音频(语音识别)。
然而,自然智能并不局限于单一模态。人能读、会说、能看。我们听音乐放松,也会留意异常声响来察觉危险。无论是人类还是 AI,要在真实世界中运作,处理多模态数据的能力都不可或缺。
OpenAI 在其 GPT-4V 系统报告中提到:"将图像输入等其他模态整合进 LLM,被许多人视为 AI 研究与开发的关键前沿。"
把更多模态融入 LLM(Large Language Models,大语言模型),就形成了 LMM(Large Multimodal Models,大型多模态模型)。不过,并非所有多模态系统都是 LMM。例如 Midjourney、Stable Diffusion、Dall-E 这类文本生成图像的模型虽然涉及多模态,但并不包含语言模型组件。多模态的含义可以涵盖以下一种或多种情况:
- 输入和输出属于不同模态(例如文本生成图像、图像生成文本)
- 输入本身是多模态的(例如同时处理文本和图像的系统)
- 输出是多模态的(例如能同时生成文本和图像的系统)
本文将讨论广义上的多模态系统,包括 LMM,内容分 3 个部分。
- 第 1 部分介绍多模态的背景,包括为什么需要多模态、不同数据模态的种类,以及多模态任务的分类。
- 第 2 部分以 CLIP 和 Flamingo 为例,讲解多模态系统的基本原理。CLIP 为许多后续多模态系统奠定了基础,Flamingo 则凭借惊艳的表现催生了 LMM。
- 第 3 部分探讨 LMM 领域的一些活跃研究方向,包括多模态输出生成、用于提升多模态训练效率的适配器技术,并涉及 BLIP-2、LLaVA、LLaMA-Adapter V2、LAVIN 等较新的多模态系统。
文章篇幅较长,可根据兴趣跳读感兴趣的小节。
⚠ 术语说明 ⚠
多模态数据有时也指多模态分布(multimodal distributions),例如双峰分布,与本文中所讨论的多模态数据含义不同。
目录
第 1 部分:理解多模态
…. 为什么需要多模态
…. 数据模态
…. 多模态任务
…….. 生成
…….. 视觉-语言理解
第二部分 多模态训练基础
…. CLIP:对比语言-图像预训练
…….. CLIP 的整体架构
…….. 自然语言监督
…….. 对比学习
…….. CLIP 的应用
…. Flamingo:大型多模态模型的开端
…….. Flamingo 的整体架构
…….. 数据
…….. Flamingo 的视觉编码器
…….. Flamingo 的语言模型
…. 小结:CLIP 与 Flamingo 对比
第三部分 LMMs 的研究方向
…. 融合更多数据模态
…. 面向指令跟随的多模态系统
…. 面向更高效多模态训练的适配器
…. 生成多模态输出
结语
参考资料
第一部分 理解多模态
为什么需要多模态
许多应用场景离不开多模态,尤其是在需要处理多种数据模态的行业,例如医疗、机器人、电商、零售、游戏等。
不止如此,引入其他模态的数据还能提升模型性能。既然能同时从文本和图像中学习的模型,理应比只能从单一模态学习的模型表现更出色。
多模态系统提供了更灵活的交互方式,让你随时选择最便捷的形式与它沟通——无论是打字、说话,还是把摄像头对准某个东西。
我尤其看好这样一个应用场景:多模态可以帮助视障人士浏览互联网,甚至在现实世界中导航。
数据模态
不同的数据模态包括文本、图像、音频、表格数据等。一种模态可以用另一种模态来表示或近似,例如:
- 音频可以表示为图像(梅尔频谱图)。
- 语音可以转写成文本,但纯文本形式会丢失音量、语调、停顿等信息。
- 图像可以表示为向量,进而展平表示为文本 token 序列。
- 视频是图像序列加上音频。目前的机器学习模型大多把视频当作图像序列来处理,这存在很大局限,因为声音和画面同样重要——88% 的 TikTok 用户表示声音是他们刷 TikTok 体验中不可或缺的部分。
- 把文本拍成照片,它就变成了一张图像。
- 数据表格可以转换为图表,而图表本质上也是图像。
其他数据模态呢?
所有数字数据格式都可以用比特串(0 和 1 组成的字符串)或字节串来表示。一个能有效从比特串或字节串中学习的模型将非常强大,因为它能学习任何模态的数据。
还有一些数据模态我们没提到,比如图和 3D 资产。我们也没涉及气味和触觉(haptics)的表示格式。
在当今的机器学习中,音频在很大程度上仍被视为文本的语音替代方案。最常见的音频用途依然是语音识别(语音转文字)和语音合成(文字转语音)。非语音音频的用例(例如音乐生成)还相当小众。可以参考假 Drake & Weeknd 的歌曲以及 HuggingFace 上的 MusicGen 模型。
图像可能是模型输入中最多用途的格式,因为它可以用来表示文本、表格数据、音频,甚至在一定程度上表示视频。而且视觉数据比文本数据多得多——如今我们的手机和摄像头时时刻刻都在拍照和录像。
文本则是模型输出中更强大的模态。能生成图像的模型只能用于图像生成,而能生成文本的模型可以胜任许多任务:摘要、翻译、推理、问答等等。
为简单起见,我们聚焦于两种模态:图像和文本。这些经验可以在一定程度上推广到其他模态。
多模态任务
要理解多模态系统,看一下它们要解决的任务会有所帮助。在文献中,常见的视觉-语言任务被分为两类:生成和视觉-语言理解(VLU),后者是所有不需要生成的任务的总称。这两类之间的界限其实是模糊的,因为能生成答案的前提也是理解。
生成
对于生成任务,输出可以是单模态的(例如文本、图像、3D 渲染),也可以是多模态的。单模态输出如今很常见,而多模态输出仍在发展中。我们将在本文末尾讨论多模态输出。
图像生成(文本到图像合成)
这个类别比较直白,例子包括 Dall-E、Stable Diffusion 和 Midjourney。
文本生成
一种常见的文本生成任务是视觉问答。与其只依赖文本作为上下文,你可以同时给模型提供文本和图像。想象一下,你可以把相机对准任何东西,然后提问:"我的车启动不了,是哪里出了问题?""这道菜怎么做?"或者"这个梗图是什么意思?"。
另一个常见的用例是图像描述,可用作基于文本的图像检索系统的一部分。一个组织可能拥有数以百万计甚至数十亿计的图像:产品图、图表、设计图、团队合影、宣传材料等等。AI 可以自动为这些图像生成描述和元数据,让你更容易找到想要的那张图。
视觉-语言理解
下面深入介绍两类任务:分类和基于文本的图像检索(TBIR)。
分类
分类模型只能输出预定义类别列表中的结果。当你只关心固定数量的输出时,这种方式很有效。例如,一个 OCR 系统只需要判断一个视觉内容是否是已知字符之一(比如数字或字母)。
补充说明:OCR 系统在字符级别处理数据。当它与一个能够理解更广泛上下文的系统配合使用时,可以拓展到更多场景,比如让你和任意教材、合同、装配说明书等进行"对话"。
与分类相关的一个任务是图像到文本的检索:给定一张图像和一组预定义文本,找出最可能与该图像匹配的文本。这在商品图片搜索中很有用,也就是通过一张图片来检索对应的商品评论。
基于文本的图像检索(以图搜图)
图像搜索不仅对搜索引擎至关重要,对企业来说也同样关键——他们需要能够搜索内部所有的图像和文档。也有人把基于文本的图像检索称为"文本到图像的检索"。
实现基于文本的图像检索有多种方法,其中两种是:
- 为每张图片生成标题和元数据(手动或自动均可,见文本生成中的图像描述部分)。给定一个文本查询,找出标题/元数据与该查询最接近的图片。
- 训练一个同时适用于图像和文本的联合嵌入空间。给定一个文本查询,为该查询生成一个嵌入,然后找出嵌入与该嵌入最接近的所有图片。
第二种方法更加灵活,我相信它会被更广泛地采用。该方法需要一个强大的视觉-语言联合嵌入空间,比如 OpenAI 的 CLIP 所构建的那个。
第二部分:多模态训练基础
鉴于有如此多优秀的多模态系统,撰写本文的难点之一就是选择聚焦哪些系统。最终,我决定聚焦两个模型:CLIP(2021)和 Flamingo(2022),既因为它们的重要性,也因为它们的公开资料易于获取且清晰明了。
- CLIP 是首个能够通过零样本和少样本学习泛化到多个图像分类任务的模型。
- Flamingo 并不是首个能够生成开放式回复的大规模多模态模型(Salesforce 的 BLIP 早三个月发布)。不过 Flamingo 的强劲表现让一些人将其视为多模态领域的 GPT-3 时刻。
虽然这两个模型年代较老,但它们使用的许多技术至今仍然适用。我希望它们能为理解更新的模型打下基础。多模态领域发展迅速,新想法层出不穷。我们将在第三部分中介绍这些更新的模型。
从高层来看,一个多模态系统由以下几个组件构成:
- 针对每种数据模态的编码器,用于生成该模态数据的嵌入。
- 一种将不同模态的嵌入对齐到同一多模态嵌入空间的方法。
- [仅生成式模型] 一个用于生成文本回复的语言模型。由于输入可能同时包含文本和图像,因此需要开发新技术,让语言模型在生成回复时不仅能基于文本,还能基于图像。
理想情况下,这些组件应该尽可能地经过预训练并可复用。
CLIP:基于对比学习的图文预训练
CLIP 的核心贡献在于它能够把不同模态的数据(文本和图像)映射到同一个 embedding 空间中。这个共享的多模态 embedding 空间让文生图、图生文任务变得容易得多。
训练这个多模态 embedding 空间的同时,也得到了一个很强的图像编码器,使 CLIP 能在许多图像分类任务上取得有竞争力的零样本表现。这个图像编码器可以用于很多其他任务:图像生成、视觉问答、基于文本的图像检索。Flamingo 和 LLaVa 用 CLIP 作为图像编码器,DALL-E 用 CLIP 对生成的图像进行重排序,目前还不清楚 GPT-4V 是否使用了 CLIP。
CLIP 利用了自然语言监督和对比学习,这让它既能扩大数据规模,又提高了训练效率。下面会介绍这两种技术为什么有效、是如何起作用的。
CLIP 的整体架构
对于图像编码器,作者分别尝试了 ResNet 和 ViT,表现最好的模型是 ViT-L/14@336px:
- 大型视觉 Transformer(ViT-L)
- 14 个 patch(每张图像被划分成 14×14 像素的 patch/子图)
- 输入图像尺寸为 336×336 像素
对于文本编码器,CLIP 使用了一个与 GPT-2 类似但更小的 Transformer 模型。其基础模型只有 6300 万参数、8 个注意力头。作者发现 CLIP 的性能对文本编码器的容量不太敏感。
图像编码器和文本编码器生成的嵌入通过两个投影矩阵 $W_v$ 和 $W_l$ 映射到同一个嵌入空间。
- 给定图像嵌入 $V_i$,对应的多模态嵌入计算为:$W_vV_i$。
- 给定文本嵌入 $L_i$,对应的多模态嵌入计算为:$W_lL_i$。
人们提到 CLIP 嵌入时,要么指的是这些多模态嵌入,要么指的是 CLIP 图像编码器生成的嵌入。
自然语言监督
过去很多年,图像模型都是用人工标注的(图像,文本)数据集(比如 ImageNet、MS COCO)训练的。这种方式难以扩展——人工标注既耗时又昂贵。
CLIP 论文指出,当时已有的(图像,文本)数据集没有一个足够大、质量足够高。他们按以下方式构建了自己的数据集——4 亿个(图像,文本)配对。
- 构造一个包含 50 万个查询的列表。查询由常用词、二元词组和热门维基百科词条的标题组成。
- 查找与这些查询匹配的图像(精确匹配和子串匹配)。论文提到这次搜索并非在搜索引擎上进行,但未指明具体方式。我的猜测是,OpenAI 之前已经为他们的 GPT 模型爬取了整个互联网,他们可能只是查询了自己的内部数据库。
- 每张图像配对的文本是与它共现的文本(例如标题、评论),而不是查询本身,因为查询太短,不够有描述性。
由于有些查询比其他查询更热门,为了避免数据不平衡,他们对每个查询最多使用 2 万张图像。
对比学习
在 CLIP 出现之前,大多数视觉-语言模型都使用分类器或语言模型的目标函数进行训练。对比目标函数则是一种巧妙的技术,使 CLIP 能够扩展并泛化到多个任务。
下面我们通过一个图像描述任务来解释为什么对比目标函数更适合 CLIP:给定一张图像,生成一段描述它的文字。
分类器目标函数
分类器在预定义的类别列表中预测出正确的类别。这种方式在输出空间是有限的时候是可行的。之前处理(图像、文本)配对数据集的模型都有这个局限。例如,处理 ILSVRC-2012 数据集的模型把类别限制在 1,000 个,处理 JFT-300M 的则限制在 18,291 个。
这个目标函数不仅限制了模型输出有意义响应的能力,也限制了它的零样本学习能力。比如,一个模型只针对 10 个类别训练过,就无法处理包含 100 个类别的任务。
语言模型目标函数
分类器对每个输入只输出一个类别,而语言模型会输出一串类别。每个生成的类别称为一个 token(词元),每个 token 都来自语言模型预定义的列表,也就是词汇表(vocabulary)。
对比学习目标函数
虽然语言模型目标函数让输出灵活得多,但 CLIP 的作者指出这个目标函数让训练变得困难。他们猜测这是因为模型试图精确生成每张图像所对应的文本,而实际上同一张图像可以搭配多种文本:alt-text、标题、评论,等等。
例如在 Flickr30K 数据集中,每张图像都配有 5 段由人工标注的描述,而同一张图像的不同描述之间可能差异很大。
对比学习就是为了解决这个挑战。CLIP 不去预测每张图像对应的精确文本,而是训练模型判断一段文本是否比其它文本更有可能与给定图像配对。
对于每一个包含 \(N\) 个(图像,文本)配对的批次,模型会生成 N 个文本嵌入和 N 个图像嵌入。
- 令 \(V_1, V_2, ..., V_n\) 为这 \(N\) 张图像的嵌入。
- 令 \(L_1, L_2, ..., L_n\) 为这 \(N\) 段文本的嵌入。
CLIP 计算所有 \(N^2\) 个可能的 \((V_i, L_j)\) 配对之间的余弦相似度。训练目标是让 \(N\) 个正确配对的相似度最大化,同时让 \(N^2 - N\) 个错误配对的相似度最小化。在 CLIP 中,\(N = 32,768\)。
换一种角度看,CLIP 的每个训练批次实际上对应着两个分类任务。
-
每张图片可以与 N 个候选文本配对,模型需要从中选出正确的那一个,这和图到文检索的设置相同。
\[L_{\text{contrastive:txt2im}} = -\frac{1}{N}\sum_i^N\log(\frac{\exp(L_i^TV_i\beta)}{\sum_j^N\exp(L_i^TV_j\beta)})\] -
每个文本可以与 N 张候选图片配对,模型需要从中选出正确的那张,这和文到图检索的设置相同。
\[L_{\text{contrastive:im2txt}} = -\frac{1}{N}\sum_i^N\log(\frac{\exp(V_i^TL_i\beta)}{\sum_j^N\exp(V_i^TL_j\beta)})\]
训练时将这两个损失相加求最小值。其中 \(\beta\) 是一个可训练的反温度参数。
整体流程可以用如下伪代码表示。
CLIP 的作者发现,相比以语言模型为目标函数的方法,使用对比学习目标在效率上提升了 12 倍,同时生成的图像嵌入质量也更高。
CLIP 的应用
图像分类
时至今日,在许多图像分类任务中,CLIP 仍然是一个强有力的开箱即用基线,既可以直接使用,也可以微调后使用。
基于文本的图像检索
由于 CLIP 的训练过程本质上类似于图到文检索和文到图检索,因此它"在图像检索、搜索等通用任务上展现出了显著潜力"。不过,"在图像检索方面,CLIP 与当前最先进方法之间仍存在明显差距"。
有人尝试用 CLIP 做图像检索。例如,clip-retrieval 工具包的工作流程如下:
- 为所有图像生成 CLIP embedding,并存入向量数据库。
- 对每个文本查询,生成对应的 CLIP embedding。
- 在向量数据库中检索,找出与该文本 embedding 相近的所有图像。
图像生成
CLIP 的图文联合 embedding 对图像生成也很有用。给定一段文本提示,DALL-E(2021)会生成多幅候选图像,再用 CLIP 对它们重排序,只把得分最高的呈现给用户。
2022 年,OpenAI 发布了 unCLIP,一种以 CLIP 隐向量为条件的文生图模型。它主要由两部分组成:
- 训练并冻结 CLIP。预训练好的 CLIP 能在同一 embedding 空间中同时表示文本和图像。
- 图像生成过程分两步:
- 用 CLIP 为文本生成 embedding。
- 用扩散解码器(diffusion decoder)根据该 embedding 生成图像。
文本生成:视觉问答与图像描述
CLIP 的作者确实尝试过做文本生成模型,其中一个实验版本叫 LM RN50。它虽然能生成文本回复,但在所有 CLIP 所涉及的视觉-语言理解任务上,性能始终比 CLIP 最好的模型低约 10%。
如今 CLIP 已不再直接用于文本生成,但它的图像编码器经常作为能生成文本的 LMM 的骨干网络。
Flamingo:LMM 的曙光
和 CLIP 不同,Flamingo 能够生成文本回复。简单来说,Flamingo 就是 CLIP + 一个语言模型,再加上一些让语言模型能同时基于视觉和文本输入生成 token 的技术。
Flamingo 的整体架构
从宏观上看,Flamingo 由两部分组成:
- 视觉编码器:用对比学习训练一个类似 CLIP 的模型,训练完成后丢弃其中的文本编码器。视觉编码器被冻结,供主模型使用。
- 语言模型:Flamingo 在 Chinchilla 的基础上微调,通过语言模型损失函数生成文本 token,条件同时依赖于视觉和文本输入,并额外引入了 Perceiver Resampler 和 GATED XATTN-DENSE 两个组件。我们在后文会详细讨论它们。
数据
Flamingo 共使用了 4 个数据集:2 个(图像,文本)配对数据集、1 个(视频,文本)配对数据集,以及 1 个图文交错数据集。
| 数据集 | 类型 | 规模 | 方式 | 训练权重 |
| M3W | 图文交错数据集 | 4300 万个网页 | 对每个网页,随机采样一段长度为 256 个 token 的子序列,并截取该序列中最多前 5 张图片。 | 1.0 |
| ALIGN | (图像,文本)配对 | 18 亿对 | 文本为 alt-text,平均每个 12 个 token。 | 0.2 |
| LTIP | (图像,文本)配对 | 3.12 亿对 | 文本为长描述,平均每个 20.5 个 token。 | 0.2 |
| VTP | (视频,文本)配对 | 2700 万个短视频 | 每个视频平均约 22 秒。 | 0.03 |
Flamingo 的视觉编码器
Flamingo 首先用对比学习从头训练了一个类似 CLIP 的模型。该组件仅使用 ALIGN 和 LTIP 这两个(图像,文本)配对数据集,共 21 亿对,规模是 CLIP 训练数据集的 5 倍。
- 文本编码器方面,Flamingo 使用 BERT 而非 GPT-2。
- 视觉编码器方面,Flamingo 使用 NormalizerFree ResNet(NFNet)F6 模型。
- 文本和视觉嵌入在投影到联合嵌入空间之前先做平均池化。
Flamingo 的语言模型
Flamingo 使用 Chinchilla 作为语言模型,更准确地说,他们冻结了预训练好的 9 层 Chinchilla LM。传统语言模型根据前文文本预测下一个文本 token,而 Flamingo 同时根据前文文本和视觉 token 预测下一个文本 token。
为了能根据文本和视觉输入同时生成文本,Flamingo 引入了 Perceiver Resampler 和 GATED XATTN-DENSE 层。
Perceiver Resampler
视觉输入可以是图像也可以是视频,因此视觉编码器输出的特征数量是不固定的。Perceiver Resampler 把这些数量不定的特征转换成固定数量的 64 个视觉输出。
值得一提的是,训练视觉编码器时使用的是 288 × 288 的分辨率,而到了这一步,视觉输入被缩放到 320 × 320。研究表明,在 CNN 上使用更高的测试分辨率可以带来更好的性能。
GATED XATTN-DENSE 层
GATED XATTN-DENSE 层被插入到已有的冻结 LM 层之间,使语言模型在生成文本 token 时能更高效地关注视觉 token。Flamingo 的作者指出,去掉这些层会导致整体得分下降 4.2%。
损失函数
Flamingo 计算的是文本 \(y\) 在交错出现的图像和视频 \(x\) 条件下的似然。
\[p(y|x) = \prod_{l=1}^N p(y_l|y_{<l}, x_{\leq l})\]训练损失函数是所有 4 个数据集上生成文本的期望负对数似然的加权和,其中 $\lambda_m$ 是数据集 $m$ 的训练权重。
\[\sum_{m=1}^M \lambda_m E_{(x, y)\sim D_m} [ -\sum_{l=1}^L \log p(y|x)]\]训练
Chinchilla 语言模型的各层经过微调后冻结,额外的组件则从头开始训练,使用全部 4 个 Flamingo 数据集,并为各数据集设置不同权重。找到合适的逐数据集权重是性能的关键。 每个数据集的权重见上表中的训练权重列。
VTP 的权重远小于其他数据集(0.03 对比 0.2 和 1),因此它对训练的贡献应当很小。但作者指出,去掉该数据集会对所有视频任务的表现产生负面影响。
Flamingo 没有开源,但目前已有许多开源的 Flamingo 复现版本。
- IDEFICS(HuggingFace)
- mlfoundations/open_flamingo
TL;DR:CLIP vs. Flamingo
第三部分:LMM 的研究方向
CLIP 已经发布 3 年,Flamingo 也快 2 年了。虽然它们的架构为我们理解 LMM 的构建方式提供了良好基础,但该领域已有了许多新进展。
以下是我比较看好的几个方向。这远非一份完整的清单——一来本文已经够长了,二来我对该领域也仍在学习中。如果你有任何线索或建议,欢迎告诉我!
纳入更多数据模态
如今大多数多模态系统处理的是文本和图像。我们迟早需要能够纳入视频、音乐、3D 等其他模态的系统。如果能为所有数据模态构建一个统一的嵌入空间,岂不是很棒?
该领域的代表性工作包括:
- ULIP: Learning a Unified Representation of Language, Images, and Point Clouds for 3D Understanding(Xue 等人,2022 年 12 月)
- ImageBind:One Embedding Space To Bind Them All(Girdhar 等,2023 年 5 月)
- NExT-GPT:任意模态到任意模态的多模态大语言模型(Wu 等,2023 年 9 月)
- Jeff Dean 雄心勃勃的 Pathways 项目(2021):其愿景是"打造同时涵盖视觉、听觉和语言理解的多模态模型"。
面向指令遵循的多模态系统
Flamingo 是为补全任务训练的,而非为对话或指令遵循训练。(如果对补全与对话的区别不熟悉,可以看看我关于 RLHF 的文章)。很多人正在致力于构建能遵循指令并进行对话的 LMM,例如:
- MultiInstruct:通过指令微调改进多模态零样本学习(Xu 等,2022 年 12 月)
- LLaVA:视觉指令微调(Liu 等,2023 年 4 月 28 日)
- InstructBLIP:迈向通用视觉-语言模型的指令微调(Salesforce,2023 年 5 月 11 日)
- LaVIN:Cheap and Quick:面向大语言模型的高效视觉-语言指令微调(Luo 等,2023 年 5 月 24 日)
面向更高效多模态训练的适配器
Flamingo 虽然复用了 Chinchilla 中 9 个预训练并冻结的层,但其视觉编码器、Perceiver Resampler 和 GATED XATTN-DENSE 层都需要从头训练。这些从头训练的模块计算开销很大。很多工作致力于用更少的从头训练来更高效地构建多模态系统。
其中一些成果相当亮眼。例如 BLIP-2 以少 54 倍的可训练参数,在零样本 VQA-v2 上比 Flamingo-80B 高出 8.7%。
该方向的相关工作包括:
下面两张图出自 Chunyuan Li 在 CVPR 2023 上的大模型多模态教程,顺便说一句,那是一个非常棒的教程。
生成多模态输出
虽然能处理多模态输入的模型已经越来越普遍,但多模态输出仍然滞后。许多应用场景需要多模态输出。比如,如果我们让 ChatGPT 解释 RLHF,要讲清楚可能需要配图、公式,甚至简单的动画。
要生成多模态输出,模型首先需要先生成一个共享的中间表示。这里的一个关键问题是:这个中间表示应该长什么样。
一种方案是用文本作为中间表示,然后再用它来生成或合成其他动作。
例如,CM3(Aghajanyan 等,2022)输出 HTML 标记,可以编译成网页,里面不仅有文字,还包含格式、链接和图片。GPT-4V 则生成 LaTeX 代码,再据此重建出数据表格。
另一种中间输出的方案是多模态 token。这是 Salesforce 的 Caiming Xiong 告诉我的,他的团队在多模态领域做了很多出色的工作。每个 token 会带有一个标签,标明它是文本 token 还是图像 token。图像 token 会被送入 Diffusion 之类的图像模型来生成图像,文本 token 则送入语言模型。
Generating Images with Multimodal Language Models(Koh 等,2023 年 6 月)是一篇很棒的论文,展示了 LMM 在生成文本的同时如何一并生成和检索图像。如下图所示。
结语
梳理这么多多模态论文,与一线研究者交流,并尝试把核心规律浓缩在一篇博客里,整个过程非常有趣。多模态领域的知识浩瀚,我肯定遗漏了不少内容,但希望这篇文章能呈现最核心的模式,帮助你构建多模态系统并应用到自己的工作中。
正如本系列第三篇所述,多模态系统仍处于非常早期的阶段(早到有朋友告诉我他都不确定 LMM 这个缩写能不能流行起来)。没错,在我交流过的大多数人看来,多模态系统,尤其是 LMM,影响力几乎肯定会超过大语言模型。但请注意,LMM 并不会让 LLM 过时。LMM 是在 LLM 基础上的扩展,其性能强依赖于基座 LLM 的能力。许多研究多模态系统的实验室也都在并行推进 LLM 的研究。
早期审稿人
感谢出色的早期审稿人 Han-chung Lee、Sam Reiswig 和 Luke Metz,他们给了我大量指点和建议,让这篇文章更加完善。
资源
模型
以下按时间顺序列出了部分多模态系统(不完全),方便你感受这个领域的发展速度!
- Microsoft COCO Captions: Data Collection and Evaluation Server(2015 年 4 月)
- VQA: Visual Question Answering(2015 年 5 月)
- VideoBERT: A Joint Model for Video and Language Representation Learning(Google,2019 年 4 月 3 日)
- LXMERT: Learning Cross-Modality Encoder Representations from Transformers(北卡罗来纳大学教堂山分校,2019 年 8 月 20 日)
- [CLIP] Learning Transferable Visual Models From Natural Language Supervision(OpenAI,2021 年)
- Unifying Vision-and-Language Tasks via Text Generation(北卡罗来纳大学教堂山分校,2021 年 5 月)
- BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation(Salesforce,2022 年 1 月 28 日)
- Flamingo: a Visual Language Model for Few-Shot Learning(DeepMind,2022 年 4 月 29 日)
- GIT: A Generative Image-to-text Transformer for Vision and Language(Microsoft,2022 年 5 月 2 日)
- MultiInstruct: Improving Multi-Modal Zero-Shot Learning via Instruction Tuning(Xu 等,2022 年 12 月)
- BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models(Salesforce,2023 年 1 月 30 日)
- Cross-Modal Fine-Tuning: Align then Refine(Shen 等,2023 年 2 月 11 日)
- KOSMOS-1: Language Is Not All You Need: Aligning Perception with Language Models(Microsoft,2023 年 2 月 27 日)
- PaLM-E: An Embodied Multimodal Language Model(Google,2023 年 3 月 10 日)
- LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention(Zhang 等人,2023 年 3 月 28 日)
- mPLUG-Owl: Modularization Empowers Large Language Models with Multimodality(Ye 等人,2023 年 4 月 2 日)
- LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model(Gao 等人,2023 年 4 月 28 日)
- LLaVA: Visual Instruction Tuning(Liu 等人,2023 年 4 月 28 日)
- X-LLM: Bootstrapping Advanced Large Language Models by Treating Multi-Modalities as Foreign Languages(Chen 等人,2023 年 5 月 7 日)
- InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning(Salesforce,2023 年 5 月 11 日)
- Towards Expert-Level Medical Question Answering with Large Language Models(Singhal 等人,2023 年 5 月 16 日)
- Cheap and Quick: Efficient Vision-Language Instruction Tuning for Large Language Models(Luo 等人,2023 年 5 月 24 日)
- Shikra: Unleashing Multimodal LLM's Referential Dialogue Magic(SenseTime,2023 年 6 月 3 日)
- Macaw-LLM: Multi-Modal Language Modeling with Image, Audio, Video, and Text Integration(Tencent,2023 年 6 月 15 日)
其他资源
- [CVPR2023 教程报告] Large Multimodal Models: Towards Building and Surpassing Multimodal GPT-4
- [CMU 课程] 11-777 MMML
- [开源项目] Salesforce 的 LAVIS