多模态大模型的核心范本:深入解读 BLIP 的统一理解与生成架构
论文标题: BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
作者: Salesforce Research(2022)
核心思想: 用一套"多模块共享权重"的统一架构,同时搞定理解与生成两类任务;并首次将数据质量问题纳入预训练框架本身,通过 CapFilt 机制实现数据的自我净化与自我扩充。
本文涉及到的一些BLIP诞生之前的其他模型基础知识,可参考我的其他博文,有具体介绍。
目录
1. 诞生背景
如果说 VLMo 解决的核心问题是"用一个架构做多件事",那么 BLIP 在继承这一思路的同时,追问了一个更底层的问题:"我们拿来训练的数据,是否足够干净、足够可靠?"
1.1 现有方法的两个未解问题
问题一:理解与生成,依然是两个世界。
在 BLIP 之前,多模态预训练模型大致分为两类。以 CLIP、ALBEF 为代表的理解型模型,擅长图文检索、视觉推理这类判别性任务,但它们的架构天然不具备生成能力,无法完成图像描述(Image Captioning)这类需要逐词输出的任务。而以 SimVLM 为代表的生成型模型,虽然引入了解码器,却在判别性任务上表现平平,因为编码阶段的图文交互被生成目标所主导。
没有一个模型能真正做到两手都硬。
问题二:网络爬取的图文数据,噪声极大。
大规模多模态预训练高度依赖从网络自动爬取的图文对数据(如 LAION、CC12M 等)。然而这类数据中,文本描述与图像内容往往存在严重的语义错位——图是一只猫,配文却是电商促销话术;图是风景照,配文是无关的新闻标题。现有模型对这类噪声数据几乎没有任何过滤机制,只能照单全收,任由噪声侵蚀模型的对齐质量。
1.2 BLIP 的回答
BLIP 针对上述两个痛点,分别给出了对应的解决方案:
- 针对理解与生成的割裂:设计了一个包含四个功能模块的统一架构——多模态混合编解码器(Multimodal Mixture of Encoder-Decoder,MED),通过参数共享机制让理解和生成在同一套权重下共存。
- 针对网络数据的噪声:提出了 CapFilt(Captioning + Filtering)机制——让模型自己生成高质量标注,再用自己来过滤掉噪声,实现数据的自举(Bootstrapping)。
这两个设计共同构成了 BLIP 的完整框架,下面我们分别深入拆解。
2. 核心架构:多模态混合编解码器(MED)
BLIP 的架构设计既有对前人工作的继承,又有自己独到的创新。
2.1 整体结构:四个模块,一套权重
如图所示,BLIP 的 MED 由四个功能模块组成:
- 图像编码器(Image Encoder)
- 文本编码器(Text Encoder)
- 图文交叉编码器(Image-grounded Text Encoder)
- 图文交叉解码器(Image-grounded Text Decoder)

