Lecture 17:多模态模型

8608 字
43 分钟
Lecture 17:多模态模型
文章摘要

Stanford CS336 Language Modeling from Scratch | Spring 2026 | Lecture 17: Alignment - Multimodality,时长 01:17:39。

多模态模型:从图像编码到视觉语言模型#

多模态模型的动机与核心挑战#

语言模型本身已经具备相当的通用性:给定任意一段文本,它可以输出任意文本,无论是自然语言、代码、诗歌还是 DNA 序列。然而现实世界本质上是多模态的,包含文本、图像、音频、视频等多种信息形式。多模态建模的终极目标是构建所谓的 omni model,即能够接受任意模态组合作为输入,并输出任意模态组合的统一模型。例如,给定一张图像和一段视频,模型可以回答关于它们的问题;给定一段文本提示,模型可以生成图像;给定音频,模型可以将其转换为图像。

构建这样的模型面临一个根本性的问题:Transformer 是为文本设计的,它”说”的是 token 的语言。 Transformer 接受一系列 token 作为输入,输出一系列 token,这里的 token 不仅限于离散的文本 token,也可以是连续的 embedding 向量。关键要求是每个 token 应该表示某种语义单元。在自然语言中,token 是 subword,本身带有一定的语义;而一个像素显然不具备独立的语义意义。因此,核心挑战在于:如何将图像、音频、视频等非文本模态转换为离散或连续的 token,使得 Transformer 能够处理它们?

对文本而言,tokenization 已经有了成熟的方案——BPE tokenizer 虽然不完美,但足够实用。对非文本模态,则需要找到 BPE 的等价物:一种能将图像转换为 Transformer 可消化的 token 序列的编码方式。

围绕这个核心挑战,需要回答两个子问题:

  1. 输入侧:如何将非文本数据(图像、视频、音频)编码为 Transformer 的输入?
  2. 输出侧:如何从 Transformer 生成非文本模态的输出?

本讲主要聚焦于第一个问题,即如何将图像编码为 Transformer 可处理的表示。


CLIP——对比学习连接视觉与语言#

背景与动机#

2021 年前后,语言模型领域已经进入了 foundation model 时代(GPT-2、GPT-3 相继问世),而计算机视觉仍然主要依赖在 ImageNet 等大规模标注数据集上训练 ResNet 之类的模型,辅以各种数据增强技巧。OpenAI 的研究者提出了一个自然的问题:在语言领域,可以直接从互联网上爬取大量文本,虽然数据极其嘈杂,但只要模型足够大就能从中学到有用的东西——图像领域是否存在类似的范式?

互联网上存在海量的图像-文本对(图片及其 alt text、周围文字等),CLIP(Contrastive Language-Image Pre-training)正是为了利用这种自然产生的弱监督数据而设计的。

图3:CLIP 完整架构。左侧为对比预训练:图像和文本分别通过编码器得到 embedding,在 N×N 矩阵上最大化配对的点积、最小化非配对的点积。右侧为 zero-shot 推理:将候选类别转为文本模板,与测试图像的 embedding 做点积取最大值
图3:CLIP 完整架构。左侧为对比预训练:图像和文本分别通过编码器得到 embedding,在 N×N 矩阵上最大化配对的点积、最小化非配对的点积。右侧为 zero-shot 推理:将候选类别转为文本模板,与测试图像的 embedding 做点积取最大值

训练目标#

CLIP 的核心思想相当直接。假设有一个 batch 包含 NN(如 32,000)个图像-文本对。对每张图像,用图像编码器编码为向量 I1,I2,,INI_1, I_2, \ldots, I_N;对每段文本,用文本编码器编码为向量 T1,T2,,TNT_1, T_2, \ldots, T_N。训练目标是:

  • 对于配对的 (Ii,Ti)(I_i, T_i),两者的点积 IiTiI_i \cdot T_i 应尽可能大
  • 对于不配对的 (Ii,Tj)(I_i, T_j)iji \neq j),点积应尽可能小
  • 反向同理:TiT_iIiI_i 的点积应大于 TiT_i 与其他所有图像的点积

这本质上是 2N2N 个 softmax 分类问题,可以在一个 N×NN \times N 的矩阵上组织。伪代码非常简洁:

