BLIP-2 论文精读:冻结视觉模型和大语言模型,中间只训练一个 Q-Former

前言

在前面学习 CLIP、GPT-3、InstructGPT、LLaMA 之后,我们已经逐渐能看懂大模型和视觉语言模型之间的联系。

CLIP 解决的是:

图像和文本如何对齐?

而 BLIP-2 进一步解决的是:

如何把图像信息接入已经训练好的大语言模型,让大语言模型能够基于图像进行生成?

BLIP-2 的核心思想非常清晰:

不从头训练一个巨大的视觉语言模型,而是冻结已有的图像编码器和大语言模型,中间只训练一个轻量模块 Q-Former。

可以用一句话概括 BLIP-2:

BLIP-2=Frozen Image Encoder+Trainable Q-Former+Frozen LLM \text{BLIP-2}= \text{Frozen Image Encoder} + \text{Trainable Q-Former} + \text{Frozen LLM} BLIP-2=Frozen Image Encoder+Trainable Q-Former+Frozen LLM

也就是:

text 复制代码
冻结视觉模型 + 训练 Q-Former + 冻结大语言模型

目录

  1. BLIP-2 要解决什么问题?
  2. 为什么不能直接把图像特征喂给 LLM?
  3. BLIP-2 整体结构
  4. Q-Former 到底是什么?
  5. Learnable Query 是什么?
  6. Q-Former 内部的 Self-Attention 和 Cross-Attention
  7. Q-Former 中的 attention mask 机制
  8. 第一阶段训练:ITC / ITG / ITM
  9. ITC loss 公式详细解析
  10. self-attention mask 的矩阵级例子
  11. 第二阶段训练:Q-Former 如何接入 frozen LLM
  12. decoder-only LLM 和 encoder-decoder LLM 的区别
  13. BLIP-2 对视觉 RAG / 文档理解的启发
  14. 总结

一、BLIP-2 要解决什么问题?

传统视觉语言预训练模型往往采用端到端训练方式。

也就是说:

text 复制代码
图像编码器 + 多模态融合模块 + 文本模型 / 语言模型

一起训练。

这种方式效果强,但是问题也很明显:

  1. 图像模型越来越大;
  2. 语言模型越来越大;
  3. 图文预训练数据越来越大;
  4. 端到端训练成本越来越高。

所以 BLIP-2 的出发点是:

既然已经有很强的图像编码器,也已经有很强的大语言模型,为什么还要从头训练一个完整的视觉语言大模型?

于是 BLIP-2 选择了一条更低成本的路线:

text 复制代码
视觉模型已经会看图
语言模型已经会生成文本
那我只需要训练一个中间模块
把视觉信息翻译成语言模型能理解的形式

这个中间模块就是 Q-Former


二、为什么不能直接把图像特征喂给 LLM?

大语言模型,例如 OPT、Flan-T5、LLaMA,本质上是在文本 token 上训练出来的。

它熟悉的是:

text 复制代码
我 / 喜欢 / 这 / 张 / 图片

这种文本 token embedding。

但是图像编码器输出的是图像 patch features,例如:

text 复制代码
patch_1, patch_2, patch_3, ..., patch_N

每个 patch feature 都是一个连续向量。

问题在于:

LLM 预训练时没有见过这些图像 patch 特征,它不知道这些视觉向量是什么意思。

这就是所谓的 modality gap,也就是"模态鸿沟"。

可以理解为:

text 复制代码
图像编码器说的是"视觉语言"
LLM 说的是"文本语言"
两者不是天然互通的

所以 BLIP-2 不直接把图像 patch 扔给 LLM,而是加入 Q-Former:

text 复制代码
Image Patches
    ↓
Q-Former
    ↓
Soft Visual Prompts
    ↓
LLM

也就是说:

Q-Former 负责把图像信息整理成 LLM 能理解的视觉提示向量。


三、BLIP-2 整体结构

