多模态大模型(LMM)工程原理深度解析:从架构到推理
八月 25, 2026 [AI] #llm多模态大模型(LMM)工程原理深度解析:从架构到推理
在了解大模型原理之前,很多人会好奇:多模态模型(如 GPT-4o、Qwen-VL)为什么能"看懂"图片?它们和外挂一个 OCR/检测模型,把文字描述塞给 LLM 的"外挂识别方案"有什么区别?本文从工程角度拆解 LMM 的底层机制,重点解答"图像向量如何被 LLM 理解"这一核心问题。
1. 原生多模态 vs. 外挂识别:本质差异
多模态 LLM 和外挂图片识别的 LLM 差别是本质性的,核心在于信息流通的完整性。
| 方案类型 | 工作流程 | 信息损失 |
|---|---|---|
| 外挂识别方案 | 图像 → 外部模型(OCR/检测)→ 文字描述 → LLM | 信息瓶颈(Information Bottleneck)。丢失了颜色深浅、光影、精确相对位置等无法用语言穷举的细节。LLM 处理的是"二手信息"。 |
| 原生多模态方案 | 图像 → 视觉编码器 → 投影层 → 直接进入 LLM 嵌入空间 | 保留像素级语义。模型能看到"猫的胡须弧度",并直接基于原始视觉信号推理,具备"视觉直觉"。 |
也正因如此,现在的 SOTA 模型(如 GPT-4o、Qwen-VL)均采用原生多模态路线。
2. 核心架构:三大模块的职责与参数
目前的架构(如 LLaVA、CogVLM)均采用 "视觉编码器 + 投影层 + 大语言模型" 的模块化结构:
| 模块 | 作用 | 输入 | 输出 | 参数规模参考 |
|---|---|---|---|---|
| 视觉编码器 | 提取视觉语义特征 | 原始像素 (224x224x3) | 视觉特征向量 (14x14x768) | 约 5B(如 CogVLM2) |
| 投影层(关键纽带) | 将视觉特征"翻译"到语言模型空间 | 视觉特征向量 | 视觉嵌入向量(维度与 LLM 词嵌入一致) | 较小(通常是 MLP) |
| 大语言模型 | 综合视觉与文本信息,进行推理和生成 | 文本 Token + 视觉嵌入 | 回答文本 | 约 8B(如 Llama-3) |
3. 模态对齐的底层数学机制:没有"标签"如何区分?
投影层将图片和文本都映射成了相同维度的向量,模型怎么区分它们?会不会把图片误读成文字?
这是理解多模态模型最核心、最反直觉的一点。Transformer 本身并不依赖显式标签区分图片与文本,但不同模型在"模态边界"这个工程问题上走了两条路线:
- 隐式路线(LLaVA 风格):靠输入向量的固有统计差异 + 注意力机制天然区分,见 3.1;
- 显式路线(Qwen 风格):在序列中保留
<|vision_start|>/<|vision_end|>边界 token,明确框出视觉信息块的起止,见 3.3。
修正说明:初版文章只写了隐式路线,说法过于简化——它只对 LLaVA 风格的模型成立。下面先保留原分析,再补充显式边界 token 的正确图景(Qwen 的细节来自 tokenizer 配置观察,后续继续求证)。
3.1 隐式路线:数值的统计特征(Distribution Shift)
- 文本向量(Embedding):来自固定的词表查表。经过预训练后,所有文本 Token 的向量**模长(L2 Norm)**通常非常稳定且较小(如均值约为 2.3)。
- 图片向量(Projection):由多层感知机(MLP)对实时像素进行非线性变换得到。由于 MLP 的激活函数(如 GELU),输出向量的模长通常远大于文本(如均值可达 15.0),且方差极大。
类比:你不是靠标签去区分一堆乒乓球(文本)和铅球(图片),而是因为质量(向量模长)的巨大差异,在计算力(Attention)时,它们对网络带来的影响本就不同。模型只需按照矩阵乘法计算,模长大的图片向量在 Attention 中会天然获得更高的权重。
3.2 位置编码与模态无关
位置编码只负责标记"顺序"和"相对坐标",与模态区分无关。它解决的是"这句话从左到右的语序"问题,不是"这是图片还是文字"的问题。
多张图片的交叉处理,靠的是位置编码提供"身份证",让模型知道某个向量属于哪张图;而文本指令(如"图1")作为 Query,通过注意力权重的高分检索,把目标坐标段的向量"拉取"出来。
3.3 显式路线:<|vision_start|> / <|vision_end|> 边界 token(Qwen 风格)
Qwen 系列的 tokenizer 中确实存在与视觉相关的特殊 token,且拥有独立 token ID(如 <|vision_start|> = 248053、<|vision_end|> = 248054),见 Qwen3.8-27B tokenizer_config.json:
| Token | 作用 |
|---|---|
| `< | vision_start |
| `< | vision_end |
| `< | vision_pad |
| `< | image_pad |
| `< | video_pad |
与 LLaVA 风格(<image> 占位符在预处理时被物理移除、替换为图像向量)不同,Qwen 的做法是保留这些边界 token 在输入序列中,实际排列如:
<|im_start|>user<|im_start|> <|vision_start|> [576个图像向量] <|vision_end|> 请描述这张图 <|im_end|>
它们的作用:
- 结构化标记:
<|vision_start|>和<|vision_end|>像一对括号,明确划定了"图像特征向量"的边界,模型在 Self-Attention 中可以据此知道"夹在中间的这些向量是视觉特征,不是文本"。 - Attention 锚点:文本 Token(如"请"、"描"、"述")做 Query 时,可通过
<|vision_start|>这个 Token 的 Key 精准定位到图像特征的起始位置,比纯靠位置编码推断更明确、更鲁棒。 - 区分输入类型:
<|image_pad|>与<|video_pad|>让同一序列中可区分当前填充的是图像还是视频特征(Qwen 同时支持图文和视频输入)。
| 特性 | LLaVA 风格 | Qwen 风格 |
|---|---|---|
| 占位符处理 | <image> 在预处理时被移除,替换为图像向量 | `< |
| 边界标记 | 无显式边界,靠位置编码区分 | 有显式的 start/end 边界 token |
| 优点 | 序列更短,计算略快 | 边界更明确,多模态类型区分更清晰 |
| 代表模型 | LLaVA、早期的 BLIP | Qwen-VL、CogVLM、InternVL |
4. 训练工程:损失掩码与注意力机制
训练时如何防止模型"乱输出像素"?这跟位置无关,真实的技术原理是 "注意力掩码(Attention Mask)" + "损失掩码(Loss Mask)" 的组合。
4.1 训练时:损失掩码(Loss Mask)
在计算交叉熵损失时,代码会显式地将图片 Token 对应的标签(Label)设为 -100(在 PyTorch 中,-100 代表忽略该位置的损失):
- 无论这张图出现在序列的第 1 位,还是第 1000 位,只要它是图片向量,它就不参与"预测下一个字"的误差计算。
- 因此,模型不会因为"没预测出图片后面的像素"而受到惩罚。
4.2 推理时:因果自注意力(Causal Self-Attention)
推理阶段没有损失函数,依靠自回归生成机制。模型每次只生成一个 Token,且只有序列最后一位的 Token 有资格发起 Query 去预测下一个词:
- 前面的图片 Token 早已"躺"在历史缓存(KV Cache)中,只提供记忆,不发起生成请求。
- 因此,推理时不需要显式地屏蔽图片预测。
5. 推理工程:纯图片输入与多图交互
5.1 图片 Token 没有"发言权",但系统会强制拼接起始符
如果输入只有一个图片、没有文本,图片 Token 不能作为 Query,怎么生成输出?
现实工程中,根本不会出现"只有图片向量,没有文本 Token"的输入序列:
- 系统强制拼接:当用户没有输入文本时,系统会自动在图片向量后面拼接一个特殊的起始文本 Token(如
<BOS>或Describe this image默认提示词)。 - 启动生成:第一个字是由这个系统添加的
[BOS]Token 发起 Query 去检索图片信息并生成,而不是由图片 Token 自己发起生成。
结论:图片 Token 在多模态 LLM 中,只充当"记忆体"和"参考书",而**"发言权(Query 权限)"永远只交给文本 Token 或起始符**。
5.2 多张图交叉出现时,如何防止干扰?
多张图交叉出现时,主流模型不仅不刻意"防止"图片互相干扰,反而"鼓励"它们互相看见(如对比"谁更开心")。真正需要防止的是**"身份混淆"**,即把图 A 的特征安到图 B 上。
| 机制 | 是否允许图片互看? | 核心作用 |
|---|---|---|
| Self-Attention(自注意力) | 允许(全连接) | 实现跨图的对比和全局语义融合(这是好事)。 |
| RoPE/绝对位置编码 | 不限制,但影响分数 | 通过绝对距离,让模型知道"向量 A 属于图 1,向量 B 属于图 2",这是数学上的"身份证"。 |
| 边界 token(Qwen 风格) | 不限制,但锚定检索 | `< |
| 文本指代(如"图1") | 软屏蔽 | 文本 Query 的高分检索,使模型只关注目标坐标段,忽略无关图片。 |
6. 工程实践:图片数量的限制
模型训练时,输入中能包含几张图片?有明确限制,且因模型、平台和输入方式而异。
6.1 主流平台限制一览
- 开源/学术探索:如 Emu3 支持最多 8 张;Qwen 系列在特定训练场景下支持最多 8000 张。
- 云服务微调平台:
- 阿里云 (Qwen):列表传入最多 8000 张;Base64 编码传入最多 250 张。
- Microsoft Azure:每个样本最多 64 张。
- OpenAI / Together AI:每个样本最多 10 张。
6.2 隐性限制
- Token 总量限制:所有图片的 Token 数 + 文本 Token 数 ≤ 模型的最大上下文长度。
- 显存(VRAM)限制:图片越多,序列越长,显存消耗呈平方级增长。
- 文件大小与格式:单张图通常限制最大 10MB,支持 JPEG、PNG 等格式。
- 训练数据总量:指整个数据集规模,而非单次输入(如 LLaVA 预训练用了约 60 万对图文数据)。
7. 总结:一张图看懂多模态核心概念
| 核心疑问 | 正确答案 |
|---|---|
| 模型怎么知道输入里有图片? | 两条路线:隐式(LLaVA)靠输入向量模长、方差等统计特征的巨大差异,数学上本能区别对待;显式(Qwen)靠 `< |
| 图片和文本在底层怎么对齐? | 通过投影层(MLP) 将像素映射到与文本 Token 相同的向量空间,进行数学上的"坐标统一"。 |
| 图片 Token 有没有"发言权"? | 没有。 生成任务永远由文本 Token 或起始符 [BOS] 作为 Query 来发动。图片 Token 只作为被检索的 Key/Value。 |
| 多张图怎么避免张冠李戴? | 依靠 RoPE 位置编码提供绝对坐标作为"身份证",Qwen 风格模型另有 start/end 边界 token 精确定位每张图的区间,并通过文本指令(如"图1")的 Query 精准检索。 |
| 训练时如何防止模型乱输出像素? | 通过损失掩码(Loss Mask),将图片 Token 位置的标签设为 -100,强制模型忽略图片位置的预测误差。 |
| 每次最多能传几张图? | 取决于模型上下文长度、显存容量和平台 API 限制,从 10 张到 8000 张不等。 |