©作者 | 吉雅太

单位 | 清华大学

研究方向 | 多模态研究

CLIP

最近 NLP 中第四范式 prompt 比较火,就是不再是生硬地从预训练直接过渡到微调任务,而是用 prompt(提示)的方式,把微调任务做一个转换,接近预训练任务。比如用 MLM 预训练一个语言模型,后续要做一个文本情感分类,不再是提取出全句的表征后做分类,而是在这段文本后面加一个 prompt(提示),比如说 it is __,然后要补全空缺,相当于还是 MLM。看着很麻烦,但在预训练数据充足、微调数据不足情况下,是比较有效的。

多模态作为一个大杂烩的领域,NLP、CV 中的创新都可以用进来,所以多模态的 prompt 文章就也出现了。本文先介绍 clip: Learning Transferable Visual Models From Natural Language Supervision。

论文标题:

Learning Transferable Visual Models From Natural Language Supervision

论文链接:

https://arxiv.org/pdf/2103.00020.pdf

代码链接:

https://github.com/OpenAI/CLIP

作者先指明 motivation,现在的视觉模型只能在预定义好的物体类别范围内进行预测,而在推理时遇到未标注过的数据,泛化性能较弱。而从带有描述的图片进行训练可以让模型有更广泛的监督,从而在下游的小样本学习、零样本学习中获得好的表现。作者提出 CLIP:Contrastive Language-Image Pre-training。通过对比学习用文本监督图片表征,在零样本学习上的表现可以与有监督的模型相媲美。

1.1 具体方法

将语言作为监督信息训练图片的表征,与用于图像分类的众包生成标签相比,扩展自然语言监督要容易得多,可以方便从互联网上的大量文本中学习。从自然语言中学习还有一个重要的优势,因为它不仅学习表征,而且还将表征与语言连接起来,从而实现灵活的零样本迁移。

创建一个有效的大数据集,结合 MSCOCO、VG、YFCC100M,清理,生成大量图片-文本对,并从网上也抓取了大量数据,生成一个数据集 webimagetext。

预训练方法的选择:先使用一种类似 image caption 的预训练任务,如蓝线,学习效率很低,达到同样精度要使用很多图片数据。黄线是基本的训练方法,即预测图片的描述文本的单词。这两种方法试图预测每幅图片所附文字的准确单词,但由于种类繁多,这么做是很困难的。而对比学习能较好地学习表征,以文本整体和图片的配对作为一个目标,进一步提高了效率。

对比学习:一个 batch 有 N 个图片文本对,计算相似度矩阵,对角线上的 N 对为正样本,另外 对为负样本。最大化正样本相似度,最小化负样本相似度,使用一个对称交叉熵损失优化。

▲ 伪代码,值得注意的是在计算交叉熵时传入的是 label 数值,在函数里变成 one-hot 向量

模型选择和训练:图像编码器使用了两种:resnet(用带有注意力的池化得到整张图的全局表征),ViT。文本编码器使用 transformer,在文本编码器中使用了掩蔽自我注意,以保留使用预训练的语言模型进行初始化的能力。

在零样本学习中,以分类任务为例,使用 prompt 的方法,将分类任务转换为图片、文本的匹配问题。即将标签单词和提示语构成候选句子,再把图片编码成特征向量,分别计算相似度,找到可能性最高的类别。

1.2 实验

实验先和其他的零样本学习模型对比,在 Visual N-Grams 相比,CLIP 在三个图片分类数据集上的准确率都有很大提升。

作者用实验证明 prompt 的必要性,一个词经常会具有多义性,而将词带入到特定的上下文提示语中,就可以有更清晰的意义,有助于分类。另一方面可以减小和预训练任务之间的 gap。实验证明使用 prompt 要更有效。

▲ 蓝线是在(微调和)测试时只使用 label 的文本,绿线是使用了 prompt 和 ensemble,prompt 即给 label 加一段提示语,ensemble 指同时用多个不同的上下文 prompt 语句,对于一个 label 生成多个句子 embedding 再集成

▲ 在 27 个分类数据集上零样本学习 clip 与全监督训练的 resnet50 效果对比

实验部分这些是比较好懂的,arxiv上原文光实验部分就有大概二十页,不过 dblp 上有简约版的。


CoOp

模型 CoOp,主要的思想是自动设计提示文本,先保持预训练参数不变,然后利用少量数据去学习合适的 prompt,这样的 prompt 比人工设计的提示文本在测试时更有效。值得注意的是,学习合适的 prompt,只是学到适合这个任务的一组词向量,并不一定是找到了一组真实的词(意思是说学到的词向量可能映射到乱七八糟的词上去,但就是这些词最适合做这个任务的提示语,这和语义空间的连续性有关)。

论文标题:

Learning to Prompt for Vision-Language Models

论文链接:

https://arxiv.org/pdf/2109.01134.pdf

代码链接:

https://github.com/KaiyangZhou/CoOp

作者的 motivation 在于观察到 prompt 的选择对测试结果影响很大。

2.1 主要方法

预训练过程和 CLIP 相同,也是使用对比学习。CLIP 在预训练之后,会直接进行 zero-shot inference(零样本推理),使用 prompt 的方法,把 K 个 label 分别结合到提示语句,然后得到对应的 K 个表征,分别和图像计算相似度。

本文的方法 CoOp(context optimization),可以避免人为地设计提示语,把输入 prompt 设计成如下格式:

其中 是随机初始化的词向量,也是 512 维。注意这里上下文词向量对于不同类别是共享的。在训练阶段,把 t 前向传播,和图像特征计算相似度,计算出对应每一类的概率 ,再用交叉熵优化,学到合适的 (这个上下文提示是 task-relevant)。

prompt 有一些其他的变种,一种是改变 CLASS 的位置,把 [CLASS] 放在句子中间,这样可以学习到更灵活的上下文;另一种是每种 CLASS 学习一组上下文提示语句,即不同类别对应的语句不同,作者发现这样的方法对一些细粒度的分类很有效。

2.2 实验

使用 11 个分类数据集做小样本学习,涉及到的分类有物体、动作、场景等。

▲ 图中的星点是 zero-shot clip,即 clip 直接推理的结果,对于实线,M 是  prompt 长度,end、mid 表示 CLASS 位置,CSC 表示 class-specific 的提示,虚线是 clip 也做了微调,用一个随机初始化的线性层计算相似度(?不知道这里 linear probe 啥意思),横坐标是训练的每类小样本数目

从平均结果看,coop 在小样本学习中效果更好,并且当增加用 16 个样本训练时,准确率可以提高 17 个点。

对于数据分布变化的鲁棒性,如表 1,target 数据集是一些 imagenet 数据集变体,在 source 上做小样本训练,在 target 测试,发现 M 越小鲁棒性、泛化性能越好。表 2 表示 coop 比 clip 里 prompt ensemble 效果还要好。表 3 对比了随机初始化和人为设定 prompt 两种情况直接测试的准确率,表明即便随机初始化一个 prompt,测试效果与人为设定也差不多,当然,如果再使用小样本微调一下随机的 prompt,效果就更好了。

上图,左边是 prompt 长度 M 和 class 位置的消融实验;右边是不同视觉 backbone 的影响。

下表就是把学到的词向量通过欧氏距离找到的词表中最近的词,可以看到可解释性很差,但对于模型来说就是有效。这就是“隐式学习”吧,不知道模型学了个啥。

2.3 总结

虽然效果上看 coop 使用自动生成 prompt 要好过 clip,但一个主要的区别在于 coop 也需要少量的数据学习 prompt,即少样本学习,而 clip 由于直接使用人为设计的提示语句,可以进行零样本学习(不过实验部分也看到 coop 直接用随机的 prompt 也能做零样本学习,就是差点)。


CLIP-adapter

CLIP 和 COOP 分别在今年 3 月份、9 月份挂载 arxiv 上,十月份又挂了一篇:CLIP-adapter。coop 和 CLIP-adapter 都是在 clip 基础上增量式的工作,clip 使用一个人为设定好的 prompt 直接进行零样本推理,而 coop 和 CLIP-adapter 都是使用小样本学习,coop 是初始化一个随机的 prompt,在小样本中学习合适的 prompt,从而更适应这个任务;adapter 是在模型中间插入一个随机的可学习的模块,通过更新这个模块来更适应下游任务。

论文标题:

CLIP-Adapter: Better Vision-Language Models with Feature Adapters

论文链接:

https://arxiv.org/abs/2110.04544

代码链接:

https://github.com/gaopengcuhk/clip-adapter

3.1 模型

最下面就是 adapter 的结构,在小样本学习时,在两个分支上各加入一个可学习的层。小样本训练时,其他部分冻结参数(如果更新整个大模型,由于数据太少很容易过拟合)。并且为了更好地结合微调的知识和原始的知识,又加入一个残差连接结构,见图。

3.2 实验

在 11 个数据集上进行小样本学习,可以看到 clip 零样本推理的结果,clip 小样本微调的结果,coop 小样本学习的结果,adapter 小样本学习的结果。

从左上角平均结果的图可以看出,adpater 小样本学习的效果最好。对于 clip,小样本学习的初始阶段甚至弱于零样本学习,所以人为设定的 prompt 只是我们看上去合理的提示语句,对于模型来说可能并不是一个好的初始化。

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