BLIP-2 的整体结构分成两阶段。

3.1 第一阶段:视觉-语言表征学习

第一阶段还不接 LLM。

结构是:

text 复制代码
Image
  ↓
Frozen Image Encoder
  ↓
Image Features
  ↓
Q-Former ← Text
  ↓
ITC + ITG + ITM

目标是:

让 Q-Former 学会从图像特征中提取和文本最相关的视觉表示。

这一阶段主要训练 Q-Former 的图文对齐能力。


3.2 第二阶段:视觉到语言生成学习

第二阶段把 Q-Former 接到 frozen LLM 上。

结构是:

text 复制代码
Image
  ↓
Frozen Image Encoder
  ↓
Q-Former
  ↓
Linear Projection
  ↓
Soft Visual Prompts
  ↓
Frozen LLM
  ↓
Generated Text

目标是:

让 Q-Former 输出的视觉表示能够作为 soft visual prompts,被 frozen LLM 用来生成文本。


四、Q-Former 到底是什么?

Q-Former 全称是:

text 复制代码
Querying Transformer

它不是完整的原始 Transformer Encoder-Decoder 架构,也不是简单的线性投影层。

它更接近:

text 复制代码
BERT-style Transformer
+ learnable query tokens
+ cross-attention 读取图像特征
+ attention mask 控制 query 和 text 的交互

需要注意:

Transformer block 不等于完整的 Transformer 模型。

原始 Transformer 包含:

text 复制代码
Encoder Stack + Decoder Stack

但是后来的模型经常只使用其中一种结构:

模型 Transformer 类型
BERT Encoder-only
GPT Decoder-only
T5 Encoder-Decoder
ViT Encoder-style
Q-Former BERT-style Transformer + Cross-Attention

所以 Q-Former 更像是一个基于 BERT 的编码器结构,并额外插入 cross-attention,用于读取图像特征。


五、Learnable Query 是什么?

Q-Former 里最重要的概念是 learnable queries

它不是用户输入的问题,也不是文本 token,而是一组模型内部的可学习参数。

论文实验中使用:

32 个 query 32 \text{ 个 query} 32 个 query

每个 query 维度为:

768 768 768

所以 learnable queries 可以写成:

Q0=q1,q2,...,q32 Q_0 = q_1, q_2, \\dots, q_{32} Q0=q1,q2,...,q32

其中:

qi∈R768 q_i \in \mathbb{R}^{768} qi∈R768

也就是说:

Q0∈R32×768 Q_0 \in \mathbb{R}^{32 \times 768} Q0∈R32×768

你可以把它理解为:

text 复制代码
模型内部有 32 个信息探针
每个探针都是一个可训练向量
它们会主动从图像特征中提取信息

5.1 每个 query 是固定负责一个方向吗?

不是。

不能理解成:

text 复制代码
query 1 固定负责主体
query 2 固定负责颜色
query 3 固定负责动作
query 4 固定负责背景

论文没有人为规定每个 query 的职责。

更准确地说:

每个 query 是一个可学习的信息槽位,它的功能是在训练过程中由 loss 自动塑造出来的。

也就是说,query 的分工不是人工指定的,而是通过 ITC、ITG、ITM 等训练目标慢慢学出来的。


5.2 query 会不会太少?

会有这个可能。

BLIP-2 使用 32 个 query,本质上是一种信息瓶颈。

它把大量图像 patch features 压缩成少量 query representations。

例如图像编码器可能输出:

257×1024 257 \times 1024 257×1024

而 Q-Former 输出:

32×768 32 \times 768 32×768

这会带来两个结果:

优点是:

text 复制代码
减少视觉 token 数量
降低计算成本
强迫模型提取最相关视觉信息

缺点是:

text 复制代码
如果图像内容很复杂,可能丢失细节

对于自然图像,32 个 query 可能够用。

但是对于专利页面、文档页面、技术图纸,32 个 query 可能偏少。因为一页文档中可能包含:

