文献基本信息
- 标题:Learning Transferable Visual Models From Natural Language Supervision
- 作者:Alec Radford、Jong Wook Kim、Chris Hallacy、Aditya Ramesh、Gabriel Goh、Sandhini Agarwal、Girish Sastry、Amanda Askell、Pamela Mishkin、Jack Clark、Gretchen Krueger、Ilya Sutskever
- 单位:OpenAI
- 会议/期刊:ICML
- 发表时间:2021年2月26日
- 代码:https://github.com/OpenAI/CLIP
背景与意义
相关研究
- 直接从原始文本中预训练模型在过去几年的NLP领域取得了革命性成功,既然利用NLP的自监督信号是一个有前途的方向,那么在CV领域也可以尝试使用。
- 目前,从有限数量的监督“gold-label”中学习具有一定局限性,而从无限数量的原始文本中学习的目前效果还不大好,所以目前大部分走的是“中间地带”,即用文本带来的弱监督信号帮助有监督模型取得更好的效果。
- 其也有局限性,两种方法都使用静态softmax分类器进行预测,且缺乏动态输出的机制,这严重限制了其灵活性,限制了其“zero-shot”能力。
- 和CLIP最相似的三种方法(VirTex、ICMLM和ConVIRT)只是在几十万张图像上进行训练,和那些用几亿图像的方法相比规模没上去。
解决方案
- 收集了大数据集:一个超级大的图像文本配对的数据集,有4亿个图像文本的配对。
- 扩大了模型规模:最大用了ViT-large,一共尝试了8个模型,从ResNet到ViT,最小模型和最大模型之间的计算量相差约100倍。
- 提出了CLIP:是ConVIRT的简化版本。
研究方法与创新点
- 方法核心:利用自然语言的监督信号,来训练一个比较好的视觉模型。
- 用自然语言的监督信号训练视觉模型的原因:
- 不需要再标注这些数据。
- 因为训练的时候把图像和文本绑定在一起,所以训练的不再只是视觉特征,而是多模态特征,更容易进行zero-shot。
创建足够大的数据集
- 已有的数据集:
- MS-COCO和Visual Genome:是高质量的人群标记数据集,但很小,只有10万张训练图像。
- YFCC100M:包含1亿张图像,但每张图像质量太差了,过滤之后数据集缩小了600万张图像,仅为1500万张图像。
- 因此,本文构建了一个新的数据集WIT(WebImageText),包含4亿对(图像,文本),从互联网上的各种公开来源收集。
选择一种有效的预训练方法
- 最初的尝试:VitTex的相似工作,图像CNN+文本Transformer,从头开始训练,预测图像的caption,这是一个预测型任务。
- 问题:实验发现一个具有6300万参数的Transformer语言模型,已经使用了ResNet-50图像编码器两倍的算力。
- 启发:试图预测每张图像所附文本的确切单词(给定一张图像,去预测对应文本,对一个图像可以有很多不同的描述,预测型任务有太多的可能性)是个困难的任务,因为与图像同时出现的描述、评论和相关文本种类繁多。
- 解决:探索训练了一个系统来解决可能更容易的任务,即只预测哪个文本作为一个整体和哪个图像配对,而不是预测该文本的确切单词。
- 用对比学习的原因:对一个图像可以有很多不同的描述,预测型任务有太多的可能性,对比任务只需要去判断图像和文本是不是一个配对,简单很多,如下图所示,训练效率一下提高了4倍。
CLIP核心实现的伪代码
- 分别输入图像([n,h,w,c])和文本([n,l],l是指序列长度),然后送入到各自的编码器提取特征,图像编码器可以是ResNet也可以是Vision Transformer,文本编码器可以是Text Transformer。
- 得到对应的特征之后,再经过一个投射层(即W_i和W_t),投射层的意义是学习如何从单模态变成多模态,投射完之后再做l2 norm,就得到了最终用来对比的特征I_e和T_e,现在有n个图像的特征和n个文本的特征。
- 计算余弦相似度,算的相似度就是最后要分类的logits。
- logits和ground truth做交叉熵损失,正样本是对角线上的元素,logits的维度是[n,n],ground truth标签是np.arange(n),算两个损失,一个是图像的,一个是文本的,最后把两个损失加起来平均,这个操作在对比学习中是很常见的,都是用的这种对称式的目标函数。
CLIP网络结构
1. 预训练
- 模型输入:图像(
)和文本(
)的配对,分别映射到
个特征上,CLIP就是在这
个特征上做对比学习。
- 正样本:配对的图像文本对(对角线),
个。
- 负样本:
个(矩阵里除了对角线的部分)。
- 有了正负样本,模型就可以通过对比学习的方式去训练了,不需要任何手工标注,这种无监督的训练方式,是需要大量的训练数据的。
2. 从标签文本创建数据集分类器
- 预训练之后只能得到文本和图像的特征,没有分类头,没有分类头怎么推理?
prompt template。
- 比如对于ImageNet的1000个类,变成“A photo of a {object}.”的1000个句子,这1000个句子通过之前预训练好的文本编码器,得到1000个文本的特征。
- 直接用类别单词去抽取文本特征也可以,但是这么操作是因为模型预训练图像看到的是句子,在推理时如果突然把所有文本变成单词,跟训练时不太一样,会影响效果。
3. 推理:用于zero-shot分类
- 推理的时候,对于任何一张图像,传给图像编码器,拿到图像特征之后,和所有的文本特征做余弦相似度,最后哪个最相似,就把这个文本特征对应的句子挑出来。
选择和缩放模型
- 图像编码器:既可以选择ResNet,也可以选择Vision Transformer。
- 文本编码器:选择Transformer。
训练
- 视觉训练了8个模型:
- 5个ResNets:ResNet-50和ResNet-101,还有根据EfficientNet的方式对ResNet-50的宽度、深度和输入大小进行scale的3个模型,分别对应原始ResNet50的4倍、16倍和64倍的计算量。
- 3个Vision Transformer:ViT-B/32、ViT-B/16和ViT-L/14。
- 所有的模型都训练了32个epoch,用的是Adam优化器,batch size=32768。
研究结论
zero-shot迁移
什么是zero-shot
- zero-shot学习通常指的是对图像分类中未见过的物体类别进行泛化的研究,可以看作是在进行表征学习和度量学习的基础上,通过借助辅助信息(属性或文本)实现跨模态知识的迁移,从而完成可见类信息到未见类信息推断的迁移学习过程。
- 虽然物体的类别不同,但是物体间存在相同的属性,提炼出每一类别对应的属性并利用若干个学习器学习。在测试时对测试数据的属性预测,再将预测出的属性组合,对应到类别,实现对测试数据的类别预测。
对比实验(和最相似工作)
- 将Visual N-Grams与CLIP进行了比较。
- 最好的CLIP模型将ImageNet上的准确率从11.5%提高到76.2%。
- CLIP在完全没用128万张训练图像的情况下直接zero-shot,与原始的ResNet50打成平手。
prompt engineering and ensembling
- 问题:
- 一个单词具有多义性,缺乏上下文信息,图像和文本匹配容易出错,所以将单词放在语境中,来提高匹配度。
- 在预训练的时候,匹配的文本一般都是一个句子,很少出现一个单词的情况,如果推理的时候,每次进来的是一个单词,可能就存在distribution gap的问题。
- 为了解决这两个问题,本文提出了prompt template,利用模板“A photo of a {label}.” ,把单词变成一个句子,其意思是“这是一张xxx的图像”,这个标签一般代表的都是名词,能一定程度上解决歧义性的问题。
- 加入prompt engineering and ensembling后,准确度上升了1.3%。
性能分析
CLIP做zero-shot迁移的效果
- 在27个数据集上衡量了CLIP做zero-shot迁移的效果,用zero-shot的CLIP和linear probe的ResNet-50对比。
- linear probe:把预训练好的模型中的参数冻结,只从里面去提取特征,然后只训练最后一层,即FC分类头层。
- 如下图所示,zero-shot CLIP在16个数据集上(绿色)都取得不错的效果,但对于一些难的数据集,CLIP表现得不好。
- 特别难的任务更适合去做few-shot迁移,对于这种需要特定领域知识的任务(如肿瘤分类等),即使对于人类来说没有先验知识也很难。
对比zero-shot CLIP和few-shot
- 对比zero-shot CLIP、few-shot CLIP和之前few-shot的一些方法,这里CLIP的few-shot是将图像编码器的参数冻结,然后做 linear probe。
- 下图横坐标是数据集中每一个类别里用了多少训练样本(其他方法因为没有和自然语言的结合,没有zero-shot),纵坐标是平均准确度,是在20个数据集上取的平均。
- 观察紫色曲线,当每个类别仅用1、2或4个训练样本时还不如zero-shot的效果,证明了用文本引导的强大。
在单个数据集上的性能
- 如下图所示。
比较CLIP zero-shot与全监督线性分类器在数据集上的性能
- 这里不再是few-shot linear probing,而是全量数据的linear probing。
- 对于大多数数据集,zero-shot分类器的性能仍然比全监督分类器低10%到25%,这表明仍然有很大的空间来提高CLIP的任务学习和zero-shot迁移能力。
- 在过去几年中,深度学习的性能与训练计算量和数据集大小等有关。
- 到目前为止,GPT模型家族已经证明:在训练计算增加1000倍的情况下,zero-shot性能得到了一致的提高。
- 在下图中验证了CLIP的zero-shor性能是否遵循类似模式,绘制了5个ResNet CLIP模型在36个不同数据集的39次评估中的平均错误率。
- 发现在模型计算增加44倍的情况下,CLIP具有类似的对数-对数线性缩放趋势。
- 在36个不同的数据集上的39个评估中,平均zero-shot误差通过5个不同CLIP模型的44x计算范围内的对数-对数线性趋势很好地建模。
- 浅阴影线表示单个评估的性能,表明尽管总体趋势平滑,但性能的变化要大得多。
表示学习
- 如下图右图所示,在先前提到的27个数据集上进行比较,CLIP(实心、空心红色五角星)比所有的其他模型都要好,不只是zero-shot和few-shot,用全部的数据去做训练时CLIP依然比其他模型强得多。
- 如下图左图所示,在12个数据集的集合上进行实验,CLIP-ViT的效果是很好的,但是CLIP-ResNet就要比别的方法差了,这12个数据集的集合和ImageNet的关系很大,如果模型之前在ImageNet做过有监督的预训练,那么效果肯定会更好。
- 和之前在ImageNet上表现最好的模型EfficientNet L2 NS对比实验。
- 如下图所示,在27个数据集中,21个超过了EfficientNet。
- 与在ImageNet上预训练的模型相比,CLIP的特征对任务偏移更具有鲁棒性。
对自然分布偏移的鲁棒性
下图是当数据有分布偏移时模型的表现如何。
- 下图可视化了zero-shot分类器的性能变化。
- 尽管使CLIP适应ImageNet分布使其ImageNet的精度总体提高了9.2%至85.4%,并与Mahajan等(2018)的SOTA的精度保持一致,但分布偏移下的平均精度略有下降。
- 下图可视化了zero-shot、1-shot、2-shot、4-shot、……、128-shot和全监督逻辑回归分类器在最佳CLIP模型特征上的性能。
- 虽然few-shot模型也比现有模型显示出更高的有效鲁棒性,但随着训练数据的增加,这种优势会随着性能的增加而逐渐消失。
与人的性能的比较
- 将CLIP与人进行zero-shot、one-shot和two-shot的对比。
- 让5名不同的人查看牛津IIT宠物数据集的3669张图像中的每张,并分类37个猫或狗品种的图像。
- 在zero-shot的情况下,人类在没有任何例子的前提下要求给这些图像贴上标签。
- 在one-shot实验中,每个品种给1张样本图像。
- 在two-shot实验中,每个品种给2张样本图像。
- 下图是人的分类准确率与CLIP zero-shot的分类准确率的对比。
- 在人判断准确率较高的类别上,机器的准确率也高;在人判断不准的类别上,机器判断也不准。
存在的问题
1. 需要进一步研究提高CLIP的计算和数据效率。
- 在具有训练划分的数据集上,zero-shot CLIP的性能和ResNet-50相持平,但在大多数数据集上,该基线的性能现在远低于总体水平。
- 在提高CLIP的任务学习和迁移能力方面还需要做大量的工作,估计zero-shot CLIP需要大约1000倍的计算能力才能达到最先进的整体性能。
2. CLIP的zero-shot性能在几种任务上仍然很弱。
- 细粒度分类(如区分汽车模型、花卉种类和飞机变体)上的性能较差。
- CLIP无法处理抽象概念,如数数任务、计算图像中对象的数量。
- 对于不太可能包含在CLIP预训练数据集中的新任务,例如对图像中最近的汽车的距离进行分类,CLIP准确性接近随机。
3. zero-shot CLIP对真正不在其分布范围内的数据的泛化效果仍然很差。
- CLIP在MNIST的手写数字上只能达到88%的准确率。
4. CLIP仍然仅限于从给定zero-shot分类器中的既定概念中进行选择,与像图像描述这样可以生成新输出的真正灵活的方法相比,这是一个重大限制。
5. CLIP没有解决深度学习的数据效率差的问题。
- 训练了32个epoch,每个epoch过4亿个图像,跑128亿张图像,如果一秒一张需要405年。
6. 尽管关注的是zero-shot转移,但用所有数据进行训练,调整很多次模型结构和超参数,以指导CLIP的开发,这些验证集通常有数千个示例,这对于真正的zero-shot场景来说是不现实的;另一个潜在的问题是评估数据集的选择,用ImageNet数据集作为指导,并非是做出了真正的zero-shot工作。
7. 偏见问题。
- CLIP是通过与互联网上的图像配对的文本进行训练的,这些图像-文本对未经过滤和管理,导致CLIP模型学习了许多社会偏见。
启发与思考
- CLIP工作最大的贡献,在于打破了固定种类标签的范式,把NLP方面的成功复制到其他领域内,比如CV领域。
- 可以利用CLIP预训练好的图像/文本编码器(具有鲁棒的多模态特征提取能力),应用在多模态下游任务上。
- CLIP的双流模型,单独提取图像和文本特征,即不同模态分别过一个编码器,再通过求相似度(如求点积)来实现无监督学习,是后续工作的主要方向。
- 写作:“Limitations”逐渐成为正文中不可或缺的一部分。