CLIP – Learning Transferable Visual Models From Natural Language Supervision

核心速览

这篇 Paper 的核心目标是解决传统计算机视觉系统在学习固定、预定义对象类别时通用性和可用性受限的问题。论文提出了一种利用自然语言进行监督学习的新范式,以期实现更高效、可扩展的图像表示学习。

具体来说,这篇论文是多模态领域下 视觉 – 语言领域的代表作,严格意义上属于 弱监督/自监督 学习范畴。它提出了一种通过“预测哪个文本描述与哪个图像配对”的简单预训练任务,从大量的(图像,文本)对中学习可迁移的图像表示的方法(CLIP)。其主旨是证明通过自然语言监督,可以从零开始学习到强大的、能够进行零样本迁移的视觉模型,从而无需针对每个下游任务进行额外的标注数据训练。

它尝试解决了以下问题:

  • 传统计算机视觉系统依赖于固定、预定义的对象类别标注数据,限制了模型的通用性和可用性。
  • 为新视觉概念或下游任务指定标注数据成本高昂。
  • 如何有效地利用互联网上大规模的图像-文本对作为监督信号,来学习更通用的视觉表示。

而提出的模型架构亮点在于:

  • 高效且可扩展的预训练任务: 采用对比学习的方式,通过预测图像-文本对的匹配关系来学习,这种方法被证明比传统的词袋预测模型效率高4倍,比 Transformer 语言模型效率高12倍。
  • 大规模数据的使用: 构建了一个包含4亿(图像,文本)对的新数据集(WIT),充分利用了网络上丰富的自然语言监督信息。
  • 强大的零样本迁移能力: 经过预训练后,模型可以通过自然语言描述直接应用于各种下游任务,无需任何任务特定的训练数据,在30多个计算机视觉数据集上表现出色,甚至在ImageNet零样本分类中达到了与原始ResNet-50完全监督模型相当的准确率。
  • 更高的鲁棒性: 零样本CLIP模型对自然分布偏移表现出更高的鲁棒性,相比于同样准确率的ImageNet监督模型,能够显著缩小性能差距。
  • 可扩展性: 通过训练一系列不同规模的模型,证明了模型的迁移性能是计算量的平滑可预测函数。

架构理解

CLIP Architecture – 图源:论文 Figure1

CLIP(Contrastive Language-Image Pre-training)的核心架构由两个主要组件构成:一个图像编码器(Image Encoder)和一个文本编码器(Text Encoder), Paper 中相对应的论述在 2.4 节。

图像编码器

图像编码器的作用是将输入图片转化为固定维度的向量表示,也就是图像嵌入。在实现上,论文采用了两种不同的架构:

  • ResNet-50及其变体: 使用了ResNet-D改进和抗锯齿rect-2模糊池化,并将全局平均池化层替换为自注意力池化机制。
  • Vision Transformer (ViT): 紧密遵循了ViT的实现,仅做了少量修改,例如在Transformer之前添加额外的层归一化。

文本编码器

文本编码器的作用同样是将输入转化为固定维度的向量表示,不过此时嵌入的对象是文本。

在这里文章的架构是 Transformer(Vaswani et al. 2017),并采用 Radford et al. (2019)中描述的架构进行修改,论文在这详细给出了编码器的细节:

As a base size we use a 63M-parameter 12-layer 512-wide model with 8 attention heads. The transformer operates on a lower-cased byte pair encoding (BPE) representation of the text with a 49,152 vocab size . For computational efficiency, the max sequence length was capped at 76. The text sequence is bracketed with [SOS] and [EOS] tokens and the activations of the highest layer of the transformer at the [EOS] token are treated as the feature representation of the text which is layer normalized and then linearly projected into the multi-modal embedding space. 

也就是

  • 63M参数,12层,512宽,8个注意力头。
  • 小写字节对编码(BPE)表示的文本,词汇量为49,152。
  • 最大序列长度限制为76。
  • 将序列首尾标记[SOS][EOS][EOS]标记处 Transformer 最高层的激活作为文本的特征表示,然后进行层归一化并通过线性投影到多模态嵌入空间。
  • 使用 Masked Self-Attention 以保留未来可能使用预训练语言模型或作为辅助目标的灵活性。
  • 输出:一个L2归一化的文本特征嵌入。

通过图像编码器和文本编码器,CLIP 的目标是学习一个联合多模态嵌入空间,使得匹配的(图像,文本)对具有高余弦相似度,而不匹配的对具有低余弦相似度。(也就是上图右侧的那个向量)。这一过程是使用对称交叉熵损失(symmetric cross-entropy loss)进行实现的。给定一个包含N个(图像,文本)对的批次,模型旨在预测 $N\times N$ 个可能的配对中哪些是真实发生匹配的。具体来说,通过最大化批次中 $N$ 个真实图像-文本对的余弦相似度,同时最小化 $N^2 – N$ 个不正确配对的余弦相似度来训练

