下面来详细了解一下多模态大模型模态编码器部分。今天首先来看下CLIP,OpenAI发表在2021年ICML上的一篇工作。
项目地址:https://github.com/OpenAI/CLIP
这篇工作的研究动机:在自然语言处理(NLP)领域,通过大规模的文本数据预训练模型(如GPT-3)已经取得了显著的成果,但在计算机视觉领域,预训练模型仍然依赖于人工标注的图像数据集,严重影响了其在未见类别上的泛化性和可用性(需要用额外的有标注数据)。因此其研究动机主要在于探索如何通过对比学习(Contrastive Learning)的方法,使模型能够从大规模的未标注数据中学习到语言和图像之间的对应关系,从而更好地理解和生成多模态内容。
01、方法介绍
传统图像模型联合训练一个图像特征提取器和一个线性分类器来预测一些标签,而CLIP联合训练一个图像编码器和一个文本编码器来预测一批(图像,文本)训练样本的正确配对(模型的核心是从自然语言与图像配对的监督中学习感知)。下面来详细看下CLIP:
图(1)是对提取的文本特征和图像特征进行对比学习。对于一个包含NN个文本-图像对的训练batch,将N个文本特征和
N个图像特征两两组合,CLIP模型会预测出N2个可能的文本-图像对的相似度,这里的相似度直接计算文本特征和图像特征的余弦相似性(cosine similarity),即上图所示的矩阵。这里共有
N个正样本,即真正属于一对的文本和图像(矩阵中的对角线元素),而剩余的N2−N个文本-图像对为负样本,那么CLIP的训练目标就是最大N个正样本的相似度,同时最小化N2−N个负样本的相似度。
图(2)是zero-shot的推理。给定一张图片,如何利用预训练好的网络去做分类呢?这里作者很巧妙地设置了一道“多项选择”。具体来说,给网络一堆分类标签,比如cat, dog, bird,利用文本编码器得到向量表示。然后分别计算这些标签与图片的余弦相似度;最终相似度最高的标签即是预测的分类结果。作者提到,相比于单纯地给定分类标签,给定一个句子的分类效果更好。比如一种句子模板 A photo of a ...,后面填入分类标签。这种句子模板叫做 prompt(提示)。这也很好理解:预训练时模型看到的大多是句子,如果在推理时突然变成单词,效果肯定会下降。作者还说,句子模板的选择很有讲究,还专门讨论了prompt engineering,测试了好多种类的句子模板。提示信息有多种,从图2中可以看到它用不同的类别替换一句话中不同的词,形成不同的标签。推理过程中最关键的一点,有很高的自由度去设置“多项选择题”。从前的分类网络的类别数量是固定的,一般最后一层是跟着 softmax 的全连接层;如果要更改类别数量,就要更换最后一层;并且预测的内容是固定的,不能超过训练集的类别范围。但对于 CLIP 来说,提供给网络的分类标签不仅数量不固定,内容也是自由的。如果提供两个标签,那就是一个二分类问题;如果提供1000个标签,那就是1000分类问题。标签内容可以是常规的分类标签,也可以是一些冷门的分类标签。这是 CLIP 的一大主要贡献——摆脱了事先定好的分类标签。
图2所示的例子解释如下:根据任务的分类标签构建每个类别的描述文本:A photo of {label},然后将这些文本送入Text Encoder得到对应的文本特征,如果类别数目为N,那么将得到
N个文本特征;将要预测的图像送入Image Encoder得到图像特征,然后与N个文本特征计算缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,进一步地,可以将这些相似度看成logits,送入softmax后可以到每个类别的预测概率。
该工作的重点主要包括创建一个足够大的数据集、一种有效的预训练方法、选择和缩放一个模型、预训练等。
数据集方面,对比于自然语言领域的监督训练,最值得借鉴的就是其训练数据规模之大,并且其将互联网上公开的文本数据作为训练数据。对比之下,现有的图片数据集规模远远不够,因此原文作者从互联网上爬下来4亿图片-文本对,来用于实验。以此,能够尽可能的覆盖全各种视觉概念。数据集称为WIT(WebImageText)。
预训练方法上,CLIP采用对比学习。具体来说,CLIP模型将图像和文本映射到同一表示空间,并通过对比不同图像和文本对之间的相似性和差异性进行训练,从而学习到具有良好泛化能力的特征表示。如果是预测一个图像所对应的文本,需要逐字逐句的去预测,非常复杂,效率较低,因为一张图像可能有多种文本描述,如果是使用对比学习的方法,预测一个图像和一个文本是否配对,那任务就简单很多。将预测性目标函数换成对比性目标函数,训练效率提高了四倍。(最初的方法是类似于VirText,以预测图像的标题的方式,去联合训练一个图像的CNN和一个文本的transformer。但是最后发现这种方式效率很低。最终作者的方法是只预测哪段文本整体与哪幅图像配对,而非预测该段文本的确切词语)
模型选择方面,对于image encoder,选择ResNet-50/ViT(二选一)。对于text encoder,选择用Transformer。
损失函数,温度系数τ是设定的超参数,q和k可以表示相似度度量,分子部分表示正例之间的相似度,分母表示正例与负例之间的相似度。因此看出,相同类别相似度越大,不同类别相似度越小,损失就会越小。
02、实验结果
零样本迁移能力
零样本迁移能力方面,CLIP在三个数据集上都获得了远超Visual N-Grams的准确率。
prompt的有效性
作者验证了文本描述时采用prompt的有效性(精度提升1.3%)。简单来说,prompt learning的核心是通过构建合适prompt(提示)来使预训练模型能够直接应用到下游任务中。
推理时,只使用类别标签作为文本描述效果并不够好,原因如下:
1.词语存在歧义性:如果我们直接采用类别标签作为文本描述,那么很多文本就是一个单词,缺少具体的上下文,并不能很好的描述图片内容。比如在做物体检测时,有一个类别是remote(遥控器)。但如果直接喂给文本编码器,很可能被模型认为是遥远的意思。所以 CLIP预训练时,用来描述图片内容的文本是一个句子,比如A photo of {label}。这里的label就只能是名词,一定程度上消除了歧义性。
2. 使推理和预训练时保持一致(消除distribution gap)。
另外,还可以根据不同的数据集来调整这个模板,进而提升zero-shot的性能。例如当数据集是Oxford-IIIT Pets数据集时(类别都是动物),就可以将模板写成:A photo of a {label}, a type of pet.;或者在做OCR任务时,在想找的那个文本或者数字上打上双引号,模型就可能知道你是想找双引号里面的内容。
作者还尝试了集成多个模板的效果,即在多个zero-shot分类器上进行集成,这些分类器使用不同的提示模板来构造不同的文本。由于是在嵌入空间(embedding space)而不是概率空间(probability space)上集成的,因此节约了计算成本。在大多数数据集上,prompt ensembling都能够提升模型性能。最终作者使用了80种模板来进行集成,每种模板使用了不同的形容词,来描述不同的情境。
zero-shot分类效果
为了测试CLIP的zero-shot分类的效果怎么样,作者将在27个数据集上的分类效果做成了对比图,下图就是CLIP与基于ResNet-50做Linear Probe的对比。
绿色 + 表示相比ResNet-50提升了多少,蓝色 - 表示相比ResNet-50降低了多少。最终在27个数据集中,CLIP在16个数据集上都超越了有监督训练好的ResNet-50。
对于普通的物体分类任务,CLIP可以很好的做zero-shot迁移,例如车、食物、CIFAR10等数据集,因为图像中有可以描述出来的物体,那对应的文本中也就有这种描述,因此可以很好的匹配;
但CLIP对于更加复杂或抽象的任务就表现比较弱,例如卫星图像分类、淋巴结肿瘤检测等需要特定领域知识的分类任务,CLIP并没有预训练到这些标签信息。
few-shot分类效果
作者认为,对于特别难的任务,完全不给任何标签信息,有点强人所难了,不是很合理。所以论文还对比few-shot性能,即只用少量的样本来微调模型,这里对比了3个模型:在ImageNet21K上训练的BiT-M (big transfer),是一个很强的baseline;基于SimCLRv2训练的ResNet50;有监督训练的ResNet50。
从结果来看,每类的训练样本只有1个或2个的时候,效果还不如zero-shot CLIP;但当每类的训练样本增加到8个或16个的时候,效果则超越了zero-shot CLIP。这说明对于一些难的数据集来说,有一些训练样本还是非常有必要的。
对于这个结果的解释:CLIP在做Linear Probe的时候,需要扔掉文本编码器部分,接着在图像编码器之后加一层线性分类器,所以分类方式不再是看图像特征与文本特征最相近,而是重新训练一个线性分类器。新加的一层线性分类器是随机初始化的,所以每类有1个标注样本是不够的。这也是为什么一开始性能会比较差,但随着训练样本的增多,模型的分类性能会逐渐提升。
Linear probe CLIP对比
从图中可以看到,在12个数据集上,用ViT结构的CLIP效果最好,用ResNet的效果也比大多数模型要好;在27个数据集上,CLIP的效果吊打其他所有模型。这个结果就证明了CLIP模型的强大。
与现有ImageNet模型在自然分布转移条件下的性能比较
图中所有零样本CLIP模型显著提高了有效鲁棒性,并将ImageNet准确率与分布转移下的准确率之间的差距最多减少了75%。零样本CLIP模型在鲁棒性前沿方面与Taori等人研究过的所有204个先前模型呈现出完全不同的轨迹。这些结果表明,近期向大规模任务和数据集无关预训练的转变,结合重新关注零样本迁移评估,促进了更鲁棒系统的发展,并提供了对真实模型性能更为准确的评估。
与Noisy Student EfficientNet-L2 对比
作者还在27个数据集上可视化了CLIP模型和用伪标签训练的EfficientNet的性能差异(ImageNet上表现最好)。从图中可以看到,CLIP在21个数据集上的性能都超过了EfficientNet,并且很多数据集都是大比分超过。在其余6个表现不如EfficientNet的数据集上,CLIP也只比EfficientNet稍微低一点,差距并不大。
数据重叠分析
CLIP能实现这么好的zero-shot性能,大家很可能质疑CLIP的训练数据集可能包含一些测试数据集中的样例,即所谓的数据泄漏。关于这点,论文也采用一个重复检测器对评测的数据集重合做了检查,发现重合率的中位数为2.2%,而平均值在3.2%,去重前后大部分数据集的性能没有太大的变化,如下所示:
- 左:虽然几个数据集在检测到的重叠和干净示例上的zero-shot准确度有高达±20%的明显差异,但在35个数据集中只有5个具有99.5%的Clopper-Pearson置信区间,排除了0%的准确度差异。其中2个数据集在重叠数据上表现更差。
- 右:由于检测到的重叠示例的百分比几乎总是个位数,因此由于重叠导致的整体测试准确度增益要小得多,Birdsnap的最大增幅仅为0.6%。同样,当使用单边二项式检验计算时,只有6个数据集的准确性提高具有统计学意义。
03、总结
CLIP 的最大贡献在于打破了固定种类标签的桎梏,让下游任务的推理变得更灵活。并且在 zero-shot 的情况下,它的效果很不错。在这篇工作发表之后,涌现出了一大批在其他领域的应用,包括物体检测、物体分割、图像生成、视频动作检索等。在创新度、有效性、影响力方面都非常出色。CLIP 将语言和图像表示合二为一的能力为许多应用打开了大门。虽然我们人类可以感知不同类型的数据,包括文本、数据、音频等。但是过去基于 AI 的模型已经显示出它们只能理解一种模态的弱点。有了 CLIP,也加速了“人工智能”理解世界的能力。