跳到主要内容

第32章:多模态 LLM

语言模型从诞生起就只能处理文字。但人类理解世界的方式从来不是单一的——我们看图、听声音、读文字,多种感知融合在一起才构成完整的理解。本章讲述 LLM 如何打破文字边界,学会"看图说话"乃至"听音识意"。


32.1 视觉语言模型(VLM)架构

核心问题:图像如何变成 LLM 能理解的"语言"?

假设你已经有一个训练好的 LLM,现在想让它理解图像。最直觉的想法是:能不能把图像也变成某种"token",直接拼到文字 token 序列里?

这个想法是正确的。但难点在于:文字 token 是离散的符号(词表中的整数 ID),而图像是连续的像素矩阵。两者的"语言"完全不同,需要一个翻译器。

VLM(Vision-Language Model,视觉语言模型)的核心架构就是解决这个翻译问题,整体分为三个模块:

原始图像

Vision Encoder(视觉编码器)
↓ 图像特征向量序列
Projection Layer(投影层)
↓ 视觉 token(与文本 embedding 同维度)
LLM Decoder(语言模型解码器)← 文本 token

生成回答

Vision Encoder:ViT 把图像切成 Patch

Vision Encoder 的主流选择是 ViT(Vision Transformer,视觉 Transformer)。其核心思路是:把图像当成句子,把小方块当成单词

具体步骤:

  1. 将图像切分为固定大小的 patch(通常 16×1616 \times 1632×3232 \times 32 像素)
  2. 每个 patch 展平(flatten)成一维向量,线性投影为 embedding
  3. 加入位置编码(position embedding)表示 patch 的空间位置
  4. 送入 Transformer encoder,得到每个 patch 的上下文特征

对于一张 224×224224 \times 224 的图像,使用 16×1616 \times 16 patch:

Npatch=22416×22416=14×14=196N_{patch} = \frac{224}{16} \times \frac{224}{16} = 14 \times 14 = 196

ViT 输出 196 个向量,每个维度通常为 1024 或 1280,形成图像的特征序列。

:::info ViT 预训练 Vision Encoder 通常来自预训练的视觉模型(如 CLIP 的图像编码器)。CLIP(Contrastive Language-Image Pre-training)通过对比学习,让图像特征和文字特征在同一空间中对齐——这正是后续 Projection Layer 工作的基础。 :::

Projection Layer:视觉特征映射到语言空间

ViT 输出的特征向量维度(如 1280)与 LLM 的 embedding 维度(如 4096)通常不同,更重要的是,两者的"语义空间"也不一致。Projection Layer 负责这个跨模态映射。

常见的 Projection Layer 设计:

方案结构特点
线性投影(Linear)单层全连接简单,LLaVA 1.0 采用
MLP两层全连接 + 激活函数表达能力更强,LLaVA 1.5 采用
Q-FormerCross-attention 查询机制压缩 token 数量,InstructBLIP 采用
Resampler可学习查询 + cross-attentionFlamingo / Qwen-VL 采用

以最简单的 MLP 为例,设 ViT 输出特征 zvRN×dv\mathbf{z}_v \in \mathbb{R}^{N \times d_v},LLM embedding 维度为 dld_l

Hv=MLP(zv)=W2GELU(W1zv+b1)+b2\mathbf{H}_v = \text{MLP}(\mathbf{z}_v) = W_2 \cdot \text{GELU}(W_1 \cdot \mathbf{z}_v + b_1) + b_2

其中 W1Rdl×dvW_1 \in \mathbb{R}^{d_l \times d_v}W2Rdl×dlW_2 \in \mathbb{R}^{d_l \times d_l},输出 HvRN×dl\mathbf{H}_v \in \mathbb{R}^{N \times d_l} 就是可以直接插入 LLM 的视觉 token 序列。

LLM Decoder:统一处理图像 token 和文本 token

视觉 token 生成后,按照特定位置插入到文本序列中:

[系统提示] [图像 token × 196] [用户问题 token] → LLM → [回答 token]

LLM 的 self-attention 机制对视觉 token 和文本 token 一视同仁,通过注意力机制学习图文之间的关联。语言模型的参数在这个过程中通常冻结部分微调,保留其原有的语言能力。

代表架构对比

模型Vision EncoderProjectionLLM特点
LLaVA 1.5CLIP ViT-L/14MLPVicuna/Mistral开源,结构简洁
Qwen-VLViT (自研)ResamplerQwen中文优化,支持高分辨率
GPT-4V未公开未公开GPT-4闭源,能力强
Claude 3未公开未公开Claude 3文档理解出色
InternVLInternViT-6BMLPInternLM超大视觉编码器

