跳转至

CS231N Lecture 16: Multi-Modal Foundation Models

LaTeX 源码 · 备用 PDF · 观看视频

字段 内容
作者/整理 基于 Ranjay Krishna 授课内容整理
来源 Stanford CS231N
日期 2025-05-27

CS231N Lecture 16: Multi-Modal Foundation Models

从单任务模型到 Foundation Models

这一讲是 guest lecture,主讲人是 Ranjay Krishna。开场先做了一个很重要的对比:课程前半段学到的,多是为单个任务收集数据、训练单个模型、在固定测试集上评估的范式;而今天的重点,是把视觉系统推进到一个更通用的层次,也就是 foundation models。换句话说,问题不再是“每个任务都单独训练一个模型”,而是“能不能先训练一个大而通用的模型,再适配到很多任务”。\footnote{根据字幕 00:00:05--00:03:40,讲者把课程前半段的单任务流程和 foundation model 的预训练-迁移流程做了对比。}

课程传统范式:每个任务都训练一个单独模型

Foundation model 的核心思想:先在大规模多样数据上预训练,再迁移到多个下游任务

Foundation model 到底是什么

讲者没有给出一个教科书式定义,而是强调了一组更实用的特征。foundation model 不是一个严格的分类术语,而是一种系统设计取向:它应该足够通用、足够鲁棒、拥有较大的参数量、训练数据也足够大,而且通常采用某种自监督或弱监督目标。

Foundation model 的常见特征

  • 通用性:同一模型可适配很多不同任务。
  • 规模:参数量通常大,训练数据也大。
  • 预训练优先:先学表示,再做下游适配。
  • 弱监督/自监督:尽量减少对人工标签的依赖。

这讲只讨论视觉和多模态系统,不展开语言模型本身,但语言模型的思路会被借用来构建视觉 foundation model,尤其是“如何把输入压成一组 token,再交给一个通用模型去自动完成”这条路线。

foundation model 的谱系:语言、视觉、多模态、生成和 chaining

为什么视觉也需要 foundation models

视觉任务本身就很碎片化。分类、检测、分割、检索、问答、captioning,各自的数据集、损失函数和评估标准都不一样。如果继续用“一个任务一个模型”的思路,就会不断重复造轮子。foundation model 的价值,在于让同一套表示跨任务复用,而不是只在一个 benchmark 上刷分。\footnote{字幕 00:02:02--00:03:40 中,讲者明确说到它允许在很少数据甚至零数据的情况下适配新任务。}

先预训练一个不依赖监督标签的编码器,再迁移到多个下游视觉任务

为什么这个方向重要

  • 标签昂贵,而网络数据丰富。
  • 下游任务不断变化,固定任务模型很难复用。
  • 统一表示有利于检索、生成、分类和问答等任务的共享。

这门课的目标之一:把视觉任务从单点模型推进到可迁移的 foundation models

从 self-supervised 到 multimodal

讲者把本讲和前面的 self-supervised learning 联系起来:如果对比学习能把同一张图的不同增强拉近,那么把“图像”和“文本”也放进同一个对比目标里,就能把图文空间统一起来。这就是 CLIP 的出发点。\footnote{字幕 00:03:40--00:06:40 中,讲者先从 self-supervised 的 contrastive objective 过渡到图文对比学习。}

CLIP 的基本结构:图像编码器和文本编码器分别输出向量,再用相似度做匹配

CLIP:把图像和文本放进同一个空间

CLIP 是这讲的第一个主角。它的核心是把图像和文本都编码到同一个向量空间里,然后用对比学习把匹配对拉近,把不匹配的样本推远。它不直接学类别标签,而是学跨模态对齐。

对比学习的直觉

CLIP 的训练逻辑,本质上是把“哪个图和哪个文本更像”变成 batch 内的匹配问题。图像编码器和文本编码器各自把输入压成向量,训练时让真实配对的图文相似度更高,其他配对相似度更低。这个目标和 SimCLR 的直觉非常接近,只是从“同一张图的不同增强”扩展成了“图像与语言描述”。\footnote{字幕 00:06:40--00:08:20 中,讲者明确把 CLIP 的图文对比目标放回到 self-supervised contrastive learning 的框架里。}

