视觉-语言模型(VLM)的架构:视觉编码器 + 连接器 + 语言模型——为什么是这三件套

我第一次看到 VLM 的架构图时,脑子里冒出的第一个念头是:这不就是拿一个图像模型和一个语言模型,中间加个“转接头”拼在一起吗?为什么不能端到端训一个模型,直接把像素吃进去、文字吐出来?后来我亲手训了几个模型,发现只要中间那个连接器设计得不好,整个模型就会像耳朵里塞了棉花——明明图像信息进去了,它却只靠语言模态的统计惯性在猜。踩过这些坑之后我才想通,视觉编码器 + 连接器 + 语言模型这个三件套,并不是三个独立组件的随意拼凑,而是当前技术条件下解决跨模态对齐问题的最优解,甚至可以说是一种必然路径。

AI technology illustration

要理解这个必然性,我们得先回答一个核心问题:为什么不能像训练纯文本模型那样,直接把图像像素序列扔进 Transformer?

视觉编码器:为什么是 CLIP 的视觉塔,而不是从头训一个 ViT?

你可能会想,既然 Transformer 能处理任意序列,那把图像切成 patch,当成一种特殊的 token 输入,让模型自己学不就行了?理论上确实可以,比如 ViT 就是这么做的。但问题在于,语言模型本身并不理解视觉信号中的“语义”——它看到的只是一堆数值,而不是“一只猫”或“夕阳下的海滩”。如果让模型从零开始同时学习视觉特征和语言生成,你需要海量的图文对数据,而且训练极不稳定。

这就是为什么几乎所有 VLM 都直接复用现成的视觉编码器,而且绝大多数选的是 CLIP 的视觉塔。CLIP 通过对比学习,把图像和文本映射到了同一个语义空间:图像编码器输出的向量,与对应描述的文本编码器输出的向量,在空间里距离很近。CLIP 论文 证明了这种预训练带来的视觉表示已经天然和语言“对齐”了一大半。我们只需要借用它的视觉塔,输出一个已经富含语义的图像特征序列,而不是从头去学那些低级纹理。

我最早的一个实验就犯过这个错:用了一个在 ImageNet 上训好的 ViT 当视觉编码器,没做任何跨模态预训练,直接接上 LLM 做指令微调。结果模型在描述图片时,颜色和物体类别经常搞混,因为它从 ViT 拿到的特征更偏向分类所需的判别性信息,而不是语言描述所需的语义信息。后来换成 CLIP 视觉塔,同样的连接器和 LLM,效果立刻提升了一大截。

连接器:为什么不能直接把视觉特征拼到文本 embedding 里?

视觉编码器输出的是一串向量,比如 CLIP ViT-L/14 对一张图输出 257 个 token(1 个 CLS + 256 个 patch),每个 token 维度是 1024。而语言模型的 token embedding 维度可能是 4096 或更高。一个最直接的念头是:加一个线性层,把 1024 维映射到 4096 维,然后把这一串视觉 token 直接拼到文本 token 序列前面,让 LLM 去看。这确实是 LLaVA 的做法,简单有效。LLaVA 论文 证明,一个简单的线性投影就能让冻结的 LLM 理解图像。

但问题马上就来了:视觉 token 太多了,而且信息密度极低。一张图 257 个 token,如果输入分辨率再高一点,轻松上千。而 LLM 的注意力复杂度是 O(n²),几千个 token 会让推理速度慢到不可接受。更致命的是,这些视觉 token 里有很多冗余——相邻 patch 的特征高度相似,直接喂给 LLM 就像把一整本字典摊开让人读,效率极低。

于是就有了各种“压缩型”连接器。我最早理解这些设计时,觉得它们只是工程上的 trick,后来才想通:连接器的本质任务不是“维度匹配”,而是“信息翻译与压缩”——它要把视觉编码器产生的、高冗余的、视觉空间里的特征,翻译成语言模型能高效消化的、低冗余的、语义空间里的 token。

下面这张表总结了几种主流连接器的设计思想,它们的区别本质上就是“怎么翻译、怎么压缩”:

连接器类型 代表模型 设计思想 视觉 token 数 优缺点
线性投影 / MLP LLaVA, InstructBLIP 视觉塔 一个或几层全连接层,直接映射维度,保留所有 token 与编码器输出相同(如 257) 简单,不损失空间信息,但 token 多,计算量大,冗余高
Q-Former BLIP-2 用一组可学习的 query token 与冻结的视觉特征做交叉注意力,抽取出压缩的视觉表示 固定(如 32) 压缩率高,可学习选择信息,但结构复杂,需要额外预训练
Perceiver Resampler Flamingo 类似 Q-Former,用可学习的潜在变量通过交叉注意力压缩视觉特征 固定(如 64) 灵活,可以处理变长视频帧,但超参数敏感
MLP + 重采样 CogVLM 先用 MLP 映射,再通过一个可学习的下采样模块减少 token 数 减少(如 64) 在保留空间结构和压缩之间折中,但实现复杂

