TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

对比学习与 CLIP:通过图文配对,学会识别从未见过的事物

状态:草稿 (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개 → N×N 유사도 → 양방향 교차 엔트로피 그림 N장 그림 인코더 벡터 u₁ … u_N 글 N개 글 인코더 벡터 v₁ … v_N 행 = 그림 u₁·v₁ u₂·v₂ u₃·v₃ u₄·v₄ u₁·v₂ u₁·v₃ 열 = 글 v₁ … v₄ 모든 칸 ÷ 온도 τ 작을수록 차이가 날카로워진다 행마다·열마다 소프트맥스, 정답 = 대각선 대각선 N칸은 올리고 나머지 N²−N칸은 내린다 오답 = 같은 배치의 다른 짝
图解:由 N 个图文对构成的 N×N 相似度矩阵与双向交叉熵

训练过程如下:

  1. 抽取 N 个图文对作为一个批次。
  2. 图像编码器(ResNet 或 ViT)将 N 张图片,文本编码器(Transformer)将 N 段文本分别转换为相同维度的向量,并将长度归一化为 1(单位向量)。
  3. 计算所有图像和所有文本的点积,即 余弦相似度,构成一个 N×N 的矩阵。对角线是真正的配对,其余 N²−N 个格子是错误的配对。
  4. 在每一行中解决“挑选对角线格子”的分类问题,在每一列中也解决同样的问题。两个损失的平均值就是最终的损失。

核心在于无需单独收集负样本(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。论文指出这是为了防止训练变得不稳定。

用文字构建分类器

训练结束后,分类过程如下:

  1. 为每个类别名称创建一个句子。与其只放入一个名称,不如将其放入诸如“A photo of a {label}.”的模板(提示词)中,这使得 ImageNet 的准确率提升了 1.3%p。创建 80 个模板并将其向量求平均(提示词集成),准确率又提升了 3.5%p(论文)。
  2. 句子向量就是分类器的权重。与新图像向量最接近的句子就是答案。

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. 局限性

7. 与我们项目的联系

TT 总结。 在没有标准答案的情况下只做了“配对”,却连没见过的内容也能猜对,是不是很神奇?不过,“有几个?”或“是什么时候?”这类问题很难通过配对来学会。那是负责直接数球的我们引擎的事情。

参考文献

登录后即可点赞

评论

还没有评论。

登录后即可发表评论