面灵AI→

百度多模态算法岗一二面面经

轮次
一面二面
时间
2026-10
来源
牛客网

《面试题目》

一面

  1. 多模态大模型的整体核心架构由哪些模块组成?
  2. 主流的视觉语言 Adapter 有哪些类型,各自的核心功能是什么?Q-Former 的原理与应用场景是怎样的?
  3. ViT 的图像预处理与特征提取完整机制是怎样的?
  4. 自注意力 Self-Attention 的底层原理是什么?注意力分数为什么要除以根号 d,多头注意力相比单头注意力的核心优势在哪?
  5. ViT 与传统 CNN 在视觉任务上的性能优势与适配场景有什么差异?
  6. 手撕算法:LeetCode 221 最大正方形。

二面

  1. MHA、MQA、GQA 三种注意力机制有什么区别?在推理速度和显存占用上各自的优劣是什么?
  2. MHA、MQA、GQA 三种架构下,KV Cache 的显存占用比例与资源消耗特点分别是什么?
  3. Nano、Image 2.0、Seedream 这些主流图像生成模型的底层技术架构与迭代路线是怎样的?
  4. PagedAttention 的技术原理是什么,它能不能降低显存占用,背后的核心机制是什么?
  5. Dataset、DataLoader、Sampler 三者的定义、功能与使用场景有什么区别?
  6. 基于 Qwen3 搭建代码补全 Agent,如果由你负责 tokenizer 模块,会遇到哪些核心问题,对应的优化方案是什么?
  7. 主流代码智能 Agent 的工作模式有哪些,核心差异与适用场景是什么?
  8. 团队内部算法模块已经封装成 pip 包,怎么设计方案让代码 Agent 精准识别并调用内部私有函数?

《参考解析》

  1. 多模态架构:三个模块与对齐策略:主流做法是视觉编码器 + 模态对齐模块 + 语言模型。视觉塔负责把图像变成 token 序列,对齐模块负责把视觉 token 投影到语言模型的语义空间,语言模型负责推理与生成。训练分两步走:先用大规模图文对做对齐(此时通常冻结两端,只训对齐层,成本可控),再用指令数据做多模态微调,让模型学会看图回答。面试里更值得展开的是取舍——对齐层参数越少越便宜,但视觉信息压缩得越狠,细粒度识别越吃亏;对齐层越重越贵,收益在文档、图表这类高密度图像上才明显。

  2. Adapter 类型与 Q-Former 的定位:MLP/Linear Projector 是最省事的一类,直接把 patch 特征线性映射过去,保留的视觉 token 最多;Q-Former 用一组可学习 query 通过交叉注意力把任意长度的视觉特征压缩成固定条数,压缩率最高、下游序列最短,但压缩必然丢细节,所以它对小字、表格、密集文本要额外补高分辨率切图或 OCR 分支;Perceiver Resampler 用少量隐变量重采样,处在两者中间。Q-Former 的训练目标是关键考点:图文对比、图文匹配、基于图像的文本生成三个目标一起训,学到的 query 才既有判别性又能供生成使用。

  3. ViT 预处理与注意力的两个经典追问:ViT 把图像切成固定 patch,展平后线性映射成 embedding,加上分类 token 与位置编码后送入 Transformer 编码器——位置编码必须加,否则 patch 之间的空间关系完全丢失。相比 CNN,ViT 没有局部归纳偏置,小数据上容易过拟合,需要大数据或强增强;但它的全局注意力天然适合多模态拼接,因为视觉 token 和文本 token 可以放进同一个序列。注意力除以根号 d,是因为点积结果的方差随维度线性增长,不缩放会把 softmax 推到极端饱和区、梯度趋近于零,缩放后分布更平滑、训练更稳。多头注意力的价值在于把表示空间分组,让不同的头分别关注相邻纹理、远距离依赖、语义对齐等不同模式,最后拼接投影融合——它用同样的参数量换来了更强的表达多样性。

  4. KV Cache 与三种注意力架构的成本对比:KV Cache 是为了避免自回归解码时重复计算历史 token 的 key/value,代价是显存随序列长度和 batch 线性增长。同一份预算下,MHA 要为每个 query 头存一份 KV,长上下文时显存压力最大;MQA 只存一份,显存和解码访存都最省、吞吐最高,但所有头共用同一套 KV 会损失表达力,质量下降在长依赖任务上更明显;GQA 把 query 头分成若干组、每组一份 KV,等于在两者之间取了可调的中间点,实践中常用 8 组,训练时可以先用 MHA 训、再对 KV 头做均值池化转成 GQA 来省成本。回答时把「质量、显存、解码吞吐」三者的权衡讲清楚,比背优劣表更有说服力。

  5. PagedAttention 与大模型推理服务的显存管理:它的核心是把 KV Cache 按固定大小的 block 管理,逻辑连续、物理离散,用 block table 做映射,因此不必为每个请求按最大长度预留连续显存,内部碎片从「预留没用满」变成「最后一个 block 的零头」,同时支持写时复制式的前缀共享。结果是显存利用率大幅提升、并发 batch 变大、吞吐上去,并且长序列请求不再容易被显存挤掉。要能说清边界:它优化的是显存管理效率,不减少单个 token 的 KV 理论开销;序列真正超过上下文上限时,仍然要靠稀疏注意力、量化或滑窗等方案。