LLaVA 详细讲解:高性能视觉助手的推理实现

张开发
2026/4/4 23:53:15 15 分钟阅读

分享文章

LLaVA 详细讲解:高性能视觉助手的推理实现
论文Visual Instruction TuningarXiv: 2304.08485 | University of Wisconsin-Madison, Microsoft Research, Columbia University | Haotian Liu, Chunyuan Li, Qingyang Wu, Yong Jae Lee | NeurIPS 2023 Oral写在前面如果说一个能和你对话、理解图片、做复杂视觉推理的多模态大模型训练只需要 8 张 A100全程不到 15 个小时你可能会觉得这是在夸大。但 LLaVA 确实做到了这件事——而且它的架构简单到有些令人意外一个冻住的 CLIP ViT、一个可以微调的 Vicuna LLM、以及中间一个窄小的线性投影矩阵。这篇笔记希望把 LLaVA 的每一个设计决策都讲清楚它为什么能用如此轻量的数据量取得接近多模态 GPT-4 的表现它的数据生成流水线究竟在做什么两阶段训练策略分别解决了什么问题以及它开创的视觉指令微调这个范式背后的核心逻辑是什么。一、背景多模态模型缺的是什么在 LLaVA 之前NLP 社区已经有了成熟的指令微调范式——用 GPT-3、T5、PaLM 作为基础收集或生成指令跟随数据微调出 InstructGPT、ChatGPT、Vicuna 这些能理解人类指令的模型。这条路的核心是机器生成的高质量指令数据 对预训练大模型做指令微调。但这条路在多模态领域几乎还是空白。原因很现实视觉-语言指令跟随数据很难获取——人工标注成本极高现有的图文对数据CC3M、LAION 等只有图片和描述文字不是人问图片相关问题、助手详细回答这种对话格式更缺乏涉及复杂推理的样本。与此同时已有的多模态大模型BLIP-2、OpenFlamingo虽然能做图像理解但论文指出它们的核心问题是模型只是在描述图像而不是在真正跟随用户的指令。你问它这张图里有什么不寻常的地方它会告诉你图里有个人站在街上你再追问这个场景有哪些潜在的危险它依然只会描述。这不是一个助手应该有的行为。LLaVA 的出发点非常清晰把指令微调从文本领域迁移到视觉-语言多模态领域构建一个真正能跟随用户指令的视觉助手。而这件事的核心挑战是——多模态指令跟随数据从哪里来二、数据引擎用语言描述欺骗纯文本 GPT-4LLaVA 最有创意的部分不是架构而是数据生成方式。当时 GPT-4 只有纯文本接口多模态 GPT-4 还未公开无法直接处理图像。但 GPT-4 有极强的文本理解和推理能力。作者们的洞察是图像的语义内容可以用文字来描述描述得足够准确纯文本 GPT-4 就能理解这张图并生成针对这张图的高质量指令-回答对。具体操作分两步。首先把每张图像用两种文字符号表示编码一是图像对应的多条字幕captions从各种角度描述画面内容二是边界框标注bounding boxes描述画面里每个物体的类别和空间位置。这两种信息拼在一起构成一个对 GPT-4 可读的图像文字代理。然后把这个文字代理和人工设计的少量 seed examples 作为 in-context-learning 的示例发给 GPT-4请它生成三种类型的视觉指令数据1.对话型Conversation模拟多轮问答场景提问涉及图像中的物体、属性、场景等GPT-4 生成对应的助手回答。问题和答案都是多轮的涵盖从图里有什么车到这辆车是什么颜色这类具体细节问题。2.详细描述型Detailed Description提示 GPT-4 为图像生成一段全面而详尽的文字描述要求涵盖画面里的主要内容、背景、人物动作、物体关系等维度。这类数据让模型学会输出结构化、完整的图像描述。3.复杂推理型Complex Reasoning这是三种类型里最有价值的一类。论文给的例子是图里有一个人站在一辆黄色 SUV 顶上熨衣服GPT-4 被要求回答这些人面临什么挑战。这类问题需要理解场景语义做常识推断甚至预测后果不能靠描述画面直接得到答案。整个数据集基于 COCO 图像构建最终生成了总计158K 条独特的语言-图像指令跟随样本其中对话型 58K、详细描述型 23K、复杂推理型 77K合称LLaVA-Instruct-158K。这个流程的聪明之处在于彻底绕开了纯文本 GPT-4 无法处理图像的限制——它不需要看到图像只需要读懂图像的文字描述就能生成高质量的多轮对话数据。用 GPT-4 做视觉内容的文字代理这个思路为后续大量多模态数据生成工作开辟了一条低成本、可扩展的路。三、架构一个极简的三段式设计LLaVA 的模型架构被作者自己形容为刻意保持简单以便未来可以轻松替换各个组件、开展系统性研究。整体由三部分组成1.视觉编码器Visual Encoder使用 CLIP 的 ViT-L/14 预训练视觉 Transformer。输入一张图像ViT 把它切成若干 patch编码为一组视觉 token输出维度为 1024。整个视觉编码器在训练阶段完全冻住不参与梯度更新。2.投影矩阵 WProjection Matrix一个简单的线性层也是整个架构里最小的组件。它的唯一职责是把 ViT 输出的视觉 token 从 1024 维投影到 Vicuna LLM 的词嵌入维度4096 维对应 Vicuna-13B。形式上就是一个矩阵乘法H_v W · Z_v其中 Z_v 是 ViT 的输出W 是可学习的投影矩阵H_v 是投影后的视觉特征维度与 LLM 的词嵌入对齐。3.语言模型Language Model使用 Vicuna-13B这是基于 LLaMA 做指令微调的聊天模型在纯文本对话任务上有很强的能力。在第一阶段 Vicuna 也完全冻住在第二阶段解冻参与端到端训练。把图像转成视觉 token投影到语言模型的 embedding 空间然后把这些视觉 token 直接当作软视觉提示soft visual prompts拼在文本 token 之前送入 LLM——这就是 LLaVA 的完整前向传播过程。比 BLIP-2 的 Q-Former 简单也比 Flamingo 在 LLM 内部插入交叉注意力层简单但效果不逊色。为什么选择线性投影而不是更复杂的适配器论文的立场是在 LLaVA 这个初期工作里保持架构简单能让实验结论更清晰也为后续研究留下了更多改进空间。后来的 LLaVA-1.5 把线性层换成了 MLP进一步提升了性能印证了这个方向是对的。四、训练目标自回归语言建模LLaVA 的训练目标和标准语言模型完全一致——自回归预测下一个 token即最大化目标答案序列的条件概率。对于多轮对话数据假设一共有 T 轮每轮有用户指令和助手回答。所有轮次被拼成一个长序列送入模型训练时只对助手的回答 token 计算损失用户的指令 token 不参与 loss 计算。这个设计和 Vicuna 的训练策略保持一致目的是让模型学会如何回答而不是学会如何提问。形式上对于长度为 L 的序列目标答案 X_a 的条件概率是其中是视觉输入显式条件化是当前预测 token 之前的所有指令 token是之前所有助手回答 token。视觉特征的条件化是显式写进目标函数的强调每个回答都应当以图像为基础。在具体实现中对话格式遵循 Vicuna-v0 的系统消息设定停止 token 使用###只有绿色 token即助手的回答部分参与 loss 计算。五、两阶段训练先对齐再理解LLaVA 的训练分为两个阶段两个阶段解决的是不同层次的问题。5.1 第一阶段特征对齐预训练Stage 1: Pre-training for Feature Alignment核心问题视觉编码器和语言模型分别在各自的数据域里预训练它们的表示空间是完全不同的。ViT 输出的是图像 patch 的视觉 embeddingVicuna 的词嵌入空间是文本 token 的语义空间两者没有任何先验的对应关系。如果直接把视觉 token 塞给 LLM它完全不知道这些向量意味着什么。解决思路在大规模图文对上先做一轮轻量训练强迫线性投影矩阵 W 学会把视觉 embedding 映射到 LLM 能理解的语义空间。这一阶段的目标不是让模型学会复杂推理而是建立视觉和语言之间最基础的语义对应关系。数据来源从 CC3MConceptual Captions 3M数据集中筛选出595K 图文对。论文在附录里详细说明了筛选过程目的是在概念覆盖度和训练效率之间取得平衡。数据格式把每个图文对转换成单轮对话格式。对于每张图像随机从预设的指令列表里采样一条描述图像的指令例如简要描述这张图真实标签就是原始图文对里的描述文字caption。这种格式虽然简单但足以让投影矩阵学会特征对齐。训练细节在这一阶段ViT 和 Vicuna 的权重全部冻住只有投影矩阵 W 参与训练。学习率 2e-3batch size 128训练 1 个 epoch。在 8 张 A100 上全程只需要约4 小时。这个设计的逻辑非常干净第一阶段的唯一目标是训练出一个视觉分词器——让 LLM 有能力读懂图像 token就像它能读懂文本 token 一样。如果把 LLM 比作一个只会读中文的人第一阶段在做的事就是教它把图像翻译成中文而不是教它如何用中文写作。5.2 第二阶段端到端视觉指令微调Stage 2: Fine-tuning End-to-End核心问题特征对齐之后模型虽然能看见图像但还不知道如何按照用户的指令去回答问题不知道什么时候需要做推理什么时候需要做描述也没有能力处理复杂的多轮对话。解决思路在 LLaVA-Instruct-158K 上做端到端的指令微调让模型学会真正意义上的视觉理解和指令跟随。训练细节这一阶段ViT 的权重依然冻住但投影矩阵 W 和整个 Vicuna 语言模型都解冻参与梯度更新。学习率 2e-5batch size 32训练 3 个 epoch。在 8 张 A100 上全程约需10 小时。训练使用 Adam 优化器无权重衰减余弦学习率调度warmup ratio 为 3%沿用 Vicuna 的超参数设定。为了节省显存使用 BF16 和 TF32 混合精度以及 FSDPFull Shard Data Parallel和梯度检查点gradient checkpointing。论文还针对不同的下游场景做了两种微调变体一是用于日常对话的视觉聊天Visual Chat用全量 LLaVA-Instruct-158K 数据训练二是用于科学领域推理的ScienceQA专项微调用 ScienceQA 数据集训练。为什么 ViT 在第二阶段依然冻住而 Vicuna 解冻论文的考量是CLIP ViT 已经有了非常强大的视觉特征提取能力解冻它可能破坏原有的视觉表示而让 Vicuna 参与端到端训练则能让语言模型更好地学会如何把视觉信息和语言指令融合起来生成高质量回答。读到这里一个自然的问题是线性投影 两阶段微调这么简单的方案为什么能达到接近多模态 GPT-4 的效果论文给出了几个互补的解释。第一CLIP ViT 已经做了大量跨模态对齐的工作。CLIP 本身就是在 4 亿图文对上对比学习训练的它的视觉表示已经高度对齐语言语义——知道红色苹果的图像 patch 和红色苹果这个词组在语义上是接近的。线性投影只需要做一个最后的维度变换而不需要从零开始建立视觉-语言对应关系。第二Vicuna 有极强的指令跟随和语言推理能力。Vicuna-13B 是基于 ChatGPT 对话数据微调的在文本任务上能做复杂推理、多轮对话、代码生成……把视觉特征映射到它的输入空间之后它自己就有能力做基于图像的推理。LLaVA 所做的在某种程度上是在激活Vicuna 已有的推理能力让它应用在视觉场景上。第三LLaVA-Instruct-158K 的数据质量足够高。论文使用了仅仅 80K 张独特图像但生成了 158K 条多轮对话。这些数据的质量因为使用了 GPT-4而非 ChatGPT生成复杂推理部分而得到保证——GPT-4 在 2023 年依然是最强的推理模型它生成的训练数据携带了真实的推理链而不只是表面的描述。六、LLaVA 之后的影响LLaVA 在 2023 年 4 月发出到当年 9 月就被 NeurIPS 接受并评为 Oral最高级别口头报告说明社区对这篇工作的价值评价极高。它开辟的视觉指令微调范式迅速成为多模态大模型研究的基础范式后续大量工作都在这个框架上做改进LLaVA-1.52023.10同一团队把线性投影换成两层 MLP把 CLIP 分辨率从 224×224 提升到 336×336使用了更丰富的混合训练数据包括 COCO、GQA、OCR-VQA 等在 11 个评测基准上全面超越 LLaVA 1.0证明这个简单架构还有大量可挖掘的空间。LLaVA-NeXT2024.01同一团队引入动态高分辨率处理能处理 672×672 到 1344×336 等多种分辨率使用 LLaMA-3 作为 LLM 骨干大幅提升了 OCR、推理和世界知识任务上的性能。更广泛地InstructBLIP、MiniGPT-4、ShareGPT4V、Qwen-VL 等工作都以 LLaVA 的数据生成方法和两阶段训练策略为基础或参照形成了一整套开放的多模态大模型研究生态。论文链接https://arxiv.org/abs/2304.08485项目主页https://llava-vl.github.io代码https://github.com/haotian-liu/LLaVA

更多文章