多模态大模型(VLM)全景图:图像到底怎么喂给 LLM?|从 NLP 到 VLM 专栏①

一句话讲透 VLM:把图像编码成「另一种语言的 token」,再让 LLM 去对齐。 这就是多模态大模型的全部魔法。


写在前面

具备 Transformer 与 LLM 基础的读者,在阅读 LLaVA、Qwen-VL、InternVL 等论文时常有"似懂非懂"的困扰——能看懂每一步操作,却难以串成完整的心智模型。本专栏正是面向这一群体。

这里不再重复 Transformer 与注意力机制,转而补齐缺失的拼图:视觉侧 + 跨模态桥接 + 多模态训练 / RL / 评测。每篇遵循「原理 + 可复现代码」双轨,理论可讲透,代码可运行。

本篇为专栏总纲,阅读后可获得:

  • ✅ 画出任何 VLM 的三组件架构
  • ✅ 说清一张图片从输入到生成回答的完整数据流
  • ✅ 掌握多模态训练比纯 LLM 多出的那个阶段,以及为什么
  • ✅ 拿到整个专栏的学习路线图,知道每一站去哪

一、VLM 的标准架构:就三个组件

绝大多数现代 VLM(LLaVA / Qwen-VL / InternVL / MiniGPT-4)都能拆成同一副骨架:

🖼️ 图像
H×W×3

Vision Encoder 视觉编码器
ViT / SigLIP
输出 N 个 d_v 维 token
🔒 frozen 冻结

Projector 投影器
MLP / Q-Former
d_v → d_h 维度翻译
🔥 trainable 可训

LLM
Qwen / Llama
⚡ frozen + LoRA

📝 文本回答

逐个说:

组件 作用 常用实现
Vision Encoder 视觉编码器 把图像(H×W×3)变成 N 个视觉 token(每个是 d_v 维向量) CLIP-ViT-L、SigLIP-SO400M
Projector 投影器/连接器 把视觉特征从 d_v 维映射到 LLM 的 d_h 2 层 MLP(LLaVA)、Q-Former(BLIP-2)
LLM 语言理解与生成的主干网络 Qwen、Llama、Vicuna

一个必须刻进脑子里的洞察

从 LLM 的视角,视觉 token 和文本 token 没有本质区别,都是序列里的元素。

所谓"多模态",本质是:把图像编码成"另一种语言"的 token 序列,再和文本 token 在序列维度拼接到一起,一起送进 LLM。LLM 这个语言大师,会自己去对齐这两种"语言"。

理解了这一点,后面所有工程问题(显存、位置编码、幻觉)都有了共同的主线:让这堆视觉 token 不爆显存、不丢位置信息、不引入幻觉。


二、一张发票图的完整旅程

光讲架构太抽象。我们跟着一张真实图片,走完它在 VLM 里的完整一生。

场景:用户在 App 里上传一张发票照片,问"总营收是多少"。

以 Qwen2.5-VL-7B 为例,时间线如下:

T+0ms · 上传 invoice.jpg
2480×3508,A4 扫描件

T+5ms · 预处理:缩放到 1280,patch 化(P=14)
最终约 N=2304 个视觉 token

T+10ms · 视觉编码器 SigLIP(frozen)
(3,H,W) → (2304, 1152) 视觉特征

T+15ms · M-RoPE 位置编码
patch 拿 (h,w) 二维坐标,文本退化为 1D

T+20ms · Projector MLP:1152 → 3584
维度对齐到 LLM hidden_size

T+25ms · 序列拼接 splice
2304 视觉 + 6 文本 ≈ 2315 token

T+30ms · LLM forward
在 2315 token 上跑 causal attention

T+200ms · 开始生成
'总营收为人民币 12,345.67 元。'

T+500ms · 完成

📌 配图说明②:上图已用 mermaid 渲染为流程图。其中 T+30ms 首次 forward 到 T+200ms 开始生成,就是首 token 延迟(TTFT)= 视觉编码 + 拼接 + 首次 forward,这是部署优化的关键指标。

这趟旅程揭示了 5 件事

  1. 图像不是 1 个 token,是 2304 个——这就是 VLM 推理慢、显存大的根源,KV cache 里存着所有视觉 token。
  2. 冻结的视觉编码器是"租来的眼睛"——权重在训练开始前就已固定,其质量直接决定模型能力上限,因此 SigLIP 与 CLIP 之间的替换并非等价操作。
  3. Projector 是训练第一阶段唯一要训的部件——它学"如何把 SigLIP 的语言翻译给 LLM 听"。
  4. M-RoPE 不是装饰——没有它,"总营收"三个字无法精准注意到发票上对应的数字区域。
  5. 首 token 延迟(TTFT)的来源——这就是部署时 1024×1024 大图 TTFT 可能到 1.5s 的原因。

三、训练蓝图:三组件 × 三阶段

VLM 的训练不是一步到位,而是渐进式解冻(progressive unfreezing):每阶段只训"最该训"的部分,其余冻结。这张表是 LLaVA / InternVL / Qwen-VL 共用的训练蓝图,建议背下来

训练阶段 Vision Encoder Projector LLM 训练目标
Stage 1 Projector 预训练 🔒 冻结 🔥 唯一可训 🔒 冻结 学视觉→LLM 维度的翻译
Stage 2 多模态 SFT 🔒 冻结 🔥 继续训 LoRA 学指令对齐、视觉理解
Stage 3 RLHF / DPO / GRPO 🔒 冻结 🔒 冻结或微调 ⚡ LoRA 学偏好、抗幻觉