训练策略:两阶段

VLM 的训练通常分两个阶段:

阶段一:预训练 Projection Layer

  • 冻结 Vision Encoder 和 LLM,只训练 Projection Layer
  • 使用大规模图文对(如 LAION、CC3M),任务是图像描述
  • 目标:让 Projection Layer 学会把视觉特征映射到 LLM 能理解的语义空间
  • 数据量:数百万到数亿图文对

阶段二:指令微调 VLM

  • 解冻 LLM(全量或 LoRA),同时训练 Projection Layer
  • 使用高质量的视觉指令数据(VQA、图像对话、图表分析等)
  • 目标:让模型学会遵循指令,完成多样化的视觉任务
  • 数据量:数十万到数百万条

:::tip 为什么先冻结 LLM? 第一阶段冻结 LLM 是因为 Projection Layer 还没学好,噪声梯度会破坏 LLM 的语言能力。先让 Projection Layer 基本对齐,再联合微调,效果更稳定。 :::


32.2 图像理解的能力边界

VLM 能做好的任务

经过充分训练的 VLM 在以下任务上表现可靠:

图像描述(Image Captioning):描述图片中的场景、人物、物体,生成自然流畅的文字说明。

OCR(光学字符识别):识别图片中的文字,包括截图、照片中的招牌、手写体等。现代 VLM 的 OCR 能力已经接近专用 OCR 系统。

图表分析(Chart Understanding):解读柱状图、折线图、饼图,提取数值,回答关于趋势的问题。

视觉问答(VQA):根据图像回答问题,如"图中的猫是什么颜色?"、"这张发票的总金额是多少?"

文档理解:识别 PDF、表格、合同中的结构化信息,结合版面理解提取关键内容。

做得不稳定的任务

精确计数:问"图中有几只鸟?",当数量超过 5-6 个时,VLM 的计数准确率明显下降。ViT 的 patch 机制并不天然适合精确计数。

空间关系推理:区分"A 在 B 的左边"还是"A 在 B 的右边",VLM 经常出错。视觉特征中的空间信息在映射到语言空间的过程中会有损失。

细粒度视觉对比:比较两张相似图片的细微差别,或识别图像中细小的局部特征。

字符级文字分析:这里有一个著名的失败案例。

著名失败案例:草莓里有几个"r"?

"strawberry"这个单词里有几个字母 r?

早期的 LLM(纯文字)在这个问题上会出错,因为它们处理的是 token("strawb" + "erry"),而不是字符。GPT-4 曾经回答"2个",正确答案是 3 个(strawberry)。

这个问题本质上暴露了token 化(tokenization)对字符级分析的阻碍。VLM 在看到这个单词写在图片上时,同样面临类似的困境——ViT 的 patch 可能把字母切碎,导致字符识别不精确。

:::warning 能力边界的启示 VLM 的失败往往发生在"人类觉得简单但模型表示不了"的任务上。设计系统时,对这类任务要设置验证机制,或用专用工具(如专用计数模型、OCR 引擎)替代。 :::


32.3 语音与视频的接入

图像是第一个被 LLM 成功整合的模态,但现实应用中还需要处理语音和视频。

语音:从 ASR 到端到端语音 LLM

流水线方式(Pipeline ASR):最简单的方案是先用语音识别(ASR,Automatic Speech Recognition)把语音转为文字,再送给 LLM。

Whisper 是目前最广泛使用的开源 ASR 模型,由 OpenAI 发布:

  • 基于 Encoder-Decoder Transformer 架构
  • 输入:80 维 Mel 频谱图(log-mel spectrogram)
  • 支持 99 种语言,能处理噪声、口音
  • 缺点:无法捕捉语音中的情绪、语调等非文字信息

端到端语音 LLM:GPT-4o Audio 代表了另一条路——语音直接作为输入,不经过中间文字转换,LLM 可以感知语调、情绪、语速等信息,并直接输出语音。

端到端方案的关键技术是语音的 tokenization:将语音波形量化为离散的 audio token(类似图像的 patch token),与文字 token 一起送入 LLM。

视频:帧采样 + 图像序列处理

视频本质上是时序的图像序列。直接处理所有帧的计算开销无法承受——一段 1 分钟、24fps 的视频有 1440 帧,每帧约 256 个视觉 token,合计超过 36 万个 token。

主流的视频处理策略:

均匀帧采样(Uniform Sampling):每隔固定时间采一帧,例如每秒 1 帧或每秒 2 帧。简单但可能错过快速变化的关键瞬间。

