Skip to content

필사 모드: SOTA多模态LLM解析 — 用一个模型看、听、说

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

引言 — 为什么是多模态

几年前,"LLM"这个词几乎就等于文本。用户输入一句话,模型用一句话回应,是纯粹的语言模型。可是回想一下人类理解世界的方式,我们从来不是只靠文本思考的。我们用眼睛看场景,用耳朵听声音,用嘴说话,用手画画。把这些感官通道,也就是模态(modality),全部编织到一起,才构成了我们对世界的理解与表达。

多模态LLM(Multimodal Large Language Model)瞄准的正是这一点。它把多种模态整合进一个大型语言模型里,把原本只用于文本的能力扩展到图像、音频、视频上。近几年这个领域发展迅猛,"能看、能听、能说"的单一模型这一目标正逐渐变为现实。

本文将梳理多模态LLM的基本概念、架构、训练策略、代表性模型系列,以及基准测试与局限性。由于AI领域变化极快,比起具体的排名或最新数值,本文会更侧重概念与架构原理本身。某些商用模型的详细规格大多未公开,因此本文只在确切可知的范围内谨慎讨论。

什么是模态

先把术语理清楚。模态指的是承载信息的形式,或者说感官通道。常见的模态包括:

  • 文本:自然语言的句子、代码、公式等
  • 图像:照片、图表、截图、文档扫描件等
  • 音频:语音、音乐、环境声等
  • 视频:带有时间轴的图像序列,以及随之而来的音频

"多模态"指的是同时处理其中两种以上模态。比如说,一个接收图像作为输入、用文本描述其内容的模型,就是同时处理图像和文本这两种模态的多模态模型。再进一步,在输入和输出两端都能自由组合任意模态,就叫作any-to-any。用文本提问、用图像回答,听音频、用文本概括,看图像、用语音描述——都属于这一类。

核心思路:把一切都变成token

理解多模态LLM最重要的一把钥匙,是"token"这个概念。原本LLM会把文本切分成token单元。它把单词或子词转换成整数ID,再把每个ID转换成高维向量(嵌入),然后把这一串向量序列输入Transformer。Transformer通过自注意力(self-attention)学习token之间的关系。

多模态的核心洞见很简单:"不管是图像还是音频,只要能把它转换成向量序列,就可以和文本token一样直接送进Transformer。"换句话说,只要把不同的模态映射到一个共同的token空间(unified token space),LLM就不必在意这些token究竟来自文本还是图像,可以用完全一致的方式处理它们。

正是这个想法,让多模态LLM的架构有了以下这样的共同骨架。

   [图像]          [音频]          [文本]
      |               |               |
   图像编码器      音频编码器      分词器
      |               |               |
    投影器          投影器          嵌入
      |               |               |
      +-------+-------+-------+-------+
              |
        统一token序列 (unified token space)
              |
        +-----------+
        |    LLM    |   <- Transformer主干
        | (解码器)  |
        +-----------+
              |
         输出token序列
              |
      +-------+-------+
      |               |
    文本解码      图像/音频解码器

这张图就是多模态LLM的典型蓝图。下面逐一拆解每个组成部分。

架构组成

1. 模态编码器(Modality Encoder)

每种非文本模态首先都要经过一个专用编码器。编码器的职责,是把原始输入(像素、波形)压缩成有意义的特征向量。

以图像为例,长期以来CLIP(Contrastive Language-Image Pre-training)系列的视觉编码器事实上是标准配置。CLIP通过对比学习(contrastive learning)把图像和文本对齐到同一个嵌入空间,由于它输出的图像表示本身就已经和文本"合拍",因此非常适合与语言模型拼接。它以视觉Transformer(ViT, Vision Transformer)为骨干,把图像切成图块(patch),再把每个图块当作一个token来处理。

对于音频,常见做法是先把波形转换成梅尔频谱图(mel spectrogram),再送入基于Transformer的编码器。语音识别领域广为人知的Whisper系列编码器就是典型例子,它在多种语言和嘈杂环境下都学到了鲁棒的语音表示。

