多模态大模型(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 风格的模型成立。下面先保留原分析,再补充显式边界 token 的正确图景(Qwen 的细节来自 tokenizer 配置观察,后续继续求证)。

3.1 隐式路线:数值的统计特征(Distribution Shift)

类比:你不是靠标签去区分一堆乒乓球(文本)和铅球(图片),而是因为质量(向量模长)的巨大差异,在计算力(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|>

它们的作用:

  1. 结构化标记:<|vision_start|> 和 <|vision_end|> 像一对括号,明确划定了"图像特征向量"的边界,模型在 Self-Attention 中可以据此知道"夹在中间的这些向量是视觉特征,不是文本"。
  2. Attention 锚点:文本 Token(如"请"、"描"、"述")做 Query 时,可通过 <|vision_start|> 这个 Token 的 Key 精准定位到图像特征的起始位置,比纯靠位置编码推断更明确、更鲁棒。
  3. 区分输入类型:<|image_pad|> 与 <|video_pad|> 让同一序列中可区分当前填充的是图像还是视频特征(Qwen 同时支持图文和视频输入)。
特性LLaVA 风格Qwen 风格
占位符处理<image> 在预处理时被移除,替换为图像向量`<
边界标记无显式边界,靠位置编码区分有显式的 start/end 边界 token
优点序列更短,计算略快边界更明确,多模态类型区分更清晰
代表模型LLaVA、早期的 BLIPQwen-VL、CogVLM、InternVL

4. 训练工程:损失掩码与注意力机制

训练时如何防止模型"乱输出像素"?这跟位置无关,真实的技术原理是 "注意力掩码(Attention Mask)" + "损失掩码(Loss Mask)" 的组合。

4.1 训练时:损失掩码(Loss Mask)

在计算交叉熵损失时,代码会显式地将图片 Token 对应的标签(Label)设为 -100(在 PyTorch 中,-100 代表忽略该位置的损失):

4.2 推理时:因果自注意力(Causal Self-Attention)

推理阶段没有损失函数,依靠自回归生成机制。模型每次只生成一个 Token,且只有序列最后一位的 Token 有资格发起 Query 去预测下一个词:

5. 推理工程:纯图片输入与多图交互

5.1 图片 Token 没有"发言权",但系统会强制拼接起始符

如果输入只有一个图片、没有文本,图片 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 主流平台限制一览

6.2 隐性限制

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 张不等。