LLM 面试备考
首页/LLM 核心

多模态大模型 Multimodal LLM

所属:01-fundamentals / 01-llm-core
面试权重:★★
来源:通用领域知识;未做一手考证
为什么有这个文件:多模态岗位在两个独立渠道里反复出现——B站面经信号中「多模态大模型」是该批信号里播放量最高的一条(B12),而 Boss直聘 的岗位采集里「多模态算法」「多模态特征融合」落在必需项、并出现「多模态大模型算法工程师」这类职位(见 03-jd/boss-zhipin/README.md §6.3)。两渠道在「多模态存在」上一致(排序上不一致,仓库的结论是以 JD 为准)。本文件的唯一目的:让你被问到时不显得一无所知、并能诚实划出边界。它不是一份把你包装成多模态候选人的材料。

一句话#

多模态大模型(Multimodal LLM / MLLM) 的主流形态是「visual encoder → connector → LLM」:视觉编码器把图像切成 patch 并编码成一串向量,connector 再把它投影成 LLM 能读的 token;投影之后,对 LLM 来说就没有"多模态"了——图变成了 token,和文字 token 一起走同一套 self-attention。整件事的本质难点是模态鸿沟:图像特征和文本 embedding 本来住在两个无关的空间里,必须有个模块学会在它们之间搭桥。

为什么重要(面试角度)#

先定位,再谈内容。 你的背景是 NLP / LLM 训练 / Agent,没有任何生产环境的多模态经验。这个文件存在,是因为香港招聘市场里多模态岗位反复出现,你需要有足够的底子把问题答得不失分、并把边界答得诚实——不是要转去做多模态。

由此有一条硬规矩:

⚠️ 绝不可以把这份文件里的内容讲成你的实战经验。 你不能说「我做过 visual encoder 的接入」「我调过 connector」,你没做过。面试官只要追问两句工程细节,编造会当场崩塌,比承认不懂的损失大得多。

被问到时,诚实且不失分的答法是:

「我没有生产经验,但我理解原理是 X——视觉编码器把图变成 token,中间要一个 connector 投影到 LLM 的 embedding 空间,训练上通常分阶段做。具体工程细节我没上手过,不敢乱说。」

再掌握三点,这题就从"完全空白"变成"及格":

  • 能说清模态鸿沟为什么存在,以及为什么必须有 connector
  • 能说出 connector 的两种设计取向(MLP 投影 vs query-based 如 Q-Former)及取舍
  • 知道视觉 token 很贵,以及它和分辨率/信息量的权衡

这个文件补不上的地方,提前说清楚:① 任何「你做过什么」的追问——你没有可讲的一手案例,这是最弱的一环,背这个文件补不上;② 具体工程细节(预处理与切图策略、训练数据配比、多模态训练的并行与显存、幻觉率的实际数字);③ 论文级细节与最新进展——容易记错,不如直说「我了解大致路线,具体论文没细读」。

核心内容#

1. 模态鸿沟:为什么多模态本质上是个"对接"问题#

文本进来先查 embedding 表,得到向量;图像进来是像素,经 visual encoder 变成另一组向量。这两组向量的维度可能不同、训练目标不同、统计分布不同——没有任何机制保证一张图的特征向量和描述它的那句话的 embedding 落在"相近的位置"。

这个不匹配就是 modality gap。 它解释了多模态架构的三个主要现象:

  • 为什么必须有一个专门的连接模块(connector):它唯一的工作就是把视觉特征映射到 LLM 已经理解的 embedding 空间里。
  • 为什么训练要分阶段:先让桥搭稳,再让两边一起动。
  • 为什么 CLIP 对齐 ≠ LLM 对齐:CLIP 式的图文对比预训练确实让图像特征靠近语言,但那是 CLIP 自己的联合空间,不是你手上这个 LLM 的 embedding 空间——所以即便是 CLIP 预训练的编码器,也仍然需要一个 connector。

2. 架构模式:visual encoder → connector → LLM#

Visual encoder(视觉编码器):主流是 ViT 家族——把图像切成固定大小的 patch,每个 patch 当成一个"视觉 token"送入 Transformer。ViT patchify 的算术是 (H/p)×(W/p)(H/p)\times(W/p) 个 patch,例如 224×224224\times224 的图、patch 取 1414,就是 16×16=25616\times16=256 个 patch(这是 patchify 的算术,不是某个具体模型的配置)。很多方案会用 CLIP 预训练的编码器,因为它给出的特征本身已经带语义、且与语言有过一次对齐;但也有用自监督或从头训的编码器。编码器冻结还是参与训练、用不用 CLIP 初始化,都随实现变化,不要当成定式。

