跳转至

多模态大模型(Multimodal LLM / VLM)

面试高频考点

  • 多模态模型的两条主流技术路线是什么?
  • 视觉编码器(CLIP/SigLIP)如何与 LLM 对齐?
  • 高分辨率图像如何处理?动态分辨率方案是什么?
  • 早期融合(Early Fusion)和晚期融合(Late Fusion)的区别?
  • 为什么说 GPT-4o 是"原生多模态"?
  • 视频理解为什么比图像理解更难?

一、技术路线全景

细化理解: 多模态模型的核心是把视觉、音频或视频信号对齐到语言模型可理解的表示空间。常见路线包括视觉编码器 + projector + LLM、原生多模态 token 化、以及面向视频的帧采样和时序建模。难点在于细粒度定位、OCR、空间关系和跨模态指令跟随。

2025 年多模态 LLM 已从"给 LLM 加视觉插件"进化为原生 Any-to-Any 架构。两条主流路线:

graph TB
    subgraph 路线一_Connector_桥接
        IMG1[图像] --> VE1[Vision Encoder<br/>CLIP/SigLIP<br/>冻结]
        VE1 --> PROJ[Projector<br/>MLP / Q-Former]
        TEXT1[文本] --> TE1[Text Tokenizer]
        PROJ --> LLM1[LLM<br/>可微调]
        TE1 --> LLM1
        LLM1 --> OUT1[文本输出]
    end

    subgraph 路线二_早期融合_Omni
        IMG2[图像] --> VT[视觉 Tokenizer]
        TEXT2[文本] --> TT[文本 Tokenizer]
        AUDIO2[语音] --> AT[语音 Tokenizer]
        VT --> UT[统一 Transformer<br/>全模态联合预训练]
        TT --> UT
        AT --> UT
        UT --> OUT2[文本/图像/语音输出]
    end

    style LLM1 fill:#7c6af7,color:#fff
    style UT fill:#f472b6,color:#fff
    style PROJ fill:#5eead4,color:#000
维度 路线一:Connector 桥接 路线二:早期融合(Omni)
代表模型 LLaVA, InternVL, Qwen-VL GPT-4o, Gemini 2.0, Chameleon
视觉编码器 独立(CLIP/SigLIP,通常冻结) 内嵌在统一模型中
训练成本 低(可冻结大部分参数) 高(全模态联合预训练)
输入支持 图像 + 文本 任意模态组合
输出支持 仅文本 任意模态(文/图/音)
灵活性 可独立升级视觉/语言模块 紧耦合,但交互更自然
当前主流 开源生态主流 闭源前沿模型走向

二、连接器桥接(Connector-based)详解

LLaVA 风格架构

细化理解: LLaVA 风格架构通常用 CLIP/ViT 提取图像特征,再通过投影层连接到 LLM,最后用图文指令数据对齐。它结构清晰、成本相对低,但视觉细节受编码器分辨率和训练数据影响很大。面试时可以把它概括为“视觉特征作为软提示输入语言模型”。

graph LR
    IMG[图像 224×224] --> CLIP[CLIP ViT-L<br/>冻结]
    CLIP --> FEAT[576个视觉特征<br/>每个4096维]
    FEAT --> MLP[2层 MLP<br/>Projector<br/>训练]
    MLP --> TOK[576个视觉 Token<br/>与文本Token同维度]

    TXT[请描述这张图] --> EMBED[Text Embedding]
    EMBED --> TOK_T[文本 Token]

    TOK --> CONCAT[拼接]
    TOK_T --> CONCAT
    CONCAT --> LLM[LLM<br/>Vicuna/LLaMA]
    LLM --> OUT[图中是一只猫...]

    style CLIP fill:#94a3b8,color:#fff
    style MLP fill:#5eead4,color:#000
    style LLM fill:#7c6af7,color:#fff
