多模态 LLM
五层读懂一个词。这次拆的是:多模态 LLM--让 LLM 睁开眼睛。核心公式:ViT 看 + Projector 对齐 + LLM 思考。图像 → ViT(视觉编码器)→ 对齐层(线性/MLP/Q-Former)→ LLM(语言模型)→ 回答。LLaVA/ GPT-4V / Qwen-VL / InternVL 都是这个范式。文本 LLM 只能聊,多模态 LLM 能看图说话、看图推理、看图编程——这是 LLM 走向 AGI 的关键一步。
L1 · 一句话点破
多模态 LLM = 视觉编码器(ViT)+ 对齐投影层 + 语言模型(LLM)。图像被 ViT 提取为视觉特征(patch embeddings),通过一个对齐层(MLP 或 Q-Former)投影到 LLM 的 token 空间,然后和文本 token 拼接输入 LLM。训练分两阶段:① 对齐(只训投影层,冻住 ViT 和 LLM)→ ② 微调(解冻 LLM 或全部)。让 LLM 既能读书又能看图。
L2 · 通俗类比
LLM 像一个博学的盲人学者:
- 读过全世界的书(预训练文本)
- 能推理、写作、编程
- 但看不见——你给他看一张猫的照片,他不知道是什么
多模态 LLM = 给盲人学者装上一只「电子眼」:
- ViT(电子眼):提取图像的视觉信息
- 对齐层(视神经):把视觉信号翻译成大脑能理解的语言
- LLM(大脑):基于视觉+文本信息综合理解和推理
举例(LLaVA 看图回答问题):
图像: 一张照片,一个男人在厨房做饭
问题: "这个男人在做什么?"
ViT: [patch_1, ..., patch_256] (视觉特征)
对齐层: [visual_token_1, ..., visual_token_256] (映射到LLM空间)
LLM: [visual_tokens] + "这个男人在做什么?" → "在做饭,他在煎鸡蛋"三种多模态 LLM 的架构路线:
1. 简单连接(LLaVA 式):
ViT → MLP → LLM最简洁,效果也好。LLaVA-1.5 证明一个简单 MLP 足够。
2. Q-Former 桥接(BLIP-2 式):
ViT → Q-Former → LLMQ-Former(Query Transformer)用可学习 queries 从 ViT 特征中提取和文本对齐的信息。更贵,但可压缩视觉 token。
3. 早期融合(Flamingo/OpenFlamingo):
ViT → Perceiver Resampler → 插入 LLM 每层视觉信息不只放在输入层,而是注入 LLM 的每一层——更像人类的视觉皮层。
核心能力:
| 能力 | 例子 |
|---|---|
| 看图描述 | "描述这张图片" |
| 看图推理 | "图中几点钟了?"(看时钟) |
| 看图问答 | "这个人穿什么颜色?" |
| 图文理解 | 看菜单、图表、流程图 |
| OCR | 图片中的文字提取 |
| 看图编程 | 看 UI 截图写前端代码 |
代价:
- ViT + LLM 两个大模型组合,参数量翻倍
- 训练需要图文对数据(比纯文本贵)
- 推理延迟比纯文本高(ViT 前向 + LLM 生成)
- 幻觉仍有(看图编造不存在的内容)
- 高分辨率图像挑战大(ViT patch 数的 2 次方复杂度)
适用:
- 看图应用(问答、推理、分析)
- 多模态搜索
- 辅助视觉障碍人士
- 文档理解(扫描件/PDF 图片)
- 自动驾驶/机器人视觉
L3 · 正经定义
多模态 LLM(Multimodal Large Language Model / Vision-Language Model, VLM):能同时处理图像和文本输入的 LLM。核心架构:
Image → Vision Encoder (ViT/SigLIP) → Visual Features
Text → Tokenizer → Text Tokens
[Visual Features, Text Tokens] → LLM Backbone → Response对齐层(将视觉特征映射到 LLM token 空间):
| 方法 | 代表 | 思路 |
|---|---|---|
| Linear/MLP | LLaVA | 简单 MLP 投影 |
| Q-Former | BLIP-2 | 可学习 queries 提取+对齐 |
| Perceiver | Flamingo | 压缩+注入每层 |
| Pixel Shuffle | InternVL | 高分辨率动态分块 |
主流模型:
| 模型 | 架构 | 视觉编码器 | LLM | 亮点 |
|---|---|---|---|---|
| LLaVA-1.5 | ViT+MLP+LLM | CLIP-ViT-L | Vicuna-7/13B | 开源标杆 |
| GPT-4V(o) | 闭源 | - | GPT-4 | 最强商用 |
| Qwen-VL | ViT+Resampler+LLM | ViT-G | Qwen | 中文支持好 |
| InternVL2 | ViT+PixelShuffle+LLM | InternViT | InternLM | 高分辨率 |
| Claude 3.5 | 闭源 | - | Claude | 图表/文档强 |
| Gemini | 闭源 | - | Gemini | 原生多模态 |
参考资料:
- 📄 Liu et al., Visual Instruction Tuning (LLaVA), NeurIPS 2023
- 📄 Li et al., BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and LLMs, 2023
- 📄 Bai et al., Qwen-VL: A Versatile Vision-Language Model, 2023
- 📄 OpenAI, GPT-4V(ision) System Card, 2023
- 🔧 LLaVA:https://github.com/haotian-liu/LLaVA
L4 · 原理深挖
4.1 LLaVA 的训练两阶段
阶段 1: 对齐预训练(Feature Alignment)
数据: 图像 + 简单描述(CC3M 595k 图文对)
训练: 只训投影层(MLP),冻结 ViT 和 LLM
目标: 让视觉特征和文本 token 空间对齐
Loss: 自回归语言建模 loss
给定 [visual_tokens, "描述这张图片:"]
预测 ["这是一只坐在沙发上的猫"]阶段 2: 指令微调(Visual Instruction Tuning)
数据: 图像 + 多轮对话指令(LLaVA-Instruct-150k)
训练: 解冻 LLM(可选解冻 ViT),端到端微调
目标: 学会看图问答、推理
对话示例:
User: "图中有几只猫?"
Assistant: "图中有两只猫,一只是橘猫,一只是黑猫。"
User: "它们在做什么?"
Assistant: "橘猫在睡觉,黑猫在玩毛线球。"数据生成(LLaVA 的创新):
- 用 GPT-4 从图像描述生成多轮对话指令
- 图像描述 → GPT-4 → 多样化问答对
- 150k 高质量指令数据
4.2 视觉 Token 的处理
Patch 数量问题:
- ViT-L/14: 224×224 → 256 patches → 256 visual tokens
- 高分辨率 (672×672) → 2304 patches → 太高
- LLM 的注意力 O(N²) 中 N = text_tokens + visual_tokens
压缩方案:
| 方案 | 思路 | 压缩比 |
|---|---|---|
| MLP 降维 | LLaVA 式的简单压缩 | 1x(不压缩) |
| Q-Former | 可学习 queries 压缩 | 32-64x |
| Perceiver | Cross-attention 压缩 | 8-16x |
| Pixel Shuffle | 用 CNN 做空间压缩 | 4x |
| Adaptive Tile | 动态分块+按需分配 | 自适应 |
InternVL 的动态分块:
- 大图切成多个 448×448 的 tile
- 每个 tile 独立编码
- 缩略图提供全局上下文
- 支持任意分辨率和长宽比
4.3 训练数据
预训练数据:
| 数据集 | 规模 | 类型 |
|---|---|---|
| LAION-5B | 58.5 亿 | 图文对(质量参差) |
| COYO-700M | 7.5 亿 | 过滤后的图文对 |
| CC3M | 330 万 | 较高质量图文对 |
| DataComp-1B | 12.8 亿 | 高质量筛选 |
指令微调数据:
| 数据集 | 规模 | 来源 |
|---|---|---|
| LLaVA-Instruct-150k | 15 万条 | GPT-4 生成 |
| ShareGPT4V | 100 万条 | GPT-4V 生成 |
| LVIS-Instruct4V | 22 万条 | 学术生成 |
| ALLaVA | 70 万条 | 合成+人工 |
4.4 多模态 LLM 的能力与局限
强项:
- ✅ 看图描述(超出 OCR,理解场景语义)
- ✅ 图表/流程图理解
- ✅ OCR + 推理(看菜单算总价)
- ✅ 视觉常识("图中几点?"通过看时钟)
- ✅ 看图编程(UI 截图→前端代码)
弱项:
- ❌ 细粒度定位("图片第三个按钮在哪")
- ❌ 多图对比(同时比较两张图差异)
- ❌ 视频理解(帧间关系,视频 LMM 在发展中)
- ❌ 3D 空间推理
- ❌ 幻觉(看图编造不存在的物体)
幻觉类型:
1. 物体幻觉: 图中没有狗,但模型说"有一只狗"
2. 属性幻觉: 图中车是红色的,模型说"蓝色的车"
3. 关系幻觉: 桌子在椅子旁边,模型说"桌子上有椅子"
4. 文字幻觉: OCR 结果中的文字错误4.5 评价指标
| 基准 | 测什么 | 代表分数 |
|---|---|---|
| MME | 14 类视觉任务综合 | LLaVA-1.5: 1862/2000 |
| MMBench | 视觉理解 | GPT-4V: 82% |
| SEED-Bench | 图文推理 | InternVL2: 78% |
| OCRBench | 文档/OCR | Qwen-VL-Max: 85% |
| MM-Vet | 多模态综合 | GPT-4o: 70% |
| HallusionBench | 幻觉检测 | InternVL2: 58% (越低越好幻觉少) |
L5 · 沿革与坑
5.1 沿革
- 2021:CLIP + ViT,图文对齐的基础
- 2022-12:Flamingo(DeepMind),基于 Chinchilla 的多模态 LLM
- 2023-01:BLIP-2(Salesforce),Q-Former 桥接
- 2023-04:LLaVA(Wisconsin/MSR),简单 MLP + 指令微调,开源标杆
- 2023-09:GPT-4V 发布
- 2023-10:Qwen-VL(阿里),中文多模态 LLM
- 2024-03:Claude 3(Anthropic),强视觉理解
- 2024-05:GPT-4o,语音+视觉+文本原生多模态
- 2024-2025:多模态 LLM 成本下降,开源追赶闭源
5.2 常见坑
坑 1: 以为 ViT+LLM 随便组合就能用。对齐很重要,不对齐直接连 → 乱码。
坑 2: 只训投影层不解冻 LLM。阶段 2 不解冻 LLM → 视觉理解受限。要指令微调。
坑 3: 高分辨率图像大量 visual tokens。336²→576² tokens 翻 3 倍→LLM 慢。要压缩或动态分块。
坑 4: 训练数据图文不匹配。图片描述和图片不对应 → 训练失败。要清洗数据。
坑 5: OCR 数据不够。多模态 LLM 的文字识别需要专门的 OCR 数据微调。
坑 6: 多图场景不训练。单图训练 → 多图推理差。要加入多图训练数据。
坑 7: 评测只看 MME/MMBench。这些基准可能有数据泄露(训练集中出现过)。要看新基准。
坑 8: 幻觉问题不处理。多模态 LLM 编造视觉内容。要后训练减少幻觉。
坑 9: 推理速度慢。ViT 前向 + LLM 前向 → 首 token 延迟高。要优化。
坑 10: 微调时 ViT 和 LLM 的比例。ViT 太大(300M+)vs LLM(7B+)→ 梯度不平衡。要分层学习率。
5.3 面试怎么考
- 多模态 LLM 的标准架构? 答:ViT(视觉编码)→ 对齐层(MLP/Q-Former)→ LLM(推理+生成)。三个阶段:预训练 ViT+LLM → 对齐(训投影层)→ 指令微调(解冻 LLM)。
- LLaVA 和 BLIP-2 的区别? 答:LLaVA 用简单 MLP 对齐,BLIP-2 用 Q-Former。LLaVA 更简单,效果也好;BLIP-2 的 Q-Former 压缩比更高(减少 visual tokens)。
- 为什么需要对齐层? 答:ViT 的视觉特征和 LLM 的 token embedding 在不同的语义空间中。对齐层把视觉映射到语言空间,让 LLM 能"看懂"图像。
- 高分辨率怎么处理? 答:动态分块(InternVL 式)——大图切成多个 tile,每个 tile 独立编码,缩略图提供全局上下文;或用更大的 ViT(ViT-G)提高输入分辨率。
- 多模态 LLM 的幻觉怎么缓解? 答:更好的对齐训练数据、负样本训练、在回答时要求模型引用图像的证据、后训练 RLHF 减少幻觉。
速记卡
标准架构:
Image → ViT → Projector → LLM ← Text
↑ ↑
视觉编码器 语言模型三条架构路线:
| 路线 | 代表 | 对齐层 | 压缩 |
|---|---|---|---|
| 简单连接 | LLaVA | MLP | 无 |
| Q-Former | BLIP-2 | Cross-attn queries | 32-64x |
| 早期融合 | Flamingo | Perceiver + 逐层注入 | 8-16x |
训练两阶段:
阶段1 对齐: 冻 ViT+LLM,训 Projector (图文对)
阶段2 微调: 解冻 LLM(或全部),视觉指令微调主流模型:
| 模型 | 视觉 | LLM | 开源 |
|---|---|---|---|
| LLaVA-1.5 | CLIP-ViT-L | Vicuna-7B | ✅ |
| Qwen-VL | ViT-G | Qwen-7B | ✅ |
| InternVL2 | InternViT | InternLM | ✅ |
| GPT-4V/o | - | GPT-4 | ❌ |
| Claude 3.5 | - | Claude | ❌ |
一句话记忆:多模态 LLM = ViT(看)+ Projector(对齐)+ LLM(思考)。图像经过 ViT 变 visual features,Projector 把它们映射到 LLM 的 token 空间,LLM 像读文本一样读视觉 token。训练分对齐(只训 Projector)+ 指令微调(解冻 LLM)。LLaVA 证明了简单 MLP 足够,BLIP-2 用 Q-Former 压缩。GPT-4V/Claude 是闭源 SOTA,LLaVA/Qwen-VL/InternVL 是开源标杆。局限:高分辨率挑战、幻觉、多图/视频弱、推理慢。
*上一篇:Stable Diffusion 稳定扩散 -- SD 让模型生成图,多模态 LLM 让模型理解图。 下一篇:语音识别与合成 -- 视觉之外的另一半:让 AI 听和说。