Connector(连接模块/投影器) 是这份材料里最值得记住的一块。它要同时决定两件事:映射到 LLM 的维度,以及送多少个 token 进去、每个 token 装什么信息。两条主要路线:

取向 做法 优点 代价
MLP 投影 把编码器输出的 patch 特征逐个(或先做池化再)过一个线性层或两层 MLP,直接对齐到 LLM 的 embedding 维度 简单、直接、保留全部空间细节、容易训 token 数 ≈ patch 数,很贵;图像越大越贵
Query-based(Q-Former 一类) 用一组固定的、可学习的 query 向量去 cross-attend 视觉特征,产出固定且很少的输出 token token 数与图像分辨率解耦,压缩狠、成本可控 query 是瓶颈:query 没选中的信息就丢了;对细粒度细节(小字、密集文档、小物体)更不友好,对齐也更难训

取舍的核心是「token 数 vs 信息量」:想少送 token 就要压缩,压缩就一定掉信息。这条轴上还有别的做法(池化 / resampling / 更高层的特征聚合),也有的设计按分辨率切成多块分别编码。具体设计随实现差异很大,不要背成单一标准答案。

接入方式:视觉 token 被插进 LLM 输入序列里图像所在的位置(常配合一个占位符展开),此后就是普通的 decoder self-attention。也有架构不走"插 token",而是在 LLM 里保留 cross-attention 层去读视觉特征——这是另一条路线,但插 token 是当前主流,因为它复用 LLM 原有的结构与全部工程栈。

3. 早融合 vs 晚融合#

先做一个必要的区分:这里说的「融合(fusion)」是架构语义——模态在哪一层被合到一起;而招聘和市场语境里的「融合」往往只是"这个系统处理多种模态"或"多源数据合起来用"的松散说法。JD 上写「多模态特征融合」时,多数是指经典多模态模型里的特征层拼接/对齐/注意力,不一定指往 LLM 里插 token。 被问到时先确认对方说的是哪一种。

说法 架构语义 在多模态大模型里的对应
早融合(early fusion) 模态在输入附近就合到一起,之后由一个共享网络统一处理 往 LLM 里插视觉 token 就是早融合——图一进来就变成和文本同质的 token,全程共享同一套 attention
中间融合(intermediate / hybrid) 各模态先各自编码,在中间层通过 cross-attention 等机制交互 保留 cross-attention 层的架构
晚融合(late fusion) 各模态各自独立走到输出,只在决策/结果层合并 例如一个独立的视觉模型与一个文本模型各自出结果再合并;在 LLM 语境里,把视觉模型当工具调用(检测器/OCR 出结构化结果再交给 LLM)就是严格的晚融合——这一点和你熟悉的 Agent / tool use 是同一件事

取舍:早融合能看到细粒度的跨模态对应关系,但要求输入对齐、成本高,且对缺失或含噪的模态更脆弱;晚融合模块化、各分支可独立训练与替换、对模态缺失鲁棒,但建模不了细粒度的跨模态交互,且需要额外的融合头。中间融合是想两头都要,代价是结构复杂。

4. 视觉 token 很贵#

一张图进来是几百到上千个 token 量级(按上文的 patch 算术估),于是:

  • 吃上下文窗口(Context Window):几张高分辨率图就能占掉可观的窗口预算。
  • 推高成本:按 token 计费,图直接变成钱。
  • 抬高延迟:prompt 里的图属于 prefill,而 prefill 是计算受限、O(n2)O(n^2) 的——图像密集的请求会明显拉长首 token 时间,并撑大 KV Cache(见 kv-cache.md)。

压缩 vs 分辨率的权衡没有免费午餐:减 token(池化、query-based connector、更激进的降采样)省钱省延迟,但丢掉细节——小字、密集文档、计数、细小物体和空间关系最先出问题;保 token 感知更好但更贵。动态分辨率 / 切块编码能让高分辨率图看得更清,但 token 数跟着涨。选哪边取决于任务(文档理解 vs 通用对话的取舍完全不同),这是工程判断,不是固定答案。

5. 训练阶段:一种常见配方,不是唯一定式#

