作者:千天夜
论文:Visual Instruction Tuning
模型:LLaVA / Large Language and Vision Assistant
会议:NeurIPS 2023 Oral
目录
- 论文背景:为什么需要 LLaVA?
- 核心思想:什么是 Visual Instruction Tuning?
- 数据构造:158K 图文指令数据是怎么来的?
- 模型结构:CLIP + Projection + Vicuna
- 训练目标:为什么只算 Assistant 回答的 loss?
- 两阶段训练:Feature Alignment 与 Visual Instruction Tuning
- 实验结果:指令微调到底有没有用?
- 和 BLIP-2、InstructGPT 的关系
- LLaVA 的不足与启发
- 总结
一、论文背景:为什么需要 LLaVA?
在读 LLaVA 之前,我们已经见过几类重要模型。
CLIP 解决的是:
图像和文本如何对齐?
BLIP-2 解决的是:
如何把冻结的视觉模型和冻结的大语言模型连接起来?
InstructGPT 解决的是:
如何让语言模型更好地听懂人类指令?
而 LLaVA 想解决的问题是:
能不能让一个开源大语言模型不仅会聊天,还能看图,并且按照用户的视觉指令进行回答?
传统视觉模型大多是固定任务接口,比如分类、检测、分割、caption。它们可以识别图像内容,但不太像 ChatGPT 一样支持自然语言交互。论文也指出,很多视觉模型虽然有开放世界视觉理解能力,但通常存在 fixed interface 和 limited interactivity,也就是接口固定、交互性有限的问题。:contentReferenceoaicite:0{index=0}
举个例子,普通图像 caption 模型可能只能回答:
text
图中有一群人在车旁边整理行李。
但用户真正想问的可能是:
text
这张图里有什么问题?
这些人可能遇到了什么困难?
请从常识角度解释这张图发生了什么。
这就不只是"看见图像"了,而是要求模型具备:
- 视觉理解能力;
- 语言生成能力;
- 指令跟随能力;
- 视觉推理能力;
- 多轮对话能力。
LLaVA 的目标就是把这些能力整合起来,构建一个通用视觉语言助手。
二、核心思想:什么是 Visual Instruction Tuning?
LLaVA 论文的标题就是 Visual Instruction Tuning,翻译过来就是"视觉指令微调"。
在文本大模型里,Instruction Tuning 的作用是让模型从"续写器"变成"助手"。比如原来的语言模型只是在做 next-token prediction,而指令微调后的模型会更倾向于按照用户要求回答问题。
LLaVA 把这个思想扩展到了多模态领域:
text
文本 Instruction Tuning:
文本指令 → Assistant 回答
Visual Instruction Tuning:
图像 + 文本指令 → Assistant 回答
所以 Visual Instruction Tuning 的关键不是让模型简单生成 caption,而是让模型学会:
text
给定一张图片和用户问题,生成符合用户意图的回答。
论文摘要中明确说,作者尝试使用 language-only GPT-4 生成多模态 language-image instruction-following data,并基于这些数据训练出 LLaVA,一个连接 vision encoder 和 LLM 的大规模多模态模型。(arXiv)
这里要特别注意一点:
原始 LLaVA 的 Visual Instruction Tuning 更像 InstructGPT 里的 SFT 阶段,而不是完整 RLHF。
InstructGPT 的完整流程包括 SFT、Reward Model、PPO。OpenAI 官方介绍中也说明,InstructGPT 会先训练监督学习基线,再收集人类比较数据训练 Reward Model,最后用 PPO 优化模型。(OpenAI)
但原始 LLaVA 没有训练 RM,也没有 PPO。它主要是用 GPT-4 生成好的"图像 + 指令 + 回答"数据,直接做监督微调。
因此可以这样理解:
text
InstructGPT:
SFT → RM → PPO
原始 LLaVA:
视觉特征对齐 → 多模态 SFT
三、数据构造:158K 图文指令数据是怎么来的?
LLaVA 这篇论文最重要的创新之一,不在模型结构,而在数据构造。
当时互联网上已经有很多普通图文对数据,比如:
text
Image + Caption
例如:
text
图片:一群人在车旁边整理行李
Caption:A group of people standing outside of a black vehicle with various luggage.
但这种数据并不是 instruction-following 数据。LLaVA 需要的是:
text
Human: 图中这些人可能面临什么问题?
Assistant: 他们可能面临行李太多、车内空间不足的问题......
也就是说,LLaVA 需要把普通图文对改造成"人类指令 + 助手回答"的格式。
3.1 GPT-4 明明看不到图,为什么还能生成视觉指令数据?
这是这篇论文最容易误解的地方。
原始 LLaVA 里使用的是 language-only GPT-4,不是后来的 GPT-4V。也就是说,GPT-4 本身没有直接看到图片。
那它靠什么生成视觉问答?
答案是:作者把图像转成了文本符号表示。
论文中使用了两类信息:
text
1. Captions:图像描述
2. Bounding boxes:物体类别 + 空间位置
论文 Table 1 展示了一个例子:上半部分是 captions 和 boxes,下半部分是 GPT 生成的 conversation、detailed description 和 complex reasoning。论文特别说明,表中的图片只是给读者看的参考,GPT 并没有被输入图像本身。
可以理解成:
text
COCO 图像
↓
Captions + Bounding Boxes
↓
转成 GPT-4 能读懂的文本 prompt
↓
GPT-4 生成视觉指令数据
这一步的本质是:
先把视觉内容符号化,再让 LLM 生成高质量指令数据。
这对视觉 RAG、专利图像理解也很有启发。比如专利页面可以先抽取:
text
OCR 文本
区域坐标
图中编号
模块名称
箭头连接关系
局部结构描述
再让 LLM 生成检索 query 或视觉问答数据。
3.2 三类数据:Conversation、Detailed Description、Complex Reasoning
LLaVA 最终生成了三类视觉指令数据。
第一类:Conversation,多轮视觉对话
这类数据模拟人和助手围绕图片进行多轮问答。
例如:
text
Human: 图中有什么车辆?
Assistant: 图中有一辆黑色 SUV。
Human: 车周围有什么?
Assistant: 车周围有几个人和很多行李。
Human: 他们可能在做什么?
Assistant: 他们可能正在尝试把行李装进车里,准备出行。
这类数据训练的是模型的多轮视觉对话能力。
第二类:Detailed Description,详细图像描述
普通 caption 往往很短,比如:
text
一群人在车旁边整理行李。
Detailed Description 要求模型生成更详细、更完整的描述:
text
图中是在一个地下停车场,一辆黑色 SUV 停在画面中央。几个人站在车旁,周围摆放着多个行李箱和背包。他们似乎正在尝试把行李装进车里,整体场景像是准备出行。
这类数据训练的是模型的详细观察和完整表达能力。
第三类:Complex Reasoning,复杂视觉推理
这类数据不只是描述图像,而是要求模型基于图像做推理。
例如:
text
Human: 图中的人可能面临什么困难?
Assistant: 他们可能面临行李太多、车内空间不足的问题。因为图中 SUV 周围有多个行李箱和背包,而几个人正在围绕车辆整理这些物品,所以可以推测他们正在尝试把大量行李放进车里。
这里模型不仅要识别:
text
人、车、行李
还要推理:
text
行李很多 + 人在车旁整理 + SUV
→ 可能准备出行
→ 可能遇到空间不足
这类数据训练的是视觉常识推理能力。
3.3 158K 数据到底怎么来的?
LLaVA 最终收集了 158K unique language-image instruction-following samples,其中包括:
| 数据类型 | 数量 | 作用 |
|---|---|---|
| Conversation | 58K | 训练多轮看图对话 |
| Detailed description | 23K | 训练详细图像描述 |
| Complex reasoning | 77K | 训练复杂视觉推理 |
| 总计 | 158K | 视觉指令微调数据 |
这 158K 不是人工逐条写出来的。论文说,作者使用 COCO images,并为每种数据类型手工设计少量 seed examples,这些 seed examples 是数据收集过程中唯一的人类标注;然后通过 in-context learning 调用 GPT-4 批量生成。论文还指出,GPT-4 相比 ChatGPT 能生成更高质量的指令数据,尤其是空间推理相关内容。
所以它的流程可以总结为:
text
COCO 图像
↓
Captions + Boxes
↓
人工设计少量 seed examples
↓
GPT-4 in-context learning 批量生成
↓
Conversation 58K
Detailed Description 23K
Complex Reasoning 77K
一句话:
LLaVA 的 158K 数据,本质上是"少量人工模板 + GPT-4 批量扩写"的结果。
四、模型结构:CLIP + Projection + Vicuna
LLaVA 的结构非常简洁。
论文 Figure 1 展示了模型结构,整体可以表示为:
text
Image Xv
↓
CLIP Vision Encoder g(·)
↓
Visual Feature Zv
↓
Projection W
↓
Visual Tokens Hv
↓
和文本 instruction 一起输入 Vicuna
↓
生成 Assistant Answer
建议博客配图:
插入论文 Figure 1:LLaVA network architecture。
图中左侧是 Vision Encoder,中间是 Projection W,上方是 Language Model,右侧生成 Language Response。
4.1 公式解析
论文给出的核心公式是:
text
Hv = W · Zv, with Zv = g(Xv)
逐个解释:
| 符号 | 含义 |
|---|---|
Xv |
输入图像 |
g(·) |
CLIP Vision Encoder |
Zv = g(Xv) |
CLIP 提取出的视觉特征 |
W |
可训练投影矩阵 |
Hv |
投影后的视觉 token |
这个公式的含义是:
先用 CLIP 视觉编码器提取图像特征,再用一个可训练的线性投影矩阵 W,把视觉特征映射到语言模型的词向量空间。
为什么要做这一步?
因为 CLIP 输出的是视觉特征,Vicuna 接收的是语言 token embedding。两者不是一个空间,不能直接拼在一起。Projection W 的作用就是做一个"翻译器":
text
视觉特征空间
↓ W
语言 embedding 空间
投影之后的 Hv 就可以作为一串 visual tokens,和文本 instruction tokens 一起输入语言模型。
4.2 图像 token 和文本 token 是怎么拼起来的?
可以把输入序列想成:
text
<image tokens> Human: 请描述这张图。 Assistant:
或者:
text
Human: 请描述这张图。 <image tokens> Assistant:
然后 Vicuna 像普通自回归语言模型一样,继续生成回答:
text
这张图展示了......
注意,visual tokens 不是"猫""狗""车"这些离散文字,而是一串连续向量。语言模型并不是直接读到某几个词,而是读到一串已经映射到语言 embedding 空间的视觉表示。
4.3 LLaVA 为什么不用 Q-Former?
刚读完 BLIP-2 的话,这里很容易联想到 Q-Former。
BLIP-2 的结构是:
text
Frozen Image Encoder
↓
Q-Former
↓
LLM
LLaVA 的结构是:
text
CLIP Vision Encoder
↓
Linear Projection W
↓
Vicuna
LLaVA 没有使用复杂的 Q-Former,而是用一个轻量的线性投影层。论文也提到,这种简单 projection 方便快速进行 data-centric experiments;更复杂的连接方式,比如 Flamingo 的 gated cross-attention 和 BLIP-2 的 Q-Former,可以作为未来工作探索。
所以可以这样理解:
BLIP-2 更重视"如何用 Q-Former 抽取视觉信息";
LLaVA 更重视"如何用视觉指令数据训练看图对话能力"。
五、训练目标:为什么只算 Assistant 回答的 loss?
LLaVA 本质上仍然是一个自回归语言模型。它的训练目标是:
text
给定图像 Xv 和用户指令 Xinstruct,
最大化 assistant answer Xa 的生成概率。
也就是:
text
p(Xa | Xv, Xinstruct)
展开来看,就是逐 token 预测 assistant 的回答。
假设回答是:
text
图中有一只狗。
模型实际做的是:
text
p(图中 | 图像, 用户问题)
p(有 | 图像, 用户问题, 图中)
p(一只 | 图像, 用户问题, 图中, 有)
p(狗 | 图像, 用户问题, 图中, 有, 一只)
训练时通常最小化交叉熵:
text
L = - Σ log pθ(xi | Xv, Xinstruct, Xa,<i)
这里的 xi 只来自 Assistant 的回答部分。
5.1 为什么 Human 问题不算 loss?
因为用户问题和图像是条件,不是模型要学习生成的目标。
一个训练样本可能是:
text
System: A chat between a curious human and an assistant.
Human: <image> What is unusual about this image?
Assistant: A man is ironing clothes on top of a vehicle. ###
训练时:
text
System message:不算 loss
Human instruction:不算 loss
Image tokens:不算 loss
Assistant answer:算 loss
Stop token:算 loss
也就是:
text
[System] [Human + Image] [Assistant Answer]
0 0 1 1 1 1
如果把 Human 的问题也算 loss,模型就会被迫学习"如何生成用户问题";但我们真正希望它学的是"如何回答用户问题"。
论文 Table 2 也说明,训练输入是 system message、human instruction、assistant answer 组成的多轮序列,并且模型只预测 assistant answers 和停止符,只有绿色 token 用于计算自回归 loss。
六、两阶段训练:Feature Alignment 与 Visual Instruction Tuning
LLaVA 的训练不是一步完成的,而是分成两个阶段。
6.1 Stage 1:Pre-training for Feature Alignment
第一阶段叫 Feature Alignment,也就是视觉-语言特征对齐。
这个阶段使用从 CC3M 过滤出的 595K image-text pairs。这些普通图文对会被转换成简单 instruction-following 格式,例如:
text
Human: <image> Briefly describe this image.
Assistant: A dog is running on the grass.
这个阶段:
text
冻结 CLIP Vision Encoder
冻结 Vicuna / LLM
只训练 Projection W
也就是说,此时模型还没有真正学习复杂看图聊天,只是在训练一个"视觉翻译器":
text
CLIP 图像特征 → LLM 能理解的 visual tokens
论文也说,这个阶段可以理解为训练一个 compatible visual tokenizer。
6.2 Stage 2:Fine-tuning End-to-End
第二阶段才是真正的 Visual Instruction Tuning。
这个阶段使用前面构造的 LLaVA-Instruct-158K 数据,包括:
text
Conversation
Detailed Description
Complex Reasoning
这个阶段:
text
冻结 CLIP Vision Encoder
训练 Projection W
训练 Vicuna / LLM
注意这里有一个容易误解的地方。论文说 LLaVA 是 end-to-end trained,但原始 LLaVA 中 CLIP visual encoder 是冻结的。所谓 end-to-end 更准确地说,是从 visual tokens 到 language response 的生成链路一起训练,而不是所有模块都更新。
两阶段可以总结为:
text
Stage 1:Feature Alignment
数据:CC3M 595K
训练:只训练 W
目的:让视觉特征进入 LLM embedding 空间
Stage 2:Visual Instruction Tuning
数据:LLaVA-Instruct-158K
训练:W + Vicuna
目的:让模型学会看图对话、详细描述、复杂推理
七、实验结果:指令微调到底有没有用?
LLaVA 的实验部分主要回答一个问题:
Visual Instruction Tuning 到底有没有用?
答案是:非常有用。
论文 Table 4 是核心消融实验,比较了不同数据组合在 LLaVA-Bench COCO 上的效果。
| 训练数据 | Conversation | Detail description | Complex reasoning | All |
|---|---|---|---|---|
| Full data | 83.1 | 75.3 | 96.5 | 85.1 |
| Detail + Complex | 81.5 | 73.3 | 90.8 | 81.9 |
| Conv + 5% Detail + 10% Complex | 81.0 | 68.4 | 91.5 | 80.5 |
| Conversation only | 76.5 | 59.8 | 84.9 | 73.8 |
| No Instruction Tuning | 22.0 | 24.0 | 18.5 | 21.5 |
最重要的对比是:
text
No Instruction Tuning:21.5
Full data:85.1
这说明:仅仅把 CLIP 和 Vicuna 接起来是不够的,如果没有视觉指令微调,模型并不能很好地按照用户指令回答问题。
LLaVA 真正强的地方,是通过 158K 视觉指令数据,把"看图能力"转化成"可交互的视觉助手能力"。
7.1 为什么三类数据都要有?
再看:
text
Conversation only:73.8
Conv + 5% Detail + 10% Complex:80.5
Full data:85.1
只用 Conversation 数据,模型已经有一定对话能力。但加入 Detailed Description 和 Complex Reasoning 之后,总体分数继续提升。
原因是三类数据训练的能力不同:
text
Conversation:
训练多轮视觉对话能力
Detailed Description:
训练完整细致的图像描述能力
Complex Reasoning:
训练视觉常识推理能力
所以 Full data 最好,说明三种数据是互补的。
7.2 和 BLIP-2、OpenFlamingo 的对比
论文还在 LLaVA-Bench In-the-Wild 上比较了 OpenFlamingo、BLIP-2 和 LLaVA。这个 benchmark 包含 24 张复杂真实场景图片和 60 个问题,覆盖室内外场景、meme、绘画、草图等。
结果如下:
| 模型 | Conversation | Detail description | Complex reasoning | All |
|---|---|---|---|---|
| OpenFlamingo | 19.3 | 19.0 | 19.1 | 19.1 |
| BLIP-2 | 54.6 | 29.1 | 32.9 | 38.1 |
| LLaVA | 57.3 | 52.5 | 81.7 | 67.3 |
可以看到,LLaVA 最大优势出现在 complex reasoning 上。
这说明 LLaVA 相比 BLIP-2,不只是"能看图",而是更能根据用户问题进行指令跟随和推理。
八、和 BLIP-2、InstructGPT 的关系
8.1 和 BLIP-2 的关系
BLIP-2 重点解决的是:
text
冻结视觉模型和冻结 LLM 之间,如何用 Q-Former 连接?
它的核心是 Q-Former,通过 learnable query tokens 从图像特征中抽取信息,然后传给语言模型。
LLaVA 重点解决的是:
text
视觉模型和 LLM 接上之后,如何让模型按照人类视觉指令回答?
它的核心是 Visual Instruction Tuning,通过 GPT-4 生成的图文指令数据训练模型。
对比一下:
| 模型 | 视觉模块 | 连接模块 | 语言模型 | 重点 |
|---|---|---|---|---|
| BLIP-2 | Frozen Image Encoder | Q-Former | Frozen LLM | 视觉信息抽取与桥接 |
| LLaVA | CLIP ViT-L/14 | Linear Projection W | Vicuna | 视觉指令跟随 |
一句话:
BLIP-2 更重结构设计,LLaVA 更重数据构造和指令微调。
8.2 和 InstructGPT 的关系
LLaVA 借鉴的是 InstructGPT 的 Instruction Tuning 思想,但没有完整复刻 RLHF。
可以这样理解:
text
InstructGPT:
让纯文本语言模型学会听人话
LLaVA:
让多模态模型学会看图并听人话
但训练流程不同:
text
InstructGPT:
SFT → RM → PPO
LLaVA:
Feature Alignment → Visual Instruction SFT
所以 Visual Instruction Tuning 不是 RLHF,它更像多模态版本的 SFT。
九、LLaVA 的不足与启发
LLaVA 很经典,但它也有明显不足。
9.1 细粒度视觉理解能力有限
LLaVA 使用 CLIP 作为视觉编码器。CLIP 擅长全局语义理解,但对 OCR、小目标、密集布局、复杂空间关系不一定强。
论文中有一个失败现象:模型看到草莓和酸奶,可能会错误推断"有草莓味酸奶"。问题在于:
text
看到:草莓 + 酸奶
错误推理:草莓味酸奶
也就是说,模型识别到了局部元素,但没有准确理解元素之间的关系。
这对专利图像、流程图、文档图像尤其重要。专利图里经常有:
text
模块编号
箭头方向
区域对应关系
部件连接关系
说明文字
模型不能只看到"有 A、有 B、有箭头",还要理解:
text
A 是否真的连接 B?
箭头方向从哪到哪?
编号 101 对应哪个部件?
文字标注属于哪个区域?
这也是后续视觉 RAG、文档图像理解、region-level grounding 的研究空间。
9.2 视觉和语言的连接比较粗
LLaVA 早期版本只用一个线性投影层:
text
Hv = W · Zv
这个设计简单高效,但它没有像 Q-Former 那样显式学习哪些视觉区域更重要。
所以在复杂图像中,LLaVA 可能更像是把 CLIP patch 特征整体投影给 LLM,而不是精细地选择和组织视觉信息。
后来的 LLaVA-1.5 做了改进,例如使用 CLIP-ViT-L-336px、MLP projection,并加入更多面向学术任务的 VQA 数据。LLaVA-1.5 论文也指出,fully-connected vision-language cross-modal connector 在视觉指令微调中非常有效。(arXiv)
9.3 数据来自 GPT-4,可能存在幻觉
LLaVA 的数据是 GPT-4 基于 captions 和 boxes 生成的。这个方法效率很高,但也可能引入问题。
因为 GPT-4 没有直接看到原图,如果 caption 或 boxes 不完整,它可能会脑补合理但不一定真实的内容。
比如:
text
caption:几个人在车旁边
boxes:person, car, suitcase
GPT-4 可能推断:
text
他们正在准备旅行。
这个推断可能合理,但不一定是图像中确定存在的事实。
因此,视觉指令数据生成有一个核心矛盾:
数据越丰富,越容易引入推断和幻觉;
数据越严格 grounded,多样性和推理性可能越弱。
十、对视觉 RAG / 专利图像理解的启发
LLaVA 对专利视觉 RAG 项目有很直接的启发。
它证明了一条非常重要的路线:
text
视觉内容
↓
符号化表示
↓
LLM 生成指令数据
↓
训练多模态模型
在专利图像场景中,可以仿照 LLaVA 的思路,把页面或图像先转成:
text
OCR 文本
版面 layout
局部 region 坐标
图中编号
箭头连接关系
模块名称
图注说明
然后让 LLM 生成不同类型的 query:
text
1. 局部定位型 query
哪个区域展示了控制模块与传感器之间的连接?
2. 结构理解型 query
图中信号从哪个模块传输到哪个模块?
3. 细节判别型 query
编号 101 对应的是哪个部件?
4. 推理型 query
为什么该结构能够实现自动检测?
这比普通 caption 更适合训练视觉检索模型,因为它能迫使模型关注局部区域、结构关系和跨模态语义。
十一、全文总结
LLaVA 的核心可以压缩成一句话:
LLaVA 用 GPT-4 生成的视觉指令数据,把 CLIP 的视觉理解能力和 Vicuna 的语言对话能力连接起来,让开源模型初步具备了看图聊天、详细描述和复杂视觉推理能力。
更通俗地说:
text
CLIP 负责看图;
Projection W 负责把视觉特征翻译成语言模型能读的 token;
Vicuna 负责根据图像 token 和用户指令生成回答;
GPT-4 生成的视觉指令数据负责教模型怎么听人话。
它的贡献主要有三点:
text
1. 提出 Visual Instruction Tuning,把 instruction tuning 扩展到图文多模态场景。
2. 用 captions + boxes + GPT-4 构造了 158K 图文指令数据。
3. 用简单的 CLIP + Projection + Vicuna 结构,证明高质量视觉指令数据可以显著提升看图对话和视觉推理能力。
它的不足也很清楚:
text
1. 对细粒度视觉关系理解仍然有限;
2. 对 OCR、密集文档、复杂布局不是强项;
3. 数据由 GPT-4 生成,可能存在未 grounded 的推断;
4. 评测依赖 GPT-4 judge,开放式评价仍有争议。
从论文学习路线看:
text
CLIP:
图文对齐
BLIP-2:
视觉编码器如何接入 LLM
InstructGPT:
语言模型如何听人类指令
LLaVA:
多模态模型如何看图并听人类指令
所以,LLaVA 是多模态大模型发展中非常关键的一步。它说明:在强视觉编码器和强语言模型已经存在的情况下,真正决定模型能否成为"视觉助手"的,不只是结构连接,更是高质量的视觉指令数据和有效的指令微调方式。