当前位置:   article > 正文

Prompt | 从CLIP到CoOp,Visual-Language Model新范式

clip prompt

最近NLP领域提出了Prompt新范式,企图革新原先的Fine-tuning方法,而在CV领域中,Prompt其实可以理解为图像label的设计,从这个角度看,Prompt(预测文本中mask的字符,类似完形填空)其实是介于Image caption(迭代预测出每一个字符)和one-hot label(one-hot可以认为是prompt的特例,单字符通过text encoder成one-hot)之间的任务。最近在Visual-Language Model(缩写VLM)任务中,prompt开始展现出强大的能力。

本文首先介绍一下prompt和fine-tuning范式本质上有什么区别,然后介绍一下NLP中基于prompt的PET和AutoPrompt方法,最后介绍一下VLM任务中应用prompt范式的CLIP和CoOp方法。

另外,CLIP和CoOp都是基于prompt的判别式VLM方法,最近还有几篇基于prompt生成式VLM方法,基于prompt的生成式VLM和基于prompt的NLP方法非常类似,本文就不展开细讲了,放一下文章链接

Unifying Vision-and-Language Tasks via Text Generation:

https://arxiv.org/abs/2102.02779v1

Multimodal Few-Shot Learning with Frozen Language Models:

https://arxiv.org/abs/2106.13884

01

Prompt vs Fine-tuning

efc648f66af61e43a32d64fdc5712cc7.png

