【大模型】多模态大模型(VLM)全景图:图像到底怎么喂给 LLM?|从 NLP 到 VLM 专栏①
多模态大模型(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)都能拆成同一副骨架:
逐个说:
| 组件 | 作用 | 常用实现 |
|---|---|---|
| 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 为例,时间线如下:
📌 配图说明②:上图已用 mermaid 渲染为流程图。其中 T+30ms 首次 forward 到 T+200ms 开始生成,就是首 token 延迟(TTFT)= 视觉编码 + 拼接 + 首次 forward,这是部署优化的关键指标。
这趟旅程揭示了 5 件事
- 图像不是 1 个 token,是 2304 个——这就是 VLM 推理慢、显存大的根源,KV cache 里存着所有视觉 token。
- 冻结的视觉编码器是"租来的眼睛"——权重在训练开始前就已固定,其质量直接决定模型能力上限,因此 SigLIP 与 CLIP 之间的替换并非等价操作。
- Projector 是训练第一阶段唯一要训的部件——它学"如何把 SigLIP 的语言翻译给 LLM 听"。
- M-RoPE 不是装饰——没有它,"总营收"三个字无法精准注意到发票上对应的数字区域。
- 首 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 条避坑提醒
- 不要把图像当"一个特殊 token"。它是几十到几千个 token 组成的子序列,必须严格保持顺序。
- 图像预处理是训练的一部分。同样的权重,resize 策略变了,效果就崩。务必保存预处理参数。
- 数据 > 算法 > 模型。多模态尤其如此,ShareGPT4V 这类数据质量直接决定 SFT 效果。
- 评测不能用文本 benchmark。MMMU、DocVQA 这些是"地面真相",跑通是基本功。
- 先 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:多模态大模型研发实战》
更多推荐



所有评论(0)