# I_emb: (M, D) 图像 embedding, T_emb: (M, D) 文本 embedding
I_emb = normalize(image_encoder(images))
T_emb = normalize(text_encoder(texts))
logits = I_emb @ T_emb.T / temperature
loss = (cross_entropy(logits, labels) + cross_entropy(logits.T, labels)) / 2

数据#

CLIP 使用了约 4 亿图像-文本对进行训练。具体的数据集细节论文中披露有限,大致流程是从某些查询出发在互联网上搜索并挖掘图像-文本对。该数据集未公开发布,但后来的 OpenCLIP 项目复现并扩展了 CLIP 的工作,使用了公开的 LAION-5B 数据集(50 亿图像-文本对),并进行了大量数据过滤——值得注意的是,数据过滤本身就用到了 CLIP 模型,存在一定的 bootstrapping。

图像预处理#

互联网图像的分辨率和宽高比千差万别,而神经网络偏好固定尺寸的输入。CLIP 采用的方案是:先将图像的短边缩放到目标尺寸(如 336 或 224),然后做 center crop 得到正方形图像。这种处理方式显然会丢失信息(裁掉了图像边缘部分),但在 ImageNet 分类场景中,目标物体通常位于图像中心,因此损失不大。后续工作会用更精细的方式解决这个问题。

关于文本监督的意义#

一个自然的问题是:为什么要用图像-文本对训练,而不是只用图像?纯基于图像的自监督方法(如 SimCLR)通过数据增强(裁剪、旋转、颜色扰动等)来构建正例对,让同一图像的不同增强版本具有相似的 embedding。这类方法能捕获低层视觉特征,但问题在于:数据增强无法将”一种狗”变成”另一种狗”。引入文本监督提供了更高层次的语义——文本通常描述图像中的概念性内容(“金毛犬在草地上奔跑”),因此文本配对使得编码器学到的表示具有语义级别的区分能力。

训练目标的选择:对比 vs 生成#

CLIP 论文还对比了另一种方案:直接从图像预测文本(bag-of-words 或语言模型方式)。实验表明,使用更强的生成式模型(语言模型预测完整的 token 序列)反而效果更差或效率更低,而简单的 bag-of-words 预测与对比学习各有优劣。这暗示:对于学习图像的粗粒度语义表示(至少在分类任务上),精确建模文本的 token 序列并非必要,对比学习已经足够捕获图像的大致语义。

标志性结果#

CLIP 最令人兴奋的结果是:zero-shot CLIP 在 ImageNet 上超过了在 120 万 ImageNet 标注图像上训练的 ResNet。 Zero-shot 推理的做法是:给定一张测试图像,将所有候选类别名转为文本(如 “a photo of a dog”),分别编码为文本向量,然后与图像向量做点积,取最大值对应的类别。这意味着,利用网络上自然产生的图像-文本数据(尽管很嘈杂),可以训练出比精心标注的监督数据更强的图像表示——这与 GPT 系列在语言领域展示的趋势如出一辙。

CLIP 的局限性#

CLIP 的主要技术限制在于需要很大的 batch size(约 30,000)。Batch size 过小时,负例太少,对比学习退化。而且 softmax 操作跨越整个 batch,不像语言模型训练中各序列可以独立并行——CLIP 的 loss 计算不具备可分解性(decomposability)。这个问题直接催生了 SigLIP 的改进方案。

小结#

CLIP 验证了一个重要的理念:通过与文本的对比学习,可以从大规模嘈杂的网络数据中学到具有语义意义的图像表示。尽管 CLIP 的设计决策主要围绕图像分类任务,分辨率和粒度都不够精细,但它奠定了后续所有视觉-语言模型(VLM)的基础,至今仍是视觉编码器的主流起点。


Vision Transformer (ViT) 与 CLIP 的编码器架构#

图像编码器:Vision Transformer#

CLIP 实验了多种图像编码器(ResNet 和 Vision Transformer),最终发现 Vision Transformer (ViT) 表现最好。当人们说”CLIP”时,通常指的就是 ViT 版本。

图4:Vision Transformer (ViT) 架构。左侧展示了图像被切分为 patch 后经线性投影和位置编码送入 Transformer Encoder 的完整流程;右侧展示了 Transformer Encoder 内部的标准结构(Multi-Head Attention → Norm → MLP → Norm,重复 L 次)
图4:Vision Transformer (ViT) 架构。左侧展示了图像被切分为 patch 后经线性投影和位置编码送入 Transformer Encoder 的完整流程;右侧展示了 Transformer Encoder 内部的标准结构(Multi-Head Attention → Norm → MLP → Norm,重复 L 次)