对于视频,帧的编码方式和图像类似,但还必须考虑时间轴。做法通常是按一定间隔采样帧,分别用图像编码器处理,再叠加时间方向的位置信息,或者采用同时关注空间与时间的3D注意力。

2. 投影器(Projector / Connector)

编码器输出的特征向量,无论是维度还是语义分布,都还和LLM所理解的嵌入空间不一样。投影器就是填补这道鸿沟的桥梁,它把编码器的输出转换到LLM的token嵌入空间。

投影器大致有以下几种形式。

  • 线性投影(linear projection):最简单的做法,用一个矩阵完成维度对齐。早期的LLaVA就采用这种方式,取得了令人惊讶的强劲效果。
  • MLP:叠加多个线性层与非线性激活,提升表达能力。后续改进版的LLaVA等广泛采用了这一形式。
  • 基于交叉注意力的重采样器(resampler):比如Flamingo的Perceiver Resampler,或BLIP-2的Q-Former——一小组可学习的查询token从编码器特征中提取信息,压缩成固定数量的token。当一张图像原本要用数百个图块token表示时,这种方式能有效压缩数量、提升效率。

3. LLM主干(Backbone)

对齐到token空间之后,多模态token会与文本token并排送入LLM主干。这个主干通常是一个已经训练充分的纯解码器(decoder-only)Transformer。由于语言模型已经从海量文本中学到了世界知识和推理能力,在此基础上叠加视觉、听觉信息,就能把这些既有知识复用到视觉问答或音频理解上。

关键在于,不同模态的token是通过注意力相互作用的。比如回答"这张照片里左边的人手里拿着什么"这个问题时,文本token(问题)和图像token(照片的各个图块)会在同一个注意力层内互相参照,共同生成答案。

4. 输出侧:通向生成之路

到目前为止,讨论的主要还是"理解"。看图像、用文本回答,属于输入是多模态、输出是文本的情形。要成为真正的any-to-any,模型在输出端也必须能够生成非文本模态。

实现这一点大致有两条路径。

第一条,把外部生成模型当作工具来调用。LLM生成一段图像生成提示词,交给独立的扩散模型(diffusion model),再把生成的图像返回。这种方式实现简单,能够直接利用各个生成模型的最新能力,但由于两个模型之间是松耦合的,保持一致性可能会比较困难。

第二条,让模型自身直接生成非文本token。做法是设置一个把图像表示为离散token(discrete token)的码本(codebook),让LLM在同一个序列里一并生成文本token和图像token。这样生成出来的图像token,再经由解码器(比如VQ-VAE的解码器或扩散解码器)还原成真实像素。音频也可以套用同样的原理——先用神经编解码器(neural codec)把波形转换成离散token。

细看any-to-any流程

我们把any-to-any模型理想中的数据流程再具体地描绘一遍。

输入 (任意模态组合)
  文本 + 图像 + 音频
        |
   [各模态编码]
   把每种模态转换为token
        |
   [交织(interleaving)]
   像"这段声音是[audio]什么乐器?"
   这样把文本和其他模态的token
   混合排列在同一序列中
        |
   [LLM主干处理]
   通过统一注意力进行交叉参照
        |
   [输出路由]
   下一个token若是文本就输出文本,
   若是图像token就送入图像解码器,
   若是音频token就送入编解码器解码
        |
输出 (任意模态组合)
  文本 + 图像 + 音频

这里"交织"这个概念很重要。早期的多模态模型处理的是一张图配一句文本这种简单的配对,但真实的文档或对话里,文本和图像是自由混杂在一起的。想想网页的样子——段落之间穿插着图片。在交织的多模态序列上训练,才能让模型处理这种自然的上下文。

输出路由同样是重要的设计要点,因为模型必须在每一步自行判断"接下来该产出哪种模态的token"。常见做法是设置特殊的边界token(比如标记图像起止的token)来表示模态切换。

原生多模态 vs 适配器拼接

构建多模态LLM的思路大致分为两派,这一区分对理解这个领域非常关键。

