您當前的位置:首頁 > 歷史

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

作者:由 Gordon Lee 發表于 歷史時間:2021-10-17

前言

Prompt to Promote系列文章主要集合了我閱讀過的一些論文以及形成的一些個人筆記,希望透過重新整理之前的筆記,來 promote我自己。文中的錯誤請大家一定指出!這個系列文章也許有下面幾類:

連續最佳化的代表作:prefix-tuning,p-tuning v1&v2

離散最佳化的代表作:autoprompt,LM-BFF

prompt tuning v。s。 finetuning的代表作:PPT 和 prompt tuning

經典的PET工作以及改進:PET,PET後續改進,。。。

verbalizer的設計:Knowledgeable Prompt-tuning,。。。

跨任務的prompt:meta-learning 遇到 prompt tuning

跨語言的prompt:multilingual 遇到 prompt tuning

prompt tuning for NER,RE,SC,。。。

prompt tuning的原理探討

。。。

請大家用手中的點贊監督我努力填坑!!!

Prefix-Tuning

Prefix-Tuning: Optimizing Continuous Prompts for Generation

動機

在prefix-tuning之前的工作主要是人工設計模版或者自動化搜尋模版,問題在於最終的效能對人工設計的模版的變化特別敏感,加一個詞或者少一個詞,或者變動位置啥的都會造成比較大的變化。自動化搜尋模版成本也比較高,同時以前這種離散化的token的搜尋出來的結果可能並不是最優的。

傳統的微調正規化利用預訓練模型去對不同的下游任務進行微調,對每個任務都要儲存一份微調後的模型斷點,一方面微調整個模型耗時長,另一方面也會佔很多儲存空間

基於上述兩點,prefix-tuning提出固定預訓練LM不動,為LM新增可訓練,任務特定的字首,這樣子就可以為不同任務儲存不同的字首,微調成本也小,同時這種prefix實際就是連續的可微的virtual token,相比離散的token,更好最佳化,效果更好。

方法

這篇主要研究物件是GPT2和BART做生成任務:table-to-text和summarization

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

針對自迴歸LM來說,新增字首的直覺是:合適的上下文能夠在fixed LM的情況下去引導生成(比如GPT3的in context learning);針對編碼器-解碼器模型來說,編碼器和解碼器的輸入都增加了字首,其直覺是:編碼器端增加字首是為了引導輸入部分的編碼(指導輸入端要提取何種資訊),解碼端增加字首是為了引導後續token的生成。

Deep Continuous Prompt:一般直覺的做法是在詞嵌入層,把離散的token變成可訓練的virtual token,這樣可訓練的引數雖然最少,但是效果肯定沒有在每一層都加入可微調的引數更好。所以這篇是在每層都加入了可訓練的引數,最佳化的時候就是最佳化所有層的字首。

套MLP來最佳化:作者發現直接最佳化可訓練的引數會導致不穩定和效能下降,套了一個MLP對映矩陣,訓練完以後,最後推理使用的還是對映以後的矩陣

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

實驗

設定了幾個基線:微調,微調上面的兩層,adapter-tuning:加adapter layer

效果優於輕量微調的基線,和微調的基線差不多,在低資源情況下,效果優於微調

在低資源的摘要生成上,prefix-tuning相比微調生成的結果更加忠實於輸入

這幾個輕量微調的基線都能不錯地泛化到unseen的domain上,這說明保留預訓練LM的引數確實有用

更長的字首意味著更多的可微調引數,效果也變好,不過長度還是有閾值限制的(table-to-text是10,summarization是200)

discrete prompting < embedding-only ablation (只有詞嵌入層的prefix是可訓練的引數) < prefix-tuning。這裡也提到離散token最佳化的上限其實就是embedding-only ablation。

連續可微的引數作為字首比作為中綴更好一點

字首的初始化方式在低資源情況有很大影響。 隨機初始化導致低效能和高方差,使用任務相關的詞來初始化更好點:例如“摘要”和“表格到文字”

相比adapter tuning,prefix tuning引數更少,但是效果更好,原因可能是儘量保證預訓練LM的完整性

總結

template design:continuous

verbalizer design:none

tuning strategy:Fixed-LM Prompt Tuning

P-tuning V1

GPT Understands, Too

動機

一個刻板印象是GPT不適合理解類任務,這篇就是去思考這種刻板印象是否正確

