过去这半年,我读了很多prompt的工作,写了很多prompt的代码,做了很多prompt的实验。个人来讲我挺喜欢prompt这个方向的,但是下面有一些吐槽牢骚话(冷水)我也要和想入坑或者已经被坑的兄弟姐妹们说。
我们都知道,现在prompt基本就火两个,离散化的和连续化的。模板方法,也就是所谓的离散式prompt,无可厚非,没有功劳也有苦劳,工业界也可以从中获益;连续方法,则是在prompt tuning出来之后追平了全数据的性能之后被引爆,号称小参数撬动大结果(我印象里全参数量追平以及超越是要比adapter好一些的),抛弃了解释性换来了性能。
我们来谈谈被追捧的后者。首先真的可以追平吗,我负责任地讲,是的,我们在广泛而非常复杂的任务上依次尝试过都可以追平和超越。但是也有两点代价。
1.极长的训练时间(十倍)。所以后面有什么预训练的prompt(吐槽,PPT作者们麻烦release一下权重),多任务的prompt种种来处理这件事,其实这个结论已经不新了。如果你尝试训练过任何一个连续化的promot方法,你会发现他的斜率远远缓于finetune,而且震荡更为剧烈。
确实省了空间,确实冻结了所连接的大模型,但是因为prompt都加在前面,所以反向传播还是要完整的从最末端传到最顶端,省去仅仅一个不更新的时间,训练还缓慢,所以根本不省时间,反而要多训好几倍的时间。那么问题来了,对工业界,算力比存储更值钱,那么其实根本没有节约,反而是浪费,如果有几亿个用户,那么确实节约了几万个硬盘,但是你要多消耗几亿倍的显卡算力和耗电量,这让工业界怎么使用呢。(但是真的也很希望有人能提出来针对prompt的运算软硬件优化算法来帮助这个bottleneck)
2.相较于预训练过于specific,和其他组件耦合度太高。连续化prompt包括之前的adapter几乎就是数据集处理specific的甚至可以说是huggingface版本specific的。要求必须要是这个预训练模型换了就没用了,必须要是这个数据集换了就没用了,必须要是这个语言换了就没用了,几乎是做完了路就堵好了。和预训练和微调范式比就是一个硬伤,几乎没法scale up和open source。有个东西叫adapterhub已经干了prompt tuning社区下一步可能想干的事,他们在很多个数据集训练了,200多任务,这还只是只用adpater,openprompt要想做好恐怕是还要再乘一下n(连续化prompt方法)×n(语言)…,我都心疼要花的算力。但是即使做出来了,首先工业界没办法拿来你这权重直接部署,即使他抄了你的伪标签也是一样,也没法load chinese BERT那种拿来养活工程师;然后学术界除非要做同一个任务在你这个weight上面再训练,拿来也没太大用,除非拿来一堆weight做cross task的分析之类的。
吐槽了一会,我想表达意思是prompt方法是不是第四个范式,我认为从发论文角度是的,未来的一年发prompt中稿应该还是没啥问题,我们每个人也不是天天都有best paper idea,也是要恰饭。但是从一个更长远的角度看,如果真的想做一个影响力更大的工作,个人认为站在2022年初,prompt最大的使命在于帮助人们找到超大型预训练模型(GPT3,Codex)的上界,进而使得其零样本少样本性能可以接近超越于比他小很多的但是本身并不小模型(T5 base~large,BART)的全数据微调的不错的结果,进而使得NLP的b2b的ai服务(openai的收费GPT3)盈利成为可能,产生下一个增长点为NLP社区续命。并且完成协助预训练模型完成大一统(unifying)的使命。顺便探明当模型足够大之后泛化性所暗示的智能性。
prompt要做,但最好不是提出来雨后春笋的prompt方法,而是做得更加集中于某个依附的模型,比如英文社区就是GPT3 Codex,中文社区就是百度的最大的那个,而且要盯着zero shot和few shot做,整个社区才会从中更大地受益。
广告:欢迎大家关注这个talk以及我们即将arxiv的文章,里面也有很多prompt的实验。
做做研究可以,大规模应用很难,问题很多
现在这种soft prompt我觉得和gpt3以及后面ipet等工作玩的hard prompt不是一个性质的东西,它说到底还是adapter,如果说它火了那我们就有必要重新审视下之前adapter相关的工作。当然prompt还是有它正面的一面,它在fewshot上看起来确实效果很突出,是个对整个nlp领域贡献比较大的点吧。但个人始终觉得,prompt tuning这个点太小了,把它捧到第四范式未免有些过誉。
以我之前跑的结果来看,目前基于连续Template的Prompt方法,名义上可以降低需要训练的参数量,但因为它的优化参数在输入层,结果实际上几乎没有实现训练阶段计算代价的显著减少——这样一来在很多场景下就本末倒置了。反正你该计算的中间层导数一个都少不了,性能也就那么回事,那我为啥不直接Fine-tune?
我之前在验证搜索场景下的Prompt应用,一开始设定的目标是希望在性能差不多的前提下减少总训练代价(毕竟搜索这边动不动就是上千万甚至上亿的Pairwise样本,当时看点线上的数据训一次12层的Teacher BERT就要四卡跑两周),结果跑了半天发现基本上没卵用……
continuous prompt learning本质还是一种adapter,天生缺陷个人感觉: 1. prompt learning直接作用于attention而不直接作用于ffn,这一点不如adapter flexible,这个区别使prefix tuning在一些generation task上结果明显差于adapter [1]; 2. prompt learning的prompt数量很多的话 (512? 1024?) 整体速度变慢并且内存容易爆炸,这一点不如adapter scalable
安利我们的paper揭示prompt learning和adapter等related work的联系,paper里详细分析了prompt/prefix的优缺点:
[1] Towards a Unified View of Parameter-Efficient Transfer Learning
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有