Easy-Vibe 教程:多模态大模型(VLM)原理深度解析——从视觉分词到两阶段训练
【免费下载链接】easy-vibe💻 vibe coding 101|The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe
本文基于 easy-vibe 课程附录「人工智能」章节中的多模态模型原理文档展开,系统拆解视觉语言模型(Vision-Language Model,VLM)的完整技术脉络:视觉分词(Patchify / Flatten)、跨模态投影(Projector)的三大技术流派、三段式统一架构,以及社区公认的“两阶段训练”范式。读完后,你将理解 GPT-4V、Qwen-VL、LLaVA 等模型“如何让 AI 拥有眼睛”的底层机制,并能独立解释一个 VLM 从输入图片到输出文本的完整数据流。
0. 引言:给大脑装上眼睛
在大语言模型入门一文中可以知道,LLM 本质上是一个被关在黑盒子里、只能通过文字来了解世界的“大脑”。
多模态大模型(VLM)的出现,相当于给这个大脑装上了一双眼睛。
但这并不容易。因为:
- 大脑(LLM)只懂文字(准确说是 Token ID);
- 眼睛(摄像头)看到的是像素(RGB 颜色数值)。
VLM 的核心任务,就是把“像素信号”翻译成“文字信号”,让 LLM 觉得看图就像读文章一样简单。整个 VLM 技术栈可以归纳为一条流水线:
像素 (RGB) → 视觉分词 (Patch) → 特征向量序列 → 跨模态投影 (Projector) → LLM Token 序列 → 文本回答1. 第一步:把图片变成“单词”(Visual Tokenization)
想象一下,你正在电话里给朋友描述一副拼图。你不可能一口气说完,得一块一块地描述。计算机看图也是一样的道理。
1.1 切块(Patchify)——制作视觉单词
大语言模型(LLM)处理文本时,会把句子拆解成一个个词元(Token)。如果想让 LLM “读懂”图片,最直观的方法就是把图片也变成类似 Token 的形式。
为了配合大模型这种“习惯读单词”的特性,我们需要一种能将连续的二维图像转换为离散片段的技术,这就是视觉切块(Patchify):把一张完整的二维图片,像切豆腐一样,切成一个个固定的网格小方块(称为 Patch)。
- 原始图片= 一篇完整的文章;
- 图片切块(Patch)= 文章里的一个单词(Token)。
在工程实践中,通常把图片按固定尺寸(比如 $16 \times 16$ 或 $14 \times 14$ 像素)进行无缝切分。例如一张常见的 $224 \times 224$ 像素输入图片,切分后变成 $14 \times 14 = 196$ 个独立的图像方块。通过这个操作,原本连续完整的二维像素阵列,就被物理切割成了 196 个离散的“视觉单词”。
文档原文中配有一个交互式演示组件
<PatchifyDemo />,用于展示原始图像如何被规则网格切割成独立 Patch(见 源文档),本文以文字与数据流说明替代该交互效果。
Patch 尺寸直接决定 Token 数量的量级关系:一张 $224 \times 224$ 的图对应 196 个 Patch,那么一张 $1344 \times 1344$ 的图($16,\text{px}$ 切块)就会产生 $84 \times 84 = 7056$ 个视觉 Token——这正是后文讨论“高分辨率导致显存爆炸”这一工程困境的根源。
1.2 序列化(Flatten)——排成一句话
完成切块后,手头拥有的是一个 $14 \times 14$ 的二维方阵。然而,无论是传统的 Transformer 还是现代的 LLM,底层架构上大多只接受一维序列输入(从左到右排成一排的线性数据结构)。
为了兼容大模型的输入规范,必须执行序列化(Flatten)与线性投影(Linear Projection):
- 拍扁摊平(Flatten):把多行的图像块首尾相接,将二维矩阵“拍扁”成一条只有前后顺序的一维长轴;
- 特征拉伸(Projection):这 196 个方块目前还只是红绿蓝像素堆叠的“生肉”。需要用一个小神经网络(通常是一个全连接层)对每个方块进行处理,把它们分别压缩和转换成一段固定长度的特征向量(比如长度为 768 的数字列表)。
经过这一步操作,一张图片才真正变成了一串“视觉单词序列”(Visual Token Sequence)。用张量语言描述整个数据流就是:
原始图像: [3, 224, 224] (RGB 通道 × 高 × 宽) Patchify (16px): [196, 768] (196 个 patch,每个 16×16×3 展平后为 768 维) Flatten: [196, 768] (二维网格 → 一维序列,行优先) Linear Projection: [196, d_model] (每个 patch 映射为 LLM 词嵌入同维度的向量)其中最后一个维度 $d_{model}$ 必须与 LLM 的词嵌入维度一致(例如 768、4096 等),这是后面 Projector 能够把视觉向量“塞进”LLM 词表空间的硬性前提。
2. 第二步:跨物种翻译(Projection)
此时,虽然图片已经被转化成了一维连续的“视觉单词”序列,但这串序列对于最终的 LLM 来说,依然是一堆不可读的乱码。
为什么不可读?因为特征空间不同(换句话说,它们说的是不同的语言):
- 视觉编码器(如 ViT)抽取的是像素空间特征(例如只能描述“这里有很多黑色曲线”“这是一大块红色区域”);
- LLM 理解的是深层语义特征(如“猫”“树”“危险”等概念)。
在这两套截然不同的语言体系之间,必须搭建一座桥梁,即跨模态翻译器:Projector(投影器/适配器)。
2.1 翻译器的角色(潜空间对齐 / Latent Space Alignment)
Projector 的学术本质是完成特征潜空间对齐(Latent Space Alignment),就像一个实时同声传译:
| 环节 | 内容 |
|---|---|
| 输入(源语言) | ViT 输出的“视觉特征”:强调几何图案、颜色、纹理的高维连续表示 |
| 处理(翻译) | Projector 用神经网络结构(可以是简单的线性变换层,也可以是复杂的注意力层)寻找两种语言之间的数学映射 |
| 输出(目标语言) | 完全符合 LLM 期待的“LLM 语言”——由图像特征转换而来的等效文本 Embedding,让图像拥有可对话的含义 |
经过这层翻译过滤,大模型会惊喜地发现:“咦?传给我的这串数字,怎么和我平时读的那些描述性词组很像?”于是它就能把图像特征和自然语言自然地联合处理。
2.2 翻译的三大流派
为了让特征对齐这一“翻译过程”更快、更准,学术界与工业界发展出了三种有代表性的连接结构设计:
- 直译派(Linear Projection)
- 方法:极简直接,只用一层或少数几层多层感知机(MLP / 线性投影层)做直接的数学矩阵变换。
- 特点:信息损失极低,保留图像真实细节;缺点是前面切出的成百上千个视觉 Token 不加过滤地直接传给语言模型,导致后续计算负载激增。
- 代表:LLaVA 系列。
- 意译派(Q-Former / Resampler)
- 方法:不直接透传,而是引入一个具备抽象综合能力的“小型识别网络”作为中间层。这个中间代理先快速理解整张图的全貌,再提取数十个高浓缩的关键要点。
- 特点:信息高度凝练精炼,Token 数量少,大幅节省 LLM 的“思考”算力;缺点是蒸馏过程中可能丢失原图边缘的极细微观察线索。
- 代表:BLIP-2,Gemini(部分机制相似)。
- 折中派(Pooling / 区域重排)
- 方法:用卷积池化或局部区域重组,把相邻的 $2 \times 2$ 甚至更大范围的像素块压缩合并成一个完整的表达单元。
- 特点:在合理压缩 Token 长度的同时,保留了一部分空间上的局部依赖关系。
- 代表:Qwen-VL 系列。
从三者权衡来看,可以推断出一条清晰的工程规律:Token 数量与细节保真度成反向关系。直译派以算力换细节,意译派以细节换效率,折中派则试图用空间局部性作为中间变量来平衡两者——这也是各家 VLM 在长文档截图、小目标识别等场景表现差异的结构性原因。
3. 第三步:组装(统一三段式架构)
有了组件和接口标准,来看整体如何组装。主流视觉语言模型(Vision-Language Model)普遍采用一种**“三段式”统一架构**。
3.1 VLM 的三段式结构
一个典型范式的 VLM 由以下三个主要部分协同工作:
- 感知特征的“眼睛”(Vision Encoder,视觉编码器)
- 职责:作为图像入口的第一道关卡,负责“看”图像并提取高维视觉特征。
- 选型:多数构建者不会从零训练眼睛,而是直接借用已在数亿对“图文”数据上预训练成熟的组件(如 OpenAI 的 CLIP 视觉塔,或 Google 的 SigLIP 模型)。
- 类比:这是生物体视网膜中高度特化的感光细胞区域。
- 信号转换的“视神经”(Projector,模态投影器)
- 职责:连接编码器和语言基座,负责信号的降维传导和多模态语义翻译。
- 选型:这是整个多模态系统后训练中的绝对优先级。它自身的参数量相对 LLM 不高,但决定了“文本”与“图像”能否互相理解。
- 类比:它就像把电信号转换后传给大脑皮层的视觉神经中枢。
- 认知驱动的“大脑”(LLM Backbone,语言模型基座)
- 职责:负责最终观察、常识调用、深层逻辑推理和生成拟人化回答。
- 选型:通常选用业界最聪明的开源大语言模型作为基座(如 Qwen、Llama 3、Vicuna 等)。
- 类比:这是大脑中拥有世界知识库的语言与决策中枢,对视神经传来的信号进行高级认知解读。
用一句话概括数据通路:图像 → ViT 提特征 → Projector 对齐全息 → 与文本 Token 拼接送入 LLM → LLM 自回归生成回答。
4. 训练:它如何学会“看”(两阶段训练范式)
现在身体各部分都缝好了。但在正式上岗之前,刚组装好的 VLM 实际上处于一种类似新生儿的“盲目混乱”状态——因为新加入的视神经(Projector)还是一张白纸,充满无意义的随机数值。
为了让这个组装起来的“怪物”具备描述图像的能力,科学界制定了一套非常有效的**“两阶段训练法”(Two-Stage Training)**。
阶段一:物体识别(Feature Alignment,特征对齐预训练)
此阶段的任务,是为随机初始化的 Projector 建立第一套跨模态对应关系。这个过程很像婴儿用“记忆卡片”强行背诵单词:
- 输入(训练输入):海量(常达数亿对)主体突出的极简单图文对(例如白底“猫”的照片);
- 输出(目标):相关的短文本标签(“一只橙色的猫”);
- 优化目标:强迫 Projector 通过矩阵变换,让这只猫的视觉特征(翻译后)与语言中“猫”这个单词的 Token 向量尽可能重合对齐;
- 参数冻结策略(Freeze Strategy):为了不破坏原模型的智能,此阶段研究者会冻结(Freeze)“眼睛”(ViT)和“大脑”(LLM)的数十亿参数,只训练 Projector 本身的数百万参数。
冻结策略在这里至关重要:预训练好的 ViT 与 LLM 各自已经掌握了成熟的视觉/语言能力,阶段一唯一要学习的是两者之间的“映射关系”,只训练 Projector 既高效又安全。
阶段二:对话(Visual Instruction Tuning,视觉指令微调)
如果第一阶段的产物只是一台复读机,第二阶段的任务就是激发它的高级智能,让它真正能根据上下文回答图文混合的复杂指令:
- 输入(训练输入):精心设计的高质量问答对。例如给出一张复杂的城市交通全景照片;
- 要求回答(目标输出):用户问:“
<image>左下角骑白色自行车的人戴头盔了吗?” 助手答:“没有,他头上什么都没戴,这在城市里是非常危险的行为。” - 优化目标:让大模型不仅接收视觉线索,还要结合此前积累的文明知识,把文本逻辑与多模态表征完全融合,从而进行推理;
- 参数冻结策略:此时视神经已大致调好。这个精调阶段通常会继续冻结视觉编码器的部分底层权重,同时完全解冻 LLM 和 Projector(或采用 LoRA 配置),做大规模反向传播的整体协同调整。
值得注意的是示例中的<image>占位符:它对应着第 1、2 节产出的那串视觉 Token,会被插入到文本提示词的指定位置,与文字 Token 拼接成一条统一序列送入 LLM。这正是“给大脑装上眼睛”在工程接口上的具体落点。
5. 进阶:看得更清楚(高分辨率技术)
尽管上述架构支撑了初代多模态范式,但第一代表现出色的 VLM 都存在一个非常致命的根本缺陷——“近视”(先天性视觉不足)。
早期视觉编码器 ViT,由于历史设计原因,本质上只能处理 $224 \times 224$ 或 $336 \times 336$ 的超低分辨率小图。就像透过一台模糊的几百万像素老式相机观察世界——路牌上的小字等细节完全糊成一片像素点。大脑再聪明,没有原料也无能为力。
为解决低分辨率问题,前沿模型厂商(如 Qwen-VL、LLaVA-NeXT 团队)采用了两个工程巧思:
5.1 动态高分辨率映射(Dynamic High-Resolution Mapping)
如果直接输入大图会炸显存,暴力缩小又会丢失所有细节,怎么办?现在的解法是:“局部特写 + 全局总览”双视角策略:
- 总览预览:先把高清大图直接缩放到 $336 \times 336$ 给“眼睛”看,让模型抓住图像的宏观全局结构(哪里是天空?哪里是地面?);
- 切块放大:把高清原图切成几十块无损的 $336 \times 336$ 特写块(Slice);
- 逐一检查与空间重组:让视觉引擎逐一“用放大镜”检查这些无损切片以收集高清细节。随后 Projector 像拼图一样,把这些细节块与最初的总览上下文进行语义拼装。
这个思路就像用手机给一份报纸拍全景照(看整体版面),再把手机贴近报纸,为每个段落快速连拍几十张特写照片。
5.2 换一双天生大眼(放大视觉编码器 / Scaling the Vision Encoder)
另一种“大力出奇迹”的美学路线:既然原装眼睛有先天性基因缺陷,那就从一开始就锻造一个超强的“天眼”。
以中国优秀开源模型InternVL为经典代表,它放弃了常用的小视觉模型,消耗大量算力从零训练了一个拥有数十亿参数(如 60 亿参数的 InternViT-6B)的超大号前级视觉编码器。凭借其惊人的数据吸收能力,它天然支持高清图像输入,如同“哈勃太空望远镜”。这种设计直接实现了“零遗漏”的高清视觉感知,大幅减少了切片-重组方案带来的复杂工程开销和特征错位风险。
从源码结构看,这两条路线代表了两种成本结构:动态分辨率方案复用轻量编码器、把复杂度放在推理期的切片调度上;大编码器方案把复杂度前置到训练期,用参数规模直接换掉工程调度——选型时需要根据部署成本(显存、训练预算)来权衡。
6. 总结
多模态大模型(VLM)毫无神秘感。它只做了一件事:
把作为“外语”的图像,翻译成作为“母语”的文本,然后交给 LLM。
理解这一点,你就理解了 VLM 的一切:Patchify 把像素切成单词,Flatten 与 Linear Projection 把单词排成句子,Projector 完成跨物种的同声传译,三段式架构(ViT + Projector + LLM)是它的身体,两阶段训练(先对齐、后对话)是它的教育历程,而动态分辨率与大视觉编码器则是它克服“近视”的两副眼镜。
7. 术语表(Glossary)
| 术语 | 全称 | 解释 |
|---|---|---|
| VLM | Vision-Language Model | 多模态大模型。能看懂图像的 GPT。 |
| ViT | Vision Transformer | 视觉模型。VLM 的“眼睛”,负责把像素转成向量。 |
| Patch | — | 图像块。图片被切分后的小方块,等价于“视觉单词”。 |
| Projector | — | 投影器/翻译器。连接眼睛和大脑的桥梁。 |
| Alignment | — | 对齐。让图像特征和文本特征能在同一空间里“互相听懂”。 |
延伸阅读可参考同目录下配套的大语言模型原理(理解 Token 与词嵌入的前提),以及课程为 AI Agent 提供的知识导航文件中的多模态章节索引(关键词:多模态、视觉语言模型、VLM、CLIP、GPT-4V、图像理解、跨模态)。
【免费下载链接】easy-vibe💻 vibe coding 101|The first course for AI-native product builders.项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考