如果你最近涉足过计算机视觉或多模态 AI 领域,那你无疑已经接触过 CLIP (Contrastive Language-Image Pre-training,对比语言-图像预训练) 。自 OpenAI 发布以来,CLIP 已成为现代 AI 图像系统的骨干。它为零样本分类、图像检索提供动力,并充当许多生成流程的“眼睛”。

但 CLIP 有一个不为人知的弱点。

虽然它非常擅长识别物体 (知道图像中包含“狗”和“沙发”) ,但它在理解它们之间的关系方面却出奇地差。如果你给 CLIP 看一张狗坐在沙发上的照片,并要求它区分“沙发的狗 (a dog on a couch) ”和“狗上的沙发 (a couch on a dog) ”,它通常只能随机猜测。这种现象表现得就像一个“词袋 (bag-of-words) ”模型——它检查单词是否存在,却忽略了赋予句子特定含义的句法和空间结构。

在这篇文章中,我们将深入探讨一篇引人入胜的论文: “Distilling Knowledge from Text-to-Image Generative Models Improves Visio-Linguistic Reasoning in CLIP” (从文本到图像生成模型中蒸馏知识以提升 CLIP 的视觉语言推理能力)

研究人员提出了一个巧妙的解决方案: SDS-CLIP 。 他们提取了像 Stable Diffusion 这样的生成模型内部锁定的丰富结构理解能力,并将其“蒸馏”到轻量级、快速的 CLIP 架构中。结果如何?一个既保留了 CLIP 的速度,又获得了显著推理能力的模型。

让我们来详细分解它是如何工作的,背后的数学原理,以及为什么这很重要。


背景: 对比模型的盲点

要理解解决方案,我们首先需要理解问题所在。CLIP 使用对比目标函数 (contrastive objective) 进行训练。它将图像的向量嵌入 (embedding) 拉近其对应文本标题的嵌入,同时推开不正确的标题。

在数学上,标准的 CLIP 损失函数如下所示:

标准的 CLIP 损失函数结合了图像到文本和文本到图像的对比损失。

在这里,\(L_{image-text}\) 和 \(L_{text-image}\) 是通过嵌入相似度分数的 softmax 函数计算得出的:

CLIP 对比损失的详细公式,显示了正样本对和负样本对的求和。

这种训练方法对于学习通用语义非常棒。然而,它鼓励模型寻找“捷径”。为了最小化这种损失,CLIP 只需要知道文本中出现了“狗”和“沙发”这两个词,并且图像中出现了相应的物体即可。它并不一定需要学习它们彼此相对位置在哪里。

生成式替代方案

在光谱的另一端,我们有像 Stable Diffusion 这样的文本到图像生成模型。因为这些模型必须根据提示词从头开始生成像素,它们必须理解构图。如果不理解谁在谁上面,你就无法生成一张令人信服的“宇航员骑马”的图像。

最近的研究表明,你实际上可以将 Stable Diffusion 用作分类器。通过测量“去噪分数 (denoising score) ” (即模型认为图像与文本提示的匹配程度) ,Stable Diffusion 在像 Winoground 这样的高难度推理基准上达到了最先进的性能。

Winoground 是一个专门设计用来欺骗 CLIP 等模型的数据集。它包含成对的图像和标题,使用完全相同的单词但顺序不同 (例如,“水倒入杯子”与“杯子倒入水”) 。

权衡取舍

那么,为什么我们不直接用 Stable Diffusion 来做所有事情呢? 速度。

使用扩散模型计算分类分数需要反复运行庞大的 U-Net,通常需要几十次。正如下面的图表所示,虽然“Diffusion Score” (橙色星星) 在 Winoground 上实现了高准确率,但它慢得令人难以忍受——比 CLIP 慢了近 18 倍。

一张对比 Winoground 分数与时间的散点图。CLIP 变体聚集在左下角 (速度快但分数较低) ,而 Diffusion Score 在右上角 (分数高但非常慢) 。