ViT 将图像处理为 token 序列的方式如下:

  1. 分 patch:将图像切分为固定大小的 patch(原始 ViT 论文用 16×16,CLIP 用 14×14)。每个 patch 是一个小的图像块,本质上就是一个向量(patch 内所有像素展开),相当于视觉 Transformer 的一个 token。
  2. 加位置编码:与语言模型类似,每个 patch token 加上位置嵌入(positional embedding),编码其在图像中的空间位置。CLIP 论文中尝试过 2D 位置编码,但发现 1D 位置编码效果相当,至少在分类任务上差异不大。
  3. 过标准 Transformer:patch token 序列送入标准的 Transformer encoder,产出一组向量序列。
  4. 池化得到单一向量:为了得到整张图像的单一表示向量,有两种做法——直接对所有位置的输出取全局平均(global average pooling),或使用 attention pooling:先计算全局平均作为 query,然后对所有位置的 key-value 做一轮 attention,得到一个更具信息量的汇总向量。CLIP 论文发现 attention pooling 优于简单平均。

CLIP 论文中表现最好的模型是 ViT-L/14——“L” 表示 Large(约 24 层),“14” 表示 14×14 patch。每个 patch 有 3 个通道(RGB),训练分辨率为 336×336。训练策略是先在较低分辨率上训练(速度更快,因为更少的 patch token 意味着更短的序列),后期再提升到高分辨率做精调。

文本编码器#

文本编码器是标准的 GPT-2 风格 Transformer(来自同一个 OpenAI 团队)。为了从变长文本序列中获取单一向量,采用的做法是在序列前后分别添加 [BOS][EOS] token,然后取最高层 [EOS] 位置的激活作为整个文本序列的表示。

Zero-shot 推理#

有了图像编码器和文本编码器之后,zero-shot 分类的流程是:

  1. 将测试图像通过图像编码器得到向量 II
  2. 将每个候选类别转为文本(如 “a photo of a {class}”),通过文本编码器得到向量 T1,T2,,TKT_1, T_2, \ldots, T_K
  3. 计算 II 与每个 TkT_k 的点积,取最大值对应的类别

SigLIP——用 Sigmoid 损失改进 CLIP#

从多分类到二分类#

CLIP 的对比学习损失可以视为一个 NN 类分类问题:在 NN 个候选中选出正确配对。SigLIP(Sigmoid Loss for Language-Image Pre-training)将这个问题大幅简化:对于任意一个图像-文本对,只做二分类——它们是否匹配?

在 CLIP 的 N×NN \times N 点积矩阵中,对角线元素是正例(标签为 +1),非对角线元素是负例(标签为 -1)。SigLIP 对每个元素独立施加 log-sigmoid 损失:

L=i,jlogσ(yijzij)\mathcal{L} = -\sum_{i,j} \log \sigma(y_{ij} \cdot z_{ij})

其中 yij{1,+1}y_{ij} \in \{-1, +1\} 是标签,zij=IiTj/τz_{ij} = I_i \cdot T_j / \tau 是经温度缩放的点积。

训练效率的核心优势#

这种简化带来了两个关键好处:

1. Batch size 与损失函数解耦。 CLIP 的 softmax 损失中,batch size 直接定义了分类的类别数——改变 batch size 就是改变损失函数本身。这意味着 batch size 过小时,损失函数退化严重。SigLIP 的 sigmoid 损失对每个 pair 独立计算,batch size 只影响梯度估计的方差,不改变损失函数的期望。实验证实,SigLIP 在小 batch size 下(<16K)远优于 CLIP,CLIP 在小 batch size 下效果急剧下降。SigLIP 的 critical batch size 约为 32K,超过后继续增大收益递减。

2. 并行化更友好。 CLIP 的 softmax 需要跨整个 batch 计算归一化因子。SigLIP 的 sigmoid 损失可以按块分解。具体的并行策略类似于 DDP(Distributed Data Parallel):每个设备存储一部分图像-文本对,先本地计算所有正例和本地负例的损失,然后通过轮转(rotation)方式依次接收其他设备的文本 embedding 来计算跨设备的负例——设备 1 先收到设备 2 的 T5T_5-T8T_8,计算对应负例损失,再收到设备 3 的 T9T_9-T12T_{12},依此类推。