适配器拼接方式(Late Fusion,后期融合)

拿一个已经训练完成、能力强劲的文本LLM,在它前面接上视觉/音频编码器和投影器。LLM的大部分权重保持不变或只做轻微调整,主要训练的是投影器以及编码器的连接部分。

优点很明确:能够直接继承文本LLM积累的海量知识和语言能力,训练成本相对低廉,即便只用相对少量的多模态数据,也能获得可用的视觉理解能力。LLaVA、BLIP-2、MiniGPT-4等开放研究系列都靠这一思路取得了重大成果,是开源社区掀起多模态热潮的主要推动力。

缺点是模态之间的融合可能比较浅。由于视觉信息是以"翻译"的形式进入语言模型的,真正基于视觉进行思考的能力可能会受到限制。

原生多模态方式(Early Fusion,早期融合)

从一开始就把多种模态放在一起训练。从预训练阶段起,就把文本、图像、音频数据混合起来训练同一个模型。由于模态之间的边界从训练最初就被模糊掉,人们认为这样能实现更深、更自然的融合。

近来不少商用前沿模型被介绍为"从一开始就按多模态设计",可以理解为正是朝这个方向努力。不过每个模型具体的内部结构大多未公开,细节难以断言。

优点是更深的跨模态推理能力、更低的延迟(尤其在语音对话场景中),以及模态之间更顺滑的切换。缺点是训练成本极高,数据配比也很难拿捏。

把两种方式列表对比如下。

项目适配器拼接(后期融合)原生多模态(早期融合)
起点已训练完成的文本LLM从一开始就进行多模态预训练
训练成本相对低廉非常高
融合深度可能较浅较深
所需数据量较少非常多
代表案例开放研究系列最新前沿系列
优势构建迅速、可复用已有知识推理更深、延迟更低

实际中这两个极端之间还存在各种中间形态。从文本LLM出发、再经过大规模多模态预训练的混合方式也很常见。

训练策略:从对齐到指令微调

多模态LLM的训练大体上分为若干阶段。下面看一个典型的流程。

第一阶段:对齐预训练(Alignment Pre-training)

第一阶段的目标,是把非文本编码器的输出对齐到LLM的语言空间。使用大量的图像-caption对(图像及其对应的描述句),训练模型看图生成caption。这一阶段主要训练投影器,而编码器和LLM本体则被冻结,或者只做最小限度的调整。

通过这个过程,投影器学会"该如何把这个图像特征向量搬运成LLM能够理解的嵌入"。可以说,这是在训练一名模态之间的翻译官。

第二阶段:指令微调(Instruction Tuning)

仅靠对齐,模型或许能写出不错的caption,却未必能听懂用户各式各样的指示。因此第二阶段要用多模态指令数据进行微调。模型会学习诸如"这张图表里最高的数值是多少""用一首诗表达这张照片的氛围""在这份文档里找出总金额"之类形形色色的指令-回应对。

到这一阶段,模型才真正具备了对话式助手的性格。一个广为人知的案例是,LLaVA利用由GPT系列模型合成的视觉指令数据,有效完成了这一阶段的训练。

第三阶段:对齐与偏好优化(可选)

和文本LLM一样,有时还会加入面向人类偏好的额外阶段。RLHF或DPO之类的技术被扩展到多模态场景,让模型给出更有用、更安全、幻觉(hallucination)更少的回答。在多模态场景中,视觉幻觉——硬说图像里不存在的东西存在——尤其是个问题,因此针对性地降低这类幻觉的优化很重要。

把整体训练流程概括如下。

[第一阶段] 对齐预训练
  大量图像-caption学习
  以投影器为主,主干冻结
        |
        v
[第二阶段] 指令微调
  多样的指令-响应数据
  转变为对话式助手
        |
        v
[第三阶段] 偏好优化 (可选)
  RLHF / DPO 等
  减少幻觉、提升安全性与有用性

Token化、分辨率与效率

在多模态LLM的实际工作中,最令人头疼的问题之一,是非文本输入太占token了。