CLIP 的训练目标

训练数据是一大批图文对。模型同时优化两个方向:

  • 图像向量应最接近自己的文本描述。
  • 文本向量也应最接近自己的图像。

这是一种对称的 batch 内对比损失。

图文对比损失的直觉:把配对样本拉近,把其他样本推远

为什么 scale 会决定 CLIP 的成败

CLIP 并不是“一个新的小技巧”突然赢了,而是模型规模和数据规模同时上来了。讲者给出两个关键数字:模型规模大约是 307M 参数,训练图文对来自互联网,规模大约到 4 亿对量级。相比 ImageNet 的 1.3M 图像,这已经是完全不同的数据世界。\footnote{字幕 00:14:10--00:16:10 和 00:17:50--00:18:20 对规模因素有直接说明。}

CLIP 强的原因之一:模型和数据都大幅扩展

CLIP 的参数量远大于传统监督分类模型

CLIP 的训练数据规模也远大于传统监督分类

为什么 scale 不是“可有可无”

CLIP 的很多能力并不是来自某个神奇结构,而是来自足够大的 batch、足够大的模型和足够多样的图文监督。没有 scale,很多看起来优雅的对比学习结论其实都学不出来。

零样本分类怎么做

CLIP 最有影响力的能力,是 zero-shot 分类。做法很简单:为每个类别写一个文本 prompt,编码成文本向量,再把输入图像编码成图像向量,用最近邻或点积选出最匹配的类别。\footnote{字幕 00:11:00--00:14:10 中,讲者用 plane/dog/bird 的例子解释了 zero-shot 分类。}

为每个类别用文本编码器生成一个向量,作为类别原型

把 CLIP 看成一个 1-NN 分类器:类别原型来自文本向量

对新数据集,流程就是:

  1. 为类别写 prompt,例如 a photo of a dog
  2. 把 prompt 编码成类别原型。
  3. 把图像编码成向量。
  4. 按相似度做分类。

为什么 prompt 很重要

CLIP 训练时见到的是句子片段,不是孤立词,所以单个类别词往往不如带语境的短语好用。prompt ensemble 进一步把多个描述取平均,通常还能再提升一点性能。

同一类别用多种 prompt,再取平均向量作为最终类别表示

为什么 CLIP 会泛化得更好

讲者对这个问题给了两个解释。第一,互联网文本比 ImageNet label 丰富得多,它不是只有“dog”这样的单词,而是包含形状、颜色、关系、场景和上下文信息。第二,图文对的总量远超过手工分类数据,所以模型见过的组合更广、更杂,也更容易对 out-of-distribution 样本保持鲁棒。\footnote{字幕 00:14:50--00:16:20 和 00:16:20--00:17:40 对 CLIP 的泛化原因做了直接总结。}

CLIP-style 模型在 ImageNet 上的表现已经足以作为新一代分类 foundation model

CLIP-style 模型的优点

  • 训练目标简单,容易扩展。
  • 推理很快,检索和分类都方便。
  • open-vocabulary 能力强,适合跨域迁移。
  • 很容易和其他模型做 chaining。

CLIP 的局限:batch、组合关系和分布外样本

讲者并没有把 CLIP 神化。相反,后半部分花了很多时间讲它的局限。第一个问题是 batch size 依赖:batch 越大,负样本越丰富,模型越有机会学到细粒度差异;但如果 batch 太小,就容易只学到“猫和车不一样”这种粗粒度区分,学不到真正细的类别边界。\footnote{字幕 00:21:50--00:23:40 对 batch size 和 hard negatives 的重要性有明确讨论。}

CLIP-style 模型的优势和局限:高效、零样本,但也会被某些语义混淆击中

第二个问题是 compositionality。mug in grassgrass in mug 词元相同,但语义完全不同;CLIP 很容易混掉这种关系,因为它更擅长整体对齐,而不是精细的关系解析。