text 复制代码
标题
摘要
段落
技术附图
流程图
标号
表格
页眉页脚

所以对 OCR-free 文档理解来说,可以思考:

text 复制代码
是否需要更多 query?
是否需要 region-level query?
是否需要 hierarchical query?
是否需要 text-conditioned query?
是否需要 query + patch token 混合保留?

六、Q-Former 内部的 Self-Attention 和 Cross-Attention

Q-Former 里主要有两种 attention:

text 复制代码
Self-Attention
Cross-Attention

6.1 Self-Attention:query 之间交流

query 之间会通过 self-attention 互相交流。

例如:

text 复制代码
q1 ↔ q2 ↔ q3 ↔ ... ↔ q32

self-attention 的标准公式是:

Attention(Q,K,V)=softmax(QKTd)V \text{Attention}(Q,K,V)= \text{softmax} \left( \frac{QK^T}{\sqrt{d}} \right)V Attention(Q,K,V)=softmax(d QKT)V

在 self-attention 中:

Q=XWQ Q = XW_Q Q=XWQ

K=XWK K = XW_K K=XWK

V=XWV V = XW_V V=XWV

这里的 (X) 来自同一组 token。

如果只有 query,那么:

X=Q0 X = Q_0 X=Q0

此时就是 query 之间相互交流。


6.2 Cross-Attention:query 读取图像 patch features

Q-Former 的关键是 cross-attention。

图像先经过 frozen image encoder:

Vimg=Eimg(I) V_{\text{img}} = E_{\text{img}}(I) Vimg=Eimg(I)

其中:

Vimg=v1,v2,...,vN V_{\text{img}} = v_1,v_2,\\dots,v_N Vimg=v1,v2,...,vN

每个 (viv_ivi) 是一个 image patch feature。

然后 query 通过 cross-attention 去读取这些图像特征:

CrossAttn(Q,Vimg)=softmax((QWQ)(VimgWK)Td)VimgWV \text{CrossAttn}(Q,V_{\text{img}})= \text{softmax} \left( \frac{ (QW_Q)(V_{\text{img}}W_K)^T }{ \sqrt{d} } \right) V_{\text{img}}W_V CrossAttn(Q,Vimg)=softmax(d (QWQ)(VimgWK)T)VimgWV

这里要看清楚:

Q Q Q

来自 query hidden states。

K,V K,V K,V

来自 image patch features。

也就是说:

text 复制代码
query 经过线性层得到 Q
image patch features 经过线性层得到 K 和 V
Q 和 K 做点乘
softmax 得到注意力权重
再对 V 加权求和

所以你可以理解为:

每个 query 都会对所有 image patches 做注意力计算,然后从整张图中提取它认为重要的信息。


6.3 一个 query 如何读取图像?

假设有一个 query:

qi q_i qi

图像有 (N) 个 patch:

v1,v2,...,vN\] \[v_1,v_2,\\dots,v_N\] \[v1,v2,...,vN

那么这个 query 会和每个 patch 的 key 做点乘:

qi⋅k1,qi⋅k2,...,qi⋅kN q_i \cdot k_1,\quad q_i \cdot k_2,\quad \dots,\quad q_i \cdot k_N qi⋅k1,qi⋅k2,...,qi⋅kN

然后经过 softmax:

αi,j=exp⁡(qi⋅kj)∑r=1Nexp⁡(qi⋅kr) \alpha_{i,j}= \frac{ \exp(q_i \cdot k_j) }{ \sum_{r=1}^{N}\exp(q_i \cdot k_r) } αi,j=∑r=1Nexp(qi⋅kr)exp(qi⋅kj)

最后对所有 value 加权求和:

zi=∑j=1Nαi,jvj z_i= \sum_{j=1}^{N} \alpha_{i,j}v_j zi=j=1∑Nαi,jvj

直观理解:

text 复制代码
query 先判断每个 patch 和自己有多相关
再按照相关性加权提取图像信息

七、Q-Former 中的 attention mask 机制

Q-Former 里可能同时输入:

text 复制代码
query tokens + text tokens

但是重点是:

拼在一起,不代表一定能互相看。

真正决定能不能互相看的,是 attention mask

更严谨地说:

X=Q;T X = Q;T X=Q;T

只是输入形式。

真正的 self-attention 是:

SelfAttn(Q;T,M) \text{SelfAttn}(Q;T, M) SelfAttn(Q;T,M)

其中:

M M M

是 mask 矩阵。

如果允许看:

Mij=0 M_{ij}=0 Mij=0

如果不允许看:

Mij=−∞ M_{ij}=-\infty Mij=−∞

因为:

softmax(−∞)=0 \text{softmax}(-\infty)=0 softmax(−∞)=0

所以不允许看的位置,attention 权重会变成 0。


八、第一阶段训练:ITC / ITG / ITM

BLIP-2 第一阶段联合优化三个目标:

text 复制代码
ITC:Image-Text Contrastive Learning
ITG:Image-Grounded Text Generation
ITM:Image-Text Matching

中文分别是:

text 复制代码
图文对比学习
图像引导文本生成
图文匹配

它们分别训练 Q-Former 的不同能力。

目标 作用
ITC 让图像表示和文本表示整体对齐
ITG 让 query 提取足够生成文本的信息
ITM 让 query 和文本进行细粒度匹配

一句话理解:

text 复制代码
ITC 负责粗粒度对齐
ITG 负责生成能力
ITM 负责细粒度匹配

九、ITC loss 公式详细解析

ITC 的目标是:

text 复制代码
正确图文对相似度变高
错误图文对相似度变低

假设一个 batch 中有 (B) 个图文对:

(I1,T1),(I2,T2),...,(IB,TB) (I_1,T_1),(I_2,T_2),\dots,(I_B,T_B) (I1,T1),(I2,T2),...,(IB,TB)

其中 (IiI_iIi) 和 (TiT_iTi) 是正确匹配。


9.1 图像和文本相似度

Q-Former 对图像 (I_i) 输出:

Zi=zi,1,zi,2,...,zi,M Z_i = z_{i,1},z_{i,2},\\dots,z_{i,M} Zi=zi,1,zi,2,...,zi,M

其中:

M=32 M=32 M=32

文本 (T_j) 的 [CLS] 表示为:

cj c_j cj

由于图像侧有 32 个 query 输出,所以 BLIP-2 不是直接算一个图像向量和文本向量的相似度,而是:

s(Ii,Tj)=max⁡m=1Mcos⁡(zi,m,cj) s(I_i,T_j)= \max_{m=1}^{M} \cos(z_{i,m},c_j) s(Ii,Tj)=m=1maxMcos(zi,m,cj)

意思是:

text 复制代码
第 i 张图的 32 个 query 输出分别和第 j 个文本表示算相似度
取最大的那个作为最终图文相似度

直觉是:

text 复制代码
只要 32 个 query 里有一个 query 抓住了和文本最相关的视觉信息
这张图和这段文本就应该有较高相似度

9.2 加入温度参数

设:

aij=s(Ii,Tj)τ a_{ij}= \frac{s(I_i,T_j)}{\tau} aij=τs(Ii,Tj)

其中:

τ \tau τ

是温度参数。

温度参数的作用是控制 softmax 的尖锐程度。

如果 (τ\tauτ) 小,相似度差异会被放大,模型更强烈地区分正负样本。

如果 (τ\tauτ) 大,相似度分布更平滑。


9.3 Image-to-Text loss:给图找文本

对每张图片 (IiI_iIi),它要从 batch 中所有文本里找到正确文本 (TiT_iTi)。

概率为:

p(Ti∣Ii)=exp⁡(aii)∑j=1Bexp⁡(aij) p(T_i|I_i)= \frac{ \exp(a_{ii}) }{ \sum_{j=1}^{B} \exp(a_{ij}) } p(Ti∣Ii)=∑j=1Bexp(aij)exp(aii)

所以 image-to-text loss 是:

Li2t=−1B∑i=1Blog⁡exp⁡(aii)∑j=1Bexp⁡(aij) \mathcal{L}{i2t}= -\frac{1}{B} \sum{i=1}^{B} \log \frac{ \exp(a_{ii}) }{ \sum_{j=1}^{B} \exp(a_{ij}) } Li2t=−B1i=1∑Blog∑j=1Bexp(aij)exp(aii)

其中:

text 复制代码
分子:正确图文对的相似度
分母:当前图片和 batch 中所有文本的相似度总和

它的目标是:

text 复制代码
让图片 I_i 和正确文本 T_i 相似度最高
让图片 I_i 和其他文本 T_j 相似度降低

9.4 Text-to-Image loss:给文本找图

对每段文本 (T_i),它要从 batch 中所有图片里找到正确图片 (I_i)。

概率为:

p(Ii∣Ti)=exp⁡(aii)∑j=1Bexp⁡(aji) p(I_i|T_i)= \frac{ \exp(a_{ii}) }{ \sum_{j=1}^{B} \exp(a_{ji}) } p(Ii∣Ti)=∑j=1Bexp(aji)exp(aii)

所以 text-to-image loss 是:

Lt2i=−1B∑i=1Blog⁡exp⁡(aii)∑j=1Bexp⁡(aji) \mathcal{L}{t2i}= -\frac{1}{B} \sum{i=1}^{B} \log \frac{ \exp(a_{ii}) }{ \sum_{j=1}^{B} \exp(a_{ji}) } Lt2i=−B1i=1∑Blog∑j=1Bexp(aji)exp(aii)

注意这里分母是:

∑j=1Bexp⁡(aji) \sum_{j=1}^{B} \exp(a_{ji}) j=1∑Bexp(aji)

也就是固定文本 (TiT_iTi),遍历所有图片 (IjI_jIj)。


9.5 最终 ITC loss

最终 ITC loss 是两个方向的平均:

LITC=12(L∗i2t+L∗t2i) \mathcal{L}_{ITC}= \frac{1}{2} \left( \mathcal{L}*{i2t} + \mathcal{L}*{t2i} \right) LITC=21(L∗i2t+L∗t2i)

也就是说:

text 复制代码
既训练图找文
也训练文找图

这和 CLIP 的双向对比学习思想非常接近。


十、self-attention mask 的矩阵级例子

为了看懂 Figure 2 右侧的 mask,我们用一个最小例子。

假设有:

text 复制代码
2 个 query token:q1, q2
3 个 text token:t1, t2, t3

拼接顺序为:

q1,q2,t1,t2,t3\] \[q_1,q_2,t_1,t_2,t_3\] \[q1,q2,t1,t2,t3

因此 self-attention mask 是一个:

5×5 5 \times 5 5×5

矩阵。

行表示:

text 复制代码
当前 token,也就是谁在看

列表示:

text 复制代码
被看的 token,也就是它能 attend 到谁

10.1 ITC mask:query 和 text 完全隔离

ITC 是图文对比学习。

规则是:

text 复制代码
query 只能看 query
text 只能看 text
query 不能看 text
text 不能看 query

0/1 mask 为:

MITC01=1100011000001110011100111 M_{ITC}^{01}= \begin{bmatrix} 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 1 & 1 \end{bmatrix} MITC01= 1100011000001110011100111

对应表格:

看 \ 被看 q1 q2 t1 t2 t3
q1 1 1 0 0 0
q2 1 1 0 0 0
t1 0 0 1 1 1
t2 0 0 1 1 1
t3 0 0 1 1 1

真实 attention mask 是:

MITC=00−∞−∞−∞00−∞−∞−∞−∞−∞000−∞−∞000−∞−∞000 M_{ITC}= \begin{bmatrix} 0 & 0 & -\infty & -\infty & -\infty \\ 0 & 0 & -\infty & -\infty & -\infty \\ -\infty & -\infty & 0 & 0 & 0 \\ -\infty & -\infty & 0 & 0 & 0 \\ -\infty & -\infty & 0 & 0 & 0 \end{bmatrix} MITC= 00−∞−∞−∞00−∞−∞−∞−∞−∞000−∞−∞000−∞−∞000

意义:

text 复制代码
query 表示不能偷看文本
文本表示也不能偷看 query
最后再独立计算图文相似度

这样才能保证对比学习没有信息泄漏。


10.2 ITG mask:text 可以看 query,但不能看未来 text

ITG 是图像引导文本生成。

规则是:

text 复制代码
query 可以看 query
query 不能看 text
text 可以看所有 query
text 可以看过去 text 和自己
text 不能看未来 text

0/1 mask 为:

MITG01=1100011000111001111011111 M_{ITG}^{01}= \begin{bmatrix} 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 1 & 0 \\ 1 & 1 & 1 & 1 & 1 \end{bmatrix} MITG01= 1111111111001110001100001

对应表格:

看 \ 被看 q1 q2 t1 t2 t3
q1 1 1 0 0 0
q2 1 1 0 0 0
t1 1 1 1 0 0
t2 1 1 1 1 0
t3 1 1 1 1 1

真实 attention mask 是:

MITG=00−∞−∞−∞00−∞−∞−∞000−∞−∞0000−∞00000 M_{ITG}= \begin{bmatrix} 0 & 0 & -\infty & -\infty & -\infty \\ 0 & 0 & -\infty & -\infty & -\infty \\ 0 & 0 & 0 & -\infty & -\infty \\ 0 & 0 & 0 & 0 & -\infty \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} MITG= 0000000000−∞−∞000−∞−∞−∞00−∞−∞−∞−∞0