我自己在实验时,先用线性投影跑了一个小模型,发现训练时 loss 下降很快,但推理时一张图生成一句话要好几秒,而且 GPU 显存占用极大。后来换成了类似 Q-Former 的压缩思路,把 257 个 token 压到 32 个,速度提升了 3 倍,生成质量反而更好——因为压缩模块学会了扔掉那些不重要的背景细节,把注意力留给关键物体。这让我意识到,连接器的设计直接决定了模型效率和多模态对齐的质量,绝不是“加个全连接层就行”那么简单。

语言模型:为什么非得用预训练 LLM,而不能从头训一个解码器?

这个问题的答案相对直观,但也是整个三件套合理性的最后一块拼图。预训练 LLM 已经掌握了语法、常识、推理能力和丰富的世界知识,它就像一个已经读过几百万本书的人,现在你只需要给他装上眼睛。如果从头训练一个多模态模型,你需要同时学习语言能力和视觉-语言对齐,这需要的数据量和计算资源是天文数字,而且效果还不一定比得上“拿来主义”。

BLIP-2 的论文里有一个非常精彩的设计:他们完全冻结了视觉编码器和 LLM,只训练中间的 Q-Former。BLIP-2 论文 证明,即使两个大模型都冻住,只要连接器足够好,整个系统就能实现强大的多模态能力。这背后的潜台词是:视觉和语言两个模态的预训练知识,已经足够丰富,我们缺的只是一个能把它们“说上话”的翻译官。

当然,到了微调阶段,很多方法会选择解冻 LLM 做视觉指令微调,让模型更好地适应对话和指令。但基座模型的选择仍然至关重要——LLaMA、Vicuna、Gemma 这些强文本模型,直接决定了 VLM 的上限。

为什么是这三件套,而不是两件套或四件套?

走到这里,你应该能理解为什么这个架构几乎成了唯一选择:

  • 视觉编码器必须独立且预训练——因为视觉语义学习需要对比语言,而这不是 LLM 自己能完成的。
  • 连接器必须存在——因为两个预训练模块的表示空间和序列长度都不匹配,需要一个可学习的翻译压缩层。
  • 语言模型必须独立且预训练——因为语言能力和世界知识需要海量文本训练,无法在图文对数据上高效习得。

任何想省掉其中一个组件的尝试,都会撞上数据或计算上的墙。比如谷歌的 PaLI 系列虽然用了一个统一的编码器-解码器架构,但它的视觉和语言部分仍然需要分开预训练,本质上还是三件套的变体。

常见误解澄清

连接器可以用恒等映射吗?

不行。视觉 token 的维度通常与语言模型 embedding 维度不同,即使是简单的维度对齐,也需要一个可学习的矩阵。更重要的是,如果不做任何变换,视觉特征和语言 token 嵌入在空间中的分布差异巨大,LLM 很难有效交叉注意力。

既然 LLM 是冻住的,那它怎么“看到”图像?

这正是连接器的巧妙之处:它把视觉信息转换成了 LLM 能够“理解”的 token 序列,这些 token 在 LLM 眼里就像一段特殊的文本前缀。LLM 只是按语言模型的习惯去处理这些 token,但注意力机制会自然地把它们和后续的文本 token 关联起来,从而实现多模态推理。

为什么有的模型连视觉编码器也一起微调?

部分模型(如 LLaVA-1.5 的某些变体)会在指令微调阶段解冻视觉编码器,让视觉特征也适应下游任务。但这是一个风险操作:如果微调数据不够多,很容易破坏 CLIP 预训练出来的对齐,导致视觉表示退化。通常建议保持视觉编码器冻结,或者使用极小的学习率。

三件套的边界在哪里?

如果你的任务需要非常细粒度的视觉理解(比如千万像素的医学图像),固定数量的视觉 token 压缩就会丢失细节;如果你的任务需要模型自主决定“看哪里”(比如视觉导航),纯前馈的连接器就缺乏动态性。但这些场景已经超出了当前 VLM 的主流应用范围,属于研究前沿。

最后,我自己的一个判断是:三件套架构在未来几年内仍然会是 VLM 的主流范式,因为它完美地利用了现有预训练模型的积累,把跨模态对齐的成本降到了最低。但连接器的设计会越来越精巧——从简单的线形投影,到可学习的压缩,再到可能引入动态路由或记忆机制的复杂结构。而真正的“原生多模态模型”,也就是那种从零开始、用统一架构同时处理所有模态的模型,虽然理论上更优雅,但短期内还很难超越这种“拼装式”方案的性价比。毕竟,站在两个巨人的肩膀上,总比自己从头长高要快得多。

进阶阅读:几篇关键的原始论文

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/77.html

(0)
上一篇 2026年8月14日 上午12:32
下一篇 2026年8月14日 上午6:33

相关推荐