CS231n(拾陆)——视觉与语言
本讲主题:视觉与语言,以及基础模型(Foundation Models)范式。核心内容: - 从”一个任务一个模型”到”一个基础模型服务多任务” - CLIP:分类基础模型(对比学习 + 零样本分类) - Vision-Language Models:LLaVA、Flamingo、Qwen3-VL、Molmo - Chaining:CuPL、VisProg(组合式推理) - Omni Models:超越视觉+语言
$\large\star$ 一、基础模型(Foundation Models)范式
1.1 两种范式对比
过去(本课之前的所有模型):为每个任务训练一个专用模型
1 | Data Domain 1 → Model 1 → Task 1 |
新范式:基础模型(Foundation Models)
1 | ┌→ Task 1 |
预训练一个模型作为许多不同任务的基础。
1.2 什么算基础模型?
| 总是具备 | 常常具备 |
|---|---|
| 通用 / 对许多不同任务鲁棒 | 大参数量 |
| 大量数据 | |
| 自监督预训练目标 |
1.3 基础模型的家族谱系
| 类别 | 代表模型 |
|---|---|
| Language(语言) | ELMo、BERT、GPT、T5 |
| Classification(分类) | CLIP、CoCa |
| LM + Vision(语言模型+视觉) | LLaVA、Flamingo、GPT、Gemini、Qwen |
| Chaining(链式组合) | LMs + CLIP、Visual Programming |
| And More! | Segment Anything、Whisper、DALL-E、Stable Diffusion、Imagen |
📌 本讲重点:Classification(CLIP)、LM+Vision(LLaVA/Flamingo)、Chaining(CuPL/VisProg)。
$\large\star$ 二、CLIP:分类基础模型
Radford et al., “Learning Transferable Visual Models from Natural Language Supervision”
2.1 动机:从自监督到视觉-语言联合嵌入
回顾 SimCLR 的自监督目标: - 用自监督学习学到好的图像特征 - 可在这些特征上训练小分类器用于下游任务 - 核心思想:拉近(Pull Together)/ 推远(Push Apart)——无需标签学概念 - 希望学到的表示能泛化到新实例
新的问题: > 如果这个表示空间也能嵌入句子/短语呢? > “A cute fluffy cat” 和 “My favorite dog is a golden retriever” > → 如何构造一个联合的视觉-语言嵌入空间?
2.2 Step 1:收集大量数据(~400M 图文对)
CLIP 的训练数据是从互联网大规模抓取的图像及其关联的 alt-text(图片替代文本)。
📚 Xu et al., “Demystifying CLIP Data”, ICLR 2024 —— 原始工作已被复现。
2.3 Step 2:训练模型(对比目标)
用什么损失函数?
作者描述先前工作(如图像描述)时说: > 与其从图像中预测确切的单词,我们只需要学习一个能把正确描述与图像匹配的模型。
SimCLR vs CLIP 的架构对比:
| SimCLR | CLIP |
|---|---|
| 图像编码器 ×2(两个视图) | 图像编码器 + 文本编码器 |
| 只在图像间对比 | 在图像与文本间对比 |
1 | 图像编码器 ──┐ ┌── "A cute fluffy cat" |
CLIP 用与 SimCLR 相同的对比目标(InfoNCE):
- 通过最小化双向 InfoNCE 损失,最大化对角线上的图文相似度
- 训练结束后得到一个能嵌入图像和文本、并给出图文相似度分数的模型
- ⚠️ 细节未在幻灯片中展示:温度参数、向量做 L2 归一化
2.4 零样本分类:用文本编码器造一个分类器!
与语言模型的重要区别:LLM 可以对新的下游任务零样本使用。
问题:如何不做微调、开箱即用做分类?
巧妙的技巧:用文本编码器创建分类器!
- 为每个类别创建向量表示:
"plane"、"dog"、"bird"→ Plane/Dog/Bird 向量 - 把新图像匹配到最相似的向量:相似度 0.13 / 0.27 / 0.09 → 预测 dog
💡 这类似于 1-NN 算法,只不过”训练数据”是文本向量!
提示工程(Prompt Engineering):
| 技巧 | 效果 |
|---|---|
用短语 "A photo of a [category]"(因为 CLIP
是用短语训练的) |
ImageNet +1.3% |
单个短语可能太偏 →
用多个短语(A photo of a ...、A drawing of a ...…) |
ImageNet +5% |
| 取所有短语的平均向量作为类别表示 | ✅ |
结论:现在你可以把 CLIP 当作任意数据集图像分类的基础模型!
2.5 结果与泛化能力
惊人的结果:在 400M 图文对上训练后,CLIP 匹配了在 ImageNet 上训练的 ResNet-101 的准确率——而 CLIP 完全没有用人工标签!
泛化能力: - 在 ImageNet 上训练不能泛化到其他数据集 - ObjectNet:包含相同类别,但是奇怪的视角 - ✅ CLIP 零样本表现非常好! - CLIP 在图形图像、草图、对抗数据集上表现也很好
Linear Probe vs Zero-shot 的差异:在部分数据集上 zero-shot 最好,在另一些上”CLIP 特征 + 线性分类器”最好。
2.6 为什么 CLIP 这么强?(“无标签”如何打败有标签?)
可能的原因:
| 原因 | 说明 |
|---|---|
| 1. “无标签”有点误导 | 文本就是某种监督信号 |
| 2. 大规模预训练 | CLIP 307M 参数 vs ImageNet ResNet 44.5M;CLIP 400M 训练图像 vs ImageNet 1.28M |
| 3. 测试集泄漏? | 可能不是:约 2% 数据集泄漏(“Does CLIP’s Generalization Performance Mainly Stem from High Train-Test Similarity?” TLDR:并非如此) |
🔑 CLIP 用 Transformer 架构放大了模型参数,并用网络抓取的图文对放大了训练数据。
2.7 常见变体
| 变体 | 改进 |
|---|---|
| SigLIP | 用 Sigmoid 代替 Softmax!非常有用:不需要物化整个 batch 来计算每个样本的损失(节省内存) |
| CoCa | 通过添加生成目标改进 CLIP(“Contrastive Captioners”,2022):在 CLIP 基础上加了带 captioning loss 的 decoder(图像特征作为 keys/values) |
📌 分类基础模型现在在 ImageNet 上主导其他所有模型。
2.8 CLIP 风格模型的优缺点
✅ 优点: 1. 点积非常高效 - 容易训练(支持扩展) - 推理快,例如在 50 亿张图像上做检索 2. 开放词汇(Open-vocabulary):零样本泛化 3. 可与其他模型链式组合(CuPL,见后文)
❌ 缺点:
缺点1:过度依赖 batch size 来学概念
| Batch size | 学到的粒度 |
|---|---|
| 4 | “animal” |
| 100 | “dog” |
| 32000 | “Welsh Corgi”(威尔士柯基) |
⚠️ 但这种方式能得到的细粒度有上限:即使在 32K 的 batch 里,也不太可能同时看到 “a mug in some grass” 和 “some grass in a mug”。
组合性(Compositionality)基准:Winoground、CREPE、ARO
> CLIP 无法区分:there is a mug in some grass vs
there is some grass in a mug(Tristan Thrush et al.,
2022)
- 解决方案:硬负例微调(Hard Negative
Fine-Tuning)——用
horse eating grass作为grass eating horse的负例 - ⚠️ 但硬负例训练也有自己的问题:hard positives
A black cat and a brown dog✓A brown cat and a black dog✗(语义等价但被判负)A brown dog and a black cat✗
缺点2:图像级 caption 监督不足 → 可改用区域 caption + 边界框坐标训练。
缺点3:单一 5B 数据集无法知道一切 → 有意识地做数据收集与过滤极其重要。
$\large\star$ 三、视觉-语言模型(Vision-Language Models)
3.1 LLaVA
动机:做 next token prediction 的语言模型可以在推理时应用于大量任务(数学、情感分析、符号推理…)。
能否构建一个接受图像和文本作为输入、输出文本的模型?→ Vision-Language Models
历史背景:VLM 并非始于 LLaVA!可追溯到 2019 年的 ViLBERT。 > ⚠️ 但那时的模型必须为每个任务单独微调,还需非平凡的特定任务方法(如 RefCOCO 要用 Mask-RCNN 做边界框重排序)——这正是本讲开头批评的”极其任务特定”范式。
LLaVA 的核心思想:利用 LLM 的自回归性质,给 LLM 添加视觉信息。
关键问题:用什么图像 token? → CLIP 编码器是个好选择!
应该用 CLIP 的哪些特征?
| 选项 | 问题/结论 |
|---|---|
| CLS token(用于对比学习) | ❌ 这些 token 没有被监督!可能是随机的,loss 也不会变 |
| 倒数第二层(Penultimate Layer) | ✅ 实践中这些 token 最能保留空间和语言信息;可以去掉 CLS 获得轻微提升 |
LLaVA 整体架构 + 训练配方:
1 | 图像 → Vision Encoder (CLIP) → 图像 token V1 V2 … VN |
- 用预训练语言模型(如 LLaMA)初始化 LLM Decoder,用预训练图像编码器(如 CLIP)
- 训练一个新的线性层把 CLIP 特征桥接到 LLM 输入空间
- 联合微调 LLM + 线性层
💡 只需约 178,000 个样本(输入图像 + 输入指令 + 输出文本)就能得到合理性能!
3.2 Flamingo
Alayrac et al., “Flamingo: a Visual Language Model for Few-Shot Learning”, NeurIPS 2022
Flamingo 提出了另一种融合信息的方式:
- 预训练部分:视觉编码器 + 语言模型
- 2 个可学习部分(新训练)
- Perceiver Sampler:把可变大小的图像 token 转换为固定大小
- 训练数据组织:类似语言建模,用特殊标签
<image>、<eos>指示新图像出现或文本结束
✅ Flamingo 支持上下文学习(in-context learning)——少样本即可适应新任务。
3.3 2026 年的 SOTA 格局
- Gemini 被广泛认为是最好的专有 VLM
- 开放程度的光谱:
| 层级 | 含义 |
|---|---|
| API Only | 只能通过 API 使用 |
| Open Weights | 可下载 + 本地运行 |
| Distilled Open | 开源但大多是从 GPT 蒸馏的 |
| Completely Open | 开放权重 + 数据 + 代码 + 评测 |
📚 Deitke et al., “Molmo and PixMo”, CVPR 2025
3.4 Qwen3-VL(2025年12月)
与 LLaVA 的不同点:
- 原生图像分辨率 → 更大图像给更多 token(用 2D-RoPE 位置编码处理变化的图像尺寸)
- 用 SigLIP-2 视觉编码器(代替 CLIP)
- 对视频,帧时间写在文本中:
<0.0 seconds> - 使用 SigLIP-2 第 8、16、24 层的 embedding
- 四个训练阶段:(1) 桥接视觉编码器 → … → (3) 增加上下文长度
3.5 Molmo / PixMo:质量 vs 数量的权衡
| 模型 | 数据量 |
|---|---|
| LLaMA 3.1V | 60 亿图文对 |
| Molmo(用 PixMo) | 仅 70 万图文对 |
洞察: -
互联网数据往往是附带的(incidental):pink, japan, aesthetic image、love this winter picture by person
- 人工标注数据更有意图(intentional),且 PixMo
数据非常详细(长段落级描述)
如何收集密集 caption? ⚠️ 这非常难! - 人们不喜欢打字……但喜欢说话 🎤 - 方案:让标注者就一张图像口述 60–90 秒,作者自动把语音转成文本用于预训练
$\large\star$ 四、链式组合(Chaining)
4.1 问题:分类从未见过的概念
当模型被要求分类一个从未见过的概念时怎么办? -
A photo of a marimba(马林巴琴) -
A photo of a viaduct(高架桥) -
A photo of a papillon(蝴蝶犬) -
A photo of a lorikeet(吸蜜鹦鹉)
4.2 解决方案:Chaining(链式调用)
- 让 LLM 生成一段描述
- 用这段描述来做分类
4.3 CuPL(CUstomized Prompts via Language models)
Pratt et al., “What does a platypus look like? Generating customized prompts for zero-shot image classification”, 2023
用 LLM 为每个类别生成定制化的提示词(而非单一模板
A photo of a ...),再交给 CLIP 做零样本分类。
4.4 VisProg(视觉编程)
Gupta et al., “Visual Programming: Compositional visual reasoning without training”, 2023
问题:能把 chaining 的思想推广到所有视觉任务吗?(如 “Are there 3 people in the boat?”)
两种路线对比:
| 传统路线 | VisProg 路线 |
|---|---|
| 为你的任务训练一个新模型(多图 VQA 模型) | 用现有模型写一个 Python 脚本 |
| 泛化到 2 张图可以,再往上就不行 | 可任意组合 |
1 | class MyMultiImageVQA(): |
💡 由 GPT 生成程序,调用现成的视觉模块(VQA、分割、检测…)完成组合式视觉推理,无需训练。
$\large\star$ 五、Omni 模型(超越视觉 + 语言)
最终注记:Omni Models
- 始于 2024 年的 GPT-4o
- 近期 Thinking Machines + Gemini 也推出了各自的 Omni 模型
- 训练一个模型以文本、音频和视频作为输入和输出
1 | ┌→ 文本 |
$\large\star$ 六、总结
| 主题 | 核心要点 |
|---|---|
| 基础模型范式 | 从”一任务一模型”→“预训练一个模型服务多任务”(fine-tune / zero-shot / few-shot) |
| CLIP | 400M 图文对 + 双向 InfoNCE;图像/文本编码器共享嵌入空间;点积算相似度 |
| 零样本分类 | 用文本编码器为类别造向量 → 图像匹配最近向量(类似 1-NN) |
| Prompt 技巧 | A photo of a [cat] +1.3%;多模板平均
+5% |
| CLIP 为什么强 | 大规模数据(400M vs 1.28M)+ 大模型(307M vs 44.5M);“无标签”其实有文本监督 |
| CLIP 缺点 | 依赖大 batch、组合性差(Winoground/ARO)、图像级 caption 监督不足 |
| SigLIP / CoCa | SigLIP:Sigmoid 替代 Softmax(省内存);CoCa:加 captioning 生成目标 |
| LLaVA | CLIP 视觉编码器 + 线性层 + LLM Decoder;用倒数第二层特征;17.8 万样本即可 |
| Flamingo | Perceiver Sampler 固定 token
数;<image>/<eos>
标签;支持上下文学习 |
| Chaining | CuPL:LLM 生成定制提示;VisProg:GPT 写程序调用现成视觉模块(无需训练) |
| Omni 模型 | GPT-4o 起,输入输出扩展到文本/音频/视频 |
下一讲:World Models(世界模型)
