Press "Enter" to skip to content

清华P-tuning v2、微软SPoT|Prompt可以超过精调了吗?

卷友们好,我是rumor。

 

上周五我们组内刚分享完了Prompt的进展,同事大佬就刷到了Arxiv的更新, 清华推出P-tuning v2,让Prompt可以在小模型、复杂的序列标注任务上追平finetune范式 :

 

题目:P-Tuning v2: Prompt Tuning Can Be Comparable to Finetuning Universally Across Scales and Tasks

想着先好好过周末这周再看吧,结果今早我的实习同学又发来了一篇 谷歌的SPoT,同样在小模型上大于等于finetune :

 

题目:SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer

这出论文的速度也太快了,被逼之下我利用午休时间快速过了一下这两篇paper。看下来emm,虽然效果是有的,但真正比起精调范式还有一些差距。

 

Prompt tuning经典对比

 

在讲清P-tuning v2之前,相信很多同学(包括我)都已经忘了前几个prompt tuning的方式。

所以我做了个表一起复习一下:

P.S. 带问号是我没那幺确定,在文中没找到的

 

P-tuning v2

 

梳理好前几个Prompt tuning工作后,P-tuning v2的差别就比较好对比了:

它参考了prefix-tuning的多层prompt思想,让模型有更多的可调节参数,将其应用于分类任务,并去除了reparamerization。同时也去除了verbalizer,这样就可以用于非文字label的序列标注任务。

 

还有个优化点就是进行Multi-task训练(用多个同任务数据集),一方面更好的训练随机初始化的prompt,另一方面可以学习更多的任务知识。

 

实验显示, 在large模型下 (Multi-task) P-tuning v2可以大于等于finetuning,尤其是一些任务上还有1个点以上的提升 :

**但可以看到,在部分任务上还是要借助multi-task,而finetune的设置是没有用multi-task进行对比的,这里可能没那幺fair?**悄咪咪艾特一下作者~

 

SPoT

 

SPoT的方法更加简单一些,它主要借鉴迁移的思想,利用1个或多个相关任务对prompt进行训练,之后初始化target任务的prompt参数(图左)。或者再加些工程量,可以把各种任务训练完的prompt组成一个库,来了新任务之后检索到相近的prompt用来初始化就行(图右)。

结果显示Prompt迁移也可以带来很大提升:

作者也尝试了Multi-task,将55个NLP任务+C4的数据混合起来训练,结果显着高于Prompt-tuning和单任务的multi-task:

但从文章开头的效果图来看,SPoT在小模型上距离Multi-task的finetune还是有一定差距,大模型可以微微超过 。

 

不得不说我真的佩服这位作者的体力,展示一下他附录贴的任务prompt相关性热力图:

总结

 

这两篇文章看下来,我逐渐有种熟悉的感觉,一些提效果的经典方法都有看到: 加复杂度、加数据、训练更久 。

 

就个人来说,Prompt范式是个高效利用大模型的方法,而在小模型上是否能落地我还是存疑的。毕竟模型容量就那幺大、精调起来很方便,没必要去费力做prompt。

 

不过做research就是个各种尝试的过程,说不定哪天我们就有了预训练好的Prompt,即插即用,朝着调参自由更进一步。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注