GPT-3採用人工構造的模版來做in context learning,人工設計的模版的變化特別敏感,加一個詞或者少一個詞,或者變動位置啥的都會造成比較大的變化(這裡作者做了一個簡單的驗證實驗,具體看論文)。近來的自動化搜尋模版工作成本也比較高,同時以前這種離散化的token的搜尋出來的結果可能並不是最優的。

和prefix-tuning差不多,反正是基於這兩點去設計了一種連續可微的模版

方法

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

相比prefix-tuning,這裡加了可微的virtual token,但是僅限於輸入,沒有在每層加;另外virtual token的位置也不一定是字首,插入的位置是可選的。這裡的出發點實際是把傳統人工設計模版中的真實token替換成可微的virtual token。

最佳化這種virtual token的挑戰:經過預訓練的LM的詞嵌入已經變得高度離散,如果隨機初始化virtual token,容易最佳化到區域性最優值;這些virtual token理論是應該有相關關聯的,如何建模這種關聯也是問題。當然實際在實驗中,作者發現的是用一個prompt encoder來編碼收斂更快,效果更好。也就是說,用一個LSTM+MLP去編碼這些virtual token以後,再輸入到模型

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

作者還發現其實可以加一些anchor token,比如文字蘊含任務:輸入是前提和假設,判斷是否蘊含。一個連續化的模版是:【前提的輸入】【continuous tokens】【假設的輸入】【continuous tokens】【MASK】,作者提出加一個anchor token:【?】效果會更好,也就是【前提的輸入】【continuous tokens】?【假設的輸入】【continuous tokens】【MASK】

至於continuous tokens插入位置,token的數量是多少,應該也有影響,作者這裡採用的是用3個continuous token去分割開多個輸入,比如上面這裡文字蘊含的例子。

實驗

這裡測試了兩個經典的benchmark:一個是用來knowledge probe的LAMA,實際就是做完形填空的預測,比如:Obama was born in【MASK】,讓模型去預測;一個是NLU的benchmark:superGLUE

knowledge probe:為了評測預訓練模型的效果,所以評測的時候是fixed LM的,訓練連續的prompt時也是fixed LM的。注:LAMA-29k是覆蓋了GPT2和BERT詞表的測試集

在LAMA上,P-tuning+各種PLM相比傳統的手工模版最少都提升了20個百分點

p-tuning效果優於利用手工設計的模版來預測的模型,也優於基於梯度來搜尋的離散模版

p-tuning效果優於或相當於微調的模型,可能原因是微調容易造成災難性遺忘的問題,P-tuning 不會改變預訓練模型的引數,而是透過尋找更好的連續提示來喚起儲存的知識

p-tuning對GPT這種單向模型相比傳統微調的增益是很大的,也能作用於超大規模的,無法微調的模型

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

superGLUE:

supervised setting:整個訓練集訓練,整個驗證集進行模型選擇和網格的超引數搜尋,注意這裡實際是微調整個模型+prompt;對於bert模型,p-tuning在5個任務上優於標準微調,其他兩個任務除外,原因可能是這兩個任務訓練集特別大,這時候微調優勢更大。相比傳統微調,p-tuning能夠提高gpt在nlu任務上的表現,和bert的效果持平甚至更好,打破了以前的刻板印象

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

few-shot setting:在fewGLUE上評測,給定了32個訓練樣本,另外32個驗證樣本是從superGLUE中找的,超引數直接用的PET這篇的,微調3500steps

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

基線PET的設定:為確保公平比較,PET 在32個驗證集樣本情況 下實驗,同時移除所有輔助技術(資料增強、整合和蒸餾),由於使用了多個prompt,所以報告的是平均效能和最佳效能

P-tuning 在所有任務上的手動提示始終優於 PET 和 PET-best,同時在某些任務上P-tuning還優於採用了這些輔助技術的PET模型,也就是iPET。相比GPT-3,P-tuning(albert-xxlarge-v2)在多個任務上還優於GPT-3。這些證明了兩點:一是P-tuning能夠搜尋到比手工更好的模版,二是P-tuning提供了對一些難以微調的大模型的新利用方式

手工制定的prompt v。s。 p-tuning:

few-shot的表現與prompt的語義、格式、語法沒有明顯的相關性。 人類認為合理的prompt不一定對語言模型有效。 其次,手工制定的prompt的微小變化會導致顯著的效能差異。 預訓練語言模型對提示的選擇非常敏感。

與採用相同anchor的人工模版相比,P-tuning有明顯優勢

對於只有少量的驗證集樣本,很難選擇出很好的手工制定的prompt。

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

總結

template design:continuous

verbalizer design:none