# LLaVA 的核心:把视觉特征"翻译"成 LLM 能理解的 token
class LLaVA(nn.Module):
    def __init__(self):
        self.vision_encoder = CLIPVisionModel.from_pretrained(...)  # 冻结
        self.projector = nn.Sequential(
            nn.Linear(1024, 4096),  # CLIP 1024 → LLaMA 4096
            nn.GELU(),
            nn.Linear(4096, 4096)
        )
        self.llm = LlamaForCausalLM.from_pretrained(...)

    def forward(self, image, text_ids):
        # 1. 图像 → 视觉特征
        vision_features = self.vision_encoder(image)  # [B, 576, 1024]

        # 2. 视觉特征 → LLM Token 空间
        vision_tokens = self.projector(vision_features)  # [B, 576, 4096]

        # 3. 与文本 token 拼接
        text_embeddings = self.llm.embed_tokens(text_ids)
        combined = torch.cat([vision_tokens, text_embeddings], dim=1)

        # 4. 送入 LLM
        return self.llm(inputs_embeds=combined)

三、视觉编码器对比

graph TD
    A[视觉编码器选择] --> B[CLIP ViT<br/>2021]
    A --> C[SigLIP<br/>2023]
    A --> D[DINOv2<br/>2023]

    B --> B1[图文对比学习<br/>InfoNCE Loss]
    B --> B2[强语义对齐]
    B --> B3[使用: LLaVA, BLIP-2]

    C --> C1[Sigmoid Loss<br/>不用 softmax]
    C --> C2[支持任意 batch<br/>性能更强]
    C --> C3[使用: InternVL, PaliGemma]

    D --> D1[纯自监督<br/>无需文本]
    D --> D2[空间特征丰富]
    D --> D3[使用: 检测/分割]

    style B fill:#7c6af7,color:#fff
    style C fill:#5eead4,color:#000
    style D fill:#fbbf24,color:#000
编码器 训练方式 优势 短板 主要使用
CLIP ViT 图文对比学习(InfoNCE) 强语义对齐,多语言支持好 softmax 受 batch size 限制 LLaVA, BLIP-2
SigLIP Sigmoid 损失 任意 batch size, 更强性能 较新,生态尚在建设 InternVL, PaliGemma
DINOv2 纯自监督(无文本) 空间特征丰富,适合检测分割 缺乏语义对齐 检测/分割任务为主

四、高分辨率图像处理

问题:标准 ViT 难处理高分辨率

CLIP ViT 通常在 224×224 或 336×336 训练
如果输入 1024×1024 的高清图:
  ① 直接 resize 到 224 → 文字、细节全糊
  ② 直接喂给 ViT → 位置编码不匹配,效果崩

但很多任务需要高分辨率:
  - OCR:识别图片中的文字
  - 图表理解:精确读取数值
  - 医学影像:肿瘤等微小特征
  - 文档理解:表格、字段对齐

动态分辨率(InternVL/Qwen-VL 方案)

graph TD
    IMG[高分辨率图像<br/>例如 1280×960] --> SPLIT{自适应切片<br/>选择最佳比例}
    SPLIT --> T1[Tile 1<br/>448×448]
    SPLIT --> T2[Tile 2<br/>448×448]
    SPLIT --> T3[Tile 3<br/>448×448]
    SPLIT --> T4[Tile 4<br/>448×448]
    SPLIT --> T5[Tile 5<br/>448×448]
    SPLIT --> T6[Tile 6<br/>448×448]
    SPLIT --> THUMB[缩略图<br/>448×448<br/>提供全局信息]

    T1 --> VE[ViT 独立编码]
    T2 --> VE
    T3 --> VE
    T4 --> VE
    T5 --> VE
    T6 --> VE
    THUMB --> VE

    VE --> CAT[拼接所有 Token]
    CAT --> LLM[LLM]

    style IMG fill:#f472b6,color:#fff
    style THUMB fill:#fbbf24,color:#000
    style LLM fill:#7c6af7,color:#fff

关键点: - 切片之间无 Attention 交互(独立编码降低算力) - 加入"缩略图 token"提供全局上下文(防止 LLM 看不到整体) - LLM 通过位置 token 或特殊分隔符理解切片的空间关系

InternVL 2.5 在 OCR 任务上的效果

固定 336×336 分辨率:               ✗ 长文档/小字识别失败
动态切片(最多 12 个 tile):        ✓ OCR 精度接近商用引擎
                                    ✓ 图表数值读取准确
                                    ✓ 文档表格结构理解

五、Q-Former(BLIP-2 风格)

