我第一次看到 BLIP-2 的架构图时,脑子里冒出一个念头:这不就是给图像特征加了个“数据库查询接口”吗? 你有一大堆从 ViT 里吐出来的图像特征,密密麻麻,语言模型根本看不懂。Q-Former 做的事情,就是派几个可学习的“查询向量”过去,像 SQL 一样去问图里有什么,然后把返回的结果压缩成几个紧凑的 token,直接喂给冻结的 LLM。整个过程,图像编码器和语言模型都不用动,只训练这个小巧的查询模块。

这个想法太聪明了,但也很容易让人误解。我最早以为 Q-Former 是一个简单的特征降维器,把 257 个 patch 特征硬压成 32 个 token。后来看论文才发现,它根本不是压缩,而是“选择性提取”——查询向量通过交叉注意力从图像特征中抓取与语言相关的内容,无关的细节直接扔掉。这种机制让 Q-Former 输出的 token 更像是“语言友好的视觉摘要”,而不是压缩后的像素残渣。
为什么需要 Q-Former 这个“中间人”?
在多模态大模型里,最常见的做法是把图像编码器(比如 ViT)的输出直接送给语言模型,要么通过线性投影,要么通过一个重采样器(如 Perceiver)。但 BLIP-2 想走得更极致:图像编码器冻结,语言模型冻结,中间的连接器得足够轻量,还得能对齐两边的表示空间。
直接用线性投影把图像特征映射到 LLM 的 token 空间,效果往往不好,因为图像特征里有很多语言模型不关心的信息(比如纹理细节、背景噪声)。而 Q-Former 通过交叉注意力,让查询向量能主动从图像中“问”出语言模型需要的东西,这比无脑压平所有特征精准得多。
| 方法 | 是否冻结图像编码器 | 是否冻结 LLM | 连接器复杂度 | 信息选择能力 |
|---|---|---|---|---|
| 线性投影 | 通常冻结 | 通常需微调 | 低 | 无,全量映射 |
| Resampler (如 Perceiver) | 可冻结 | 可冻结 | 中等 | 有,但压缩的是固定模式 |
| Q-Former | 冻结 | 冻结 | 中等(Transformer) | 强,查询驱动,与语言目标对齐 |
Q-Former 的核心优势在于“查询”的可学习性:这些查询向量不是静态的,而是通过两阶段训练,学会了如何从图像中提取能匹配文本描述、能回答问题的信息。
可学习查询到底是什么?
如果你用过 Transformer,可以把这些查询向量理解为 decoder 的输入序列。在标准 Transformer 里,decoder 的输入是 token 嵌入,在 Q-Former 里,输入是一组随机初始化的、可学习的嵌入向量,比如 32 个,每个维度 768。这些向量在训练过程中不断更新,学习成了“视觉专家”。
在模型前向传播时,这些查询向量先通过自注意力层互相交流(比如第一个查询决定关注“物体类别”,第二个决定关注“空间关系”),然后通过交叉注意力层去图像编码器的输出特征里抓取信息。交叉注意力层就是那个“查询接口”:查询向量作为 Q,图像特征作为 K 和 V,注意力机制让每个查询向量能从图像特征里加权聚合需要的信息。最后输出 32 个与图像内容相关的向量,每个向量都融合了视觉和语言的对齐信号。
训练过程:三步把查询向量“教聪明”
Q-Former 的训练包含两个阶段,其实可以拆成三个损失函数,每个都迫使查询向量学习不同的能力。
- 图像-文本对比学习(ITC): 对齐图像表示和文本表示。查询向量输出中取一个全局摘要(比如第一个查询的输出),与文本的 [CLS] token 做对比,让匹配的图文对距离更近,不匹配的更远。这训练查询向量提取全局语义。
- 图像-文本匹配(ITM): 判断图文是否匹配。查询向量输出送入一个二分类头,预测图文对是否一致。这迫使查询向量提取更细粒度的对应关系,而不仅仅是全局相似度。
- 图像引导的语言生成(ITG): 查询向量输出作为前缀(prefix)送入冻结的 LLM,让 LLM 生成图像描述。这里损失直接作用在生成的文本上,所以查询向量必须学会提取所有能帮助描述图像的视觉信息,包括物体、属性、动作、关系等。
这三个损失就像三个教练,分别教查询向量:全局理解、细节匹配、语言表达。而且,ITC 和 ITM 用的是同一个 Q-Former 的共享自注意力层,但有不同的注意力掩码,让查询向量在对比任务中看整体,在匹配任务中看局部。这种设计避免了为每个任务单独训练一个模型。
论文原文:“Q-Former consists of two transformer submodules that share the same self-attention layers: an image transformer that interacts with the frozen image encoder, and a text transformer that can function as both a text encoder and a text decoder.” BLIP-2 论文
从查询输出到 LLM 能懂的 Token
训练完成后,Q-Former 输出的 32 个向量(假设 32 个查询)就已经是语言模型可以理解的“视觉 token”了。在推理时,我们直接把冻结的 LLM 的 token 嵌入矩阵乘以这些向量,得到对应的 token 嵌入,然后作为前缀拼接到文本输入之前。这一步甚至不需要额外的投影层,因为 Q-Former 的查询输出维度已经和 LLM 的隐藏维度对齐(或者经过一个简单的线性层对齐)。
这 32 个 token 就像给 LLM 戴上了一副“猫眼眼镜”:模型看到的不再是原始的像素,而是 Q-Former 已经解读好的视觉摘要,它直接就能用自然语言处理能力去描述、推理、问答。而且因为 LLM 完全冻结,所有强大的语言能力都被保留了下来,没有因为微调图像数据而遗忘。
为什么这种设计让人拍大腿?
我读论文时最受触动的点,是 Q-Former 把“信息瓶颈”变成了“信息选择器”。传统的压缩是把高维特征降维,信息必然会丢失,但 Q-Former 通过训练让查询向量学会了“只保留语言模型需要的信息”,这比无差别的压缩高效得多。而且,32 个查询这个数量很精妙:太少(比如 8 个)会丢失细节,太多(比如 256 个)又会让 LLM 的输入序列变长,推理成本上升。32 是他们在效率和性能之间找到的平衡点。
另一个让我恍然大悟的点是:Q-Former 不是简单的 ViT-to-LLM 适配器,它是一个小型的语言模型(第二阶段的文本 transformer 可以是 decoder),它自身就具备一定的语言理解能力。在训练 ITG 时,Q-Former 的文本部分根据查询输出和已生成的文本,一步步预测下一个词,这个过程让查询输出和语言序列建立了因果联系,相当于把视觉信息“翻译”成了语言模型的内部语言。
一些局限和你可能踩的坑
Q-Former 虽然优雅,但也不是万能的。固定数量的查询向量意味着信息容量有上限,如果图像包含大量细节(比如需要数出 50 个物体),32 个 token 可能不够用。另外,查询向量的分工是隐式学习的,不可控,有时候模型会忽略一些重要但小众的物体,因为查询向量被训练数据的主流模式带偏了。
还有,冻结 LLM 虽然保留了语言能力,但也限制了模型对视觉信息的深度理解。如果 LLM 本身对某些视觉概念没有先验知识(比如稀有动物),Q-Former 即使提取了正确的视觉特征,LLM 也没有对应的词汇或概念去表达。这就像你给一个只会中文的人看一篇英文摘要,他顶多认出几个单词,但无法理解全貌。
进阶阅读:Q-Former 与 BLIP-1 的对比
BLIP-1 用的是 MED 架构(Mixture of Encoder-Decoder),需要微调整个图像编码器和文本模块,成本高。BLIP-2 提出 Q-Former 就是为了实现极致的冻结,让训练成本降低 50 倍以上,同时性能更强。Q-Former 的查询数量也可以调整,论文中实验了 32 和 64,发现 32 已经足够好。
总的来说,Q-Former 给多模态模型设计提供了一种全新的思路:不要试图让模型自己去费力对齐两个模态,而是训练一个轻量的“翻译官”,让它学会把视觉语言翻译成文本语言。这个翻译官不大,但足够聪明,它懂得怎么问问题,怎么压缩信息,怎么让下游的 LLM 一眼看懂。理解了这一点,你就会明白 BLIP-2 为什么能在 2023 年震惊整个多模态社区——它用最小的代价,撬动了最大的模型能力。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/79.html