这篇论文的目标就是到达这张图的左上角: 高推理准确率 (像 Diffusion) 和高速度 (像 CLIP) 。


核心方法: SDS-CLIP

研究人员介绍了 SDS-CLIP (用于 CLIP 的分数蒸馏采样) 。直觉很简单: 将 Stable Diffusion 视为“老师”,将 CLIP 视为“学生”。我们要对 CLIP 进行微调,使其嵌入与 Stable Diffusion 对图像的“认知”保持一致,而无需在推理时实际运行沉重的扩散模型。

为此,他们采用了一种称为分数蒸馏采样 (Score Distillation Sampling, SDS) 的技术,该技术最初因从 2D 扩散模型生成 3D 物体 (如 DreamFusion 论文) 而闻名。

第一步: 扩散分数

首先,让我们看看扩散模型如何衡量图像 \(x\) 和标题 \(c\) 之间的拟合度。这被称为去噪扩散分数 , 记为 \(d(x, c)\)。它衡量了预测噪声与添加到图像中的实际噪声之间的误差:

定义去噪扩散分数的公式,即预测噪声与实际噪声之间差值的平方期望。

在这个公式中:

  • \(\epsilon_{\theta}\) 是 U-Net (噪声预测器) 。
  • \(v_{\alpha}(x)\) 是将图像转换为潜在空间的编码器 (如 VQ-VAE) 。
  • \(t\) 是时间步长 (添加了多少噪声) 。
  • \(\epsilon\) 是实际的高斯噪声。

如果我们直接使用扩散模型进行分类,我们会选择最小化此误差的标题 \(c^*\):

显示如何通过最小化扩散分数来选择最佳标题的公式。

第二步: 连接 CLIP 与老师

研究人员希望 CLIP 学习这个分数。但是 CLIP 的图像编码器 (\(f_{\phi}\)) 输出的是一个一维向量 (分类 token) ,而 Stable Diffusion 的 U-Net 期望的是一个空间特征图 (通常是 \(4 \times 64 \times 64\)) 。

为了弥补这一差距,他们引入了一个简单的线性映射 \(h_w\),将 CLIP 嵌入投影到 Stable Diffusion U-Net 的输入空间。

第三步: 蒸馏损失 (\(L_{SDS}\))

这是关键的创新点。他们不仅仅使用标准的对比损失在图像-文本对上训练 CLIP,而是添加了一个新的正则化项。如果 CLIP 的嵌入 (投影到 U-Net 中时) 导致扩散模型中的误差很高,这个项就会惩罚 CLIP。

换句话说,CLIP 被更新以最小化 Stable Diffusion 的噪声预测误差。这迫使 CLIP 关注 Stable Diffusion 所关心的特征——即结构和构图。

SDS 损失定义为:

SDS 损失公式,看起来与扩散分数类似,但使用映射后的 CLIP 特征作为 U-Net 的输入。

注意,U-Net \(\epsilon_{\theta}\) 的输入现在是 \(h_w(f_{\phi}(x))\)——即投影后的 CLIP 嵌入——而不是标准的图像潜变量。

第四步: 组合目标函数

最终的训练目标将原始的 CLIP 对比损失 (用于保持通用语义知识) 与新的 SDS 损失 (用于注入组合推理能力) 结合起来:

总损失函数是 CLIP 损失和加权 SDS 损失的总和。

在这里,\(\lambda\) 是平衡这两个目标的超参数。

优化过程寻找 CLIP 图像编码器 (\(\phi\))、文本编码器 (\(\gamma\)) 和线性映射 (\(w\)) 的最佳参数。至关重要的是, U-Net 参数 (\(\theta\)) 是冻结的 。 我们只使用 U-Net 来计算梯度以更新 CLIP。

显示在保持 U-Net 冻结的情况下,针对 CLIP 参数最小化总损失的公式。

效率说明

