2021-Arxiv-Learning Transferable Visual Models From Natural Language Supervision
1. 简介
这篇文章[1]的主要想法是,对自然语言特征和图像特征进行对比学习,训练得到对应的文本和图像编码器,然后使用预训练好的成对的编码器去做各种各样的下游任务。以图像分类任务为例:
-
在训练阶段,对每个图像的类别按照一种文本范式来构建该图片的描述句子,然后使用一个图像编码器模块和文本编码器模块,分别对图像和文本进行编码得到对应的特征。所有文本特征构成一个文本特征向量,一个 Batch 内的图像特征构成一个图像特征向量,通过计算这两个特征向量间的余弦相似性得到余弦相似矩阵。由于两个向量中的元素是一一对应的,因此在余弦相似矩阵对角线上的图像文本对被看作是正样本,故 Label 就是 ,其中 是矩阵大小,将其与余弦相似矩阵求交叉熵损失即可反传优化图像编码器和文本编码器。
-
在推理阶段,使用需要分类的类别对应的文本句子作为文本编码器的输入,需要分类的图片作为图像编码器的输入,然后计算二者之间的余弦相似度,选出分类概率最大的那个文本句子,然后提取出句子中包含的类别即可。
通过对文本和图像做对比学习的方式,CLIP 实现了 Zero-Shot 的学习方式。CLIP 整体的框架如下图所示:

2. 实验
CLIP 的实验效果很惊艳,CLIP 展示了即使 Zero-Shot 也能做到 SOTA,在 ImageNet 上追平原版的 ResNet-50,并在其它数据集上也取得了很好的效果。

3. 实现
作者在文中给出的伪代码实现如下:
1 |
|
4. 不足
作者大佬还在其文章中认真讨论这 CLIP 的不足:
- 在 Minist 数据集上只有 的分类准确度,而现有的有监督学习随随便便一个小网络都能达到 的准确度,作者发现问题在于预训练的数据集中没有和 Minist 相类似的图像,所以还是得有见过才能有更好的效果;
- 虽然这篇文章主要是强调作 Zero-Shot 的,但作者在文中也做了 Few-Shot 的相关实验。他们使用了 Linear Probe 的方法来 Few-Shot。具体是冻结预训练好的文本和图像编码模型,只训练一个分类头。发现如果只是 One-Shot 或者 Two-Shot,性能不升反降,这其实是有问题的。
- CLIP 这篇文章的想法其实 2017 年就有论文提出,只是那个时候受限于模型的表征能力和数据集的大小,导致性能很差。现在模型的表征能力和数据集大小(本文作者从网上爬取了 亿对图像文本对作为数据集)都上来了,因此才展现出了这种想法强大的性能。但训练这样大的数据集并不是所有组织能承受得起的,因此未来还需要探究更好的 Zero-Shot 的方法。
附录
- Radford, A., Kim, J.W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., Sastry, G., Askell, A., Mishkin, P., Clark, J., Krueger, G., & Sutskever, I. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML. ↩
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!