状态:草稿 (2026-10-13)。 论文中的数值是通过打开原文(arXiv)并结合条件确认的值。亲自实践的仅限在笔记本电脑 CPU 上运行的玩具示例(代码
code/01_infonce.py), 尚无将 CLIP 应用于乒乓球视频的实际测量(未实测)。 系列:「阅读视觉模型 2:自监督·动作·人类·体育」第 1 篇。卷积·ViT·检测·SAM 等基础内容请参考姐妹系列 阅读视觉模型 1。
目录
1. 直觉:以配对代替标准答案表
普通的图像分类器是通过人工设定的标签列表来学习的,例如“这张照片是猫”。列表里没有的东西永远无法回答。如果输出栏有 1,000 个,那么模型内部就没有第 1,001 个概念的位置。
CLIP(Contrastive Language–Image Pre-training)改变了问题。它问的不是**“这张图的标签是什么?”**而是**“这幅图和哪个文本是一对?”**。互联网上经常有图片与其说明文字(图注、替代文本)同时出现。配对是免费产生的,概念的数量上限也是无限的。
只要把配对做好,分类就会顺理成章地实现。准备三句话:“乒乓球拍照片”、“乒乓球照片”、“乒乓球桌照片”,然后看看新图片和这三句话中的哪一句最接近即可。即使在训练时从未指定过“乒乓球拍”这个标签。这被称为 零样本(zero-shot)分类。意思是零样本学习并进行求解。
2. 图解:一个批次就是一本练习册
训练过程如下:
- 抽取 N 个图文对作为一个批次。
- 图像编码器(ResNet 或 ViT)将 N 张图片,文本编码器(Transformer)将 N 段文本分别转换为相同维度的向量,并将长度归一化为 1(单位向量)。
- 计算所有图像和所有文本的点积,即 余弦相似度,构成一个 N×N 的矩阵。对角线是真正的配对,其余 N²−N 个格子是错误的配对。
- 在每一行中解决“挑选对角线格子”的分类问题,在每一列中也解决同样的问题。两个损失的平均值就是最终的损失。
核心在于无需单独收集负样本(negative)。 同一批次中的其他配对就是负样本。批次越大,一次性比较的负样本就越多。CLIP 将批次大小设为了 32,768(论文)。
3. 如何训练:InfoNCE
损失公式
设图像 i 的向量为 uᵢ,文本 j 的向量为 vⱼ,温度为 τ,则图像侧的损失如下。
L_그림 = −(1/N) Σᵢ log [ exp(uᵢ·vᵢ / τ) / Σⱼ exp(uᵢ·vⱼ / τ) ]
L_글 = 같은 식을 열 방향으로
L = (L_그림 + L_글) / 2
括号内是 Softmax 概率。模型的训练目标是使正确格子的概率接近 1,即提高真实配对的相似度并降低错误配对的相似度。这种形式的损失被称为 InfoNCE 。该名称源自 2018 年的 CPC(Contrastive Predictive Coding)论文。该论文表明,减小该损失会提高两者之间互信息(mutual information)的下界。下界呈 log N − L 的形式, 负样本数 N 越大,下界就越坚固(论文)。这就是偏爱大批次的理论原因。
温度参数 τ
τ 是在将相似度输入 Softmax 之前对其进行除法运算的数值。如果 τ 较小,即使微小的相似度差异也会在概率中被显著放大(尖锐);如果较大,则会被模糊化。CLIP 将 τ 设为可学习的参数,从相当于 0.07 的值开始。并将逻辑斯蒂缩放比例(1/τ)截断,使其不超过 100。论文指出这是为了防止训练变得不稳定。
用文字构建分类器
训练结束后,分类过程如下:
- 为每个类别名称创建一个句子。与其只放入一个名称,不如将其放入诸如“A photo of a {label}.”的模板(提示词)中,这使得 ImageNet 的准确率提升了 1.3%p。创建 80 个模板并将其向量求平均(提示词集成),准确率又提升了 3.5%p(论文)。
- 句子向量就是分类器的权重。与新图像向量最接近的句子就是答案。
4. 动手实践
code/01_infonce.py 在笔记本电脑 CPU 上运行了(numpy + PyTorch,耗时 20 秒左右)。数值即为其输出结果(code/01_infonce.out.txt).
手动计算 InfoNCE
)构建了 4 个配对的余弦相似度矩阵,仅改变温度来测量损失。
logits = img @ txt.T / tau # (N, N), 대각선이 정답 짝
loss = (ce(logits) + ce(logits.T)) / 2 # ce = 행마다 소프트맥스 교차 엔트로피(정답 = 대각선)
[[ 0.647 0.225 0.487 0.103]
[ 0.333 0.459 0.425 0.286]
[-0.255 0.302 0.445 0.267]
[-0.383 -0.043 -0.318 0.351]]
τ=1.0 InfoNCE=1.1515 (무작위로 고르면 log N = 1.386)
τ=0.1 InfoNCE=0.4468
τ=0.07 InfoNCE=0.3604
τ=0.01 InfoNCE=0.5304
当 τ=1 时,0.65 和 0.49 的差异在概率中几乎无法体现,损失与随机选择的值(log 4 = 1.386)没有什么区别。降低 τ 时损失会减少,但在 0.01 时又会上升。观察第三列,与第一张图的相似度(0.487)比正确答案(0.445)还要大。当温度极低时,它会对这种“错误格子”进行严厉的惩罚。这是一个直观展示为什么不将 τ 设为固定值而是让其参与训练的原因的例子。
玩具 CLIP:识别从未见过的概念
构建了一个由 20 个概念组成的虚构世界。每个概念都有一个隐藏的向量,“图像”是通过对该向量进行非线性变换得到的 64 维向量,“文本”是通过另一种非线性变换得到的 40 维向量(包含噪声)。对两个编码器(小型 MLP) 仅使用概念 0–14 的配对 进行对比学习,概念 15–19 在训练中被完全排除。在测试时,将每个概念的 10 个“文本”编码并求平均作为提示词使用。
장난감 CLIP(배치 64, 600걸음) — 학습한 τ = 0.0756
본 개념 15개 안에서 제로샷 정확도 : 0.973 (무작위 0.067)
처음 보는 개념 5개 제로샷 정확도 : 0.855 (무작위 0.200)
지도 분류기(라벨 15개): 본 개념 정확도 0.973, 처음 보는 개념은 출력 칸이 없어 답할 수 없음
如果用相同的数据训练一个包含 15 个标签的分类器,在已知概念上的准确率同样为 0.973,但对于新概念则没有输出位置。而采用对比学习的一方,即使是初次见面的概念也能准确识别 85.5%。由于学会了将图文置于 相同的空间中,只要有新概念的文本,就能找到其对应位置。
我们调整了旋钮,看看是什么赋予了这种能力(3 个随机种子的平均值)。
| 条件 | 初次见面的 5 个概念的准确率 |
|---|---|
| 用于训练的 3 个概念 | 0.485 |
| 用于训练的 7 个概念 | 0.767 |
| 用于训练的 15 个概念 | 0.875 |
| 15 个概念,固定 τ=1 | 0.799 |
| 15 个概念,批次大小 4 | 0.839 |
| 15 个概念,批次大小 256 | 0.818 |
最大的旋钮是 用于训练的概念的多样性。如果只用 3 个概念进行学习,新概念的准确率会跌至一半以下。将温度固定为 1 会带来 7%p 左右的损失。另一方面,在这个玩具模型中批次大小的效果并不明显。推测是因为概念只有 15 个,如果批次太大,相同的概念就会多次进入,这些格子会被当作“实际上是正确答案却被当作错误答案处理”的假负样本。在拥有 4 亿个不同配对的实际 CLIP 中情况则有所不同。不能将这个结果直接照搬到实际规模中。
5. 论文数值
均来自 CLIP 论文(Radford et al. 2021)的值。
| 项目 | 值 | 条件 |
|---|---|---|
| 训练数据 | 4 亿个图文对 (WIT) | 从互联网通过 50 万个搜索词收集 |
| 批次大小·训练长度 | 32,768 · 32 轮(epochs) | 所有模型从头开始训练 |
| 计算量 | 数据中心级 GPU 592张 × 18天(RN50x64), 256张 × 12天(ViT-L/14) | 论文报告 |
| ImageNet 零样本 top-1 | 76.2% | ViT-L/14@336px。在完全不使用 128 万张标签的情况下,达到了与原始 ResNet-50 监督学习相同的水平 |
| 分布发生变化的测试 | ImageNet-V2 70.1, -R 88.9, ObjectNet 72.3, -Sketch 60.2, -A 77.2 | 相同的零样本模型 |
| 训练目标比较 | 生成图注的 Transformer 的学习速度比词袋预测慢 3 倍,如果将词袋的“预测”改为“对比”,效率则能提高 4 倍 | 基于 ImageNet 零样本准确率提升速度的标准 |
最后一行是本文的要点。 与其让模型生成完整的句子,不如让其挑选正确的配对,这样学习成本要低得多。 逐个词去猜文本是很困难的(描述同一张图片的句子有无数种),而挑选配对既比这更简单,又能让模型学会图片的含义。
替换为 Sigmoid 的 SigLIP
SigLIP(Zhai et al. 2023)抛弃了行/列 Softmax,对矩阵的 每个格子进行独立的二元分类(配对为 1,否则为 0),并应用 Sigmoid。由于不需要在整个批次上进行归一化,因此无需在各个设备之间收集完整的相似度矩阵。由于负样本格子占据压倒性多数,为了防止一开始就偏向“全为 0”,作者将偏置(bias)设为 −10,并将缩放比例从 10 开始(论文)。
| 项目 | 值(论文) |
|---|---|
| 冻结公开的图像编码器,仅训练文本侧 (SigLiT g/14) | ImageNet 零样本 84.5%,使用 4 个 TPU 芯片训练 2 天,批次大小 20k |
| 批次大小 | Sigmoid 和 Softmax 都在约 32k 左右饱和。在较小的批次中,Sigmoid 明显更好 |
“批次越大越好”这一传统观念在 32k 附近停滞不前的观察结果,与上述玩具实验中未观察到批次效果的结论在本质上是一致的。
6. 局限性
- 不擅长计数和精细区分。 CLIP 论文承认自己在物体数量计数、车型、花卉品种、飞机型号等精细分类以及手写数字(MNIST,零样本 88%)方面较弱。MNIST 的表现甚至低于仅对像素运行逻辑回归的基准线(论文)。
- 无法学习文本未涉及的内容。 互联网图注只会写“打乒乓球的人”,而不会写“球在落向接球方球台前的倒数第二帧”。时间和顺序等无法用文字很好描述的信息是这种方法的盲区(将在第 12 篇中再次探讨)。
- 全盘继承了数据的偏差。 由于是从网络收集的配对,因此难免带有网络的偏见。
7. 与我们项目的联系
- 以文本驱动的分割与检测的根基。 通过“乒乓球桌”这样的文字来查找乒乓球桌的开放词汇检测与分割(如 SAM 3 等)正是建立在将图文置于相同空间的这一理念之上。其结构请参考姐妹系列 阅读视觉模型 1关于 SAM 与开放词汇检测的部分,我们在乒乓球台上使用的方法将在 TT Score 模型剖析第 3 篇中讨论。
- 视听语言模型的眼睛。 第 12 篇将讨论的 LLaVA 系列将冻结的 CLIP 图像编码器连接到语言模型。这双眼睛在“计数”和“精细时间”上的弱点,是其不擅长体育判罚的部分原因。
- 不直接使用的原因。 TT Score 的判罚全都是“第几次、哪一边、什么时候”,正好踩中了 CLIP 的弱项。因此我们没有把它放入评分引擎,也从未在乒乓球场景中测试过 CLIP 零样本(未实测)。
TT 总结。 在没有标准答案的情况下只做了“配对”,却连没见过的内容也能猜对,是不是很神奇?不过,“有几个?”或“是什么时候?”这类问题很难通过配对来学会。那是负责直接数球的我们引擎的事情。
参考文献
- Radford et al., Learning Transferable Visual Models From Natural Language Supervision, ICML 2021. https://arxiv.org/abs/2103.00020
- van den Oord et al., Representation Learning with Contrastive Predictive Coding, arXiv 2018. https://arxiv.org/abs/1807.03748
- Zhai et al., Sigmoid Loss for Language Image Pre-Training(SigLIP), ICCV 2023. https://arxiv.org/abs/2303.15343
- 示例代码与输出:位于本系列文件夹中的
code/01_infonce.py,code/01_infonce.out.txt