CS336 · 第 17 课
多模态模型:从视觉理解走向 Omni Model
从纯文本语言模型走向原生多模态:如何把图像等非文本信号转化为 Transformer 能处理的 token,并在统一架构中同时实现理解与生成。
授课:Percy Liang
日期:2026-05-27
难度:中等 → 较高
Spring 2026 官方来源:Lecture 17 trace · 课程日程
本页是中文学习导读;讲次主线以 Stanford Lecture 17 trace 为准。页面中逐篇论文的架构细节属于 CourseStack 扩展,并在延伸阅读中分别链接原始论文。
本讲问题:文本模型怎样接收图像和视频,又怎样在统一 token 空间中兼顾理解与生成?关键不只是增加 encoder,而是对齐表示、分辨率、位置和训练目标。
30 秒知识地图
视觉编码器 → 图文对比对齐 → projector 接入 LLM → 动态分辨率与位置编码 → 多图 / 视频 → 离散视觉 token 支持理解与生成。
本课问题与 prerequisite refresher
LLM 接收的是 \(d_{model}\) 维 token embeddings,图片却是 \(H×W×C\) pixels。视觉模型首先把 image patches 变成一串 vectors;projector 再把视觉维度映射到 LLM embedding space。维度对齐只是接口合法,不等于语义已经对齐。
两条多模态路线
understanding:
image → patches → vision encoder → visual features → projector → LLM tokens → text
unified generation:
image → discrete visual tokenizer ↔ visual token IDs
text → text tokenizer ↔ text token IDs
↓ joint sequence model
pixel ≠ patch ≠ visual embedding ≠ discrete visual token
分辨率为什么变成 token budget
一张 \(224×224\) 图用 \(16×16\) patches 得 \(14×14=196\) visual tokens;长宽各翻倍到 \(448\),token 数变 \(28×28=784\),是 4×。若做 full attention,相关 score 规模随总 sequence length 平方增长。动态分辨率保留细节,却不是免费“看得更清楚”。
为什么不是把图片直接塞进 tokenizer
文本 BPE 的 merge table定义 UTF-8 bytes 的切分,不能给连续 pixels 自动赋语义。CLIP 相似度高也只表示 learned embedding 上接近,不保证 OCR、计数或空间定位正确;projector 参数很少也不表示视觉信息没有瓶颈。
学习目标
- 理解 omni model 的目标与当前多模态建模的基本思路
- 掌握 CLIP 与 SigLIP 如何把图像编码为语义向量
- 理解 LLaVA/OneVision 如何把视觉编码器接入语言模型
- 了解 Qwen-VL 系列的架构演进与关键改进
- 理解 Chameleon 用离散 token 统一理解与生成的取舍
- 认识视觉理解与生成对表示的不同需求
从文本模型到 omni model
到目前为止,课程里处理的都是语言模型:输入一段文本,输出另一段文本。但现实世界是多模态的,图像、视频、音频、代码、动作并存。一个真正通用的模型应当能接受任意模态组合作为输入(理解),也能产生任意模态组合作为输出(生成)。
当前最强大的系统几乎都基于 Transformer,而 Transformer 只说 token 的语言,每个 token 代表某个语义信息单元。因此,多模态建模的核心问题变成:如何把所有非文本数据都转换成 token。
- Omni model 目标:输入任意模态组合(理解),输出任意模态组合(生成)
- 核心挑战:非文本模态的 tokenization 比文本困难得多
- 两个基本问题:如何输入非文本数据做理解?如何输出非文本数据做生成?
CLIP:用对比学习对齐图像与文本
CLIP(Contrastive Language-Image Pretraining)的核心思路是:互联网上存在海量的(图像,字幕)配对数据,远多于人工标注的分类数据。能不能用这些弱监督数据来学习视觉表征?
具体做法是:在一个大 batch(例如 32768)里,对每张图像和每段文本分别编码,然后让配对的(图像,文本)在 embedding 空间中靠近,让不配对的远离。这是一种 softmax 形式的对比学习。
- 数据:以约 50 万个查询词收集候选图文对,最终使用约 4 亿个图文对训练。数据集未开源,后被 OpenCLIP 用 LAION-5B 复现
- 图像处理:双三次插值(bicubic)把短边缩放到 336px,再中心裁剪到 336x336
- Vision encoder:尝试 ResNet-50 与 ViT,最佳模型为 ViT-L/14@336px,使用 attention pooling(query 为全局平均)
- Text encoder:GPT-2 Transformer(63M 参数,12 层),编码 [BOS]...[EOS],取最后一层的 [EOS] 激活
- 结果:在 ImageNet 零样本设定下,CLIP 超过了在 1.2M 张 ImageNet 上训练的 ResNet-50
- 代价:需要大 batch、在整个 batch 上做 softmax,计算开销大
SigLIP:用 sigmoid 损失解耦 batch size
SigLIP(Sigmoid Loss for Language Image Pre-Training)把 CLIP 的多分类对比目标替换为逐对的二分类目标:给定(文本,图像),判断它们是否对齐。这个改动使得 batch size 与损失函数解耦,带来显著的效率提升。
- 数据:WebLI 数据集,O(billion) 级别的图像-文本对,从互联网抓取并用 OCR 提取图像中的文本,保留质量最高的 10%,支持 100 种语言
- 效率:讲义给出的对比是 CLIP 使用 256 块 TPUv3 训练 10 天,而 SigLIP 使用 32 块 TPUv4 训练 5 天;重点是 sigmoid 目标降低了对超大 batch 的依赖
- Batch size:损失函数不再依赖整个 batch,batch < 16K 时优于 CLIP,最高可用到 1M,但 32K 已经足够
LLaVA:把视觉编码器接入语言模型
LLaVA(Large Language and Vision Assistant)展示了一个简洁的视觉语言模型(VLM)配方:用一个预训练的 CLIP 编码器提取图像特征,再用一个线性投影把它们映射到语言模型的 embedding 空间,最后由语言模型生成回答。
数据构造上,LLaVA 利用 MS COCO 图像的 caption 和 bounding box,让 GPT-4 生成对应的问答对和对话,再与原始图像配对,得到 158K 个训练样本。
- Vision encoder:CLIP ViT-L/14
- Text decoder:Vicuna(LLaMA 在 ShareGPT 对话上微调)
- Projector:线性投影矩阵 W;相比更复杂的跨模态连接器,这是一种很轻量的对齐方式
- Stage 1(alignment):冻结 vision encoder 和 LM,只训练 W
- Stage 2(fine-tuning):冻结 vision encoder,训练 W 和 LM
LLaVA OneVision:高分辨率、多图与视频
LLaVA OneVision 是 LLaVA 系列的后续版本,支持多图输入和视频。它的关键洞察是:CLIP 把图像缩放到 336x336 会丢失大量信息(例如 OCR 需要高分辨率),因此引入 AnyRes 策略。
AnyRes 把图像切成 a x b 块,每块用 vision encoder 的基准分辨率处理,再拼接特征,如果 token 过多则用 bilinear 插值压缩。为了让单图、多图和视频产生相近长度的 token 序列,单图用高分辨率、多图用基准分辨率、视频每帧用低分辨率。
- Vision encoder:SigLIP,使用最后一层前后的 grid features
- Text decoder:Qwen-2 72B
- Projector:2 层 MLP
- 数据哲学:quality over quantity,大量合成数据
- 训练哲学:从易到难
- 模态迁移:单图训练的 OCR 能力可迁移到 GUI 代理,单图的视觉提示可迁移到视频
Qwen-VL:带位置感知的视觉语言模型
Qwen-VL 在 vision encoder 和语言模型之间加入了一个 adaptor:单层 cross-attention,融入 2D 位置编码,把视觉特征映射为固定长度 256 的序列。模型还引入了特殊 token 如 img、box、ref。
- Vision encoder:OpenCLIP ViT-bigC(14x14 patches)
- Adaptor:单层 cross-attention 加 2D 位置编码,输出固定 256 token
- Stage 1:大规模低质量数据,冻结 LM,训练 vision encoder 加 adaptor
- Stage 2:高质量任务数据,提升分辨率,训练全部参数
- Stage 3:指令微调数据,冻结 visual encoder,训练 adaptor 加 LM
Qwen2-VL:动态分辨率与 MRoPE
Qwen2-VL 把视觉编码器扩大到 675M 参数,并引入动态分辨率机制:图像按 224×224 区块送入 ViT/14 编码,再做 2x2 压缩得到 66 个 token。视频按每秒 2 帧采样,最多 16384 token。位置编码方面,Qwen2-VL 提出 Multimodal Rotary Position Embedding(MRoPE)。
- Visual encoder:675M ViT;图像按 224×224 区块处理,并以 2×2 merge 压缩视觉 token
- 视频:2 fps,最多 16384 tokens
- MRoPE:多模态旋转位置编码
- 初始化:LM 用 Qwen2,vision encoder 来自 DFN
- 训练:Stage 1 只训 visual encoder,Stage 2 全参,Stage 3 指令微调
Qwen3-VL:交错 MRoPE、DeepStack 与长视频
Qwen3-VL 是 Qwen 系列的旗舰视觉语言模型,支持稠密和 MoE 架构(最大 235B-A22B),以及 256K 长上下文。它在位置编码、视觉编码器和适配器上都有精细改进。
- Vision encoder:SigLIP-2(架构与 SigLIP 相同)
- Interleaved MRoPE:交错排列时间、宽度、高度轴到频率带
- 视频时间戳:作为独立 token 显式加入
- 损失归一化:平方根归一化 per-token loss,平衡文本与视频
- Adapter:DeepStack 跨层融合
- 预训练:4 阶段(训 adapter,在 8K、32K、256K 长度上训全参)
- 后训练:长 CoT 数据 SFT、知识蒸馏、RL
Chameleon:用离散 token 统一理解与生成
前面所有的 VLM 都走同一条路:用 CLIP 或 SigLIP 这样的连续编码器理解图像,注入 LM,但无法生成图像(需要 diffusion)。Chameleon 换了一个思路:把所有数据和文本与图像都映射为离散 token,用统一的自回归模型建模。为此,Chameleon 用 VQ-VAE 把 512x512 的图像编码为 1024 个离散 token(codebook 大小 8192),并训练了一个新的 BPE tokenizer。
- 优势:可以用同一个自回归模型分析和生成图像,架构优雅
- 训练:Stage 1(80%)大规模无监督,Stage 2(20%)混合 Stage 1 数据与高质量数据
- 训练稳定性:文本 token 低熵、图像 token 高熵,导致 norm growth 和 logit drift,修复用 QK norm 和 z-loss
- 代价:离散化会丢失细粒度信息,尤其会伤害 OCR、精细重建等任务
总结:理解与生成的不同需求
前沿模型正在走向原生多模态甚至 omni model。核心工程挑战是如何为非文本模态找到合适的编码方式。一个容易被忽略的洞察是:理解图像和生成图像可能需要不同的表示。理解更关注语义,而生成需要精细的纹理和局部细节。
- 理解需要语义级表示,生成需要细节级表示
- 训练时需要平衡图像/视频(信息密度低)与文本的比例,保持稳定性
- CLIP/SigLIP 路线擅长理解但无法生成,Chameleon 路线统一但损失信息
- 数据工程和分辨率处理在实际 VLM 中往往比架构本身更重要
常见误区
- Omni model 必须从零开始多模态预训练。实际上主流做法是在预训练 LM 上接入视觉编码器。
- CLIP 可以直接生成图像。CLIP 只做理解(对比学习),生成需要 diffusion 或其他解码器。
- SigLIP 完全替代了 CLIP。SigLIP 在小 batch 下更高效,但两者各有适用场景。
- Chameleon 因为用离散 token 统一了理解与生成,所以性能最好。实际上离散化会丢失信息。
- 视觉理解与生成需要相同的表示。理解侧重语义,生成侧重细节,两者可能需要不同的编码策略。
- VLM 的性能主要取决于架构创新。实际上数据工程、分辨率处理和训练策略往往影响更大。
Concept Check · 分辨率与 token 数
16×16 patch 下,224×224 图有多少 patches?长宽都翻倍后多少?
答案:\(14×14=196\);翻倍后 \(28×28=784\),是 4×。
若答 2×,你只追踪了一条空间轴,漏掉 image token grid 有高和宽两维。
你现在应该能够解释
- pixel、patch、feature、embedding 与 visual token 的区别。
- CLIP/SigLIP alignment 与 LLaVA-style generation 各训练什么。
- 分辨率如何推导为 visual token count 与 attention cost。
- projector 为什么解决维度接口却不保证语义 grounding。
- 理解型与统一生成型模型为何需要不同表示取舍。
通往第 18 课
多模态输出更开放,也更难只靠 reference answer 检验;下一课转向 formal specification 与 verifier,理解“可检查”如何改变生成与搜索。
如果只能记住 5 件事
- 多模态模型首先要把视觉表示映射到语言模型可消费的 token 或 embedding 空间。
- CLIP / SigLIP 学习图文对齐;LLaVA 类模型再用 projector 和 instruction tuning 把视觉信号接入生成模型。
- 动态分辨率与位置编码决定模型怎样保留局部细节、长图和视频中的空间时间关系。
- 视觉理解与视觉生成需要的表示不同:连续 encoder feature 便于理解,离散 token 便于统一生成但会引入量化损失。
- 架构名称不是性能保证;数据、分辨率处理、训练目标和评估任务共同决定结果。
知识检查
问题 1:CLIP 训练时,vision encoder 和 text encoder 的目标是什么?
问题 2:SigLIP 相比 CLIP 的核心改进是什么?
问题 3:Chameleon 把图像映射为离散 token 的主要代价是什么?
问题 4:LLaVA 两阶段训练中,Stage 1(alignment)训练哪些参数?
官方材料与论文
Reference · 官方材料与论文