CLIP 会混淆语序和组合关系,说明它对 compositionality 仍然不够强

组合关系为什么难

组合关系要求模型不只识别对象,还要识别对象之间的角色和方向。只靠更大的 batch 能改善一些细粒度区别,但并不能自动学会真正的结构化语义。

hard negatives 不是银弹

一个自然的修补方向是 hard negative fine-tuning:专门把容易混淆的反例放进 batch,逼模型学会更细粒度区别。这个方法短期内确实能改善部分混淆,但讲者也提醒,它可能带来新的问题:过度强调反例会让模型把本来应该接近的样本也强行推开,最后反而损害 generalization。\footnote{字幕 00:23:40--00:24:55 中,讲者明确说 hard negative 训练最终可能伤害泛化。}

用 hard negatives 继续微调可以缓解一些混淆问题

过度依赖 hard negatives 也会制造新的训练偏差

一个更成熟的判断

CLIP 的问题不是“还不够大”,而是它需要更好的数据构造策略、更明确的组合监督和更稳定的训练信号。简单堆 batch 并不能自动解决语义结构问题。

CoCa:对比学习之外再加一个生成头

CLIP 已经很强,但它还是一个纯对比编码器。讲者接着引入 CoCa,思路很直接:如果只做对齐,模型会偏向“会认”;如果再加 captioning 生成目标,模型就必须“会说”,而会说通常意味着必须保留更多细粒度语义。\footnote{字幕 00:19:27--00:19:50 对 CoCa 的动机做了直接说明。}

CoCa 在 CLIP 上加入生成式 caption loss

CoCa 的结构:编码器负责对比学习,decoder 负责生成 caption

为什么要加 captioning

对比学习擅长对齐图文,但生成目标会迫使模型保留更多区域级、属性级和关系级语义。CoCa 的思路是:既要对齐,也要会说。

CoCa 的直觉

把 captioning 当作一种更难的自监督约束,比只做 image-text matching 更能逼出 richer features。也就是说,它不是替代对比学习,而是在它上面多加一层语言压力。

多模态语言模型:从图文对齐到图文对话

有了 CLIP / CoCa 这条线,下一步自然就是把视觉 token 接进语言模型。讲者先提到了 LLaVA,再提 Flamingo,说明多模态模型的真正目的,不是只做“看图分类”,而是让视觉成为 LLM 推理的上下文。\footnote{字幕 00:26:00--00:29:00 先把视觉语言模型和 autoregressive 语言模型联系起来,再引出 LLaVA / Flamingo。}

LLaVA:最直接的连接方式

LLaVA 的思路很朴素:先用 CLIP image encoder 把图像变成一组 token,再用一个小的投影层把这些视觉 token 映射到 LLM 能理解的空间,最后把它们和文本 token 拼在一起做 next-token prediction。它的关键不是“又发明了一套视觉编码”,而是把已有的视觉特征和已有的语言模型接到了一起。

多模态语言模型的第一步:把视觉 token 接进语言模型

LLaVA 的关键组件

  • 图像编码器负责把图像压成 token。
  • 一个线性投影把视觉特征对齐到 LLM embedding 空间。
  • LLM 负责生成回答、描述和推理。

讲者还指出,CLIP encoder 并不只有 CLS token 真正有用,penultimate layer 的特征更有空间信息,因此在做多模态接入时,通常会偏向使用更底层、更细粒度的视觉表示,而不是只用最终聚合向量。\footnote{字幕 00:30:19--00:30:59 对 penultimate features 的用途有直接说明。}

Flamingo:把视觉上下文喂进每一层

Flamingo 是这讲里更重要的多模态架构案例。它延续了“视觉 encoder + LLM”的总体方向,但做法比简单拼接更精细。它把视觉特征先经过 perceiver sampler 压缩,再用 gated cross-attention 把视觉上下文注入 LLM 的每一层。也就是说,语言模型不是只在输入端看一眼图像,而是在每层都能选择性回看视觉信息。\footnote{字幕 00:31:20--00:35:10 对 Flamingo 的 cross-attention 和 perceiver sampler 有详细解释。}