tuning strategy:superGLUE上是Prompt+LM Tuning,LAMA上是Fixed LM Prompt Tuning

在同時微調Prompt+LM的前提下,supervised setting中無論是GPT2還是BERT模型,P-tuning在大部分情況下都顯著提升了傳統Fine-tuning的效果

在同時微調Prompt+LM的前提下,few-shot setting中P-tuning全面優於經典的PET演算法以及GPT-3的in context learning

相比於傳統的few-shot setting,提出了一種更實際的設定:32個dev樣本;同時強調對於只有少量的驗證集樣本,很難選擇出很好的手工制定的prompt;而P-tuning相比人工prompt有顯著的優勢

在LAMA測試中採用的Fixed LM Prompt Tuning為超大模型微調提供了正規化

P-tuning V2

P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks

動機

規模通用性:在Fixed LM Prompt Tuning並採用全量資料的前提下,Prompt Tuning (The Power of Scale for Parameter-Efficient Prompt Tuning) 被證明能夠匹敵Fine-tuning的效果,而只需要很少的引數微調:但是要求是10B以上的引數量的預訓練模型,以及特殊的初始化技巧等。對於普通模型,能不能在Fixed LM Prompt Tuning+全量資料情況下匹敵Fine-tuning?

任務通用性:儘管P-tuning在SuperGLUE上表現很好,對於一些比較難的token-level的任務表現就差強人意了,比如閱讀理解和NER,當然現在也有一些工作在用prompt做序列標註(template-NER,lightNER,template-free NER)。還有一個問題是,不是所有標籤都有明確的語義,verbalizer這邊對映的label words都是有具體含義的,對於一些沒有label語義的分類任務應該怎麼辦,比如使用者評論的聚類等。

為了解決上面兩個痛點,提出了P-tuning的V2版本

方法

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

Deep Prompt Tuning on NLU

採用Prefix-tuning的做法,在輸入前面的每層加入可微調的引數

去掉重引數化的編碼器

以前的方法利用重引數化功能來提高訓練速度和魯棒性(例如,用於prefix-tunning的 MLP 和用於 P-tuning的 LSTM)。在 P-tuning v2 中,作者發現重引數化的改進很小,尤其是對於較小的模型,同時還會影響模型的表現

可選的多工學習

Deep Prompt Tuning的最佳化難題可以透過增加額外的任務資料或者無標註資料來緩解,同時可微調的prefix continuous prompt也可以用來做跨任務的共享知識。比如說,在NER中,可以同時訓練多個數據集,不同資料集使用不同的頂層classifer,但是prefix continuous prompt是共享的

迴歸傳統的CLS和token label classifier

主要是為了解決一些沒有語義的標籤的問題

實驗

注意:這裡的setting是全量資料+Fixed LM Prompt Tuning

規模通用性:

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

對於簡單的 NLU 任務,例如 SST-2(單句分類),P-tuning&prompt-tuning在較小的規模上沒有顯示出明顯的優勢。 當涉及到自然語言在推理和問答方面的複雜挑戰時,它們的表現可能會很差

相反,P-tuning v2 在較小規模的所有任務中與微調的效能相匹配。P-tuning v2 在 RTE 中還明顯優於微調,尤其是對於 BERT

在更大規模的引數上(2B 到 10B),P-tuning&prompt-tuning和微調之間的差距逐漸縮小。 在 10B 尺度上,prompt-tuning變得比微調更具競爭力。當然,P-tuning v2 總是在所有規模上可以媲美微調的效果,而只需微調0。1%的特定任務引數。

任務通用性:

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

在NER,QA和SRL三個任務上測試

NER:對於多工設定,結合三個資料集的訓練集進行訓練。 對每個資料集使用不同的線性分類器,同時共享continuous prompt的引數

QA:對於多工設定,混合SQuAD 1。1和2。0的資料集進行訓練,不管是否有不可回答的問題

SRL:同NER的多工設定

從表裡可以看到P-tuning V2的優勢以及多工學習的優勢(除了QA,作者認為是混合了不可回答的問題的原因)

總結

Continuous Optimization:從Prefix-tuning到更強大的P-Tuning V2

template design:continuous

verbalizer design:none

tuning strategy:Fixed LM Prompt Tuning + 全量資料

P-tuning V2在不同規模的預訓練模型上都能取得媲美fine-tuning的表現,同時也能在一些比較難的NLU任務上取得更好的效果,未來研究的一個很強的baseline

標簽: tuning  prompt  微調  token  LM