读文献-3
本文最后更新于 2026年10月26日 晚上
论文名称:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
阅读日期:2026.10.26
所属方向与编号:通用基础论文-05
预知识
- 微调 (Fine-tuning) :在预训练基础上,用小数据把模型”调教”到某个具体任务。类比:入职培训
- 涌现能力 (Emerging Capabilities) : 模型大到一定程度后没人教也会的本领,比如 BLIP-2 看图写诗、编对话
- OPT / FlanT5 : Meta 的开源 LLM(OPT)/ Google 经指令微调的 LLM(FlanT5)。两种类型的”语言高手”,都被冻结
- Decoder-only vs Encoder-Decoder : LLM 的两种结构:前者只会”接龙式生成”(GPT 类),后者”先理解再生成”(T5 类)
- 信息瓶颈 (Information Bottleneck): 257 个图像 token 被压缩成 32 个 query 输出——把一大锅汤熬成浓缩汤,只留有用的信息
- 注意力掩码 (Attention Mask) : 控制谁能看见谁的”遮挡板”。论文用三种:单模态掩码(query 和 text 互相看不见)、双向掩码(全可见)、多模态因果掩码(text 能看 query 但只能看自己前面)
- LLM (Large Language Model),大型语言模型,在海量文本上预训练的生成式语言模型,具备强大的语言生成与零样本迁移能力。
- 软视觉提示(软视觉token):Q-Former 的 32 个输出向量经全连接层投影到 LLM 词嵌入维度后,前置拼接在输入文本嵌入之前,作为 LLM 的“视觉条件输入”。LLM 将其当作可理解的特殊“提示”来生成与图片相关的文本。
- ITC (Image-Text Contrastive Learning 图文对比学习) : 给一对匹配的图文打高分,给不匹配的打低分。让模型学会”图和文是否讲同一件事”
- ITM ( Image-Text Matching 图文匹配) : 二分类题:这张图和这句话配吗?答对/答错。更精细的对齐
- ITG (Image-Grounded Text Generation 图像引导文本生成) : 看图补文:给定图片和文字的前半部分,生成后半部分。逼着 query 把”写这句话需要的视觉信息”全部抓出来
- LM Loss (Language Modeling Loss 语言建模损失) : 标准”文字接龙”训练:预测下一个词
- Prefix LM Loss ( 前缀语言建模损失) : 把文本切成”前缀+后缀”,前缀和视觉信息给编码器,后缀让解码器生成。用于 FlanT5 这类结构
- CapFilt (Captioning + Filtering) : 用一个强模型给网络图片生成字幕并过滤,提升训练数据质量。
ITC / ITM / TIG 都是预训练目标
1. 这篇论文要解决什么问题?
如何在不训练(冻结)现成视觉模型和 LLM 的前提下,以极低的训练成本设计一个高效的桥接模块,弥合两者之间的模态鸿沟,让视觉信息被 LLM 真正理解,从而既避免代价高昂的端到端训练、又保住单模态模型的既有能力,最终打通视觉与语言。
背景:
当前视觉-语言预训练(VLP)领域的结构性矛盾:近年来,视觉侧的 CLIP(OpenAI训练的模型)、EVA-CLIP(腾讯训练的模型) 等预训练模型和语言侧的 OPT、FlanT5 等大语言模型(LLM)各自飞速进步,视觉-语言研究本应站在两者交汇处“收割”这些现成的单模态成果,但现有主流方法(如 Flamingo)普遍采用端到端预训练,将视觉编码器和语言模型全部放开、在数十亿图文对上从零一起训练,这带来了三重困境:
- 可训练参数动辄上百亿,训练成本随模型规模膨胀已高昂到令人却步
- 在图文数据上放开微调会大幅改写单模态模型的参数,引发灾难性遗忘,使其原有的视觉能力或语言推理、世界知识等本事明显退化
- 若为省算力而冻结这些模型,又会立刻暴露出模态鸿沟——LLM 在预训练中从未见过图像,根本无法理解视觉特征,而已有桥接方案仅依赖单一的生成损失,不足以实现精细的跨模态对齐。
2. 输入和输出分别是什么?
2.1 预训练
分为两个阶段:表征学习和生成学习
注意下面关于本文使用 ViT 的输出是去掉原来的最后一层,并取倒数第二层 (因为原文说这带来了略微更好的性能)
关于 ViT 的设计参考:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
第一阶段:表征学习
输入: 图像 + 配对文本
step 1. 图像进入冻结 ViT
- 输入
224 × 224 × 3→ 输出图像特征257 × 1024( ViT-L )step 2. 32个可学习的
queries( 32 × 768 ,是模型的参数)进入 Q-Former 图像分支
- 与
step 1输出的图像特征做 交叉注意力 (queries是Q,图像特征是K/V)- 输出查询表示
Z:32 × 768 ——这是 Q-Former 对图像的”压缩摘要”Step 3:配对文本进入 Q-Former 文本分支(BERT 分词)
- 输出文本表示(如
[CLS]的嵌入)Step 4:用三个损失同时优化 Z 和文本表示
- ITC:Z 与文本
[CLS]算相似度,取最大 → 对比损失- ITG:用多模态因果掩码让文本分支从 Z 生成描述 → 语言建模损失
- ITM:Z 与文本全互相看,二分类判断是否匹配 → 匹配损失
Step 5 阶段输出:训练好的 Q-Former(queries 学会提取”与语言最相关的视觉信息”)。此阶段没有任何用户可见的文本输出。
第二阶段: 生成学习 (加上冻结 LLM)
输入:图像 + 文本
Step 6:图像 → ViT → Q-Former → 得到 Z:
32×768(同 Step 1–2)Step 7:Z 经全连接层投影
32×768→32×d_llm(OPT-2.7B: 2560 / OPT-6.7B: 4096 / FlanT5: 2048)- 输出 = 32 个”软视觉 token”(连续向量,不属于任何词表)
Step 8:文本用 LLM 自己的分词器编码(OPT 用 GPT-2 BPE,FlanT5 用 SentencePiece)
- 输出文本 token 嵌入
N×d_llmStep 9:把两者拼成 LLM 输入序列
- OPT(decoder 型):
[32 个软视觉 token] + [文本嵌入]→ 冻结 LLM 自回归生成文本 → 语言建模损失- FlanT5(encoder-decoder 型):文本切成 prefix / suffix 两段
- encoder 输入 =
[32 个软视觉 token] + [prefix 嵌入]→ 冻结 encoder- decoder 输入 = prefix,目标生成 suffix → 前缀语言建模损失
Step 10 阶段输出:完整 BLIP-2 模型。“输出”就是 LLM 逐 token 生成的内容(预训练阶段表现为损失,推理阶段表现为真实文本)。
2.2 推理阶段
输入:图像 + 自然语言指令
Step 1.:图像 → ViT → Q-Former → FC 投影 → 32 个软视觉 token(32×d_llm)
Step 2:指令文本用 LLM 分词器编码 → 嵌入 N×d_llm
- OPT 提示模板:
Question: {} Answer: - FlanT5 提示模板:
Question: {} Short answer:
Step 3:直接把指令嵌入拼接在 32 个软视觉 token 后面
Step 4:冻结 LLM 自回归解码
- beam search(width=5),length penalty = −1
Step 15 最终输出:跟随指令的文本
可以是视觉对话、知识推理、故事创作等
也可能出错:知识不准确、推理路径错误、信息过时
3. 整体流程是什么?各模块分别做什么?
1 | |
冻结 ViT : 把图像变为特征序列,输入
224×224×3→ 输出 257 个视觉 token(257×1024/1408)Q-Former:图像与语言之间的“翻译官 + 压缩器”,干三件事
- 抽取:32 个可学习 queries 通过 6 层交叉注意力,从 257 个视觉 token 中“主动采访”出与语言相关的信息
- 压缩:输出固定为
32×768——信息瓶颈,逼着只留关键信息 - 对齐:第一阶段用 ITC/ITG/ITM 三个损失,让抽取结果“面向语言”
训练时不断修正参数。推理时参数冻结
全连接层 ( FC ):最简单但不可或缺的“接口转换器”。把
32×768投影成32×d_llm(如 OPT 是 2560 维),使视觉向量落在 LLM 的词嵌入空间里,变成 LLM 读得懂的 32 个“软视觉 token”冻结 LLM: 只管“说”,不管“看”。
输入 = [32 个软视觉 token] + [文本/指令 token 嵌入]。自回归逐 token 生成答案
关于核心 Q-Former :含有一个视觉提取的 Transformer 和一个文本 Transformer 。自注意力层(同一套权重,共享部分),
1 | |
其中,关于自注意力层:
- ITC 时:单模态掩码,Q-T不可见
- ITG时:多模态因果掩码,queries 互看但不看文本;文本可看 queries 和之前的文本
- ITM时: 双向掩码,Q-T完全互通
这三个按序逐步计算损失(注意方法不同),之后相加,最后向前传播并更新参数。
关于这三种方法计算方式(损失函数),只在第一阶段时使用并更新 Q-Former 参数。在第二阶段时由于文本由 LLM 接管了,所以当冻结 ViT的输出进入 Q-Former 只进行图像分支并输出,在此阶段,由冻结的 LLM 返回梯度并更新参数(Q-Former 和 FC 层的参数)。
4. 与前一篇相比,核心变化是什么?
上一个文章讲的是分割,这篇文章讲的是视觉与语言的一个联通问题。本文所使用的 Transformer 仅仅是 BERT的编码器,相比最初的加了规模、输入、预训练上的几处改进。
并且本文不需要解码器,最初的解码器用于将编码器的输出转为对应的目标语言,而本文图像分支只做压缩(编码);生成功能在阶段一由文本分支用因果掩码客串、在阶段二交给 LLM。而 BERT 与原版编码器的关系是“同一骨架、不同装备”——BLIP-2 选它,图的是现成的语言预训练权重和恰好契合三个损失的特殊 token 机制。