Flamingo 的核心思想:冻结大部分语言模型,只训练跨模态桥接模块

Flamingo 通过 gated cross-attention 把视觉信息注入每一层语言模型

Flamingo 的设计重点

  • 视觉 encoder 和语言模型大多冻结,训练成本更可控。
  • cross-attention 让 LLM 在生成时能动态读取视觉上下文。
  • perceiver sampler 把视觉 token 压到固定长度,避免输入过长。

多轮对话和 few-shot reasoning

Flamingo 的强项不是单轮 caption,而是多轮对话与 in-context learning。你可以先给几个图文示例,再让它描述新的图;也可以先给几个问答示例,再问新图。它会把这些上下文当成“例子”,而不是重新训练一个新任务模型。\footnote{字幕 00:37:00--00:39:30 展示了多轮对话、few-shot captioning 和 question answering。}

Flamingo 可以进行多轮图文对话,而不是只输出单句 caption

Flamingo 的 few-shot / in-context 学习能力:给例子,就能模仿行为

为什么 in-context learning 重要

它让多模态模型更像“通用接口”,而不是“专用分类器”。研究者不必为每个任务重新微调,只要通过示例就能让模型进入新的任务模式。

Grounding 到像素,才能减少幻觉

讲者后来介绍了一个很有意思的点:如果模型回答“有几条船”,它很容易直接猜一个数字。但如果模型必须先“指向”图中被计数的对象,再给出最终答案,决策就更 grounded,幻觉也会少一些。Momo 就是这样一种做法:先把 decision-making grounded in the pixels,再做最终输出。\footnote{字幕 00:47:29--00:48:30 对 grounding 到 pixels 的设计做了直接说明。}

让模型先指向像素,再做最终判断,是降低幻觉的一种方法

grounding 的意义

如果模型必须先指出证据,再给出答案,它就更难完全靠语言先验胡编。grounding 不是万能解药,但它会迫使模型把输出和视觉证据绑定起来。

Momo:开放、可复现、可评估的多模态模型

讲者还介绍了他们自己的 Momo。它的亮点不是“更大”,而是更开放:open weights、open data、open code,外加公开评测和用户研究。训练数据规模只有约 70 万图文对,但因为做了精心筛选和 grounding,效果能和更大模型接近。讲者甚至提到,他们做了 870 名用户、325,000 对 pairwise comparison 的用户研究,Momo 在 ELO 上逼近 GPT-4o。\footnote{字幕 00:47:32--00:49:00 和 00:50:00--00:50:40 讨论了 Momo 的数据规模、用户研究和 ELO 结果。}

Momo 的一个关键特征:用更少但更精心筛选的数据,配合 grounding 学到强的多模态能力

为什么 open matters

如果模型只靠私有数据和私有训练细节,社区就无法知道为什么它会强,也无法独立复现。开放 weights、data 和 code,才可能把模型能力真正扩散到研究社区。

Chaining:把多个模型串起来做单个模型做不到的事

讲者在最后一段把视角收回到系统设计:foundation model 真正强的地方,不只是“单模型很聪明”,而是可以把多个模型串起来做一件单个模型做不到的事。这就是 chaining。它的基本思想,是把不同模型的长处组合起来,形成一个更可靠、更通用的系统。\footnote{字幕 01:00:25--01:06:30 对 chaining、program generation、retrieval 和 tool use 有非常完整的说明。}

为什么要 chaining

讲者用一个很直观的例子说明:如果 CLIP 认不出一个新类别,但 GPT 能把这个类别描述清楚,那就可以把 GPT 的描述喂给 CLIP 重新做分类。也就是说,text generation 和 visual recognition 可以互相补位。\footnote{字幕 01:01:10--01:02:40 用 Mima、viaduct 等例子说明描述信息可以帮助分类。}

chaining 的直觉:一个模型负责描述,另一个模型负责识别或验证