以图像为例,把高分辨率图像切成图块时,图块数量会急剧增加。比如把图像划成一个小网格,网格里有多少格子,就会产生多少token,这直接导致注意力计算量上升。由于Transformer的注意力开销与序列长度的平方成正比,token一多,计算和内存压力就会迅速攀升。

应对这个问题的技术手段有好几种。

  • 用重采样器压缩token:如前面提到的Q-Former或Perceiver Resampler,把一张图像概括成固定的、少量的token。
  • 动态分辨率:按图像的宽高比和尺寸切成若干瓦片,分别处理后再合并。这对处理高分辨率的文档或表格很有用。
  • token池化/合并:把相邻的相似token合并,以减少数量。

音频和视频的这个问题更严重。视频的图像token数量会随帧数成倍增长,因此哪怕只是几秒钟的片段,token也可能爆炸式增长。所以调整帧采样间隔、或沿时间方向合并token之类的折中方案是必不可少的。

在效率与性能之间找到这个平衡点,是多模态LLM设计中的核心难题之一。

代表性模型系列概览

接下来我们围绕概念来看几个代表性的模型系列。再次强调,商用模型的具体规格与排名会随时间和版本大幅变化,因此这里聚焦于架构思路和广为人知的特征。

开放研究系列:CLIP、Flamingo、BLIP-2、LLaVA

这一系列奠定了多模态LLM的概念基础。

  • CLIP:通过对比学习把图像和文本对齐到同一空间的模型。此后被大量多模态模型复用为视觉编码器。
  • Flamingo:在预训练视觉编码器与语言模型之间插入交叉注意力层的早期代表作,展示了处理交织图像-文本的少样本(few-shot)能力。
  • BLIP-2:提出用名为Q-Former的轻量桥接模块,高效连接被冻结的图像编码器和LLM。
  • LLaVA:用一个简单的投影器连接CLIP视觉编码器和语言模型,再用合成的视觉指令数据微调,凭这套简洁的配方确立了开源多模态的标准。

商用前沿系列(概念层面)

以下这些名字常被作为"面向原生多模态"的最新前沿系列提及。它们具体的性能高下或内部结构大多未经官方证实,因此这里只谨慎地概括其概念性特征。

  • GPT-4o一类:据了解,它在同一个模型中处理文本、图像、音频,并强调接近实时的语音对话。名字里的"o"据介绍意为omni(全能),即涵盖多种模态。
  • Gemini一类:据介绍从一开始就按多模态设计,以能够同时处理长上下文和多种模态输入著称。
  • Qwen-VL一类:强调视觉-语言能力的开放权重系列,广泛用于文档理解、OCR、精确的定位(grounding)等任务。由于是开放权重,无论对研究还是实务都有较高的可及性。

除此之外还存在各种开放和商用系列,各有所长。始终要记住,"哪个最好"取决于具体任务、基准测试和所处的时间点。

谱系:发展脉络

大致梳理多模态LLM的发展脉络,可以概括为如下一条故事线。

[对比学习对齐]
  CLIP系列:图像-文本联合嵌入
        |
        v
[编码器 + LLM拼接]
  Flamingo、BLIP-2:通过桥接模块连接
        |
        v
[简洁的指令配方]
  LLaVA系列:投影器 + 视觉指令
        |
        v
[面向原生多模态]
  前沿系列:从一开始就按多模态设计
        |
        v
[any-to-any扩展]
  输出侧也生成图像/音频
  在统一token空间中实现任意模态输入输出

这条脉络的大方向,是从"松散拼接"走向"深度融合",从"以理解为中心"走向"理解与生成的统一"。早期的重心在于组装已有的部件,随后逐渐转向从一开始就用一个模型联合训练多种模态,再进一步扩展到输入输出任意模态的方向。

基准测试:测量什么、如何测量