数据与训练规模对比#

SigLIP 由 Google 完成,使用了 WebLI 数据集(约十亿量级的图像-文本对),来源于同期另一篇图像-语言模型工作。额外的数据处理包括对图像中的文本做 OCR 以构建更多的图文配对,以及多语言数据。

训练效率方面的对比非常惊人:

CLIPSigLIP
硬件256× TPU v332× TPU v4
时间10 天5 天

TPU v4 单卡的 FLOPS 并不比 v3 快(实际上每秒浮点运算约慢 60%),但 v4 的优势在于 pod 规模更大、互连带宽更好。SigLIP 能用少得多的硬件和更短的时间完成训练,核心原因在于损失函数的可分解性消除了 CLIP 中跨 batch 的通信瓶颈。当然也应注意 CLIP 当时可能未针对训练吞吐做深入优化。


LLaVA——将视觉编码器接入语言模型#

从图像编码器到视觉语言模型#

CLIP 和 SigLIP 解决了如何将图像编码为语义向量的问题。下一步是:如何将这些图像表示注入到语言模型中,使模型能够在给定图像的条件下进行文本推理和生成?这就是 VLM(Vision Language Model) 的领域。

VLM 的基本思路是:取一个预训练好的图像编码器,取一个预训练好的语言模型,然后将两者”缝合”起来。这更接近于 mid-training 或 post-training 的范式,而非从头训练一个统一模型。

LLaVA 的架构#

LLaVA(Large Language and Vision Assistant)于 2023 年发布,是最早引起广泛关注的开源 VLM 之一。彼时 GPT-4 已经展示了视觉推理能力,LLaVA 证明了开源模型也可以做到类似的事情,尽管质量不及 GPT-4,但让社区看到了实现路径。

图5:LLaVA 架构。图像通过 Vision Encoder 编码为向量 Z_v,经 Projection W 投影为 H_v,与文本 token 的 embedding H_q 拼接后一起送入 Language Model f_\phi,生成文本响应 X_a
图5:LLaVA 架构。图像通过 Vision Encoder 编码为向量 Z_v,经 Projection W 投影为 H_v,与文本 token 的 embedding H_q 拼接后一起送入 Language Model f_\phi,生成文本响应 X_a

LLaVA 由三个组件构成:

  1. 视觉编码器:CLIP ViT-L/14,将图像编码为一组向量
  2. 投影矩阵 WW:一个线性映射,将图像 embedding 投影到语言模型的 embedding 空间中——因为 CLIP 的输出空间与语言模型的 token embedding 空间不一致,需要一个”翻译层”
  3. 语言模型:Vicuna,即在 ShareGPT 对话数据上微调过的 LLaMA 模型

输入处理流程:文本部分通过标准的 token embedding 转为向量序列;图像部分通过 CLIP 编码再乘以 WW 转为向量序列。两者拼接后作为一个统一的向量序列送入 Transformer 语言模型。从语言模型的视角看,图像变成了一组”伪文本 token”——它们占据了序列中的若干位置,与真正的文本 token 一起参与注意力计算。

训练数据:GPT-4 合成#

LLaVA 的训练数据基于 MS-COCO 数据集,这是一个由人工标注的图像数据集,包含边界框和描述性标注。LLaVA 团队利用 GPT-4 从这些标注中合成训练样本:将图像的标注信息(人工标注的 caption 和检测到的物体)作为输入,让 GPT-4 生成三种类型的数据:

  • 对话:关于图像的多轮问答
  • 详细描述:对图像内容的详尽文字描述
  • 复杂推理:需要推理的问题及其答案

总共合成了 158,000 个训练样本。

两阶段训练#

阶段一:对齐(Alignment)。 冻结视觉编码器和语言模型,仅训练投影矩阵 WW。目标是让经过 WW 投影后的图像 embedding “看起来像”自然语言的 token embedding——如果 WW 随机初始化,图像 embedding 不对应任何有意义的语言 token,语言模型无法理解。

阶段二:指令微调。 冻结视觉编码器,训练投影矩阵 WW 和语言模型。使用合成的图像-对话数据,让模型学会在给定图像的条件下进行对话、描述和推理。

定性效果#

