P-Tuning:GPT也能够擅长神经语言理解任务.
- paper:GPT Understands, Too
Prompt是由自然语言构成的前缀/后缀,通过Prompt使得下游任务也转换成跟预训练任务格式一致的完形填空问题,能更加充分地利用原始预训练模型,从而实现零样本、小样本学习。比如:GPT-3采用人工构造的模版来做上下文学习。由于GPT-3模型是从左往右解码的,因此预测部分通常放在句末:
大模型的Prompt构造方式严重影响下游任务的效果。人工设计的模版的变化特别敏感,加一个词或者少一个词,或者变动位置都会造成比较大的变化。同时,近来的自动化搜索模版工作成本也比较高,以前这种离散化的token的搜索出来的结果可能并不是最优的,导致性能不稳定。
基于此作者提出了P-Tuning,放弃了“模版由自然语言构成”这一常规要求,从而将模版的构建转化为连续参数优化问题,设计了一种连续可微的virtual token。
P-Tuning考虑如下形式的Prompt:
其中[u1]~[u6]代表BERT词表里边的[unused1]~[unused6],也就是用几个从未见过的token来构成模板,这里的token数目是一个超参数,放在前面还是后面也可以调整。可以用标注数据来求出这个模板。
- 当标注数据比较少时,固定整个模型的权重,只优化[unused1]~[unused6]这几个token的Embedding;
- 当标注数据充足时,可以放开所有权重微调,由于跟预训练任务更一致,因此效果会比直接加个全连接层微调更好。
P-Tuning并不是随机初始化几个新token然后直接训练的,而是通过一个prompt encoder(由一个双向的LSTM+两层MLP组成)把这几个Embedding算出来,并且将这个LSTM模型设为可学习的。LSTM出现的token表示相关性更强,某种程度上来说更像“自然语言”,此外还能防止局部最优。
经过预训练的LM的词嵌入已经变得高度离散,如果随机初始化virtual token,容易优化到局部最优值,而这些virtual token理论是应该有相关关联的。因此,作者通过实验发现用一个prompt encoder来编码会收敛更快,效果更好。即用一个LSTM+MLP去编码这些virtual token以后,再输入到模型。
从对比实验证实看出,P-Tuning获得了与全参数一致的效果。甚至在某些任务上优于全参数微调。
在实验中还发现,相同参数规模,如果进行全参数微调,Bert在自然语言理解NLU任务上的效果超过GPT很多;但是在P-Tuning下,GPT在SuperGLUE上的成绩首次超过了同等级别的BERT模型,这颠覆了一直以来“GPT不擅长NLU”的结论。