第一章 为什么会有 LLaVA-1.5?
作者真正想回答的问题其实是:
到底应该怎样训练一个优秀的 Large Multimodal Model(LMM)?
这听起来很普通,但实际上,这是2023年多模态领域最核心的问题。
1.1 当时的大模型领域是什么局面?
2023年,GPT-4(V)还没有开放,开源多模态模型开始快速发展。那时已经有很多代表性模型:
BLIP-2、InstructBLIP、MiniGPT-4、Flamingo、LLaVA、Qwen-VL但每个模型都有自己的特点。如:
BLIP-2优点:图文对齐很好、Q-Former设计巧妙、Academic VQA成绩很好
缺点:不擅长聊天、对开放式问题回答一般
InstructBLIP:在BLIP-2基础上加入Instruction Tuning。
VQA成绩继续提高。但是模型越来越像"考试机器"。例如:
图片里一个人在骑自行车。
用户问:Describe the image.
模型答:A man.
因为训练集中很多VQA都是一句话回答。模型学会了能短回答,就绝不长回答。
LLaVA
贡献:第一次提出Visual Instruction Tuning,它让模型真正学会了聊天。例如:
用户问:What is happening? 模型可以回答几百字,甚至还能推理。
缺点:
用户问:Is the traffic light green?
模型可能回答:Yes, the image shows... 实际上答案应该只有 “Green.” 或 “Yes.”
所以LLaVA聊天能力很强。但是Academic Benchmark反而不好。
于是出现一个非常奇怪的现象。作者总结如下:
| 模型 | 聊天能力 | VQA能力 |
|---|---|---|
| LLaVA | 很强 | 一般 |
| InstructBLIP | 很强(考试) | 很强 |
| 两者兼顾 | 没有人做到 |
于是作者提出了一个疑问:为什么没有模型能够同时兼顾这两种能力?
1.2 大家当时认为原因是什么?
很多研究者给出了各种解释。
例如:
有人说:是因为LLaVA没有Q-Former / Connector太简单 / 训练数据太少 / Vision Encoder太弱。
还有人说:要预训练几十亿图片。
例如:InstructBLIP:129M Image-Text Qwen-VL:1.4 Billion Image-Text
所以大家形成了一个共识:模型差,是因为训练得还不够大。
1.3 作者却提出了一个完全不同的观点
作者认为:真正的问题并不是数据不够,而是训练方式没有设计好。
论文没有说:"LLaVA结构不好。"也没有说:"Q-Former不好。"
作者真正说的是:
先别急着设计越来越复杂的模型。先研究一下到底哪些设计真的有用。
所以论文用了一个词:Systematic Study(系统研究)
不是提出新网络,而是控制变量,一点一点改。
例如:
只改Connector,只改Prompt,只加VQA,看看有没有提升。
最后再提高分辨率,看看是不是继续提升。
这种实验方式其实更接近科学研究,而不是不停堆模块。
1.4 作者的研究路线(整篇论文主线)
整篇论文其实就是围绕三个问题展开。
问题一:是不是一定需要复杂的Q-Former?
作者实验:不用。MLP都可以很好。
问题二:是不是一定要几亿图文数据?
作者实验:不用。几十万也够。
问题三:是不是一定要设计新的网络?
作者实验:不用。原来的LLaVA稍微改一下就行。
于是整篇论文最终变成:
LLaVA │ ├── Connector改一下 ├── Prompt改一下 ├── 数据改一下 ├── 分辨率改一下 ▼ LLaVA-1.5整个网络几乎没有变。真正变化的是:训练Recipe(训练配方)。
这也是论文标题:Improved Baselines
为什么叫Baseline?因为作者认为:以后大家比较模型的时候,应该先和一个训练得足够合理的基础模型比较,而不是和一个存在明显训练缺陷的模型比较。
1.5 Figure 1 到底想表达什么?
Figure 1 浓缩了整篇论文的思想,表达了三个观点。
观点1:性能
LLaVA-1.5几乎所有Benchmark 都是SOTA。说明:不是网络复杂才厉害,而是训练方法合理。
观点2:数据效率
作者比较:
BLIP-2:129M → InstructBLIP:129M → Qwen-VL:1.4B → LLaVA-1.5:558K证明:别人用了几亿张图片,我只用了几十万,结果比他们还好。
所以真正厉害的不是数据量,而是数据有没有训练对。
观点3:模型复杂度
作者最后强调,整个LLaVA-1.5真正新增的东西只有两项:
① Linear Projection → MLP Projection
② 增加Academic VQA数据
没有Q-Former、Perceiver、Cross Attention Stack和没有的复杂Adapter。
这其实是在挑战当时的主流观点:复杂模型 ≠ 更好的多模态模型。
1.6 论文贡献
LaVA-1.5不只是把Linear改成了MLP,实际上,LLaVA-1.5真正贡献并不是提出了新的网络,而是提出了一套更合理的多模态训练范式(Training Recipe)。
作者通过严格的控制变量实验发现,影响多模态模型性能的关键因素,并不一定是更复杂的跨模态结构或海量预训练数据,而是训练流程是否合理、数据组成是否平衡、提示词是否明确,以及模型是否能够充分利用视觉信息。因此,LLaVA-1.5几乎没有改变LLaVA的整体架构,却仅通过四项简单改动——使用MLP替代Linear Connector、加入带格式约束的Response Format Prompt、补充Academic VQA数据以及提高输入分辨率——就在11个主流Benchmark上取得了当时的最佳性能,同时训练数据规模仍远小于InstructBLIP和Qwen-VL。
3.2 响应格式提示
这一章不要理解成一句 Prompt Engineering,而是把它理解成:
作者重新定义了 Instruction Tuning 中"输出格式"应该如何学习。
很多人第一次看都会觉得,就是在问题后面加了一句话:
Answer the question using a single word or phrase.
为什么就能提升这么多?
实际上,这背后涉及LLM 是如何学习输出格式(Output Format)的问题。
1. 现象与问题:多模态模型的“回答习惯”固化
作者在对比 LLaVA 和 InstructBLIP 时,发现它们因为训练数据的侧重,养成了两种截然不同的、甚至有些僵化的“回答习惯”:
LLaVA(倾向长回答):训练集多为描述性指令,导致它像个聊天机器人。即使问简单的
What color?,它也会回答完整的句子The object is red.甚至强行加解释。InstructBLIP(倾向短回答):大量使用了 VQA(视觉问答)等短答案数据集。导致它把“看到问题”和“输出短答案”强绑定。哪怕用户明确要求
Is this unusual? Please explain in detail.,它也可能只冷冰冰地蹦出一个Yes.,完全无视了“解释”的要求。
2. 根本原因:Prompt 中“输出格式”的模糊性 (Ambiguous Prompts)
作者指出,InstructBLIP 出现的退化(变成无情的考试机器),根本原因不在于 VQA 数据本身,而在于 Prompt 缺乏对“输出格式”的明确规定。
在传统模型训练中,模型优化的核心是“预测下一个 Token”。假设训练集中同时存在长句(Describe task)和短句(VQA task)数据,当 Prompt 只给出Q: What color?时,LLM 并不知道用户到底想要Yellow还是The shirt is yellow。只能依靠数据的统计规律去“猜”,最终导致逻辑混淆,形成了遇到提问就强行短回答的条件反射。
3. 架构差异:为什么 LLaVA 能破局,而 InstructBLIP 做不到?
既然发现了问题,为什么 InstructBLIP 很难通过修改 Prompt 来纠正?这与其模型微调策略有关:
InstructBLIP(冻结 LLM,仅训练 Q-Former):它的 LLM 是冻结的,只能靠几亿参数的 Q-Former 输出不同的视觉 Token 去试图改变百亿参数 LLM 的生成风格。这类似于 Prefix Tuning,控制能力非常有限。
LLaVA(全参数微调 LLM):LLaVA 在训练时,整个 Vicuna(LLM)都参与微调。因此,当模型看到特定的格式指令时,是 LLM 本身学会了主动控制输出长度和风格,而不是依赖外挂模块。
4. 解决思路与核心价值:引入“格式指令” (Format Instruction)
LLaVA-1.5 的解决方法非常简单直接——将“输出格式”正式纳入 Instruction 的一部分。
例如,在问颜色的问题后加上明确的限制:
What is the color of the shirt?Answer the question using a single word or phrase.
仅仅加了这一句话,LLaVA 就立刻从长篇大论转变为精准输出单个词(如Yellow)。
💡 这一思想的重大意义:这是 LLaVA-1.5 带来的最重要的方法论升级。以前的 Instruction Tuning 主要局限于Task Instruction(任务指令),即告诉模型“做什么”(如 Describe, Explain, Count)。 LLaVA-1.5 第一次强调了Format Instruction(格式指令)的重要性,即告诉模型“怎么回答”(如Answer shortly, Output JSON, Use bullet points)。
这一思想证明了:Instruction 不仅应该决定“回答什么内容”,还必须决定“以何种形式表达”。后来 GPT-4V、Gemini 等现代多模态大模型广泛支持输出 JSON、Markdown 表格等,正是建立在这一逻辑基础之上。
本节总结
**Response Format Prompt并不是简单地在问题后面增加一句提示,而是把"输出格式"正式纳入了Instruction的一部分。作者认为,LLaVA与InstructBLIP难以同时兼顾长回答和短回答,并不是因为模型结构不同,而是因为传统VQA数据中的Prompt没有明确规定输出格式,导致模型只能依赖数据分布去猜测应该回答长句还是短句,从而形成了偏向某一种回答风格的行为模式。LLaVA-1.5通过加入诸如"Answer the question using a single word or phrase."这样的格式指令,并同时微调整个LLM,使模型学会将回答长度和表达形式也视为用户指令的一部分,而不仅仅关注回答内容。这实际上扩展了Instruction Tuning的定义:Instruction不仅决定"回答什么",还决定"如何回答"。
3.3 Improved Vision-Language Connector
为什么LLaVA不用BLIP-2的Q-Former?为什么Linear换成MLP就能提升性能?
1. 回顾LLaVA中的Connector
LLaVA的整体流程是:
Image │ CLIP ViT-L/14 Image Features │Linear Projection Visual Tokens │VicunaLinear Projection就是 Vision-Language Connector。作用:把视觉特征映射到LLM的Embedding空间。不会重新理解图像,也不会做Cross-Attention。
2. 作者觉得Linear不够
作者认为,视觉空间与语言空间之间存在较大的分布差异。Linear本质上只能完成一次线性变换,但视觉特征到语言Embedding的映射,本身可能是非线性的。
如:假设CLIP中:汽车、公交车、卡车,三者距离很近,因为它们外观相似。
而LLM中:汽车、司机、道路,可能更接近,因为语言更关注语义关系。
仅靠一次线性变换,很难完成这种空间对齐。
3. 作者的方法
作者没有引入Q-Former,因为其中包含 Self-Attention、Cross-Attention、Learnable Queries,参数量较大,训练成本高。且CLIP本身已经有很强的视觉表示能力,不一定需要再通过Q-Former重新提取视觉信息。因此,希望Connector尽量简单,只负责映射,而不是重新编码视觉特征。
作者把Linear换成了一个两层MLP,结构:
CLIP Feature → Linear → GELU → Linear → Vicuna Embedding论文称之为:2-layer MLP connector。
比Linear多了一层隐藏层和一个GELU激活函数,可以学习非线性映射。没有设计更多层是因为如果MLP设计得很深,那么提升来自:网络更深?参数更多?训练更久?就很难分析。
因此作者只增加最小改动:
Linear → Linear + GELU + Linear
这样实验更容易说明:非线性映射本身就是有效的。
4. 为什么MLP能够提升效果?
MLP不是让模型看得更清楚,而是让视觉信息更容易被LLM理解。
以前:现在:
CLIP提取的视觉信息没有变化。MLP优化的是跨模态对齐(cross-modal alignment),而不是视觉编码能力。
5. 与BLIP-2、LLaVA对比
| 模型 | Connector | 是否重新编码视觉信息 |
|---|---|---|
| BLIP-2 | Q-Former | 是 |
| LLaVA | Linear | 否 |
| LLaVA-1.5 | 2-layer MLP | 否 |
可以看到,LLaVA-1.5并没有走BLIP-2的路线,而是在保持简单结构的前提下,提高映射能力。
本节总结
本节核心贡献不是提出新的跨模态结构, 而是证明对于已有较强视觉表示能力的CLIP,Connector主要承担的是跨模态映射,而不是视觉理解,一个简单的两层MLP就足以比单层Linear学习更好的视觉-语言空间对齐,而无需引入复杂的Q-Former。进一步支持了论文观点:提升多模态模型性能,不一定需要更复杂的结构,合理的训练设计和适度的非线性映射同样能够带来明显收益。
3.4 Academic-task-oriented Data
这一节回答的问题是:为什么LLaVA-1.5只增加了一部分数据,Benchmark性能却提升很多?
1. LLaVA原来数据存在的问题
LLaVA的数据组成主要是:CC3M等图文数据(预训练)、GPT生成的Visual Instruction Data(微调)
数据特点:偏开放式对话(Open-ended Conversation)
问题没有标准答案,更强调聊天能力,LLaVA在聊天Benchmark上表现很好,但Academic VQA一般。因为Academic Benchmark更关注精确回答。这些任务需要:精确识别、OCR、计数、属性识别,而不是长篇描述。
2. 作者的做法
补充了一类新的数据,主要包括:VQA、OCR、Chart/Diagram、Science QA等学术任务,把这类数据称为:Academic-task-oriented Data。
作者采用混合训练(mixed instruction tuning)。Conversation Data + Academic Data共同参与微调,使模型既保留聊天能力,又能提升VQA表现。
作者强调:不是数据越多越好,而是数据类型要平衡。如果数据类型单一,即使规模很大,也未必能覆盖各种能力。相比之下,增加任务多样性更重要。
本节总结
LLaVA-1.5没有大量增加训练数据,而是在原有对话数据基础上,引入VQA、OCR、ScienceQA等学术任务数据。这些数据主要提升模型的精确识别和问答能力,而开放式对话数据继续保持模型的聊天能力。作者希望通过不同任务类型的互补,而不是单纯扩大数据规模,实现能力的全面提升。
3.5 High Resolution
为什么要支持高分辨率?又为什么不能直接把图片放大输入CLIP?
1. 为什么需要高分辨率?
LLaVA使用CLIP ViT-L/14,输入分辨率是336×336。
很多任务需要更多细节,如:OCR、图表理解、小目标识别、高分辨率场景
整张图片 ──────────── 一个很小的路牌 很小的路牌经过缩放后路牌上的字几乎看不清,模型自然无法正确识别。但直接把输入改成672×672不可行,原因:
1、CLIP是在固定分辨率下训练的,如果直接改变输入分辨率,模型性能通常会下降。
2、计算量增长太快Token数量变成4倍,Attention计算约增加16倍。
2. 方法:把图片切成多个子图并保留整张图
作者没有直接放大输入,而是采用了Image Grid的方法。先根据预设的分辨率将图片缩放和填充(padding),然后再进行切分。每一块仍然保持CLIP支持的输入尺寸。
为保留整体语义,不仅输入四个局部,还保留了一张缩放后的全局图。
最终输入变成:Global Image + Patch1 + Patch2 + Patch3 + Patch4
论文称这种做法为:Global(保留整体语义) + Local Representation(保留局部细节)。
4. 整个流程
整个流程可以画成:
Original Image │ ┌─────┴─────┐ Global Image Grid Image (4 patches) └─────┬─────┘ │ CLIP │ Feature Sequence │ MLP Connector │ VicunaCLIP分别提取:全局特征、每个局部特征,最后拼接成一个更长的视觉Token序列。
LLM可以同时利用全局信息和局部细节
本节总结
LLaVA-1.5没有直接提高CLIP输入分辨率,而是采用Global + Image Grid策略:一方面保留一张缩放后的全局图获取整体语义,另一方面将原图切分成多个局部区域提取细节特征。最终将所有视觉特征拼接后输入LLM,实现了整体信息与局部细节的结合。这一方法避免了直接提高分辨率带来的CLIP适配问题和高昂计算成本,同时显著提升了OCR、小目标识别和图表理解等任务的性能。
一个值得注意的细节
很多人会认为:
Image Grid就是把图片裁剪后分别送入CLIP。
实际上更准确地说,它是多视角输入(multi-view input)。
因为模型最终看到的不是"一张图片",而是:1张全局视图 +多个局部视图
LLM会综合这些视觉Token进行推理,而不是分别处理后再融合。这也是后来LLaVA-NeXT、InternVL、MiniCPM-V等模型广泛采用的思路:通过增加视觉视角,而不是修改视觉编码器本身,来提升高分辨率理解能力。