LLaVA 展示了一些令人印象深刻的例子。例如给定一张”有人在面包车后背上熨衣服”的图像,模型被问”这张图片有什么不寻常的地方?“时,能够正确回答”人们通常不会在面包车后背上熨衣服”。模型能够理解场景中物体关系的异常性,而不仅仅是识别出图像中有哪些物体。


LLaVA-OneVision——动态分辨率与多模态扩展#

从 LLaVA 到 LLaVA-OneVision#

LLaVA 之后出现了 LLaVA-1.5、LLaVA-NeXT 等一系列改进,LLaVA-OneVision(2024)整合了这些迭代中的关键创新,将能力从单图像推理扩展到多图像和视频理解。架构模板仍然一致——视觉编码器 + 投影器 + 语言模型——但各个组件都做了升级:

  • 视觉编码器:从 CLIP 升级到 SigLIP
  • 语言模型:从 Vicuna 升级到 Qwen-2(当时表现最好的开源语言模型之一)
  • 投影器/适配器:从线性投影 WW 升级到两层 MLP

AnyRes:解决分辨率瓶颈#

CLIP 的 center crop 到 336×336 的方式在 OCR 等需要精细信息的任务中是灾难性的:将一整页文档缩放到 336×336 后,文字完全不可读。LLaVA-1.5 引入的 AnyRes(Any Resolution) 方案解决了这个问题。

核心思路非常直接:既然视觉编码器只能处理固定大小(如 336×336)的输入,那就不对图像做下采样,而是将高分辨率图像切割成多个 336×336 的小块(crop),每个小块独立通过视觉编码器编码,然后将所有小块的向量拼接起来。

图6:AnyRes 处理流程。原始高分辨率图像(如论文页面)被切分为多个 336×336 的 crop,每个 crop 独立编码;同时将原图下采样到基础分辨率做全局编码。所有编码结果经双线性插值压缩后展平,与全局编码拼接送入 LLM。下方展示了单图像、多图像和视频三种输入类型的不同 token 预算策略
图6:AnyRes 处理流程。原始高分辨率图像(如论文页面)被切分为多个 336×336 的 crop,每个 crop 独立编码;同时将原图下采样到基础分辨率做全局编码。所有编码结果经双线性插值压缩后展平,与全局编码拼接送入 LLM。下方展示了单图像、多图像和视频三种输入类型的不同 token 预算策略

具体实现:

  1. 全局路径:将原始图像下采样到 336×336,编码一次,获取全局语义信息
  2. 局部路径:将原始图像切割为若干 336×336 的 crop(最多 9 个),每个 crop 独立编码
  3. 拼接:全局向量 + 所有局部向量拼接为一个变长的 token 序列

这个设计与 Transformer 处理变长文本序列的能力天然契合——句子可以是任意长度,图像也可以产生任意数量的 token。当图像分辨率极高或处理视频(帧数很多)时,token 数量可能爆炸,此时通过插值进行下采样来控制序列长度。

多图像与视频的处理策略#

LLaVA-OneVision 对不同输入类型采用不同的 token 预算策略:

输入类型处理策略Token 预算
单图像全局下采样 + 最多 9 个高分辨率 crop最高(精细查看)
多图像每张图像仅使用基础分辨率编码中等(概览级别)
视频最多 32 帧,每帧使用更少的 token最低(帧间信息冗余)

设计逻辑是:单张图像值得投入更多 token 做精细分析;多张图像时每张只需概览;视频帧之间存在大量冗余,每帧不需要太多 token。核心瓶颈是语言模型的上下文长度——视频处理能力很大程度上取决于模型能处理多长的序列。

训练流程#

从两阶段扩展为三阶段:

  1. 阶段一(对齐):仅训练投影器/适配器,冻结视觉编码器和语言模型
  2. 阶段二(知识注入):训练投影器和语言模型,使用高质量知识密集型数据
  3. 阶段三(任务适配):全参数训练,使用面向下游任务的数据

大量训练数据来自 GPT-4 的合成,涵盖视觉问答(VQA)、表格问答、图表理解等各种特定任务。LLaVA 系列的一大优势是不仅开源了模型权重,还开源了训练数据。

跨模态迁移#

一个有趣的发现是:在单图像数据上训练的能力可以迁移到多图像和视频场景。例如:

  • 训练时只见过针对单张图表的问答数据,但测试时能处理一张表格和一张图表同时输入的场景
  • 训练时只有单图像的 OCR 数据和多图像的关系推理数据,但能泛化到 GUI agent 场景(多张截图 + OCR 理解)
  • 训练时只有单图像的视觉标注(画圈标注目标区域),但能泛化到视频中跨帧追踪被标注的对象

