CLIP 精读

来源:duangxin/LLM-learing week3/week3_log.md

Learning Transferable Visual Models From Natural Language Supervision

CLIP | Radford et al., 2021 | 【精读】

阅读重点

  • CLIP 通过大规模图文对比学习,把图像和文本映射到统一表示空间。
  • 重点理解:双塔结构、对比学习目标、zero-shot 泛化能力。
  • 读完 CLIP 后可以略读 SigLIP,因为主流 MLLM 的视觉编码器已经逐渐从 CLIP 演进到 SigLIP 等路线。

笔记

  1. CLIP 的输入是图像和文本对,输出是它们在共享空间中的相似度。图像编码器和文本编码器分别得到向量表示,再计算相似度来判断是否匹配。
  2. 对比学习的目标是拉近正样本、推远负样本。对于一个 batch 里的 n 对图文对,正确图文对有 n 个,错误图文对有 $n^2-n$ 个。CLIP 用 softmax 和交叉熵让正确图文对的概率最大。
  3. 余弦相似度用于衡量两个向量方向是否相近,公式是 $\text{Cosine Similarity} = \frac{A \cdot B}{|A| |B|}$。结果越接近 1,表示两个向量越相似。
  4. CLIP 的预训练数据来自互联网收集的 4 亿对图文对,规模非常大。它在很多 benchmark 上表现出很强的 zero-shot 能力,但也需要警惕:预训练数据里可能包含测试集或相似图文对,这会让 zero-shot 的神奇程度打折。
  5. CLIP 和传统图像分类模型的区别是:传统模型通常只会把图片映射到训练集中已有类别,CLIP 学的是视觉概念和语言概念之间的关系。所以见到训练集中没有的新词时,它可以把词语拆解组合来推理。
  6. CLIP 使用 prompt engineering,例如在类别名前加 “a photo of a”,让文本输入更接近自然图文描述,从而提升 zero-shot 泛化。
  7. CLIP 的局限在于,它仍然很难理解深层概念,比如图片中的人是否安全、行为是否危险。继续扩大数据集未必总是现实,后续 SigLIP 通过改进损失函数等方式继续优化。
  8. SigLIP 把 CLIP 中的 softmax 损失改为 sigmoid 损失。CLIP 的 n×n 矩阵更像多分类,SigLIP 则把每个图文对判断为独立二分类,从而简化分布式训练中的损失计算。