衡量多模态LLM性能的基准测试因任务而异。下面梳理几条有代表性的评测维度。

  • 视觉问答(VQA):回答关于图像问题的能力,跨度从常识性问题到精细感知型问题都有。
  • 文档/图表/表格理解:从截图、扫描文档、图表中读取信息的能力,需要OCR和结构理解协同配合。
  • 视觉推理:在多张图像或复杂场景中进行逻辑推理的能力。
  • 定位(grounding):精确指出文本所指的对象在图像中具体位置的能力。
  • 音频/视频理解:把握声音或视频内容并回答相关问题的能力。

解读基准测试分数时需要注意几点。第一,不同基准测试衡量的能力各不相同,不能仅凭一个数字就断定模型的优劣。第二,由于存在数据污染的可能(模型在训练中已经见过基准测试题目),分数可能高估了模型真实的泛化能力。第三,排名会随着新模型的发布而迅速变动。因此与其把某一时刻的排行榜名次当作绝对真理,不如把它当作了解趋势和强项领域的参考。

局限与待解决的问题

多模态LLM取得了令人瞩目的进展,但仍然存在不少局限。

第一,视觉幻觉。模型仍然会声称图像中不存在的物体存在,或者读错细节。这类错误在小字、复杂表格、细微空间关系上尤为明显。

第二,精细感知的局限。对人类而言轻而易举的计数、精确位置判断、细微颜色与质感区分,对模型而言往往仍然困难。

第三,效率问题。如前所述,高分辨率图像或长视频会引发token爆炸,大幅推高计算成本。在实时应用中,这种延迟会成为障碍。

第四,模态失衡。由于大部分训练数据集中在图像-文本上,音频和视频理解往往相对不成熟。any-to-any生成的质量,相比文本理解也还有很大的改进空间。

第五,评估的困难。如何公正而自动地评估生成图像或音频的质量、以及跨模态一致性,仍是尚未解决的课题。

再深入一点:跨模态注意力

当我们说一个多模态LLM确实"看着图像在思考"时,其内部发生的事情归根结底就是注意力运算。稍微深入看一下这一部分,有助于理解统一token空间这一构想为什么如此强大。

纯解码器Transformer的每一层都有自注意力。注意力运算是这样的:每个token生成一个"查询(query)",拿它与其他token的"键(key)"比较,再大量提取与之相似度高的token的"值(value)"。只处理文本时,这些查询、键、值全部来自单词。

在多模态场景中,由于图像图块token和文本token被放在同一个序列里,文本token的查询就可以参照图像token的键。也就是说,"红色雨伞"这个文本token,会去关注图像中对应红色区域的那些图块token。这种交叉参照在多层之间反复进行,文本与图像的语义就会越缠越深。

       问题token们              图像patch token们
   [拿着] [的是] [什么]   [patch1] [patch2] ... [patchN]
        |      |      |          |         |            |
        +------+------+----------+---------+------------+
                        |
                 自注意力层
         每个token参照所有token
         文本关注到相关的patch
                        |
                    进入下一层

这里位置信息扮演着重要角色。文本具有一维的顺序,而图像图块位于二维网格之上。因此需要给图像token赋予二维位置编码,让模型知道"这个图块位于图像的哪个位置"。只有位置信息传达到位,模型才能回答"左上角""正下方"这类空间性问题。

适配器拼接的两条路径:前缀式与交叉注意力式

在适配器拼接方式内部,把编码器信息送入LLM的方法又可以分为两种。

第一种是前缀方式。把图像token直接插在文本token之前或之间,拼成一条长序列。LLaVA系列采用的就是这种方式,实现简单,几乎可以原样使用LLM本体。缺点是随着图像token增多,序列变长,计算负担也随之加重。

第二种是插入交叉注意力的方式。在LLM各层之间插入独立的交叉注意力层,让文本token参照图像特征,而图像token本身不进入主序列。Flamingo是这一方式的代表。它可以在不拉长序列的前提下注入视觉信息,对长上下文更有利,但需要改动LLM的结构,实现较为复杂。

把两种方式列表对比如下。

项目前缀方式交叉注意力插入方式
图像token的位置插入主序列中通过单独的注意力参照
对序列长度的影响变长几乎没有
实现难度简单复杂
代表系列LLaVAFlamingo
LLM改动极少需要新增层

音频与语音:两种路径