这种迁移能力表明,当任务种类足够丰富时,模型可以学到跨模态的组合泛化能力,不仅仅是在记忆特定任务的输入输出模式。


Qwen-VL 系列——从 Qwen-VL 到 Qwen3-VL 的演进#

Qwen-VL 系列与 LLaVA 系列遵循相同的基本模板(视觉编码器 + 适配器 + 语言模型),但在架构细节和工程优化上走出了自己的路线。从 2023 年的 Qwen-VL 到 2025 年的 Qwen3-VL,每一代都在编码器、位置编码、适配器和训练流程上做出改进。

Qwen-VL(2023)#

Qwen-VL 使用 OpenCLIP(CLIP 的开源复现版本)作为视觉编码器。适配器采用单层交叉注意力(cross attention),将视觉特征映射到固定长度的 256 个 token。这个固定长度的设计在后续版本中被放弃,因为它限制了对不同分辨率图像的适应能力。

Qwen-VL 引入了特殊 token 来标记不同类型的视觉信息:<img> 标记图像区域,<box> 标记边界框,<ref> 标记引用描述。这使得模型能够在文本中精确地引用和定位图像中的特定区域。

训练分三阶段:

  1. 阶段一(大规模预训练):冻结语言模型,训练视觉编码器和适配器。使用 14 亿级别的大规模低质量数据。与 LLaVA 不同的是,Qwen-VL 在这个阶段就训练视觉编码器而非冻结它。
  2. 阶段二(高质量任务训练):使用高质量的任务特定数据(VQA、图表问答等),训练所有参数。
  3. 阶段三(指令微调):冻结视觉编码器,训练适配器和语言模型。

Qwen2-VL(2024)#

Qwen2-VL 引入了两个关键改进:

动态分辨率。 与 LLaVA-OneVision 的 AnyRes 思路类似,Qwen2-VL 也放弃了固定分辨率,改为将每个 224×224 的 patch 独立用 ViT 编码,然后将每 2×2 的 patch token 压缩为 1 个,最终每个 patch 产生 66 个 token。不同分辨率的图像产生不同数量的 token,视频则按 2 帧/秒采样,最多 16,384 个 token。

Multimodal RoPE(M-RoPE)。 标准 RoPE 在 1D 序列上定义位置编码,位置间的内积仅依赖于 token 间的距离。M-RoPE 将这个概念扩展到 3D:每个 patch 的位置由 (time, height, width) 三元组定义。对每个维度独立计算 RoPE,然后拼接。

图1:Qwen2-VL 的动态分辨率处理与 M-RoPE 3D 位置编码示意图。左侧展示了视频帧中每个 patch 如何被赋予 (time, height, width) 三元组坐标;右侧展示了 M-RoPE 如何将三个维度的旋转位置编码组合
图1:Qwen2-VL 的动态分辨率处理与 M-RoPE 3D 位置编码示意图。左侧展示了视频帧中每个 patch 如何被赋予 (time, height, width) 三元组坐标;右侧展示了 M-RoPE 如何将三个维度的旋转位置编码组合

Qwen3-VL(2025)#

Qwen3-VL 在 Qwen2-VL 基础上做了若干改进,单个改动的幅度不大,但对最终质量影响显著:

语言模型升级。 底层语言模型升级到 Qwen-3 系列(dense 和 MoE,最大 235B-A22B),上下文长度扩展到 256K,这对长视频理解至关重要。

视觉编码器:SigLIP-2。 从 OpenCLIP 升级到 SigLIP-2,架构与 SigLIP 完全兼容,但训练数据和策略有改进。

M-RoPE 改进:交错分配。 Qwen2-VL 的 M-RoPE 将 embedding 维度按块分配——前 1/3 给 time,中间 1/3 给 width,后 1/3 给 height。由于 RoPE 中不同维度对应不同频率,这导致所有时间维度只暴露于低频分量,所有高度维度只暴露于高频分量。Qwen3-VL 改为交错分配(interleave),使得每个轴都同时暴露于高频和低频分量。

