LLaVA 详解:视觉指令微调的完整拆解
前言 本文是《从 CLIP 到 LLaVA:一文读懂视觉语言模型(VLM)的演进与核心数学公式》的配套专篇。主篇里讲了三只流派,CLIP 走对比学习对齐,Flamingo 走交叉注意力,LLaVA 走的是生成式视觉指令微调。本文把 LLaVA 这一路从架构到损失函数的每一步完整拆开,包括线性投影的数学、视觉 token 如何进入语言模型、自回归交叉熵损失的推导,以及两阶段训练的具体流程。 阅读前提是了解 CLIP 的对比学习思想,可先看本站《CLIP 详解:对比学习如何让模型同时看懂图与文》。 核心思想 CLIP 学会的是"匹配",给它一张图,它能判断图和文本是否相关,但它不会开口回答。LLaVA(Large Language and Vision Assistant)要的是"对话",给它一张图加一句问题,它能像语言模型那样流利地回答。 实现办法很直接,把图像特征转成语言模型认识的 token,拼进输入序列,剩下的工作全部交给语言模型自回归生成。这条路线的核心假设是,语言模型足够强大,只要把图像信息以它看得懂的形式喂进去,它就能基于图像推理。因此"对齐"这一步被收敛成一个小而关键的组件,一个线性投影层。 整体架构 LLaVA 由三个模块串成一条链。 flowchart LR IMG["图像"] --> VE["视觉编码器 ViT"] VE --> PR["线性投影 W"] PR --> TOK["视觉 token"] TXT["指令文本"] --> LLM["语言模型 LLM"] TOK --> LLM LLM --> OUT["回答"] 视觉编码器。把图像编码成一组 patch 特征,LLaVA 直接复用 CLIP 训练好的 ViT,不重新训练。 线性投影。把视觉特征映射到语言模型的嵌入空间,这是唯一需要从零训练的关键组件。 语言模型。接收"视觉 token + 文本 token"的混合序列,自回归生成回答,通常复用开源的 LLaMA、Qwen 等。 视觉编码器 LLaVA 的视觉编码器直接采用 CLIP 的 ViT,训练时全程冻结。这样做的原因有两点。 ...