乍看之下,四个模块似乎意味着四倍的参数量。但 BLIP 的精妙之处在于,右侧三个文本相关模块之间大量共享参数——它们共用同一套自注意力层(Self-Attention)和前馈网络(Feed Forward)的权重,只在少数地方存在结构差异。这与 VLMo 用"专家 FFN"区分模态的思路有异曲同工之妙:VLMo 的共享发生在注意力层,BLIP 的共享则发生在更大粒度的模块级别。
三个预训练任务与三个模块一一对应,接下来我们逐模块拆解。
2.2 图像编码器:视觉特征的提取者
图像编码器采用标准的 ViT 结构,与 CLIP、ALBEF 的处理方式完全一致:将输入图像切分成若干 patch,经过线性投影和位置编码后,送入若干层 Transformer 自注意力层。最终输出的是一系列 patch-level 的视觉特征向量序列,作为后续文本模块进行交叉注意力的"视觉记忆库"。
这里没有太多新意,但 BLIP 选择了沿用 ViT-B/16 和 ViT-L/16 两种规格,为后续与纯文本模块的对接提供了充分的特征维度。
2.3 文本编码器:对齐任务的承担者(ITC)
文本编码器是一个标准的双向 Transformer,以 [CLS] 开头的 token 序列作为输入。它的结构非常简洁:只有双向自注意力(Bi Self-Att)和前馈网络(Feed Forward),没有交叉注意力模块。
这意味着文本编码器在编码阶段完全不感知图像——它只负责纯文本的语义理解,输出的 [CLS] 特征用于与图像编码器输出的视觉特征做图文对比学习(ITC)。
这一设计延续了 ALBEF 的思路:先用轻量的对比学习在特征空间拉近图文表示,再用更重的融合模块完成细粒度理解。文本编码器在这里扮演的,是 CLIP 里文本塔(text tower)的角色。
2.4 图文交叉编码器:理解任务的承担者(ITM)
图文交叉编码器在文本编码器的基础上,额外插入了一个交叉注意力层(Cross Attention),位于双向自注意力和前馈网络之间。
这个交叉注意力层的作用是:以文本 token 为 Query,以图像编码器输出的视觉特征序列为 Key 和 Value,让文本的每一个位置都能"看见"图像的每一个区域,从而实现真正意义上的图文深度融合。
这与 ViL-BERT 的交叉注意力模块在功能上完全等价,但 BLIP 的创新在于它与文本编码器共享了自注意力层和 FFN 的参数——两个模块的差别只是多了一个交叉注意力层,其余权重完全绑定。这大幅减少了参数冗余,同时也让两个模块的语言理解能力可以相互促进。
输入序列的开头换成了 [Encode] 标志(区别于纯文本编码器的 [CLS]),最终取 [Encode] 对应的输出特征接二分类头,完成图文匹配任务(ITM)的判别。
这里有一个与 ALBEF 一脉相承的细节:BLIP 同样采用了难负样本挖掘策略,利用 ITC 学到的相似度分布,有倾向性地采样那些语义相近却实际不匹配的"混淆对"作为 ITM 的负样本。VLMo 中也采用了这一策略并将其扩展到了跨 GPU 级别——可以看出,难负样本挖掘已经成为这一时期多模态预训练的标配设计。
2.5 图文交叉解码器:生成任务的承担者(LM)
图文交叉解码器是 BLIP 区别于 ALBEF 和 VLMo 最关键的一个模块,也是它能够同时处理生成任务的根本原因。
它的结构与图文交叉编码器极为相似,同样包含自注意力、交叉注意力和前馈网络三层。但有一个关键差异:自注意力层从双向(Bi Self-Att)替换为因果自注意力(Causal Self-Att)。
所谓因果自注意力,即经典的 GPT 式自回归掩码——每个 token 只能看见它前面的 token,而不能看见后面的。这一改动使得解码器具备了自左向右逐词生成的能力,从而可以完成图像描述(Image Captioning)等文本生成任务。
输入序列的开头换成 [Decode] 标志,交叉注意力层同样接受图像编码器的视觉特征作为 Key/Value,以视觉信息为锚点引导文本生成。训练目标是经典的语言模型损失(LM Loss),即最大化在给定图像条件下生成正确文本序列的概率。
同样地,解码器的交叉注意力层和前馈网络与编码器侧共享参数,只有自注意力层因为掩码机制的不同而独立存在。
至此,BLIP 的四模块架构完整呈现。我们可以用一句话总结它的设计哲学:
在一套共享的语言理解骨架上,通过注意力掩码和不同的输入标志,激活三种截然不同的工作模态——对齐、理解、生成。
这与 VLMo 用"专家 FFN 切换"来激活不同模态的思路有着深刻的相似性,区别在于 VLMo 的切换发生在参数层面(不同专家拥有独立权重),而 BLIP 的切换发生在结构层面(相同权重,不同的注意力掩码和输入信号)。
3. 预训练策略:三任务联合训练
对应三个功能模块,BLIP 设计了三个预训练任务,在同一批图文数据上同步训练。
3.1 图文对比学习(ITC)
由文本编码器和图像编码器承担。给定一批图文对,ITC 拉近正样本对(匹配的图文)在特征空间的距离,推开负样本对(不匹配的图文)。损失函数采用对称的 InfoNCE 损失,与 CLIP 的训练目标完全一致。
ITC 的主要价值在于提供一个轻量但语义对齐的特征空间,这个特征空间随后被 ITM 的难负样本挖掘所利用。
3.2 图文匹配(ITM)
由图文交叉编码器承担。这是一个二分类任务——输入一对图文,判断是否匹配。难负样本挖掘确保模型不只是学会区分"一只猫"和"一首诗",而是能够分辨"坐着的猫"和"站着的猫"这类细粒度差异。
3.3 语言模型任务(LM)
由图文交叉解码器承担。给定图像,以自回归方式生成与图像匹配的文本描述。这个任务是 BLIP 相比 ALBEF 最大的增量——ALBEF 没有解码器,因此完全无法完成这类生成任务。
三个任务共同训练,既保证了特征对齐的质量(ITC),又强化了细粒度图文理解(ITM),还赋予了模型语言生成的能力(LM)。
4. CapFilt:让模型自己净化数据
如果说 MED 架构是 BLIP 在"模型侧"的创新,那么 CapFilt 就是它在"数据侧"的核心贡献——也是"Bootstrapping"这个词出现在论文标题中的真正原因。
4.1 问题的本质
从网络爬取的图文数据(如 CC12M、LAION 等)规模巨大,但质量堪忧。大量的配文与图像内容关联松散,甚至完全无关。如果将这些噪声数据直接用于预训练,模型学到的"图文对齐"其实是一种伪对齐——建立在错误标注之上的语义关联。
人工标注的高质量数据(如 COCO Captions)质量极高,但体量太小,根本撑不起大规模预训练的需求。
CapFilt 的核心思路是:用少量高质量的人工数据微调模型,再让微调后的模型回头处理海量的噪声数据——既生成新的标注,又过滤掉不可信的旧标注。
4.2 CapFilt 的完整流程
如图所示,整个流程分为两个并行分支,最终汇合成一个更干净的训练集:

第一步:初始预训练。 用网络爬取数据(含噪声的图文对 )和人工标注数据(高质量图文对
)的混合集合,对 MED 进行初始预训练,得到一个基础模型。
图中红色代表噪声数据,绿色代表高质量数据。
第二步:派生两个专职模型。
-
Captioner(字幕生成器):从基础模型的图文交叉解码器出发,在人工标注数据上做 LM 任务的微调,得到一个专门用于生成图像描述的模型。将网络图像
输入 Captioner,为每张图生成一条合成标注
,形成合成图文对
。由于不知道生成质量,依然有一些生成数据是低质量的。
-
Filter(噪声过滤器):从基础模型的图文交叉编码器出发,在人工标注数据上做 ITC + ITM 任务的微调,得到一个专门用于判断图文是否匹配的模型。将原始网络配文
和合成标注
分别与对应图像送入 Filter,过滤掉 ITM 分类为"不匹配"的文本,保留高置信度的配对。
第三步:构建自举数据集,重新训练。 将过滤后的网络图文对 、过滤后的合成图文对
以及原始人工标注
合并,形成一个比初始数据集更干净、信息更丰富的新训练集,用于重新预训练最终的 BLIP 模型。
下图中,作者展示了一些示例的字幕与对应的图片。 是直接从网络上爬取的原始字幕,
是字幕器生成的字幕。图4中的红色文本是 Filter 删除的文本,绿色文本是 Filter 保留下来的文本。可以看出几张图片里面,红色的文本不是不好,只是没有绿色的文本对图片的描述更加贴切。这个结果说明了 CapFilt 方法确实是能够提升图文对数据集的质量。

这个流程的精妙之处在于它的自洽性:Captioner 和 Filter 都来自同一个预训练模型,生成与过滤形成了一个闭环——模型用自己的理解能力去改善自己的训练数据,再用更好的数据训练出更强的模型。这正是"Bootstrapping(自举)"一词的精确含义。
5. 下游任务微调
得益于 MED 架构兼顾理解与生成的设计,BLIP 在下游任务的覆盖范围上远超此前的大多数模型。
理解类任务——图文检索(Image-Text Retrieval)、视觉问答(VQA)、自然语言视觉推理(NLVR2):直接利用 ITC 和 ITM 的输出特征,微调图像编码器 + 文本编码器 / 图文交叉编码器即可。
生成类任务——图像描述(Image Captioning)、视觉对话(Visual Dialog):利用图文交叉解码器,在下游数据上继续做语言模型微调。
这里有一个细节值得关注:在图文检索任务中,BLIP 同样采用了 VLMo 的"两阶段检索"策略——先用文本编码器和图像编码器做轻量的特征检索,召回 Top-K 候选;再用图文交叉编码器对这 K 个候选做精细的 ITM 重排序。这既保留了检索的速度,又提升了最终的精度,是业界在这类任务上已经相对成熟的工程范式。
6. 实验结果
如下图所示,作者比较了在不同数据集上预训练的模型,是一个 CapFilt 的消融实验结果。Retrieval 代表检索任务的结果,Caption 代表生成任务的结果。
当使用 14M 的数据集设置时,联合使用字幕器 Captioner 和过滤器 Filter 可以观察到性能改进,而且它们的效果相互互补,证明了 CapFilt 方法能够从嘈杂的原始数据中提炼出有用的数据。
当使用更大的数据集 129M 的设置或者更大的模型 ViT-L 时,CapFilt 可以进一步提高性能,这验证了它在数据大小和模型大小方面的可扩展性。而且,仅仅增加字幕器和过滤器的模型尺寸时,也可以提高性能。

7. 总结
回顾 BLIP 的整体设计,它的贡献可以从两个维度来理解:
在架构层面,MED 完成了多模态模型从"只能理解"到"又能理解又能生成"的跨越。共享参数 + 不同注意力掩码的设计,用极其优雅的方式将三种功能统一在一套权重之下,继承并超越了 ALBEF 和 VLMo 的统一架构思路。
在数据层面,CapFilt 第一次将"数据质量"作为一等公民纳入预训练框架的设计中,开创了多模态数据自举的新范式。这一思路在此后的 BLIP-2、InstructBLIP 等工作中得到了持续延伸。
如果说 VLMo 的核心贡献是解决了"一个架构,多种姿态"的问题,那么 BLIP 的核心贡献则是同时解决了"一套架构"和"一套数据"两个维度的问题。
而 BLIP 并没有就此结束。它的继任者 BLIP-2 将进一步追问:既然视觉编码器和语言模型都已经各自足够强大,我们是否还需要从头预训练一个多模态模型?还是说,只需要一个轻量的"桥梁"模块,把冻结的视觉编码器和冻结的大语言模型连接起来,就足以激发出强大的多模态能力?
更多推荐



所有评论(0)