Featured image of post LLM微调系列3:P-Tuning

LLM微调系列3:P-Tuning

先按照顺序列一下这几篇技术首次提交到arxiv的时间,我们按照提交时间来介绍,很多博客都搞不清楚发表时间,甚至把这几种方法张冠李戴,我们还是从原始信息源头进行梳理,这样虽然慢但是可靠。

论文:Adapter: Parameter-Efficient Transfer Learning for NLP 代码:Adapter 时间:2019.2.2

论文:Prefix-Tuning: Optimizing Continuous Prompts for Generation 代码:Prefix-Tuning 时间:2021.01.01

论文:P-tuning: GPT Understands, Too 代码:P-Tuning 时间:2021.03.18

论文:The Power of Scale for Parameter-Efficient Prompt Tuning 代码:Prompt Tuning 时间:2021.4.18

论文:LoRA: Low-Rank Adaptation of Large Language Models 代码:Lora 时间:2021.06.17

论文:BitFit: Simple Parameter-efficient Fine-tuning for Transformer-based Masked Language-models 代码:BitFit 时间:2021.06.18

论文:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks 代码:P-Tuning v2 时间:2021.10.14

论文:T-Few: Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning 代码:T-Few 时间:2022.04.11

P-Tuning

这篇文章的提交时间晚于Prefix-Tuning两个月,但是它并不是前者的改进版本,也没有与前者进行对比,这应该是那段时间有大量工作同期出来,时间太相近了,没比较也正常。

首先说一下这篇文章做实验用到的任务,叫LAMA知识探测任务,就是挖掘三元组知识,举个例子就明白了:“[INPUT]的首都是[LABEL]”,也就是输入与标签用一段描述性的文本相关联,这就是三元组。

那相同意思的话可以变着法说,比如下图描述某个城市属于哪个国家的例子,可以有好几种说法,但是发现换了不同说法,最后的准确度差别挺大的,最后一列是本文的方法P-tuning,能够获得一个相对稳定的精度。

本文方法也是非常简单的,下图左边的作者把它叫做离散的prompt,橙色的块也就是prompt,左边的prompt生成器只能接受到离散的反馈,需要人为来调整使用不同的prompt,看看如何获得最佳效果。但是右图的P-Tuning不一样,它将prompt变成了两部分,一部分是伪prompt,其实是特征P,一部分是和前面方法相同的离散prompt,比如右图中的capital一词,本文方法可以通过反向传播来更新伪prompt,也就是特征P和其对应的prompt encoder来在特定任务上进行微调。

公式化描述一下,左图的模板可以表示为:$T = {[D_{0:i}],x,[D_{(i+1):j}],y,[D_{(j+1):k}]}$,里面的$x,y$就是[INPUT]和[LABEL],$D$是描述。通过词汇表,也就是embeding层之后会变成: ${e(D_0)…e(D_1),e(x_0),…,e(x_n),…,e(D_k)}$,假如每个词向量的特征长度为$d$,词汇表大小为$V$,那embeding层的大小也就是$V \times D$。

那P-Tuing的公式化也就是$T = {[P_{0:i}],e(x),[P_{(i+1):j}],y,[P_{(j+1):k}]}$,P-Tuning还会用到一个prompt encoder层$f$,来实现$[P_i] \rightarrow h_i$,所以模板变成了:${h_0,…,h_i,e(x),h_{i+1},…,h_j,e(y),h_{j+1},…,h_k}$,训练通过更新${h_i}_{i=1}^k$来在不同子任务上微调。作者提到将离散prompt与连续prompt连接起来表现更好,也就是我前面文字描述那一段。

特别注意一点,P-Tuning是只在输入层加了可学习参数的,而Prefix Tuning是每一层都加的。想不明白的再回去看看Prefix Tuning,在第二篇。

实验

还来看看这个表,估计有的读者读到这里会懵逼,因为P-Tuning明明就是在学特征$h$,为什么还会有不同的离散prompt组合,而且不同的离散prompt组合也在影响最后的P-Tuning精度?这是因为作者这里用的是离散prompt和连续prompt拼接起来作为输入,原文提到““PT” refers to P-Tuning, which trains additional continuous prompts in concate- nation with discrete prompts.”

作者比较了直接微调embeding,以及使用lstm和mlp作为$f$层的效果,可以看到直接微调embeding效果最差,使用lstm和mlp在不同任务上各有千秋。这点的结论其实和前面介绍的prefix-tuning一致,就是不能直接微调词嵌入,必须整个网络来变换一下特征,我感觉如果把prefix-tuning里面用的瓶颈层放到这里也应该是有效果的。

comments powered by Disqus