graph LR
    IMG[图像] --> VE[ViT]
    VE --> VF[视觉特征<br/>~1000个 Token]

    Q[32个可学习<br/>查询向量] --> CA[Cross-Attention]
    VF --> CA
    CA --> OUT[32个视觉 Token<br/>固定数量]
    OUT --> LLM[LLM]

    style Q fill:#5eead4,color:#000
    style CA fill:#fbbf24,color:#000
    style LLM fill:#7c6af7,color:#fff
传统 LLaVA:图像 → 576 个视觉 Token → 占用大量上下文
Q-Former:图像 → 32 个固定 Token → 上下文压力小

Q-Former 优点:
  - 视觉 Token 数量固定(与图像分辨率无关)
  - LLM 上下文压力小,可处理多图输入

Q-Former 缺点:
  - 信息压缩损失,不适合 OCR/细粒度任务
  - 32 个 token 难以编码复杂场景

适用场景:图像描述、视觉问答等"粗粒度"任务。OCR/细粒度任务推荐用动态分辨率方案。


六、多模态对齐训练阶段

LLaVA 等模型通常分三阶段训练:

graph LR
    A[Stage 1<br/>特征对齐] --> B[Stage 2<br/>视觉指令微调]
    B --> C[Stage 3<br/>RLHF/DPO 对齐]

    A1[训练数据:<br/>图文对<br/>~500K] --> A
    A2[冻结:<br/>LLM + Vision] --> A
    A3[训练:<br/>仅 Projector] --> A

    B1[训练数据:<br/>视觉指令<br/>~700K] --> B
    B2[冻结:<br/>Vision Encoder] --> B
    B3[训练:<br/>Projector + LLM] --> B

    C1[训练数据:<br/>人类偏好] --> C
    C2[训练:<br/>整体对齐] --> C

    style A fill:#5eead4,color:#000
    style B fill:#fbbf24,color:#000
    style C fill:#f472b6,color:#fff
阶段 训练数据 冻结 目标
Stage 1:特征对齐 图文对(如 LAION-558K) LLM + Vision Encoder 训练 Projector 把视觉特征"翻译"成 LLM 语言
Stage 2:指令微调 视觉指令数据(GPT-4 生成) Vision Encoder 联合训练 Projector + LLM,学会回答视觉问题
Stage 3(可选):RLHF 视觉对话偏好数据 - 提升对话质量、安全性、视觉幻觉缓解

七、视频理解的额外挑战

视频 = 时序图像序列 + 音频,但简单"把视频拆成帧"会爆炸:

1 分钟视频 @ 1fps = 60 帧
每帧 256 个视觉 token
总计 60 × 256 = 15,360 token

如果 5 分钟视频 = 76,800 token,已经超出常规 LLM 上下文
更不用说细粒度的 30fps 视频

主流解决方案

graph TD
    V[视频输入] --> S{帧采样策略}
    S --> US[均匀采样<br/>简单但漏关键帧]
    S --> KF[关键帧检测<br/>基于场景变化]
    S --> DS[密集采样<br/>需要时序压缩]

    KF --> TC[时序 Token 压缩<br/>多帧合并为少量 Token]
    DS --> TC
    TC --> SA[稀疏注意力<br/>降低 token 间 attention 成本]
    SA --> LLM[LLM]

    style V fill:#f472b6,color:#fff
    style TC fill:#5eead4,color:#000
    style LLM fill:#7c6af7,color:#fff
策略 描述 代表
均匀采样 每 N 秒取 1 帧 简单基线,常用于评测
关键帧检测 用 SAM 等模型识别场景变化 LLaVA-Video
时序 Token 压缩 多帧 token 在时间维度池化/聚合 Video-ChatGPT
时序 Attention 在时间维度做轻量 Attention 学习时序关系 Qwen2.5-VL
专门时序模块 用 TimeSformer 等替代静态 ViT InternVideo

八、当前 SOTA 模型对比(2025)

模型 开源 参数量 上下文 输出模态 特色
GPT-4o - 128K 文/图/音 原生 Any-to-Any,实时语音
Gemini 2.0 Flash - 1M 文/图/音/视频 超长上下文 + 原生视频
Claude 3.5 Sonnet - 200K 文 + 图理解 视觉推理强
InternVL 2.5 1B-78B 32K 开源最强 VLM,动态分辨率
Qwen2.5-VL 3B-72B 128K 中文好,视频理解强
LLaMA 3.2 Vision 11B/90B 128K Meta 开源 VLM
MiniCPM-V 2.6 8B 32K 端侧最强,OCR 出色
DeepSeek-VL2 28B MoE 32K MoE + 视觉