⚠️ 下面是被广泛采用的一种 staged recipe。它不是唯一做法——阶段怎么切、哪些模块冻结,各实现差异很大,有的把前两阶段合并,有的从一开始就端到端放开来训。请把它当"一类常见思路",不要当标准流程背。

  1. 对齐 / connector 预热(alignment):冻结 visual encoder 和 LLM,只训 connector,数据是图配文一类的成对数据。目的是先把这个映射学到"不破坏 LLM",成本也最低。
  2. 多模态预训练(multimodal pretraining):放开更多模块(LLM,有时也含编码器),用大规模的图文交错语料与成对数据训练,让 LLM 真正学会"使用"视觉信息。这是最耗算力、也是能力的来源。
  3. 多模态指令微调(instruction tuning):用多模态指令数据(问答、对话、OCR、定位等)让模型学会在图像上"听指令"(形态上与文本 SFT 同源,见 sft.md)。之后有些流程还会接一个偏好对齐阶段。

为什么常见顺序是"先只训 connector":早期 connector 是随机初始化的,若一上来就放开整个 LLM,随机投影产生的坏梯度会冲击已经很宝贵的语言能力(灾难性遗忘)。这是该顺序的通常理由,但它是工程惯例,不是定律。

6. 数据#

三类,规模与获取难度差别很大:

  • 成对数据(caption pairs):图 ↔ 一句描述。量大但噪声大(网页 alt-text 普遍短、不准确)。
  • 图文交错语料(interleaved image-text corpora):文档、网页里图与文天然共现。最接近多模态预训练想要的形态,但清洗麻烦:要抽图、保持图文顺序与位置、去重、过滤坏图。
  • 多模态指令数据:VQA、描述、OCR、定位、多轮对话、视觉推理。最贵、最小——主要靠人工标注或强模型合成,质量控制难。

难点:规模与质量互相拉扯;图像有版权/授权问题;没有一个像文本那样可自由取用的大规模干净图文对语料;图文配比(纯文本 vs 多模态)要小心调,否则会回退语言能力。另外——中文、繁体、香港场景的多模态指令数据明显更稀缺,这既是空档,也是你那套区域评测经验(HKMMLU)可能产生差异化的地方。

7. 幻觉在多模态里更严重#

幻觉(Hallucination) 在多模态里的典型表现是:模型描述了图中根本不存在的物体。

为什么更严重,机制上大致是几条叠加:

  • 视觉证据相对提问是欠定的,而语言先验极强。被问"图里有什么"时,模型见过的"这类图通常有什么"是一个很强的先验;一旦视觉证据弱,它就用"最像真的"去补。
  • connector 是有损瓶颈:压缩掉的恰恰可能是"证明某个物体不在"所需的证据(比如那片区域根本是空的)。"不存在"这件事很难被一个有损摘要表达出来——absence of evidence 变成了 evidence of absence 的反面。
  • 模型没有再看一眼的能力:LLM 只拿到 connector 给的摘要,不能回头翻像素。
  • 下一 token 目标奖励流畅可信的文本,而"一个听起来很合理的物体"正好是高概率续写。

注:规模与指令微调对幻觉是放大还是缓解,在具体结论上我没有把握,这里不下断言;能确定的是这个瓶颈(有损 + 语言先验)是机制来源。

缓解手段(概念层面):① 攻击瓶颈——更高保真度的视觉表示(更多 token、更少压缩、更高分辨率、区域级特征);② 数据——加入"图里并没有那个常见物体"的负例与幻觉专项指令数据;③ 目标/解码——用偏好对齐(与文本 DPO/RLHF 同一套机器)去偏好"有依据的描述"、惩罚无依据陈述;④ 推理时——要求给出可核查的依据(区域、框)、做自我核对("图里真的有 X 吗?只答是/否")、或干脆用外部工具(OCR / 检测器)把感知外包出去——这一条恰好落在你熟悉的 tool use 上;⑤ 评测时——用专门的幻觉基准去问"已知不存在的物体"。没有哪个手段能根治,它是"有损瓶颈 + 语言先验"的结构性产物。

8. 评测:测什么,不测什么#

测什么(按能力类别):图像描述、视觉问答(VQA)、图文检索、OCR / 文档理解、视觉推理与图表/数学、定位(grounding)、幻觉专项。具体榜单不在这里点名——榜单版本迭代快、口径常变,点名容易过期或记错,用时请回去核对当前版本。

