CLIP
CLIP 要解决的问题非常朴素:传统视觉模型太依赖固定标签空间。你在 ImageNet 上训练一个分类器,它最终学到的是 1000 个固定类别的分类头。换一个任务,往往要重新收集标注、重新训练分类头,甚至微调整个模型。
人类不是这样学习视觉概念的。我们可以通过语言描述理解一个新类别,例如“这是一种有黑白条纹的马科动物”,然后在图像中识别斑马。语言天然提供了开放词表和组合能力。CLIP 的核心 insight 是:如果视觉模型直接从自然语言监督中学习,那么类别就不再是固定 id,而可以是任意文本描述。
这也是 CLIP 与 ImageNet 监督学习的根本分界线。ImageNet 学的是封闭标签,CLIP 学的是图像和文本之间的匹配关系。只要能把任务写成文本,CLIP 就有机会 zero-shot 迁移。
CLIP 的架构是双塔结构:一个 Image Encoder 编码图像,一个 Text Encoder 编码文本。两者输出的 embedding 经过归一化后计算相似度。训练时,一个 batch 中有 N 个真实图文对,于是可以构造一个 N×N 相似度矩阵。对角线是匹配图文对,非对角线是不匹配图文对。
训练目标很直观:让对角线相似度变大,让非对角线相似度变小。CLIP 同时做 image-to-text 和 text-to-image 两个方向的 softmax 对比学习:
\(\mathcal{L}_{i2t}=-\frac{1}{N}\sum_i \log \frac{\exp(s(I_i,T_i)/\tau)}{\sum_j \exp(s(I_i,T_j)/\tau)}\)
\(\mathcal{L}_{t2i}=-\frac{1}{N}\sum_i \log \frac{\exp(s(T_i,I_i)/\tau)}{\sum_j \exp(s(T_i,I_j)/\tau)}\)
最终损失是两个方向的平均。这里的 \(s(\cdot,\cdot)\) 是图文 embedding 的相似度,\(\tau\) 是温度参数。这个目标的作用不是训练一个固定分类器,而是训练一个跨模态检索器:给图找文本,给文本找图。
图 1 中的 MiniMax 视觉理解结果确认了三个阶段:左侧是 contrastive pre-training,中间是把类别名放入 “A photo of a {object}.” 模板并编码成文本分类器,右侧是测试图像与所有文本类别向量做相似度匹配。图中没有显示投影层、归一化和温度参数,这些需要回到论文正文确认。
CLIP 最漂亮的地方在于 zero-shot 分类。传统分类器的类别权重是训练出来的参数;CLIP 的类别权重则可以由文本编码器直接生成。例如 ImageNet 的类别 dog,可以写成 “a photo of a dog”。每个类别都通过模板变成一句自然语言,再由 Text Encoder 得到文本向量。测试图像通过 Image Encoder 得到图像向量,与这些文本向量逐一比较,分数最高的文本就是预测类别。
这相当于把分类问题改写成文本检索问题。模型不是在 1000 个固定 logit 中选择,而是在“哪一句文本最像这张图”中选择。这种形式天然支持开放词表:只要类别能被语言描述,就能构造分类器。
Prompt engineering 在 CLIP 中不是装饰,而是性能的一部分。单独使用类别词 “dog” 通常不如使用自然语言模板 “a photo of a dog”。原因是训练数据中的文本是自然语言描述,不是孤立标签。prompt ensembling 进一步把多个模板的文本向量平均,以降低单个模板带来的偏差。
graph LR A[类别名: dog / car / plane] --> B[Prompt 模板: a photo of a object] B --> C[Text Encoder] C --> D[类别文本向量] E[测试图像] --> F[Image Encoder] F --> G[图像向量] D --> H[相似度比较] G --> H H --> I[zero-shot 预测]
CLIP 在 400M 网络图文对上训练,zero-shot ImageNet top-1 达到约 76.2%,接近有监督 ResNet-50。这是一个标志性结果:模型没有用 ImageNet 标签训练分类头,却能通过文本 prompt 完成 ImageNet 分类。
更重要的是跨数据集迁移。CLIP 在 30 多个视觉数据集上测试,覆盖 OCR、动作识别、地理识别、细粒度分类等任务。它不是在每个数据集上都赢,但整体显示出强 zero-shot baseline 能力,尤其在分布外鲁棒性上优于传统 ImageNet 监督模型。
| 维度 | 传统监督视觉模型 | CLIP |
|---|---|---|
| 监督信号 | 固定类别标签 | 自然语言图文对 |
| 分类器 | 训练得到的权重矩阵 | 文本 prompt 编码得到 |
| 迁移方式 | 重新训练/微调 | zero-shot prompt |
| 类别空间 | 封闭 | 开放词表 |
Scaling 图进一步说明 CLIP 不是偶然可用,而是具备可预测的规模效应。MiniMax 对图 3 的分析显示:横轴是 Model GFLOPs,纵轴是 Error%,随着 RN50 到 RN50x64 等模型规模增大,错误率呈稳定下降趋势。也就是说,自然语言监督不仅有效,还能随计算量提升而持续变强。
CLIP 的局限也非常清晰。第一,它只有编码能力,没有生成能力。它能判断图文是否相似,却不能生成 caption,也不能自然地回答复杂问题。BLIP 后来正是从这里出发,尝试统一理解与生成。
第二,CLIP 的对齐是图像级的。它知道整张图和文本是否匹配,但不擅长指出对象在哪里。GLIP 后来把对齐粒度推进到 region-word 层面,解决开放词表检测和 grounding。
第三,CLIP 对 prompt 敏感。不同模板会影响 zero-shot 结果,这说明模型不是纯粹“理解类别”,而是在训练语料的语言分布中寻找最合适的描述方式。
第四,CLIP 的训练依赖巨大 batch 和大规模 web 数据。后续 SigLIP 用 sigmoid loss 缓解 batch size 依赖,LLaVA 则用 GPT-4 合成指令数据把重点从“规模”转向“交互监督质量”。
CLIP 的历史意义在于,它把视觉分类从“固定标签预测”改写成“自然语言匹配”。这一步打开了后续所有 VLP 与多模态大模型的门:BLIP 继承对比目标并加入生成;BLIP-2 用冻结视觉编码器和 LLM 连接到生成模型;LLaVA 直接采用 CLIP 视觉塔作为多模态对话模型的视觉入口;SigLIP 则优化 CLIP 的底层损失函数。
一句话概括:CLIP 不是最终形态,但它给出了最关键的抽象——视觉模型的类别空间可以由语言动态定义。
参考来源
- Radford, A. et al. "Learning Transferable Visual Models From Natural Language Supervision." ICML 2021. arXiv:2103.00020
- OpenAI CLIP repository: openai/CLIP