显式视频时间戳。 Qwen2-VL 中视频帧的时间信息隐含在位置编码中(不同帧自然处于序列的不同位置)。Qwen3-VL 引入了显式的时间戳 token——“0.0 seconds” 本身就是一个可以被语言模型直接引用的文本 token。这使得模型可以在回答中精确地引用时间点(如”在第 2 秒之后发生了什么”)。

平方根归一化 per-token loss。 视频样本的 token 数远多于单图像样本,如果每个 token 的 loss 权重相同,视频样本会主导训练。Qwen3-VL 对每个样本的 loss 按 L\sqrt{L}LL 为 token 数)进行归一化,降低超长样本的影响。

DeepStack 适配器。 之前的适配器(线性投影、MLP、交叉注意力)都是将视觉编码器的最终输出作为黑盒结果,映射后注入语言模型的输入层。DeepStack(借鉴自 DeepSeek 团队的工作)采用了更深度的融合方式:将视觉编码器各层的输出直接注入到语言模型对应层的残差流中。这意味着视觉信息不再只从语言模型的第一层进入,而是在多个深度层次上同时注入。

图2:Qwen3-VL 完整架构。顶部是 Qwen3 LM Dense/MoE Decoder,底部展示了不同分辨率的图像和视频如何通过 Vision Encoder 产生不同数量的 token。右侧的 DeepStack 结构展示了视觉特征如何直接注入到 LLM 各层的残差流中
图2:Qwen3-VL 完整架构。顶部是 Qwen3 LM Dense/MoE Decoder,底部展示了不同分辨率的图像和视频如何通过 Vision Encoder 产生不同数量的 token。右侧的 DeepStack 结构展示了视觉特征如何直接注入到 LLM 各层的残差流中

训练流程。 预训练分 4 个子阶段(先训适配器,然后逐步在 8K→32K→256K 序列长度上扩展),后训练分 3 个子阶段(长链思维 SFT、知识蒸馏、强化学习)。整个流程已经相当复杂。

性能表现。 在多个 benchmark 上,Qwen3-VL 与闭源模型(Gemini、GPT-5、Opus 4.1)的差距很小,在部分指标上甚至取得最优。这表明通过组件升级、训练流程精细化和数据工程的积累,开源 VLM 已经可以与顶级闭源模型竞争。

视觉编码器的参数规模#

一个有趣的观察:在所有 VLM 中,视觉编码器的参数量远小于语言模型。例如 LLaVA-OneVision 使用 72B 参数的语言模型,但视觉编码器(ViT)通常不到 10 亿参数,投影器更小(约 72M)。原因是视觉编码器执行的是相对局部的操作——理解每个 patch 内部的内容,不需要太多”知识”。模型的推理能力、世界知识和语言生成能力主要由语言模型承担。


Chameleon——离散化的统一多模态模型#

动机:为什么不把一切都变成 token?#

前面讨论的 VLM 架构有一个根本性的不对称:图像通过连续编码器转为向量注入语言模型,但输出端只能生成文本。如果想要生成图像,需要额外接一个扩散模型头。Meta 在 2024 年提出的 Chameleon 探索了一条不同的路径:将图像也映射为离散 token,从而在一个统一的自回归语言模型中同时处理文本和图像的理解与生成。

这种方案在美学上很有吸引力——文本和图像真正共享同一个 token 空间,不需要适配器、投影矩阵或多阶段训练,一个语言模型就能处理一切。用户可以输入”我很无聊,给我看看鸟”,模型交替生成文本和图像 token,输出图文交错的内容。

VQ-VAE:将图像离散化#

将图像转为离散 token 的核心技术是 VQ-VAE(Vector Quantized Variational Autoencoder),最早由 van den Oord 等人在 2017 年提出。

基本原理:

  1. 编码器:将图像映射为连续向量
  2. 量化:维护一个包含 KK(如 8,192)个原型向量的码本(codebook),将编码器输出”四舍五入”到最近的码本向量。每个位置对应一个离散索引
  3. 解码器:从码本向量重建原始图像
  4. 训练目标:最小化重建损失(加上一些额外的正则化项来处理量化操作的不可微性)

通过 VQ-VAE,一张 512×512 的图像被转换为 1,024 个离散 token,每个 token 来自大小为 8,192 的词表。

Chameleon 的训练#

有了图像 tokenizer 之后,Chameleon 的训练变得非常直接——就是标准的语言模型训练。不需要适配器、不需要冻结/解冻策略、不需要多阶段对齐。训练数据包含文本和图像 token 的交错序列,模型学习预测下一个 token(无论它是文本 token 还是图像 token)。

