【论文精读】LLaVA:Visual Instruction Tuning,把大语言模型变成“能看图聊天”的多模态助手

作者:千天夜

论文:Visual Instruction Tuning

模型:LLaVA / Large Language and Vision Assistant

会议:NeurIPS 2023 Oral


目录

  1. 论文背景:为什么需要 LLaVA?
  2. 核心思想:什么是 Visual Instruction Tuning?
  3. 数据构造:158K 图文指令数据是怎么来的?
  4. 模型结构:CLIP + Projection + Vicuna
  5. 训练目标:为什么只算 Assistant 回答的 loss?
  6. 两阶段训练:Feature Alignment 与 Visual Instruction Tuning
  7. 实验结果:指令微调到底有没有用?
  8. 和 BLIP-2、InstructGPT 的关系
  9. LLaVA 的不足与启发
  10. 总结

一、论文背景:为什么需要 LLaVA?

在读 LLaVA 之前,我们已经见过几类重要模型。

CLIP 解决的是:

图像和文本如何对齐?

BLIP-2 解决的是:

如何把冻结的视觉模型和冻结的大语言模型连接起来?

InstructGPT 解决的是:

如何让语言模型更好地听懂人类指令?

而 LLaVA 想解决的问题是:

能不能让一个开源大语言模型不仅会聊天,还能看图,并且按照用户的视觉指令进行回答?

传统视觉模型大多是固定任务接口,比如分类、检测、分割、caption。它们可以识别图像内容,但不太像 ChatGPT 一样支持自然语言交互。论文也指出,很多视觉模型虽然有开放世界视觉理解能力,但通常存在 fixed interface 和 limited interactivity,也就是接口固定、交互性有限的问题。:contentReferenceoaicite:0{index=0}

举个例子,普通图像 caption 模型可能只能回答:

text 复制代码
图中有一群人在车旁边整理行李。

但用户真正想问的可能是:

text 复制代码
这张图里有什么问题?
这些人可能遇到了什么困难?
请从常识角度解释这张图发生了什么。

这就不只是"看见图像"了,而是要求模型具备:

  1. 视觉理解能力;
  2. 语言生成能力;
  3. 指令跟随能力;
  4. 视觉推理能力;
  5. 多轮对话能力。

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 是多模态大模型发展中非常关键的一步。它说明:在强视觉编码器和强语言模型已经存在的情况下,真正决定模型能否成为"视觉助手"的,不只是结构连接,更是高质量的视觉指令数据和有效的指令微调方式。