意义:

text 复制代码
query 先从图像中提取视觉信息
text token 可以读取 query 中的图像信息
text token 只能看过去文本,不能看未来文本

也就是:

p(T∣I)=∏k=1Lp(tk∣Q,t<k) p(T|I)= \prod_{k=1}^{L} p(t_k|Q,t_{<k}) p(T∣I)=k=1∏Lp(tk∣Q,t<k)

ITG loss 是:

LITG=−∑k=1Llog⁡p(tk∣Q,t<k) \mathcal{L}{ITG}= -\sum{k=1}^{L} \log p(t_k|Q,t_{<k}) LITG=−k=1∑Llogp(tk∣Q,t<k)


10.3 ITM mask:query 和 text 全部互看

ITM 是图文匹配。

规则是:

text 复制代码
query 可以看 query
query 可以看 text
text 可以看 query
text 可以看 text

0/1 mask 为:

MITM01=1111111111111111111111111 M_{ITM}^{01}= \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \end{bmatrix} MITM01= 1111111111111111111111111

真实 attention mask 是:

M_{ITM}= \\begin{bmatrix} 0 \& 0 \& 0 \& 0 \& 0 \\ 0 \& 0 \& 0 \& 0 \& 0 \\ 0 \& 0 \& 0 \& 0 \& 0 \\ 0 \& 0 \& 0 \& 0 \& 0 \\ 0 \& 0 \& 0 \& 0 \& 0 \\end{bmatrix}