关键帧选择(Keyframe Selection):根据场景变化检测(如相邻帧差值)自动选取信息密度高的帧,减少冗余帧。

时序 token 压缩:在 Projection Layer 阶段,不只对单帧进行空间压缩,还跨帧做时序压缩(如 Video-LLaMA 的时序聚合模块),把多帧信息融合成更少的 token。

# 视频处理伪代码
frames = sample_frames(video, fps=1) # 每秒采 1 帧
visual_tokens = [vision_encoder(f) for f in frames] # 每帧编码
temporal_tokens = temporal_pooling(visual_tokens) # 时序压缩
output = llm(temporal_tokens + text_tokens) # 送入 LLM

原生多模态(Omni 模型)

GPT-4o 和 Gemini 1.5 代表了"原生多模态"的设计理念:

  • 统一输入:文字、图像、语音、视频都能直接输入
  • 统一输出:可以生成文字,也可以直接生成语音
  • 低延迟:GPT-4o 的语音响应延迟约 320ms,接近人类对话节奏
  • 跨模态推理:可以同时分析语音中的情绪和图像中的场景,做综合判断

Gemini 1.5 的亮点是超长上下文(1M token),可以处理整部电影或几小时的录音,并在其中检索特定片段。


32.4 多模态的挑战

多模态 LLM 在令人惊叹的能力背后,隐藏着若干工程和理论层面的核心挑战。

挑战一:Token 效率

图像消耗的 token 数量远超文字:

分辨率Token 数(典型)等价文字量
224×224224 \times 224~256约 200 个英文单词
448×448448 \times 448~1024约 800 个英文单词
1024×10241024 \times 1024~4096约 3000 个英文单词
高清截图(动态裁剪)500~2000

对于需要分析高分辨率图像(如医学影像、工程图纸)的应用,token 成本非常高昂。GPT-4V 对高分辨率图像采用"动态分块(dynamic tiling)"策略:先生成缩略图概览,再对感兴趣区域放大处理,是在能力与成本之间的权衡。

Attention 计算复杂度是 O(n2)O(n^2),token 数翻倍意味着计算量翻四倍。这也是为什么视频处理至今仍然昂贵。

挑战二:模态对齐

视觉特征和语言特征来自不同的预训练过程,它们的语义空间存在系统性偏差——即模态鸿沟(modality gap)

CLIP 通过对比学习已经在一定程度上对齐了图文空间,但这种对齐是粗粒度的(图文相似性),不足以支持细粒度的推理。例如:

  • "红色的苹果在蓝色碗里"和"蓝色的苹果在红色碗里"对于 CLIP 可能有相似的整体特征
  • 但 VQA 任务需要精确区分两者

解决模态对齐的方法包括:更大的 Projection Layer、更高质量的图文对训练数据、以及在 LLM 层面做更多联合训练。

挑战三:训练数据的稀缺

互联网上的纯文本数据规模是千亿到万亿词级别,但高质量的图文对数据远少于此:

数据类型规模估计质量
纯文本(网络爬取)万亿 token中等
图文对(网络爬取)数十亿对低(噪声大)
精标注视觉问答数百万条
视频文字对数亿对较低

低质量的图文对(例如新闻图片配标题)往往缺乏精确的视觉描述,模型学到的是统计关联而非真正的视觉理解。

为此,研究者发展出多种数据增强策略:用现有 VLM 自动生成更详细的图像描述(如 LLaVA 使用 GPT-4 对 COCO 图片生成对话数据),以及合成数据生成(渲染 3D 场景获得精确的几何标注)。

:::info 数据飞轮效应 强大的 VLM 可以为新图像生成高质量的描述,这些描述又可以作为训练数据训练下一代 VLM——这是闭源模型持续保持优势的重要原因之一。 :::


本章小结

主题核心要点
VLM 架构Vision Encoder(ViT)→ Projection Layer(MLP/Resampler)→ LLM Decoder
训练策略两阶段:先训 Projection,再联合微调
能力边界擅长描述/OCR/图表,精确计数/空间推理仍不稳定
语音接入ASR 流水线(Whisper)或端到端语音 token 化
视频接入帧采样 + 时序压缩,token 成本是瓶颈
核心挑战Token 效率、模态对齐、训练数据稀缺

多模态 LLM 让语言模型从"只读文字的书虫"进化为"能看能听的助手",但目前仍是在理解侧更成熟,生成侧(生成图像、语音)则引出了另一类模型——扩散模型(Diffusion Model)与生成模型的融合。下一章将探讨 LLM 与外部工具的结合:当模型不再只靠自身参数,而是学会调用搜索引擎、代码解释器和 API,会发生什么?