01. 什么是多模态大模型(VLM)?主流架构有哪些?

多模态大模型(VLM)的定义、主流架构与工程特点。

简单回答

多模态大模型(VLM, Vision-Language Model)是能同时理解和处理多种模态信息(如图像、文本、音频、视频)的大模型。主流架构的共同思路是"视觉编码器 + 投影层 + LLM":用预训练的视觉编码器(如 ViT)提取图像特征,通过投影层(线性映射、Q-Former 等)将视觉特征对齐到 LLM 的文本嵌入空间,然后由 LLM 统一做理解和生成。代表模型包括 LLaVA 系列、Qwen-VL、InternVL、GPT-4o 等。

详细解释

为什么叫"多模态"

"模态"(Modality)指信息的类型——文本是一种模态、图像是一种模态、音频是一种模态。传统的 LLM 只处理文本这一种模态,多模态大模型则能同时处理多种模态的输入(甚至输出)。

当前工业界最成熟的多模态能力是"视觉 + 语言",也就是 VLM——用户给模型看一张图片并提问,模型理解图片内容后用文本回答。这是因为视觉理解的应用场景最广(文档解析、图表理解、UI 理解、自动驾驶、医疗影像等),相关的预训练技术(CLIP、ViT 等)也最成熟。

主流架构的演进

VLM 的架构发展可以大致分为三代。

早期的双塔对齐模型以 CLIP(Contrastive Language-Image Pre-training, OpenAI, 2021)为代表。CLIP 有一个图像编码器和一个文本编码器,通过对比学习让"匹配的图文对"的特征靠近、"不匹配的"远离。CLIP 学到了非常好的图文对齐表示,但它本身不是生成模型——不能基于图片生成自然语言描述,只能做检索和分类。CLIP 更大的价值是作为后续 VLM 的视觉编码器被复用。

基于 LLM 的 VLM(当前主流) 是把预训练的视觉编码器和预训练的 LLM 连接起来。核心问题是怎么把视觉特征"翻译"成 LLM 能理解的"语言"。不同的方案差异主要在这个"翻译"层的设计上。

LLaVA(Large Language and Vision Assistant)的方案最简洁——一个线性投影层(或 MLP)直接把 ViT 输出的 image token 特征映射到 LLM 的嵌入空间,然后和文本 token 拼在一起送进 LLM。简单但效果出奇地好,是目前最流行的开源 VLM 架构范式。训练分两阶段:第一阶段冻结 ViT 和 LLM,只训练投影层做图文对齐(用大量图文对数据);第二阶段解冻 LLM(有时也解冻 ViT 的后几层),用高质量的图文指令数据做 SFT。

Qwen-VL(阿里)的架构和 LLaVA 类似,但视觉编码器用的是更大的 ViT(ViT-bigG),并且支持更高分辨率的输入(动态分辨率)。Qwen2-VL 引入了 Naive Dynamic Resolution 方案——把不同大小的图片切成不同数量的 patch,不强制统一分辨率,能更好地处理各种尺寸的图片。

InternVL(上海 AI Lab)也是这个范式,特点是视觉编码器非常大(InternViT-6B),图文对齐的质量很高。在很多 benchmark 上是开源 VLM 中的顶尖。

BLIP-2 / InstructBLIP(Salesforce)用了一个 Q-Former(Querying Transformer)作为连接层——它不是简单的线性映射,而是用一组可学习的 query token 通过 cross-attention 从视觉特征中"提取"固定数量的 token,然后再送给 LLM。好处是不管图像多大,给 LLM 的 token 数量是固定的(通常 32 个),控制了计算成本。代价是信息可能在压缩过程中丢失。

原生多模态模型以 GPT-4o 和 Gemini 为代表——它们不是把视觉编码器和 LLM 拼起来,而是在预训练阶段就同时处理多种模态的数据,模型内部统一处理文本、图像、音频。这种方式跨模态的融合更深,但训练成本极高,目前只有少数顶尖实验室能做。

视觉编码器的选择

几乎所有开源 VLM 都用 ViT(Vision Transformer)系列作为视觉编码器。常见选择有 CLIP-ViT-L/14(LLaVA 系列)、SigLIP-ViT(PaliGemma)、EVA-CLIP-ViT-E(InternVL 早期版本)。

视觉编码器的输出是一组 image token——一张 224×224 的图片经过 ViT-L/14(patch size 14)后变成 个 token。更高分辨率意味着更多 token——448×448 就是 1024 个 token。这些 image token 塞进 LLM 的上下文窗口会占用大量位置,是 VLM 处理高分辨率图片的主要瓶颈之一。

分辨率的挑战

分辨率是 VLM 的核心工程挑战。很多实际任务需要看清图片中的细节——比如文档中的小字、表格中的数字、UI 界面中的按钮文字。低分辨率(224×224)下这些细节会丢失。

主流的解决方案有几种。动态分辨率——根据图片大小动态决定切多少 patch,不强制缩放到固定尺寸。图片切分——把高分辨率大图切成多个子图(tile),每个子图单独过 ViT 编码,最后把所有子图的 token 合并。LLaVA-NeXT 和 Qwen2-VL 都用了类似的方案,能处理 2K 甚至更高分辨率的图片,代价是 image token 数量大幅增加。

面试时可以这样答

VLM 的主流架构是"视觉编码器 + 投影层 + LLM"三段式。视觉编码器通常是预训练的 ViT,负责把图片编码成一组 image token。投影层把 image token 的特征映射到 LLM 的嵌入空间。然后 image token 和 text token 拼在一起送进 LLM,由 LLM 统一做理解和生成。

不同模型的差异主要在投影层和分辨率处理上。LLaVA 用简单的 MLP 投影,简单但有效。BLIP-2 用 Q-Former 做信息压缩,控制送给 LLM 的 token 数量。Qwen-VL 和 InternVL 在动态分辨率和大 ViT 上做了更多工作。GPT-4o 和 Gemini 是原生多模态,预训练阶段就同时处理多种模态。

分辨率是核心工程挑战。高分辨率图片编码后 image token 很多,占用大量上下文窗口。目前主流方案是动态分辨率加图片切分——把大图切成子图分别编码再合并。

常见追问

  1. LLaVA 的两阶段训练分别做了什么?为什么要分两阶段?
  2. Q-Former 和线性投影各有什么优缺点?
  3. image token 太多怎么办?有哪些压缩 image token 的方法?