多模态中的Prompt范式:从CLIP、CoOp到CLIP-adapter相关推荐

  1. 一文速览!多模态预训练中的 Prompt 范式

    作者 | 上杉翔二 悠闲会 · 信息检索 整理 | NewBeeNLP 上一篇博文整理了预训练新范式,见 预训练新范式!为什么Prompt会更有效? 主要是围绕NLP上的成果,具体的概念本文也不做过多 ...

  2. 多模态预训练中的Prompt(ALPRO,Frozen)

    以往的文章更新过,背景就不再赘述: Cross-modal Pretraining in BERT(多模态预训练) CLIP,DALL-E 预训练新范式(Prompt-tuning,Prefix-tu ...

  3. 用多模态信息做 prompt,解锁 GPT 新玩法

    文 | 子龙 编 | 小轶 自多模态大火以来,井喷式地出现了许多工作,通过改造预训练语言模型,用图像信息来增强语义信息,但主要集中在几个 NLU 任务上,在 NLG 上的研究比较少. 今天要介绍的这篇 ...

  4. Prompt范式,真香

    之前我学习Prompt范式的源起PET后就鸽了很久,相信卷友们已经把Prompt的论文都追完了,把我远远地落在了后面.周末我不甘被卷,奋起直追,连刷三篇paper,希望能赶上大家学习的步伐. Pref ...

  5. oracle set feedback off,Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思...

    本文主要向大家介绍了Oracle数据库之Oracle导出数据中的prompt,set feedback 等是什么意思,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. mpt 输出 ...

  6. ArcGIS小知识(七)——ArcMap中裁剪影像或DEM等栅格数据,clip和mask遇到的问题

    arcgis中的ArcToolbox的使用,必须是在英文路径下!!!英文路径下!!!英文路径下!!!进行保存等操作. 1.首先新建工作区面矢量,不会新建面矢量的:传送门. 2.利用search搜索ma ...

  7. python中prompt的意思_python中的prompt是什么意思,怎么用

    查看: 5468|回复: 9 [已解决]python中的prompt是什么意思,怎么用 当前离线UID日志 相册 贡献 荣誉 积分 电梯直达 发表于 2019-5-26 22:08:12 | 只看该作 ...

  8. mysql中bcnf_数据库范式(1NF 2NF 3NF BCNF)详解

    @hxx: http://blog.sina.com.cn/u/3113060227 简介:一范式:每一列不可分割,二范式:每一列唯一(对应唯一对象):三范式:一列中的非主关键列不应该在其他表(或自己 ...

  9. LLMs:大模型微调技巧的简介、四类微调方法(Prefix Tuning/Prompt Tuning,P-tuning/P-tuning v2​​​​​​​,Adapter Tuning,LoRA/Q

    LLMs:大模型微调技巧的简介.四类微调方法(Prefix Tuning/Prompt Tuning,P-tuning/P-tuning v2,Adapter Tuning,LoRA/QLoRA)之详 ...

最新文章

  1. Linux的watch命令--实时监测命令的运行结果
  2. 在滴滴和头条干了 2 年后端开发,太真实…
  3. ITK:删除一个未连接到其边界的二进制图像中的孔
  4. setitimer 创建两个定时器_UE4 Timer(定时器)相关源码分析
  5. 2.4一元多项式的表示及相加
  6. UVA121 POJ1319 HDU1621 Pipe Fitters【计算几何】
  7. Mac终端的一些操作命令
  8. asp.net core 系列 5 MVC框架路由(上)
  9. Python实现贷款用户的信用评分卡
  10. 犀牛插件开发-插件兼容性-Rhino插件-什么是Rhino插件
  11. 大数据基于TMDB的电影数据分析系统安装及使用
  12. MIME类型“ image / jpg”是否与“ image / jpeg”相同?
  13. WPF|一个比较简单带点设计的登录界面
  14. zxing绘制条形码总结
  15. python乌龟吃鱼小游戏(类和对象及Easygui应用)
  16. 服务器自建云存储,如何搭建私有云?私有云储存服务器NAS搭建方法(轻松搞定)...
  17. ESAYUI filebox 隐藏
  18. 软件工程师考试报名须知
  19. ubuntu内核升级导致显卡驱动丢失
  20. VMD(变分模态分解)

热门文章

  1. php web开发应用教程,PHP-Web 应用程序开发:使用模板_PHP
  2. 努比亚z17s刷原生安卓_MIUI 10抢先适配安卓Q,米粉火速刷机,存在这些问题
  3. python中 是什么运算符_Python中什么是算术运算符、赋值运算符和复合运算符?...
  4. keil_rtx特点
  5. Linux Shell编程(5)——shell特殊字符(下)
  6. Method Overloading
  7. 前端获取后端传来的session_java后台如何获取,前台传来的表单数据
  8. 一个servlet跳到另一个servlet_另一个太阳下的天与地
  9. scrapy的name变量_Python3 Scrapy框架学习四:爬取的数据存入MongoDB
  10. android layout background,Android LinearLayout Gradient Background