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,训练时全程冻结。这样做的原因有两点。 ...

📅 August 13, 2026 · 🔄 更新于 2026-08-15 · ⏱️ 20 min · 📝 约 3034 字 · 👁️ 次阅读

CLIP 详解:对比学习如何让模型同时看懂图与文

前言 本文是《从 CLIP 到 LLaVA:一文读懂视觉语言模型(VLM)的演进与核心数学公式》的配套专篇。主篇里只讲了 CLIP 的核心思想,本文把架构、每个公式的符号、温度参数 $\tau$ 的物理意义和正负样本矩阵完整拆开。 核心思想 CLIP(Contrastive Language-Image Pre-training) 由 OpenAI 在 2021 年提出。它的思路不要求模型把图像"说出来",只要求模型判断一对图文是否匹配。思想可以概括为,让配对的图像与文本在向量空间里互相靠近,不配对的互相远离。训练数据是从互联网抓取的海量图文对,弱标注、规模大,正好适合对比学习。 模型结构 CLIP 由两个编码器组成,训练完成后两者的输出落在同一个向量空间里。 视觉编码器(Vision Encoder) 把图像映射成图像特征向量。 文本编码器(Text Encoder) 把文本映射成文本特征向量。 两个编码器共享一个对比学习的目标,不要求图像特征还原文字,只要求"配对"的两者在空间中靠近。 视觉编码器 CLIP 论文里视觉编码器有两种可选实现。 ViT 实现。图像先切成固定大小的 Patch(如 $32 \times 32$ 像素),每个 Patch 展平成一个一维向量,经线性投影变成 token,加上位置编码后送入多层 Transformer 编码器。图像特征取 [class] token 位置的输出,经一个线性层映射到共享嵌入维度。(关于 ViT 的详细说明我想单独开一个post,由于比较懒这里就先不写了喵) 图 1:ViT 的图像编码器结构。 ResNet 实现。图像经卷积网络逐层提取特征,最后用一个注意力池化(attention pooling)把空间特征汇聚成单一向量,再经线性层映射。 详细说明请见本站《为什么 ResNet 能训练 152 层——残差连接的直觉与数学》。(其实这个是AI写的,我后面再修改~) 两种实现的最终输出都会投影到同一个嵌入维度,和文本特征的维度一致。 文本编码器 文本编码器是一个带因果掩码的 Transformer,结构上接近 GPT。输入句子先切分成 token,每个 token 做嵌入并加上位置编码,逐层编码;最后取句末特殊 token(End-of-Text,EOT)位置的输出作为整个句子的特征。CLIP 的文本编码器最长处理 76 个 token。 ...

📅 August 12, 2026 · ⏱️ 34 min · 📝 约 5139 字 · 👁️ 次阅读
Comments