CLIP
原文链接:Learning Transferable Visual Models From Natural Language Supervision
前言
- 迁移学习能力非常好,在很多图片分类任务上zero-shot推理做的非常好、
- 怎么训练的呢?在文字和图片上进行对比学习,需要大量的数据
- 没有分类头,摆脱了category label的限制
- 利用了自然语言的监督信号
Abstract
- SOTA的模型都是已经有定义好的固定类别,限制了模型的泛化能力
- 从自然语言里学习监督信号
- 数据集(图片-文本对)大小为4亿
- 分类可以迁移到新的类别,在30个实验上表现的很好
Introduction
- 推进了前面的几个类似工作,CLIP的规模更大:数据规模大,模型规模大
- CLIP:Contrastive Language-Image Pre-training
- 视觉方面尝试了8个模型,发现模型越大,迁移学习的效果会更好
Approach
方法的核心是利用自然语言的监督信号。 好处:(1)数据更好收集,无需标注,且输入为图片-文本对,文本的自由度变大;(2)学习到的特征是多模态的特征,会很好地做zero-shot的迁移。 提出了数据集WebImageText。 预训练: 训练的效率对于多模态大模型至关重要。 本文指出,作者们尝试了下面这个方法:视觉部分使用CNN,文本采用transformer,给定图片,让模型来预测它的caption,但是这个训练效率差且让模型来逐字逐句预测一个图片的描述很困难。 最终选择了对比学习:只需要判断文本和图片是否是配对的。 将这个预测性的任务替换成对比的任务,训练的效率提升了4倍。 训练的伪代码如下: 首先,文本和图片分别读入相应模态的编码器进行特征的提取;然后,将图片和文本投影到多模态的特征向量空间,再进行正则化;再然后,计算二者的相似度;最后求交叉熵,两个loss,取平均作为整体的loss。 一些细节:(1)数据集足够大让模型不会overfitting;(2)最后的投射采用的是线性的投射层(非线性和线性并没有太大区别)。 怎么训练? 视觉方面,5个ResNet和3个VisionTransformer,训练了32个epoch,Adam为optimizer;也有很多工程上的优化:混精度、gradient checkpoint...
Experiment
动机:在面对下游任务时,不需要再用有标记的数据进行finetune。 分类任务zero-shot的流程如下: (1)首先,“感兴趣的类别”和原本的prompt template结合形成一个个句子输入文本编码器进行特征提取,同时图片也进入图像编码器进行特征提取; (2)将图片特征和所有的句子的特征求相似度,得到相似度最高的即为最有可能描述这个图片的句子,即可以输出最终的分类结果。 可以理解为,你对一张图片问很多次:你是不是狗?你是不是猫?....它和什么文本最接近,答案就是什么。(当然,这里CLIP的询问是批次进行的,所以效率很高)。 prompt engineering & ensembling: 文本的提示、引导作用。 采用这个方法的原因:(1)词具有多义性;(2)预训练的时候资料都是句子。 用上模版后,准确率提高了1.3%。 同时,这个模版可以面向任务进行修改:比如面向宠物的数据集就可以改为“It's a photo of {label},it's a pet.”。迁移非常游泳。 本文采用了prompt ensembling,把prompt模版综合起来,提升效果》CLIP用了80个模版: 大范围的进行实验: baseline:Linear Probe on ResNet 总结:在给物体分类的任务上,CLIP做的比较好;在比较难的任务上,比如纹理分析上做的不好,因为zero-shot推理在很难的、需要专业化知识的任务上做的不好。 因此,接下来作者还做了一些few shot的实验。 作者把训练好的CLIP中的图片编码器冻住,然后做linear probe。 表征学习: 将下游任务所有的数据进行CILP,这就可以和之前特征学习的方法进行公平对比了。一般有两种方法:(1)linear probe:将预训练好的模型冻住,然后再训练一个分类头;(2)finetune:整个网络全放开。本文只采用了第一种方法,因为CLIP就是希望找到一个和下游任务无关的通用模型, 且linear probe才能更好的反应预训练模型的好坏。 模型的泛化性: 当存在数据偏移的时候,CLIP仍然表现的很稳健。
Comparison to Human Performance
对于人难的类别,对CLIP也很难。这可能与现实生活中数据的分布有关。
Limitation
- CLIP的性能强,但本文的baseline是ResNet,并不是SOTA。从扩大规模提升CLIP性能的角度,需要的计算资源要x1000,这消耗就太大了。
- CLIP在一些任务上表现的并不好:(1)细分类的任务 ;(2)无法处理抽象的问题:比如图中有多少人。它并不是一个万能的方法;
- CLIP虽然泛化能力很强,在一些自然图像的分类问题上做的很好,但是面对out of distribution上的数据集效果一般:比如MNIST,因为CLIP的训练数据集还真的没有和MNIST类似的内容。
- CLIP面对分类任务,还是从给定的类别中进行选择,而不是直接预测。作者说未来可能将对比学习和生成式模型结合起来,综合对比学习的高效性和生成式模型的灵活性;
- CLIP对数据的利用效率并不高:32个epoch,128亿张图片;
- CLIP在测试的时候会修改超参数,它每次都依据ImageNet来指导自己修改超参数,那么无形中就带有了“偏见”,严格来说不能说zero-shot了;
- CLIP训练的数据集没有经过清洗,可能带有偏见;
- CLIP one-shot、two-shot的效果可能还不如zero-shot,这很矛盾。
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用