意义:

text 复制代码
query 和 text 可以充分交互
用于判断图文是否细粒度匹配

例如文本是:

text 复制代码
a cat wearing sunglasses

query 可以根据文本里的 catsunglasses 去检查图像中是否真的有对应视觉区域。


十一、第二阶段训练:Q-Former 如何接入 frozen LLM

第一阶段训练完成后,Q-Former 已经具备一定图文对齐能力。

第二阶段要做的是:

把 Q-Former 输出的视觉表示接入 frozen LLM,让 LLM 基于图像生成文本。

结构是:

text 复制代码
Image
  ↓
Frozen Image Encoder
  ↓
Image Features
  ↓
Q-Former
  ↓
Query Representations Z
  ↓
Linear Projection
  ↓
Soft Visual Prompts
  ↓
Frozen LLM
  ↓
Generated Text

11.1 Q-Former 输出

图像经过 frozen image encoder:

V=Eimg(I) V = E_{\text{img}}(I) V=Eimg(I)

Q-Former 读取图像特征:

Z=QFormer(Q0,V) Z = \text{QFormer}(Q_0,V) Z=QFormer(Q0,V)

其中:

Z=z1,z2,...,z32 Z = z_1,z_2,\\dots,z_{32} Z=z1,z2,...,z32


11.2 Linear Projection