不测什么(延续本仓库对其他基准的怀疑态度,见 05-agent-evaluation/):

  • 榜单高分 ≠ 生产可用。榜单多为单图、短问答、英文为主,和生产里的长文档、多图、低质图、中文/繁中场景差距很大。
  • 语言先验可以被利用:不少 VQA 题不看图也能答对(数据集偏置),所以高分并不能证明"真的看见了"。
  • 幻觉专项也覆盖不全,且可能被针对性的训练数据"应试";此外还有数据污染——测试图可能已在训练集中出现过。

结论与仓库其它评测文件一致:不能用一个榜单名次判断多模态系统,要用贴合自己分布的黄金集(Golden Set)+ 回归评测(Regression Eval)。

常见面试问法#

Q:多模态大模型的基本架构是什么? A:主流是 visual encoder → connector → LLM。ViT 家族把图切成 patch 编码成向量,connector 把它投影成 LLM 能读的 token 并插入输入序列,此后走普通 self-attention。核心问题是模态鸿沟——视觉特征和文本 embedding 本来不在同一空间,connector 就是那座桥。注意这只是当前主流形态,保留 cross-attention 层的架构也存在。

Q:connector 有哪些设计?怎么取舍? A:两端。MLP 投影:逐 patch 线性投影,简单、保留细节,但 token 数 ≈ patch 数,很贵。Query-based(Q-Former 一类):用固定的一组可学习 query 去 cross-attend 视觉特征,产出固定且很少的 token,token 数与分辨率解耦、成本可控,但 query 是信息瓶颈,细粒度细节(小字、密集文档)更容易丢。取舍本质是 token 数 vs 信息量。

Q:什么是早融合和晚融合? A:架构语义上,早融合是模态在输入附近就合到一起、由一个共享网络处理;晚融合是各模态各自走到输出、只在决策层合并;中间融合是各自编码后在中间层交互。往 LLM 里插视觉 token 属于早融合;把视觉模型当工具调用(OCR/检测器出结果再交给 LLM)属于晚融合。需要提醒的是,市场语境里的"融合"常常只是松散说法,不指这套分类,被问到时先对齐口径。

Q:图像会占多少 token?为什么说这是个成本问题? A:按 ViT patchify 算术,224×224224\times224 的图、patch 14 就是 256 个 patch;分辨率更高或切块会更 多,量级在几百到上千 token。后果是吃上下文窗口、按 token 计费直接变贵、并抬高 prefill 延迟(prefill 计算受限且 O(n2)O(n^2))和 KV Cache 占用。所以要在压缩(省 token、丢细节)和分辨率(保细节、更贵)之间按任务权衡。

Q:多模态为什么更容易幻觉? A:视觉证据相对提问是欠定的,语言先验又极强,模型会拿"这类图通常有什么"去补;connector 的有损压缩还可能把"证明该物体不在"的证据也压掉;LLM 只拿到摘要,不能回看像素;而下一 token 目标本就奖励流畅可信的文本。缓解方向:更高保真的视觉表示、幻觉专项数据与负例、偏好对齐偏好"有依据的描述"、要求给出可核查依据或外部工具核对、幻觉专项评测。都只能缓解。

Q:多模态的训练流程是怎样的? A:一种常见的三段配方是:先冻结编码器与 LLM、只训 connector 做对齐;再做多模态预训练放开更多模块、用大规模图文数据建立能力;最后用多模态指令数据做指令微调,后面可能再接偏好对齐。要强调这只是一种常见配方而非唯一做法——阶段划分与冻结策略各实现差异很大。