九、面试延伸

Q:为什么视觉 Token 数量很重要?

每张图片通常生成 256-4096 个 token,直接占用 LLM 上下文窗口。例如:① 8K 上下文模型,输入 4 张图片(每张 1024 token)就用掉一半上下文;② 视觉 token 越多 → KV Cache 越大 → 推理延迟越高、显存压力越大。所以 Q-Former(固定 32 token)、动态分辨率(按需切片)、视觉 token 压缩等技术都很重要。生产环境中通常按场景选:粗粒度任务用 Q-Former 风格压缩、细粒度(OCR/图表)用动态切片。

Q:多模态模型为什么在 OCR 和图表理解上困难?

文字和图表识别需要像素级的高分辨率感知:① 标准 ViT 训练分辨率(224/336)下,小字直接变模糊;② ViT 的 patch(如 14×14 像素)粒度对单个字符来说太大;③ CLIP 等编码器的预训练目标是"语义对齐",不是精确字符识别。解决路径:动态分辨率切片 + 更大的视觉编码器 + OCR 专项训练数据。InternVL/Qwen-VL 的 OCR 能力强主要靠这条路线。

Q:语音模态通常如何加入?

两种方式:① 桥接方式:Whisper 等 ASR 模型提取声学特征,通过 Projector(类似视觉的 MLP)映射到 LLM token 空间,与文本 token 拼接(如 LLaSM、Qwen-Audio)。② 原生方式:把语音离散化为 token(用 codec 模型),与文本 token 联合训练一个统一 Transformer(如 GPT-4o 的语音模式、Moshi)。桥接方式实现简单但延迟高(先 ASR 再 LLM),原生方式延迟低但训练成本高。

Q:为什么 GPT-4o 被称为"原生多模态"?

"原生"指的是同一个 Transformer 在 token 级别处理多模态,而不是用桥接器把各模态外挂到 LLM 上。具体表现:① 语音输入端到端处理(不先 ASR),延迟 ~320ms(人类反应级别);② 可以直接输出语音(不依赖 TTS);③ 训练时是图/文/音联合预训练,而非"先训语言模型再加多模态"。代价是训练成本极高,目前只有几家头部公司能做到。


原始论文

论文 链接
CLIP (Radford et al., 2021) arxiv.org/abs/2103.00020
LLaVA (Liu et al., NeurIPS 2023) arxiv.org/abs/2304.08485
BLIP-2 / Q-Former (Li et al., ICML 2023) arxiv.org/abs/2301.12597
InternVL 2.5 (Chen et al., 2024) arxiv.org/abs/2412.05271
SigLIP (Zhai et al., ICCV 2023) arxiv.org/abs/2303.15343
Chameleon: Mixed-Modal Early-Fusion (Meta, 2024) arxiv.org/abs/2405.09818
LLaVA-OneVision: Easy Visual Task Transfer (2024) arxiv.org/abs/2408.03326
LLaVA-Video: Learning Video Representations (2024) arxiv.org/abs/2410.02713
Qwen2.5-VL: Expanding Horizons for Vision-Language Models (2025) arxiv.org/abs/2502.13923
InternVL3: Advanced Training for Multimodal Models (2025) arxiv.org/abs/2504.10479

官方仓库

项目 链接
LLaVA GitHub github.com/haotian-liu/LLaVA
InternVL GitHub github.com/OpenGVLab/InternVL

延伸阅读与视频

平台 标题 说明
📺 B站 多模态大模型LLaVA模型讲解——transformers源码解读 4万播放,LLaVA架构源码级深度解析
📖 GitHub OpenGVLab InternVL InternVL 官方项目页与模型资料
📖 GitHub LLaVA LLaVA 官方项目页,理解视觉编码器 + LLM 路线
📺 B站 【AI大模型-LLM多模态视觉大模型精讲教程 全40集】 1.8万播放,系统完整的多模态学习课程