Q-Former 的输出维度和 LLM 的 embedding 维度通常不同。

例如:

text 复制代码
Q-Former 输出维度:768
LLM embedding 维度:2048 或 4096

所以需要一个线性投影层:

Pv=ZWp+bp P_v = ZW_p+b_p Pv=ZWp+bp

其中:

Pv∈R32×dLLM P_v \in \mathbb{R}^{32 \times d_{\text{LLM}}} Pv∈R32×dLLM

这个 (PvP_vPv) 就是 soft visual prompts


11.3 Soft Visual Prompts 是什么?

普通 prompt 是自然语言文本,例如:

text 复制代码
Describe this image:

而 soft visual prompt 不是离散文字,而是一组连续向量:

Pv=p1,p2,...,p32 P_v = p_1,p_2,\\dots,p_{32} Pv=p1,p2,...,p32

它们不对应具体单词,而是图像语义的连续表示。

所以 LLM 看到的是:

text 复制代码
[视觉向量1] [视觉向量2] ... [视觉向量32] + 文本 token

也就是说:

LLM 不是直接看图片,而是读取 Q-Former 翻译后的视觉提示向量。


十二、decoder-only LLM 和 encoder-decoder LLM 的区别

BLIP-2 第二阶段展示了两种 LLM 接法。

12.1 接 decoder-only LLM,例如 OPT

decoder-only LLM 只有 decoder,例如 GPT / OPT / LLaMA。

它的输入形式是:

XLLM=Pv;E(w1),E(w2),...,E(wL) X_{\text{LLM}}= P_v;E(w_1),E(w_2),\\dots,E(w_L) XLLM=Pv;E(w1),E(w2),...,E(wL)

也就是把 visual prompts 拼到文本 embedding 前面。

生成概率为:

p(T∣I)=∏t=1Lp(wt∣Pv,w<t) p(T|I)= \prod_{t=1}^{L} p(w_t|P_v,w_{<t}) p(T∣I)=t=1∏Lp(wt∣Pv,w<t)

loss 是:

LLM=−∑t=1Llog⁡p(wt∣Pv,w<t) \mathcal{L}{\text{LM}}= -\sum{t=1}^{L} \log p(w_t|P_v,w_{<t}) LLM=−t=1∑Llogp(wt∣Pv,w<t)

例如目标文本是:

text 复制代码
a cat wearing sunglasses

那么:

p(T∣I)=p(a∣Pv)⋅p(cat∣Pv,a)⋅p(wearing∣Pv,a,cat)⋅p(sunglasses∣Pv,a,cat,wearing) p(T|I)= p(a|P_v) \cdot p(cat|P_v,a) \cdot p(wearing|P_v,a,cat) \cdot p(sunglasses|P_v,a,cat,wearing) p(T∣I)=p(a∣Pv)⋅p(cat∣Pv,a)⋅p(wearing∣Pv,a,cat)⋅p(sunglasses∣Pv,a,cat,wearing)


12.2 接 encoder-decoder LLM,例如 Flan-T5

encoder-decoder LLM 包含:

text 复制代码
Encoder + Decoder