易错点#

  • ❌ 把这份文件的内容讲成自己的实战经验。你没有生产多模态经验,编造会在追问中当场崩。正确说法是「我没有生产经验,但理解原理是 X」。
  • ❌ 说「CLIP 已经对齐了,所以不需要 connector」——CLIP 对齐的是它自己的图文空间,不是你这个 LLM 的 embedding 空间。
  • ❌ 把「融合」当成一个确定含义——架构语义(早/中/晚融合)和市场口语("处理多模态")是两回事,JD 上的「特征融合」多半指特征层拼接/对齐。
  • ❌ 认为 connector 越简单越好或越复杂越好——MLP 保信息但贵,query-based 省 token 但丢细节,取决于任务。
  • ❌ 把三段训练流程当成标准答案背——它只是一种常见配方,冻结策略与阶段划分随实现变化。
  • ❌ 忽略视觉 token 的成本:不谈上下文占用、prefill 延迟和 KV Cache 就说多模态方案,是工程上的空谈。
  • ❌ 说"图像只是另一种输入模态,没什么特别"——模态鸿沟、token 成本、幻觉加剧都是多模态特有的难点。
  • ❌ 用一个榜单名次断言模型能力——榜单偏短问答/英文/单图,可能被语言先验利用,且不衡量成本;另外我也不在这里点名榜单,需要时回查当前版本。
  • ❌ 引用具体模型配置、参数量或评测数字时不留余地——本文件刻意不给这类数字,需要时请查一手来源。

自测#

1. 什么是模态鸿沟?它解释了多模态架构里的哪些设计?

答案

模态鸿沟指图像特征与文本 embedding 住在不相关的空间里——维度、训练目标、统计分布都可能不同,没有任何机制保证一张图的特征和描述它的那句话落在相近位置。它解释了三件事:① 为什么必须有专门的 connector(唯一职责就是做这个映射);② 为什么训练要分阶段(先把桥搭稳,再让两边一起动);③ 为什么即便用了 CLIP 预训练编码器仍然需要 connector——CLIP 对齐的是它自己的图文联合空间,不是目标 LLM 的 embedding 空间。

2. MLP 投影和 Q-Former 式的 query-based connector,各自的取舍是什么?

答案

MLP 投影把编码器输出的每个 patch 特征(或先池化后)投影到 LLM 的 embedding 维度:实现简单、保留全部空间细节、好训,但 token 数约等于 patch 数,很贵,图越大越贵。Query-based 用一组固定、可学习的 query 向量 cross-attend 视觉特征,产出固定且很少的 token:token 数与图像分辨率解耦、成本可控,但 query 构成信息瓶颈——query 没选中的信息丢失,对细粒度细节(小字、密集文档、小物体)更不友好,训练对齐也更难。本质取舍是 token 数 vs 信息量。

3. 往 LLM 里插视觉 token 属于早融合还是晚融合?为什么这个区分容易在面试里出错?

答案

属于早融合:模态在输入附近就合到一起,此后由同一个 LLM 用同一套 self-attention 统一处理。容易出错是因为「融合」有两套用法:架构语义上它指模态在哪一层合并(早/中/晚),而招聘与市场语境里往往只是"这个系统处理多种模态"的松散说法。JD 上写「多模态特征融合」时,多半指经典多模态模型里的特征层拼接/对齐/注意力,不一定指往 LLM 插 token。被问到时先确认对方口径,再答,否则容易答非所问。

4. 一张图大概会消耗多少 token?为什么说这是多模态落地的头号工程约束?

答案

按 ViT patchify 的算术,224×224224\times224 的图、patch 取 14 就是 16×16=25616\times16=256 个 patch;分辨率更高、或按动态分辨率切块编码还会更多,量级在几百到上千 token。它之所以是头号约束:① 直接消耗上下文窗口;② 按 token 计费,图直接等于钱;③ 图像走 prefill,而 prefill 是计算受限且 O(n2)O(n^2) 的,会明显抬高首 token 延迟并撑大 KV Cache。因此需要在压缩(池化、query-based connector、降采样;省 token 但丢细节,小字/密集文档/计数最先出问题)和保分辨率(细节好但更贵)之间按任务权衡,没有免费午餐。

5. 面试官问「你做过哪些多模态的工作?」,诚实又不失分的答法是什么?

答案

直接说明边界并展示原理层面的理解,例如:「我没有生产经验,背景是 NLP / LLM 训练 / Agent。但我理解原理:多模态主流是 visual encoder → connector → LLM,关键难点是模态鸿沟,connector 负责把视觉特征投影到 LLM 的 embedding 空间,设计上有 MLP 投影和 Q-Former 式 query-based 两端,取舍是 token 数 vs 信息量;训练上常见的是先只训 connector 对齐、再多模态预训练、最后指令微调。具体工程细节我没上手过,不敢乱说。」不要把从这份材料里读来的东西讲成做过的事——追问两层就会露馅,损失远大于承认不懂。可补充你确实有的一手相关面:文本侧的 SFT/对齐经验、以及 tool use(把感知外包给 OCR/检测器属于晚融合)。