chaining 的本质

把一个模型当作另一个模型的“工具”或者“中间表示生成器”。它的价值不是替代单模型,而是把多个模块的互补能力组合起来。

VisProg:把问题写成程序

讲者进一步介绍了 visual programming 的思路:让 GPT 先生成一个程序,再由程序去调用对象检测、分割、计数等视觉工具。这样,复杂问题就可以拆成多个步骤,每一步由最擅长的模型完成。例如“图里总共有几个船上的人”,可以先检测每张图中的人,再把检测结果加总。\footnote{字幕 01:02:40--01:05:50 对 VisProg 的程序生成思路做了详细说明。}

chaining 也可以理解为把问题转成程序,再用现成工具逐步求解

为什么程序化很自然

很多视觉问题本来就适合分解成子问题:先找对象,再数数量,再做逻辑判断。把这些步骤显式写成程序,往往比让一个模型直接“一步到位”更稳定。

retrieval 和例子选择

chaining 不只是调用工具,还包括 retrieval。给模型什么 examples,会显著影响它的行为;如果能够检索最相关的 in-context examples,系统就会比盲目塞一堆例子更好。讲者把这看作“retrieval for prompting”,本质上和传统检索系统是一类问题。\footnote{字幕 01:05:40--01:06:30 对检索式 few-shot prompting 有直接说明。}

chaining 的另一种形式:通过 retrieval 选择更合适的 in-context examples

系统成本会迅速上升

chaining 能力越强,系统也越重:要调用多个模型、多个检索器、多个 verifier,成本和延迟都会上升。所以它是能力增强,也是工程复杂度的增加。

hallucination 与 verifier

讲者最后强调,模型输出并不总可信。尤其在多模态场景里,hallucination 还是常见问题。一个现实的系统往往不会把单模型的输出直接交给用户,而是先经过 verifier 或其他检查模块。换句话说,chain 的价值不只是“接上更多模型”,也在于“把风险分层”。\footnote{字幕 01:05:30--01:06:30 讨论了 hallucination 和 verifier,强调大模型输出通常会再过一层验证。}

verifier 的角色

  • 检查输出和视觉证据是否一致。
  • 降低 hallucination 被直接暴露给用户的风险。
  • 让系统从“单点信任”变成“多点审查”。

系统化使用 foundation models 时,常常需要在输出前增加验证环节

总结与延伸

本章小结

这门课最后一讲想留下的,不只是几个模型名字,而是一套判断框架。

Lecture 16 的核心 takeaway

  1. foundation model 的本质是大规模、通用、可迁移的预训练表示。
  2. CLIP 用图文对比学习把图像和文本放进统一空间。
  3. zero-shot 分类可以直接把文本当成类别原型。
  4. scale 对 CLIP 的成功至关重要,尤其是数据和参数。
  5. CoCa 说明在对比学习之外,加上生成目标也很有价值。
  6. LLaVA 和 Flamingo 把视觉 token 接进 LLM,打开了多模态对话和 few-shot reasoning。
  7. grounding、retrieval 和 verifier 是降低幻觉、提升系统可靠性的关键手段。
  8. 真正强的系统往往是 chaining,而不是单模型裸奔。

这一讲最值得记住的系统观

模型越强,系统设计越不能简化。视觉 foundation model 的价值,不只是“让模型会更多”,而是“让模型更容易被组合、验证和复用”。

最现实的限制

开放模型、开放数据、开放代码虽然重要,但真正“可复现”的能力仍然很难。很多最强的视觉语言模型,外界只能看到结果,看不到完整训练配方。这个缺口本身就是未来研究的主战场。

延伸阅读

  • Radford et al., Learning Transferable Visual Models From Natural Language Supervision
  • Yu et al., CoCa: Contrastive Captioners are Image-Text Foundation Models
  • Liu et al., LLaVA
  • Alayrac et al., Flamingo
  • Winoground / ARO / CREPE 等 compositionality benchmarks
  • CuPL: prompting CLIP-style models with richer class descriptions