多模态大模型架构深挖(VLM)
「图片是怎么进到 LLM 里的?」是多模态面试的核心问题。本文深挖视觉语言模型(VLM)的架构:视觉编码器、连接器(projector)、特征对齐、原生多模态,以及高分辨率/视频的处理。多模态总览见 多模态大模型,检索见 多模态 RAG。
一、核心问题:模态鸿沟
LLM 只懂 token(文本嵌入向量)。图片是像素,不是 token。VLM 要解决的就是把视觉信息变成 LLM 能消化的「视觉 token」,并和文本 token 对齐到同一个表示空间。
图片像素 ──视觉编码器──► 视觉特征 ──连接器──► 视觉 token ──┐
├──► LLM ──► 文本输出
文本 ──────分词+嵌入──────────────────────► 文本 token ──┘二、三大组件
1. 视觉编码器(Vision Encoder)
把图片编码成特征向量。主流是 ViT(Vision Transformer):把图片切成 patch(如 16×16),每个 patch 当一个「视觉 token」过 Transformer。
- 最常用 CLIP 的视觉编码器——它在图文对上预训练过,特征已经和语言「对齐」过,是 VLM 的事实标准起点。
- 也有用 SigLIP 等更新的图文对比编码器。
2. 连接器 / 投影器(Connector / Projector)
视觉编码器的输出维度、语义空间和 LLM 的文本嵌入空间不一致,需要一个「翻译模块」把视觉特征映射成 LLM 能吃的「视觉 token」:
| 连接器类型 | 做法 | 代表 |
|---|---|---|
| MLP / 线性投影 | 简单几层全连接做映射 | LLaVA(简单有效,主流) |
| Q-Former / Resampler | 用少量可学习 query 通过注意力「压缩」视觉特征 | BLIP-2、Flamingo |
| 像素 Shuffle / 像素重排 | 把空间 patch 重排成更少 token | Qwen2-VL、InternVL 2.5 |
| Cross-Attention 注入 | 在 LLM 层间插交叉注意力读图像 | Flamingo |
- LLaVA 证明了简单 MLP 投影 + 好数据就能做出强 VLM,是性价比最高的路线,被广泛沿用。
- Q-Former/Resampler 把几百个 patch 压成固定的几十个 token,省 token、控成本,适合 patch 多的场景。
3. LLM 主干
接收「视觉 token + 文本 token」的混合序列,像处理纯文本一样自回归生成回答。多数 VLM 直接复用现成的开源 LLM(LLaMA/Qwen 等)。
三、两种融合方式
| 早期融合 / 适配器(主流) | 原生多模态 | |
|---|---|---|
| 做法 | 预训练 LLM + 视觉编码器,用连接器拼起来再微调 | 从头在文本+图像+音频上联合预训练 |
| 代表 | LLaVA、Qwen2-VL、InternVL 2.5 | GPT-4o/GPT-5、Gemini 2.5 |
| 优点 | 复用现成 LLM,便宜、快 | 模态融合更深、能力上限更高 |
| 缺点 | 视觉是「外挂」,融合较浅 | 训练成本极高 |
趋势:从「给 LLM 外挂眼睛」(适配器路线)走向「原生多模态」——从预训练就把多种模态当一等公民联合建模(GPT-4o 的实时音视频、统一 token 空间)。原生路线模态融合更深,但只有大厂训得起。
四、训练流程(适配器路线)
通常两到三阶段:
阶段一 对齐预训练:冻结视觉编码器和 LLM,只训连接器
(用海量图文对,让视觉 token「翻译」到 LLM 空间)
阶段二 指令微调:解冻 LLM(视觉编码器常仍冻结或小学习率)
(用多模态指令数据,学会「看图回答问题」)关键认知:视觉编码器的图文对齐能力主要靠 CLIP 预训练已经获得,VLM 训练重点是「教 LLM 读懂视觉 token」和「对齐指令」,而非从零学视觉。
五、高分辨率与视频的难题
patch 化的硬伤:分辨率越高 patch 越多,视觉 token 数量爆炸(成本和上下文压力)。
- 高分辨率:切分成子图分别编码(AnyRes/动态分辨率),或用 Resampler 压缩 token 数。Qwen2-VL 用动态分辨率 + 像素 shuffle,能处理任意分辨率和长宽比。InternVL 2.5 采用类似策略并在文档/图表理解上表现出色。文档/图表理解尤其依赖高分辨率(否则小字看不清)。
- 视频:帧数 × 每帧 patch 数 = token 海啸。要抽帧、时序压缩、或用专门的时空编码(见 视频生成 的时空 patch 思想)。
- 这也是 ColPali 等「直接编码文档截图」方案要解决的成本核心(见 多模态 RAG)。
高频追问
Q:图片是怎么输入到 LLM 里的? 三步:① 视觉编码器(通常 CLIP ViT)把图片切 patch 编码成视觉特征;② 连接器(MLP 或 Q-Former)把视觉特征映射成 LLM 嵌入空间里的「视觉 token」;③ 视觉 token 和文本 token 拼成一个序列喂给 LLM,自回归生成。核心是把图片变成 LLM 能消化的 token。
Q:为什么视觉编码器常用 CLIP 的? CLIP 在海量图文对上做对比学习预训练,它的视觉特征已经和语言语义对齐——「狗的图片」特征和「狗」这个词的特征接近。这让后续把视觉特征接入 LLM 容易得多,不用从零学「视觉↔语言」的对应。
Q:连接器(projector)的作用是什么?MLP 和 Q-Former 怎么选? 把视觉特征翻译成 LLM 能吃的视觉 token(对齐维度和语义空间)。MLP 简单、保留全部 patch、效果好(LLaVA 路线),主流首选;Q-Former/Resampler 用少量 query 压缩视觉 token 数量,省 token、控成本,适合 patch 很多(高分辨率/视频)的场景。
Q:适配器路线和原生多模态有什么区别? 适配器路线是「现成 LLM + 视觉编码器用连接器拼起来再微调」,便宜快但融合浅(视觉像外挂);原生多模态从预训练就联合建模多种模态(统一 token 空间),融合深、上限高(GPT-4o/Gemini),但训练成本极高。趋势是从适配器走向原生。
Q:VLM 训练为什么常冻结视觉编码器? 因为视觉编码器(CLIP)的图文对齐能力已经预训练好了,VLM 的重点是教连接器和 LLM「读懂并使用」视觉 token。冻结编码器省算力、防止小数据破坏已学好的视觉表示;对齐阶段甚至连 LLM 也冻结,只训连接器。
Q:VLM 处理高分辨率图/视频的瓶颈是什么? patch 数量。分辨率/帧数一高,视觉 token 数量爆炸,吃满上下文且推理变贵。对策:动态分辨率切子图、Resampler 压缩 token、视频抽帧+时序压缩。文档理解类任务对分辨率敏感(小字、表格),是当前 VLM 的难点之一。