音频模态通常可以有效地分成两种性质来处理。一种是语音(说话声),另一种是非语音音频(音乐、环境声)。

语音理解与自动语音识别(ASR)紧密相连。把波形转换成频谱图后送入编码器,再把这个表示接入LLM,模型就获得了听懂语音的能力。Whisper系列的编码器在这一用途上被广泛复用。反过来,若要在输出端生成语音,则需要把文本转成语音的神经网络TTS,或者把音频当作离散token处理的编解码器语言模型(VALL-E系列的思路)。

音乐、环境声等非语音音频,自然的处理方式是先用神经编解码器把波形压缩成离散token,再让LLM处理这些token。EnCodec、SoundStream之类的神经编解码器,正是这类离散音频token的基础。MusicGen系列展示了以自回归方式生成这类音频token来创作音乐的方向。

在强调实时语音对话的最新潮流中,与其经过"语音转文本、再把文本转回语音"这样多个步骤,不如直接把语音当作token来处理以降低延迟——这样的尝试正在持续推进。这也是原生多模态被认为在语音对话上更具优势的原因。

视频:时间轴带来的挑战

视频是多模态LLM中最棘手的模态之一,因为它在图像之上又多了时间这一个维度。

最简单的做法,是把视频看作一串帧序列,按固定间隔抽取帧,分别像图像一样编码,再叠加告诉模型"这是第几个时间点"的时间位置信息。问题在于前面提到的token爆炸——若把每秒的多帧原样送入,哪怕只是几秒钟的视频,token数量也可能膨胀到数千个。

因此实务中会动用各种折中方案:拉大帧采样间隔以减少帧数,合并相邻帧的token,或应用沿时间方向压缩信息的时空池化。对于长视频,也有研究采用按场景切分、再分层堆叠摘要的方式。

[原始视频]
  大量帧
        |
   帧采样
  只选取代表性帧
        |
   逐帧编码
  复用图像编码器
        |
   赋予时间位置 + token合并
  压缩序列长度
        |
   传入LLM

正因为视频理解困难,这一领域仍在积极发展中,成熟度相较图像理解还要低一些。

实践启示

最后,梳理一下这条发展脉络对实务的启示。

引入多模态LLM时,首先要明确任务的性质。如果只需要理解图像、用文本回答,适配器拼接系列的轻量模型往往就够用了。反过来,如果还需要实时语音对话或图像生成,就需要原生多模态系列或工具组合。

效率同样重要。如果需要批量处理高分辨率文档,选择支持动态分辨率或token压缩的模型会直接影响成本。开放权重系列在需要本地部署和精细定制时更具优势。

幻觉管理也不能忽视。尤其是在文档信息抽取这类对准确性要求高的应用中,必须为模型输出设置验证环节,因为模型有时会自信满满地给出错误答案。

结语

多模态LLM正处在从"只处理文本的语言模型"迈向"整合多种感官的模型"这一重大转变的中心。它的核心原理其实出乎意料地简单:把所有模态搬运到一个共同的token空间,再交给已经足够强大的Transformer统一处理。

在这个简单的想法之上,编码器、投影器、统一token空间、any-to-any路由,以及从对齐到指令微调再到偏好优化的训练流程一层层叠加,共同造就了今天的成果。从适配器拼接走向原生多模态、从理解走向生成、从单一模态走向任意模态,这条脉络还将继续延伸下去。

不过,视觉幻觉、精细感知、效率、模态失衡等待解决的问题依然存在,而且这个领域变化极快。因此,比起具体的排名或数值,理解其背后的架构原理,才更能在这股快速变化的浪潮中培养出经得起时间考验的判断力。

参考资料

현재 단락 (1/225)

几年前,"LLM"这个词几乎就等于文本。用户输入一句话,模型用一句话回应,是纯粹的语言模型。可是回想一下人类理解世界的方式,我们从来不是只靠文本思考的。我们用眼睛看场景,用耳朵听声音,用嘴说话,用手画...

작성 글자: 0원문 글자: 10,384작성 단락: 0/225