例如 T5 / Flan-T5。

BLIP-2 对这类模型使用 prefix language modeling。

把文本拆成:

T=Tprefix,Tsuffix T = T_{\\text{prefix}},T_{\\text{suffix}} T=Tprefix,Tsuffix

encoder 输入:

Xenc=Pv;E(Tprefix) X_{\text{enc}}= P_v;E(T_{\\text{prefix}}) Xenc=Pv;E(Tprefix)

decoder 生成:

Tsuffix T_{\text{suffix}} Tsuffix

概率为:

p(Tsuffix∣I,Tprefix)=∏t=1Lp(wtsuffix∣Pv,Tprefix,w<tsuffix) p(T_{\text{suffix}}|I,T_{\text{prefix}})= \prod_{t=1}^{L} p(w_t^{\text{suffix}}|P_v,T_{\text{prefix}},w_{<t}^{\text{suffix}}) p(Tsuffix∣I,Tprefix)=t=1∏Lp(wtsuffix∣Pv,Tprefix,w<tsuffix)

loss 为:

Lprefix-LM=−∑t=1Llog⁡p(wtsuffix∣Pv,Tprefix,w<tsuffix) \mathcal{L}{\text{prefix-LM}}= -\sum{t=1}^{L} \log p(w_t^{\text{suffix}}|P_v,T_{\text{prefix}},w_{<t}^{\text{suffix}}) Lprefix-LM=−t=1∑Llogp(wtsuffix∣Pv,Tprefix,w<tsuffix)

一句话:

text 复制代码
decoder-only:visual prompt 当作前缀,让 LLM 继续往后写
encoder-decoder:visual prompt + prefix 进入 encoder,让 decoder 生成 suffix

十三、总结

BLIP-2 的核心不是提出一个更大的视觉语言模型,而是提出了一种高效连接视觉模型和语言模型的方法。

它的整体结构是:

Frozen Image Encoder+Trainable Q-Former+Frozen LLM \boxed{ \text{Frozen Image Encoder} + \text{Trainable Q-Former} + \text{Frozen LLM} } Frozen Image Encoder+Trainable Q-Former+Frozen LLM

第一阶段:

text 复制代码
Q-Former 接 frozen image encoder
通过 ITC + ITG + ITM 学会图文对齐和视觉信息提取

第二阶段:

text 复制代码
Q-Former 接 frozen LLM
通过语言生成损失学习把视觉信息变成 LLM 能理解的 soft visual prompts

Q-Former 的关键机制是:

text 复制代码
learnable queries 通过 self-attention 互相交流
通过 cross-attention 从 image patch features 中提取视觉信息
通过不同 attention mask 控制 query 和 text 的交互方式

最重要的 cross-attention 公式是:

CrossAttn(Q,Vimg)=softmax((QWQ)(VimgWK)Td)VimgWV \text{CrossAttn}(Q,V_{\text{img}})= \text{softmax} \left( \frac{ (QW_Q)(V_{\text{img}}W_K)^T }{ \sqrt{d} } \right) V_{\text{img}}W_V CrossAttn(Q,Vimg)=softmax(d (QWQ)(VimgWK)T)VimgWV

它说明:

query 会和所有 image patch features 做注意力计算,从大量视觉 token 中提取少量关键视觉语义。

最终,BLIP-2 的意义可以总结成一句话:

它用一个轻量 Q-Former,把冻结图像编码器的视觉能力和冻结大语言模型的生成能力连接起来,以较低训练成本实现图像到语言的生成。

对于后续学习 LLaVA、MiniGPT-4、InstructBLIP、Qwen-VL、ColPali 等视觉语言模型,BLIP-2 是一篇非常关键的承上启下论文。

因为它提出的思想会不断重复出现:

text 复制代码
视觉编码器负责看图
桥接模块负责对齐和压缩视觉信息
语言模型负责生成和交互

这也是多模态大模型中最经典的一条技术路线。