读法:从左到右是组件,从上到下是阶段。每往下一阶段,被训练的组件越来越多,但 LoRA 让总训练参数始终可控。

用 LLaVA-1.5-7B 举例

  • Stage 1(约几小时):只训 8M 参数的 Projector,数据是 558K 图文对。让 Projector 学会"把 CLIP 的特征翻译给 Vicuna 听"。
  • Stage 2(约 1–2 天):Projector 继续训,LLM 加 LoRA(r=64,约 50M 参数),数据是 150K GPT-4V 生成的指令数据。
  • Stage 3(约半天):通常冻结 Projector,只继续训 LLM 的 LoRA,数据是 5–50K 偏好对,目的就是减少幻觉。

一个好记的类比

把训练 VLM 想象成教小孩认字

组件 类比
Vision Encoder 字典(已编好,直接用)
Projector 拼音桥梁(Stage 1 学:字形→发音)
LLM 大脑(Stage 2 学:基于发音理解含义)
RL 礼仪训练(Stage 3 学:何时该说"不知道")

不能一开始就让大脑学礼仪——拼音都还没学会。 这就是为什么不能一上来就同时训 Projector + LLM:Projector 还是随机的,LLM 收到的是噪声视觉 token,两个一起晃动很难收敛。

💡 对比纯 LLM:LLM 训练是 Pretrain → SFT → RLHF 三阶段;VLM 多了 Stage 1(Projector 预训练)——多出来的就是教 LLM"听懂"视觉这门外语。这也是为什么 Projector 是 VLM 唯一从零训练的组件。


四、多模态 vs NLP:差异对照(专栏导航图)

下表梳理了后续学习的关键差异点,可视作整个专栏的"导航图"——每一行都对应一篇文章展开

维度 纯 LLM 多模态 LLM 对应文章
输入 1D token 序列 文本 token + 视觉 token(仍 1D 拼接) 本篇
Tokenization BPE / SentencePiece + 图像 patch 切分 ② 视觉基础
位置编码 1D-RoPE → 2D-RoPE → M-RoPE ④ 对齐机制
分辨率 固定 ctx length 动态分辨率(AnyRes / Tile) ④ 对齐机制
数据 文本 pairs / 指令 图文对 + 指令 + 偏好数据 ⑤ 训练 Pipeline
训练阶段 3 阶段 多 1 个 Projector 预训练 ⑤ 训练 Pipeline
评测 MMLU/HumanEval MMBench/MMMU/DocVQA ⑦ 评测部署
显存瓶颈 KV cache 视觉 token 数 × LLM 隐藏层 全程
幻觉 有但可控 严重得多(会"看到"不存在的东西) ⑥ 多模态 RL

记住这条因果链,它贯穿整个专栏:

高分辨率 → 视觉 token 多 → 显存 / 位置 / 数据全要适配

所有现代 VLM 的工程优化(Q-Former 压缩、Tile 切分、M-RoPE、动态 patch)本质上都在解决它。


五、专栏路线图

# 主题 阶段产出 状态
总纲:VLM 全景图(本篇) 完整心智模型 ✅ 已发
视觉基础:ViT / CLIP / SigLIP 手写 CLIP ✅ 已发
张量级端到端 walkthrough 跑通零依赖 demo ✅ 已发
对齐机制(上):Projector 与 token layout MLP vs Q-Former ✅ 已发
对齐机制(下):M-RoPE 与动态分辨率 M-RoPE demo ✅ 已发
训练 Pipeline:LoRA SFT 全流程 文档领域 VLM ✅ 已发
多模态 RL:DPO + GRPO 抗幻觉 VLM ✅ 已发
评测与部署:lmms-eval + SGLang 可服务模型 ✅ 已发
前沿方向:Early Fusion ✅ 已发

硬件基准:单卡 A100 80GB(40GB 可降级到 QLoRA + 3B 模型)。实战领域:文档理解。

建议节奏为每周 1–2 篇,按顺序推进;完整跟下来,即可具备独立研发垂直领域 VLM 的能力。


5 条避坑提醒

  1. 不要把图像当"一个特殊 token"。它是几十到几千个 token 组成的子序列,必须严格保持顺序。
  2. 图像预处理是训练的一部分。同样的权重,resize 策略变了,效果就崩。务必保存预处理参数。
  3. 数据 > 算法 > 模型。多模态尤其如此,ShareGPT4V 这类数据质量直接决定 SFT 效果。
  4. 评测不能用文本 benchmark。MMMU、DocVQA 这些是"地面真相",跑通是基本功。
  5. 先 check 显存,再 check loss。视觉 token 一多,OOM 比 nan 出现得早。

📎 本专栏代码

本专栏所有可运行代码托管于 GitHub:multi_large_model

  • code/ 目录按阶段组织(01_vision / 02_alignment / 03_sft / 04_rl / 05_eval_deploy);
  • 包含多个零依赖纯 Python demo——手写 CLIP、张量 walkthrough、M-RoPE、显存计算器、DPO/GRPO 手算等,复制即可运行;
  • 博客正文嵌入的运行输出,均可由对应 demo 复现。

后续每篇末尾会列出该篇涉及的代码文件。


写在最后

下一篇我们会动手从零手写 CLIP(纯 Python 可复现),把"对比学习对齐图文"这件事彻底讲透。关注专栏,更新第一时间通知。

专栏:《从 NLP 到 VLM:多模态大模型研发实战》

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