训练整个 CLIP 模型是昂贵的。为了提高效率,作者并没有微调整个 CLIP。相反,他们只更新 LayerNorm 参数和新的线性映射。这只涉及总参数的一小部分 (仅约 800 万) ,使得该过程计算成本低廉,并且不太容易在用于微调的小型数据集 (MS-COCO) 上过拟合。


实验与结果

借用生成模型的“大脑”真的有效吗?结果表明答案是肯定的。

1. Winoground 上的表现

这项研究的主要基准是 Winoground,这是视觉-语言推理的“终极挑战”。

表 1: SDS-CLIP 将各种 CLIP 主干网络在 Winoground 上的表现提高了 1.5% 到 7%。

查看上面的 表 1 , 我们可以看到:

  • ViT-B/16 (CLIP): 基线分数为 0.24。
  • FT with \(L_{CLIP}\): 如果仅使用标准损失在 MS-COCO 数据集上微调 CLIP,分数实际上降到了 0.23。这证明仅仅看更多的数据是不够的;模型学习的方式很重要。
  • FT with \(L_{CLIP} + L_{SDS}\) (Ours): 当使用 SDS 蒸馏时,分数跃升至 0.31

这是一个巨大的相对提升 (高达 7% 的绝对增益) 。模型在“物体 (Object) ”和“关系 (Relation) ”类别上有显著改进,这意味着它终于开始理解什么什么在进行交互。

2. ARO 上的表现

他们还在 ARO 数据集上进行了测试,该数据集检查属性绑定 (例如,“红色立方体,蓝色球体”与“蓝色立方体,红色球体”) 。SDS-CLIP 在这里也显示了 1-3% 的改进。有趣的是,该方法对简单的文本排序任务帮助不大,这表明虽然视觉推理得到了改善,但文本编码器的语法理解能力仍然是一个限制因素。

3. 零样本能力

微调像 CLIP 这样的基础模型的一个主要风险是“灾难性遗忘”。你可能会教它更好地理解复杂的句子,但它可能会失去识别普通“金鱼”或“飞机”的能力。

为了检查这一点,作者在标准分类基准 (ImageNet, CIFAR 等) 上评估了 SDS-CLIP。

图 2: 雷达图显示 SDS-CLIP (红色) 在下游数据集上的表现与标准 CLIP (蓝色) 的零样本性能持平或超越。

图 2 所示,红线 (Ours) 几乎与蓝线 (Baseline CLIP) 完全重叠或延伸超出。

  • 对于 ViT-B/16 (图表 a) ,他们实际上观察到在 MNIST 和 ImageNet 等数据集上有 1-8% 的提升
  • 对于更大的模型,性能保持稳定。

这证实了 SDS-CLIP 是一个严格的升级: 在不牺牲通用知识的情况下获得了更好的推理能力。


结论与关键要点

论文 “Distilling Knowledge from Text-to-Image Generative Models Improves Visio-Linguistic Reasoning in CLIP” 凸显了 AI 领域的一个增长趋势: 生成模型和判别模型的融合。

以下是给学生和开发者的主要收获:

  1. 生成模型懂更多: 训练用于创造图像的模型 (如 Stable Diffusion) 学习到了对比模型 (如 CLIP) 通常忽略的结构和空间关系。
  2. 蒸馏很强大: 我们并不总是需要部署庞大的生成模型。我们可以用它作为老师来改进更小、更快的模型。
  3. 目标函数很重要: 仅仅在更好的数据 (MS-COCO) 上微调并没有修复 CLIP 的推理问题。改变损失函数以包含 SDS 项才是解锁改进的关键。
  4. 参数效率: 你可以通过仅训练网络的一小部分 (LayerNorms) 来获得显著的收益,从而保留原始模型的预训练“肌肉记忆”。

SDS-CLIP 代表了迈向多模态模型的一个有希望的步骤,这些模型不仅能识别关键词,还能真正“看见”并“理解”场景,同时保持现实世界应用所需的速度。