Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation
在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,PLM中的其他参数固定。针对自回归架构模型:在句子前面添加前缀,针对编码器-解码器架构模型:Encoder和Decoder都增加了前缀,得到 z = [PREFIX; x; PREFIX0; y]
。Encoder端增加前缀是为了引导输入部分的编码,Decoder 端增加前缀是为了引导后续token的生成。该方法其实和构造Prompt类似,只是Prompt是人为构造的"显式"的提示,并且无法更新参数,而Prefix则是可以学习的"隐式"的提示。为了防止直接更新Prefix的参数导致训练不稳定和性能下降的情况,在Prefix层前面加了MLP结构,训练完成后,只保留Prefix的参数。通过消融实验证实,只调整embedding层的表现力不够,将导致性能显著下降,因此,在每层都加了prompt的参数。实验还对比了位置对于生成效果的影响,Prefix-tuning也是要略优于Infix-tuning的。其中,Prefix-tuning形式为 [PREFIX; x; y]
,Infix-tuning形式为 [x; INFIX; y]
。
Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning
该方法可以看作是Prefix Tuning的简化版本,它给每个任务定义了自己的Prompt,然后拼接到数据上作为输入,但只在输入层加入prompt tokens,并且不需要加入 MLP 进行调整来解决难训练的问题。Prompt Tuning 还提出了 Prompt Ensembling,也就是在一个批次(Batch)里同时训练同一个任务的不同 prompt(即采用多种不同方式询问同一个问题),这样相当于训练了不同模型,比模型集成的成本小多了。
P-Tuning: GPT Understands, Too
清华;针对Prompt Tuning的改进,该方法将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。相比Prefix Tuning,P-Tuning加入的可微的virtual token,但仅限于输入层,没有在每一层都加;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。
P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
清华;针对Prefix Tuning的改进;该方法在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层。移除重参数化的编码器(以前的方法利用重参数化功能来提高训练速度和鲁棒性如:Prefix Tuning 中的 MLP 、P-Tuning 中的 LSTM,但这里作者发现重参数化的改进很小,还会影响模型的表现)。针对不同任务采用不同的提示长度。引入多任务学习。回归传统的分类标签范式,而不是映射器(P-Tuning v2回归传统的CLS标签分类范式,采用随机初始化的分类头(Classification Head)应用于tokens之上)。