架构梳理完就会发现 CLIP 的逻辑非常清晰,它遵循的是

自监督 $\longrightarrow$ 预训练 $\longrightarrow$ 零样本迁移

三部曲,并且分别做出了特定的优化和处理

  • 自监督这块 CLIP 抛弃了传统的人工标注数据后训练这种成本高昂的理念,而是依赖互联网,直接从与图像配对的原始文本中学习视觉概念。这能有效降本同时实现灵活的样本迁移,并且在数据集基本有效的情况下可以有效增强模型的鲁棒性(因为未经标注的数据中错位比例会有所上升)
  • 预训练这块 CLIP 放宽了代理任务,它不是预测图像的精确文本描述,而是判断图像和文本是否属于同一个语义对。这相当于将预测目标更替为对比分类,使模型学习更为高效
  • 零样本迁移时 CLIP 则会利用已学习的文本编码器,通过编码目标数据集的类名或描述来合成一个零样本线性分类器。具体做法是将图像嵌入与所有候选类别的文本嵌入计算余弦相似度,并转换为概率,并选择概率最高的类别作为预测结果。这使得 CLIP 通过其预训练任务,学习了广泛的视觉概念,包括OCR、地理定位、动作识别等,使其在许多未见的下游任务中具有强大的泛化能力。

其实梳理完整个架构流程,我觉得 CLIP 真正想表述的是多模态领域一个很核心的思想——

我们如何将单一模态的不同数据统一到跨模态的嵌入空间。

统一了表示才能进行比较或者学习,才能进行其他有意义的操作。CLIP 在这给出的是 图像 – 文本的解决方案,但在思想上同样可以推广到任意多的模态上。

统一表示的数学机制

我们知道常见 DL 模型中 CNN 通常以 MaxPool/AverPool 表示特征,RNN 对文本操作时通过历史状态决定下一输出,Transformer则是 Q – K 的余弦相似度来加权 V 矩阵,而在不同结构进行融合拼接时如何对不同模型的输出进行统一,是一个很有趣的思考方向。

CLIP 给出了它的答案 – 结构解耦(Decoupled Architecture),即图像和文本分别由独立的编码器进行处理。

图像编码器(Image Encoder): 输入一张图片 $I$,输出一个固定维度的图像特征向量 $f_I \in \mathbb{R}^{d_i}$。

无论是基于ResNet还是Vision Transformer,其最终的输出都是一个全局的、高维度的特征向量。ResNet通常通过全局平均池化(此处是改良的注意力池化)将卷积层输出的特征图汇总成一个向量。ViT则通常取[CLS] token的输出作为整个图片的表示。

文本编码器(Text Encoder): 输入一段文本 $T$,输出一个固定维度的文本特征向量 $f_T \in \mathbb{R}^{d_t}$。

Transformer文本编码器在处理完整个文本序列后,通常取[EOS] (End-Of-Sequence) token对应的Transformer输出作为整个文本序列的表示,或者简单地对所有token的输出进行平均池化。

关键在于,这些中间过程(MaxPool、RNN状态、Q-K-V)都是各自模态内部的特征提取机制。CLIP并不要求它们在内部操作上完全一致,而是关注它们最终输出的特征向量。

显而易见的是独立的图像特征向量 $f_I \in \mathbb{R}^{d_i}$ 和文本特征向量 $f_T \in \mathbb{R}^{d_t}$ 往往具有不同的维度 ($d_i \neq d_t$)。为了将它们映射到同一个多模态嵌入空间,CLIP引入了可学习的线性投影矩阵:

  • 图像投影矩阵: $W_i \in \mathbb{R}^{d_i \times d_e}$
  • 文本投影矩阵: $W_t \in \mathbb{R}^{d_t \times d_e}$

通过矩阵乘法,将原始模态特征投影到共同的嵌入维度 $d_e$ 上:

  • 图像嵌入:$\mathbf{v}_I = f_I W_i \in \mathbb{R}^{d_e}$
  • 文本嵌入:$\mathbf{v}_T = f_T W_t \in \mathbb{R}^{d_e}$

这里的 $\mathbf{v}_I$ 和 $\mathbf{v}_T$ 就是在统一嵌入空间中的表示。论文中提到他们简化了这一步,只使用了线性投影,而没有像一些对比学习方法那样使用非线性投影(如多层感知机)。

而在获得线性投影之后,计算相似度之前, CLIP 还会对两个嵌入进行 L2 归一化。

这一步在数学上的作用是:

  • 聚焦方向,而非大小: 余弦相似度衡量的是两个向量方向上的相似性,归一化消除了向量长度对相似度计算的影响,使得模型更多地关注向量所代表的语义方向。
  • 限定相似度范围: 归一化后,任意两个向量的余弦相似度都在 $[-1, 1]$ 之间,避免了数值溢出问题,也有助于稳定训练。

那么经过一系列变换后,CLIP 成功统一了图像和文本的表示,从而实现跨模态的理解和交互。

果然还是线性代数么…

以上

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注