读文献-3

本文最后更新于 2026年10月26日 晚上

论文名称:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

阅读日期:2026.10.26

所属方向与编号:通用基础论文-05

预知识

  1. 微调 (Fine-tuning) :在预训练基础上,用小数据把模型”调教”到某个具体任务。类比:入职培训
  2. 涌现能力 (Emerging Capabilities) : 模型大到一定程度后没人教也会的本领,比如 BLIP-2 看图写诗、编对话
  3. OPT / FlanT5 : Meta 的开源 LLM(OPT)/ Google 经指令微调的 LLM(FlanT5)。两种类型的”语言高手”,都被冻结
  4. Decoder-only vs Encoder-Decoder : LLM 的两种结构:前者只会”接龙式生成”(GPT 类),后者”先理解再生成”(T5 类)
  5. 信息瓶颈 (Information Bottleneck): 257 个图像 token 被压缩成 32 个 query 输出——把一大锅汤熬成浓缩汤,只留有用的信息
  6. 注意力掩码 (Attention Mask) : 控制谁能看见谁的”遮挡板”。论文用三种:单模态掩码(query 和 text 互相看不见)、双向掩码(全可见)、多模态因果掩码(text 能看 query 但只能看自己前面)
  7. LLM (Large Language Model),大型语言模型,在海量文本上预训练的生成式语言模型,具备强大的语言生成与零样本迁移能力。
  8. 软视觉提示(软视觉token):Q-Former 的 32 个输出向量经全连接层投影到 LLM 词嵌入维度后,前置拼接在输入文本嵌入之前,作为 LLM 的“视觉条件输入”。LLM 将其当作可理解的特殊“提示”来生成与图片相关的文本。

  1. ITC (Image-Text Contrastive Learning 图文对比学习) : 给一对匹配的图文打高分,给不匹配的打低分。让模型学会”图和文是否讲同一件事”
  2. ITM ( Image-Text Matching 图文匹配) : 二分类题:这张图和这句话配吗?答对/答错。更精细的对齐
  3. ITG (Image-Grounded Text Generation 图像引导文本生成) : 看图补文:给定图片和文字的前半部分,生成后半部分。逼着 query 把”写这句话需要的视觉信息”全部抓出来
  4. LM Loss (Language Modeling Loss 语言建模损失) : 标准”文字接龙”训练:预测下一个词
  5. Prefix LM Loss ( 前缀语言建模损失) : 把文本切成”前缀+后缀”,前缀和视觉信息给编码器,后缀让解码器生成。用于 FlanT5 这类结构
  6. CapFilt (Captioning + Filtering) : 用一个强模型给网络图片生成字幕并过滤,提升训练数据质量。

ITC / ITM / TIG 都是预训练目标

1. 这篇论文要解决什么问题?

  如何在不训练(冻结)现成视觉模型和 LLM 的前提下,以极低的训练成本设计一个高效的桥接模块,弥合两者之间的模态鸿沟,让视觉信息被 LLM 真正理解,从而既避免代价高昂的端到端训练、又保住单模态模型的既有能力,最终打通视觉与语言。

背景:

  当前视觉-语言预训练(VLP)领域的结构性矛盾:近年来,视觉侧的 CLIP(OpenAI训练的模型)、EVA-CLIP(腾讯训练的模型) 等预训练模型和语言侧的 OPT、FlanT5 等大语言模型(LLM)各自飞速进步,视觉-语言研究本应站在两者交汇处“收割”这些现成的单模态成果,但现有主流方法(如 Flamingo)普遍采用端到端预训练,将视觉编码器和语言模型全部放开、在数十亿图文对上从零一起训练,这带来了三重困境:

  1. 可训练参数动辄上百亿,训练成本随模型规模膨胀已高昂到令人却步
  2. 在图文数据上放开微调会大幅改写单模态模型的参数,引发灾难性遗忘,使其原有的视觉能力或语言推理、世界知识等本事明显退化
  3. 若为省算力而冻结这些模型,又会立刻暴露出模态鸿沟——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_llm

Step 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
2
3
4
5
6
7
8
9
┌─────────┐   ┌──────────────┐   ┌──────────────┐   ┌──────┐   ┌──────────────┐
│ 输入图像 │──►│ ① 冻结 ViT │──►│ ② Q-Former │──►│ ③ FC │──►│ ④ 冻结 LLM │──► 文本输出
│224×224×3│ │ 提取视觉特征 │ │ 压缩+对齐 │ │ 投影 │ │ 生成文本 │
└─────────┘ │ 257×1024 │ │ Z: 32×768 │ │32×d │ └──────────────┘
└──────────────┘ └──────────────┘ └──────┘
▲
┌──────────────┐ │
│ 输入文本/指令 │──► 文本嵌入┘(与视觉提示拼接后进 LLM)
└──────────────┘
  1. 冻结 ViT : 把图像变为特征序列,输入 224×224×3 → 输出 257 个视觉 token(257×1024/1408)

  2. Q-Former:图像与语言之间的“翻译官 + 压缩器”,干三件事

    1. 抽取:32 个可学习 queries 通过 6 层交叉注意力,从 257 个视觉 token 中“主动采访”出与语言相关的信息
    2. 压缩:输出固定为 32×768——信息瓶颈,逼着只留关键信息
    3. 对齐:第一阶段用 ITC/ITG/ITM 三个损失,让抽取结果“面向语言”

    训练时不断修正参数。推理时参数冻结

  3. 全连接层 ( FC ):最简单但不可或缺的“接口转换器”。把 32×768 投影成 32×d_llm(如 OPT 是 2560 维),使视觉向量落在 LLM 的词嵌入空间里,变成 LLM 读得懂的 32 个“软视觉 token”

  4. 冻结 LLM: 只管“说”,不管“看”。输入 = [32 个软视觉 token] + [文本/指令 token 嵌入] 。自回归逐 token 生成答案


关于核心 Q-Former :含有一个视觉提取的 Transformer 和一个文本 Transformer 。自注意力层(同一套权重,共享部分),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
图像分支(图像 transformer):
queries 32×768
│
▼ 自注意力(queries 之间交互)
▼ ★交叉注意力★(Q=queries,K/V=冻结 ViT 特征)← 仅此分支有
▼ FFN
│ ×12 层(其中 6 层含交叉注意力,一个最小的block是: 自注意力 + FFN )
▼
Z:32×768

文本分支(文本 transformer):
文本嵌入 N×768
│
▼ 自注意力(与 queries 共享权重,是否互看由掩码决定)
▼
▼ FFN
│ ×12 层(全程 0 次交叉注意力)
▼
文本表示

其中,关于自注意力层:

  • 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 机制。


读文献-3
http://one-and-one-fourth.github.io/2026/10/26/研究生/读文献记录2/
作者
一又四分之一
发布于
2026年10月26日
更新于
2026年10月26日
许可协议