(引用刘鹏飞大佬的原话https://zhuanlan.zhihu.com/p/395115779)

图中,圆形表示预训练语言模型,矩形框表示的是各种下游NLP任务。那么,我们就有这样一句话:大家都是希望让 预训练语言模型和下游任务靠的更近,只是实现的方式不一样。

Fine-tuning中:是预训练语言模型“迁就“各种下游任务。具体体现就是上面提到的通过引入各种辅助任务loss,将其添加到预训练模型中,然后继续pre-training,以便让其更加适配下游任务。总之,这个过程中,预训练语言模型做出了更多的牺牲。

Prompting中,是各种下游任务“迁就“预训练语言模型。具体体现也是上面介绍的,我们需要对不同任务进行重构,使得它达到适配预训练语言模型的效果。总之,这个过程中,是下游任务做出了更多的牺牲。

下面讲一下NLP中的两个前置工作PET和AutoPrompt,这两个工作对于Visual-Language Model任务的启发是非常大的。

02

PET

PET是第一个将prompt训练的语言模型应用到下游任务的方法,并且把prompt范式规范化,给后续prompt范式的研究提供了示范。

1ac6a40fe354d7d7515c03a43f7d9daf.png

PET的设计流程如下:

1.预先设置多种prompt,其中包含需要预测的文字(比如上图中的Best pizza ever! It was ___.其中It was就是预先设置的prompt,可以替换成其他的prompt),然后将多种prompt送入不同的PLM模型中进行训练,最终得到多个PET模型。

2.将需要预测的文本送入多个PET模型中进行推理,综合多个PET模型结果得到soft label。

3.把需要预测的文本和soft label放到分类器中进行训练,得到最终的文本分类模型。

03

AutoPrompt

8e9c663941513d34af35fcc5c7c1de36.png

PET构建的prompt是人为设计的,这可能会导致设计的prompt不够合理。AutoPrompt提出在构建prompt时通过网络自动化学习出Trigger Tokens [T] [T] [T] [T] [T],优化目标是加入合适的token之后,预测结果越来越倾向于正确结果(比如上图中,token为atmosphere alot dialogue clone totally时,positive的概率越高)。

04

CLIP

0616d1d112bce054a547cb349efb3eb2.png

OpenAI从网络收集了4亿数据量的图片文本对用于CLIP训练,最后进行zero-shot transfer到下游任务达到了非常好的效果(关于zero-shot learning可以看我之前的文章ViLD:超越Supervised的Zero-Shot检测器

简单回顾一下CLIP的使用流程:

1.如图(1)所示,CLIP将一批文本通过Text Encoder编码成一批word embedding,将一批图片(与文本一一对应)通过Image Encoder编码成一批feature embedding,然后将对应的word embedding和feature embedding先归一化然后进行点积得到相似度矩阵,点积数值越大,代表word embedding和feature embedding的向量越相似,这里的监督信号就是矩阵对角线为1,其余位置为0。其中Text Encoder使用的是Transformer,而Image Encoder使用ResNet50和ViT两种架构其中一个,Image Encoder和Text Encoder都是从头训练。

2.然后将预训练好的CLIP迁移到下游任务,如图(2)所示,先将下游任务的标签构建为一批带标签的文本(例如 A photo of a {plane}),然后经过Text Encoder编码成一批相应的word embedding。

3.最后将没有见过的图片进行zero-shot预测,如图(3)所示,通过Image Encoder将一张小狗的图片编码成一个feature embedding,然后跟(2)编码的一批word embedding先归一化然后进行点积,最后得到的logits中数值最大的位置对应的标签即为最终预测结果。

从CLIP的流程中可以看出,CLIP和PET的prompt使用方式非常相似,A photo of a就是一个人为设计的prompt。

05

CoOp

CoOp明显是受到了AutoPrompt的启发,并且CoOp发现CLIP实际上就是prompt在visual-language model中的一个应用,于是CoOp在CLIP的基础上进一步进行改进。

2f3fe27b618d818e4952f659dbe41365.png

CoOp先在四个数据集上做实验,发现更合理的prompt能够大幅度的提升分类精度尤其是使用了本文提出的CoOp之后,最终的分类精度远超CLIP人为设计的prompt。

6bb766274068fae23487285db2a2ce55.png

和CLIP的主要不同之处在于,CoOp在CLIP的第二个阶段中引入了context optimization。具体的,CoOp将prompt设计为:

其中每个  向量跟word embedding的维度相同,可以理解为可学习的context,并且所有类别对应的context共享参数。

将learnable context和不同类别的word embedding拼接起来送入text encoder中进行训练,优化目标是使得和图片对应的prompt预测分数最大。训练完成后,learnable context的参数就固定下来了。

Other Variants

作者还尝试了两种变体:

一种是prompt可以在需要预测的class前后都插入learnable context,这可以增加prompt的灵活性。

另一种是设计class-specific context(CSC),也就是所有类别的prompt参数独立,在一些细粒度分类任务中效果更好。

CoOp vs CLIP

42fcb251ed177d559696aabe2e3cd5b4.png

从11个数据集的实验中可以看出,CoOp均超过了CLIP,并且在一些数据集上,大幅度超过CLIP。证明了可学习的prompt优于人为设计的prompt。CoOp提出的两种变体,在一些数据集中效果更好。

CoOp vs Prompt Ensembling

22c215a8d61769846d902868e5590430.png

将CoOp和PET中提出的Prompt ensembling进行比较,CoOp也展现出了优越性。

CoOp的影响因素

ae43089b0224fa1bd9db471bcb0a36e7.png

从上面的实验中可以看出,CoOp对于噪声的鲁棒性优于CLIP。

7b17eee06df30f2a4639c7a5adceb48a.png

从上面的实验中可以看出,context length长度越长,CoOp效果越好;backbone模型越大,CoOp效果越好。

Random vs. manual initialization

5639d1f44884e3b1bca612b5a921d0b8.png

这个对比实验相当的精髓,也就是说learnable context的初始化prompt是什么没那么重要,随机初始化就能达到精调初始化相当的精度。

06

总结

因为CoOp是class-level的自适应,不能根据输入图片的不同动态变化prompt,如果能够根据输入图片动态调整prompt的话,也就是instance-level的自适应,可能会有奇效。learnable context的作用类似于去噪,让网络拟合噪声,使得预测部分的关注区域更为干净。感觉learnable context和ViT中的object query的功能非常相似,都是任意学习出信息,只根据最后的监督信号更新参数。后续可以挖掘一下如何控制learnable context的学习,来提升基于prompt的VLM性能。生成式的VLM也可以探索一下如何设计prompt更合理。

另外就是纯CV方向的prompt,也就是类似于ViT将图片拆分patch,每个patch实际上可以看成一个字符,那么也可以设计patch的prompt对模型进行训练,这其中也可以分成生成式(类似ViT)和判别式(类似self-supervised)两种方法。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

88a7e8384f0f9c5618e50e77a3608701.png

Reference

[1] https://zhuanlan.zhihu.com/p/395115779

[2] https://zhuanlan.zhihu.com/p/391606045

[3] Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference

[4] AUTOPROMPT: Eliciting Knowledge from Language Models with Automatically Generated Prompts

[5] Learning Transferable Visual Models From Natural Language Supervision

[6] LEARNING TO PROMPT FOR VISION-LANGUAGE MODELS

END -

2bde8909ef45c9e140e23be275d55174.png

38f491ddfe8d805cd42d0cb7fb394247.png

2021最新 北京互联网公司

2021-10-24

3d2f014f0beaf073d7f9446b212141ac.png

『优势特征知识蒸馏』在淘宝推荐中的应用

2021-10-22

160cc1dde78a1890be6fa3a90ca83943.png

【NLP保姆级教程】手把手带你RNN文本分类(附代码)

2021-10-22

0db182288166b35a6a3f4327fab70887.png

预训练模型,NLP的版本答案!

2021-10-20

9abd172c7726db786309b1ff84e67c0f.png

67a98607639eda4ec670a45064ce7bf0.gif

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/998364
推荐阅读
相关标签
  

闽ICP备14008679号