训练仍然分两个阶段:阶段一是大规模无监督训练,包含文本和图文交错数据;阶段二混入高质量数据。但这两个阶段的区别仅在于数据混合比例,模型架构和训练方式完全不变。

训练稳定性问题#

尽管架构上简洁优雅,Chameleon 在训练中遇到了严重的稳定性问题。根本原因在于:文本 token 和图像 token 虽然被统一为离散 token,但其统计特性截然不同。

  • 文本 token 的条件熵相对较低——给定上下文后,下一个词通常是比较可预测的
  • 图像 token 的条件熵很高——一个 patch 具体是什么颜色/纹理,存在很大的不确定性

这种熵的差异导致模型参数的范数不断增长,进而引发 loss 的不稳定。Chameleon 团队通过 QK-Norm(对注意力的 query 和 key 做归一化)和 z-loss 正则化(控制 logit 的范数增长)在一定程度上缓解了这个问题。

局限性与后续发展#

Chameleon 的实际表现不如同期的 VLM(如 LLaVA、Qwen-VL 系列),主要原因包括:

  • 离散化信息损失:VQ-VAE 将连续图像压缩为离散码,不可避免地丢失细节信息。例如在 OCR 场景中,细小的文字在离散化后可能变得不可辨认
  • 训练困难:文本和图像 token 的统计特性差异使得联合训练比单独训练语言模型更具挑战性
  • 扩散模型的崛起:在图像生成领域,扩散模型展示了远优于自回归离散 token 生成的质量。VQ-VAE 曾经是 transformer 做图像生成的主要方式(因为 transformer 只能生成离散的东西),但扩散模型在连续空间中工作,能够更精细地优化高频细节

因此,VQ-VAE 路线在图像生成领域逐渐被扩散模型取代。Chameleon 的价值更多在于概念验证——统一的离散 token 框架在理论上是可行的,但在实践中面临显著的工程和性能挑战。


多模态模型的现状与核心取舍#

当前格局#

前沿语言模型(Gemini、GPT 系列、Claude 系列)已经默认具备多模态能力,甚至宣称自己是”原生多模态”的 omni model。然而,这些闭源模型的内部实现细节并不公开。从公开的研究和开源工作中可以推断,它们大概率采用连续编码器做理解、扩散模型做生成的组合方案。

理解 vs 生成的不对称性#

多模态建模中存在一个有趣的对称性和不对称性:

对称性:理论上,理解一种模态和生成一种模态是对称的两面——理解是从模态 X 到语义表示,生成是从语义表示到模态 X。

不对称性在实践中:理解和生成对编码器的精度要求截然不同。CLIP 用于分类时只需要捕获高层语义——“这是一只狗”,向量可以相对粗粒度。但如果要做 OCR 或生成图像,就需要极其精细的信息——每个像素、每个字符都不能丢。这解释了为什么扩散模型在生成任务上表现出色:它能够在连续空间中精细优化高频信息。

模态权重平衡#

视频的信息密度远低于文本——一段 10 秒的视频可能包含数千个 token,但其中大部分是冗余的(相邻帧高度相似)。如果不做处理,视频数据会在训练中占据过大的权重。Qwen3-VL 的 L\sqrt{L} 归一化是解决这个问题的一种方案,但更广泛地说,多模态训练的数据混合(data mixture)需要仔细调节各模态的权重比例。

连续编码器仍是主流#

尽管 Chameleon 探索了离散 token 的统一路线,当前效果最好的方案仍然是:

  • 理解侧:连续编码器(CLIP/SigLIP 及其变体),即使 CLIP 已有五年历史,类似的架构仍是捕获图像语义的主流选择
  • 生成侧:扩散模型
  • 骨干网络:Transformer

这三个组件在各自领域都没有被替代。Transformer 仍然是跨所有模态在大规模下表现最好的架构;CLIP 风格的对比学习仍然是最有效的视觉语义编码方式;扩散模型仍然是最强的图像/视频生成方案。


Lecture 17:多模态模型
https://www.xwysyy.cn/posts/cs336/lec17/
作者
xwysyy
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0

评论

0/1000
评论加载中…
对话列表
© 2026 xwysyy. All Rights Reserved.
Powered by Astro & Firefly

文章目录