前言
在前面学习 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 + 冻结大语言模型
目录
- BLIP-2 要解决什么问题?
- 为什么不能直接把图像特征喂给 LLM?
- BLIP-2 整体结构
- Q-Former 到底是什么?
- Learnable Query 是什么?
- Q-Former 内部的 Self-Attention 和 Cross-Attention
- Q-Former 中的 attention mask 机制
- 第一阶段训练:ITC / ITG / ITM
- ITC loss 公式详细解析
- self-attention mask 的矩阵级例子
- 第二阶段训练:Q-Former 如何接入 frozen LLM
- decoder-only LLM 和 encoder-decoder LLM 的区别
- BLIP-2 对视觉 RAG / 文档理解的启发
- 总结
一、BLIP-2 要解决什么问题?
传统视觉语言预训练模型往往采用端到端训练方式。
也就是说:
text
图像编码器 + 多模态融合模块 + 文本模型 / 语言模型
一起训练。
这种方式效果强,但是问题也很明显:
- 图像模型越来越大;
- 语言模型越来越大;
- 图文预训练数据越来越大;
- 端到端训练成本越来越高。
所以 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)=maxm=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=1Blogexp(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=1Blogexp(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=1Llogp(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 可以根据文本里的 cat 和 sunglasses 去检查图像中是否真的有对应视觉区域。
十一、第二阶段训练: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=1Llogp(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=1Llogp(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
视觉编码器负责看图
桥接模块负责对齐和压缩视觉信息
语言模型负责生成和交互
这也是多模态大模型中最经典的一条技术路线。