這一章我們介紹在下游任務微調中固定LM引數,只微調Prompt的相關模型。這類模型的優勢很直觀就是微調的引數量小,能大幅降低LLM的微調引數量,是輕量級的微調替代品。和前兩章微調LM和全部凍結的prompt模板相比,微調Prompt正規化最大的區別就是prompt模板都是連續型(Embedding),而非和Token對應的離散型模板。核心在於我們並不關心prompt本身是否是自然語言,只關心prompt作為探針能否引匯出預訓練模型在下游任務上的特定能力。
固定LM微調Prompt的正規化有以下幾個優點
- Paper: 2021.1 Optimizing Continuous Prompts for Generation
- Github:https://github.com/XiangLi1999/PrefixTuning
- Prompt: Continus Prefix Prompt
- Task & Model:BART(Summarization), GPT2(Table2Text)
最早提出Prompt微調的論文之一,其實是可控文字生成領域的延伸,因此只針對摘要和Table2Text這兩個生成任務進行了評估。
先嘮兩句可控文字生成,哈哈其實整個Prompt正規化也是通用的可控文字生成不是,只不過把傳統的Topic控制,文字情緒控制,Data2Text等,更進一步泛化到了不同NLP任務的生成控制~~
Prefix-Tuning可以理解是CTRL[1]模型的連續化升級版,為了生成不同領域和話題的文字,CTRL是在預訓練階段在輸入文字前加入了control code,例如好評前面加'Reviews Rating:5.0',差評前面加'Reviews Rating:1.0', 政治評論前面加‘Politics Title:’,把語言模型的生成概率,優化成了基於文字主題的條件概率。
Prefix-Tuning進一步把control code優化成了虛擬Token,每個NLP任務對應多個虛擬Token的Embedding(prefix),對於Decoder-Only的GPT,prefix只加在句首,對於Encoder-Decoder的BART,不同的prefix同時加在編碼器和解碼器的開頭。在下游微調時,LM的引數被凍結,只有prefix部分的引數進行更新。不過這裡的prefix引數不只包括embedding層而是虛擬token位置對應的每一層的activation都進行更新。
對於連續Prompt的設定,論文還討論了幾個細節如下
作者發現直接更新多個虛擬token的引數效果很不穩定,因此作者在prefix層加了MLP,分解成了更小的embedding層 * 更大的MLP層。原始的Embedding層引數是n_prefix * emb_dim, 調整後變為n_prefix * n_hidden + n_hidden * emb_dim。訓練完成後這部分就不再需要只保留MLP輸出的引數進行推理即可
個人感覺MLP的加入是為了增加多個虛擬token之間的共用資訊,因為它們和常規的連續文字存在差異,需要被作為一個整體考慮,可能對prefix位置編碼進行特殊處理也闊以??
prefix部分到底使用多少個虛擬token,直接影響模型微調的引數量級,以及處理長文字的能力。預設的prefix長度為10,作者在不同任務上進行了微調,最優引數如下。整體上prompt部分的引數量都在原模型的~0.1%
效果上在Table2Text任務上,只有0.1%引數量級的prompt tuning效果要優於微調,
在Xsum摘要任務上,prompt的效果要略差於微調。
- Paper: 2021.4 The Power of Scale for Parameter-Efficient Prompt Tuning
- prompt:Continus Prefix Prompt
- Github: https://github.com/google-research/prompt-tuning
- Task: SuperGLUE NLU任務
- Model: T5 1.1(在原T5上進行了細節優化)
Prompt-Tunning是以上prefix-Tunning的簡化版本,面向NLU任務,進行了更全面的效果對比,並且在大模型上成功打平了LM微調的效果~
對比Prefix-Tunning,prompt-tuning的主要差異如下,
論文使用100個prefix token作為預設引數,大於以上prefix-tuning預設的10個token,不過差異在於prompt-Tunning只對輸入層(Embedding)進行微調,而Prefix是對虛擬Token對應的上游layer全部進行微調。因此Prompt-Tunning的微調引數量級要更小,且不需要修改原始模型結構,這是「簡化」的來源。相同的prefix長度,Prompt-Tunning(<0.01%)微調的引數量級要比Prefix-Tunning(0.1%~1%)小10倍以上,如下圖所示
為什麼上面prefix-tuning只微調embedding層效果就不好,放在prompt-tuning這裡效果就好了呢?因為評估的任務不同無法直接對比,個人感覺有兩個因素,一個是模型規模,另一個是繼續預訓練,前者的可能更大些,在下面的消融實驗中會提到
在SuperGLUE任務上,隨著模型引數的上升,PromptTunning快速拉近和模型微調的效果,110億的T5模型(上面prefix-tuning使用的是15億的GPT2),已經可以打平在下游多工聯合微調的LM模型,並且遠遠的甩開了Prompt Design(GPT3 few-shot)
作者也做了全面的消融實驗,包括以下4個方面,最核心的感受就是只要模型足夠夠大一切都好說
考慮Prompt-Tunning使用Embedding來表徵指令,可解釋性較差。作者使用cosine距離來搜尋prompt embedding對應的Top5近鄰。發現
- Paper: 2021.3, GPT Understands, Too
- prompt:Continus Prefix Prompt
- Task: NLU任務, 知識探測任務
- github: https://github.com/THUDM/P-tuning
- Model: GPT2 & BERT
P-Tuning和Prompt-Tuning幾乎是同時出現,思路也是無比相似。不過這個在prompt綜述中被歸類為LM+Prompt同時微調的正規化,不過作者其實兩種都用了。因此還是選擇把p-tuning也放到這一章,畢竟個人認為LM+Prompt的微調正規化屬實有一點不是太必要。。。
論文同樣是連續prompt的設計。不過針對上面提到的Prompt的整體性問題進行了優化。作者認為直接通過虛擬token引入prompt存在兩個問題
針對這兩個問題,作者使用雙向LSTM+2層MLP來對prompt進行表徵, 這樣LSTM的結構提高prompt的整體性,Relu啟用函數的MLP提高離散型。這樣更新prompt就是對應更新整個lstm+MLP部分的Prompt Encoder。下面是p-tuning和離散prompt的對比
作者分別對LAMA知識探測和SuperGLUE文字理解進行了評測。針對知識抽取,作者構建的prompt模板如下,以下3是虛擬prompt詞的數量,對應prompt encoder輸出的embedding數
在知識探測任務中,預設是固定LM只微調prompt。效果上P-tuning對GPT這類單項語言模型的效果提升顯著,顯著優於人工構建模板和直接微調,使得GPT在不擅長的知識抽取任務中可以基本打平BERT的效果。
針對SuperGLUE作者是做了LM+Prompt同時微調的設定。個人對LM+prompt微調的邏輯不是認同,畢竟1+1<2,同時微調它既破壞了預訓練的語言知識,也沒節省微調的引數量級,感覺邏輯上不是非常講的通(哈哈坐等之後被打臉)。結論基本和以上知識探測相似
開頭說優點,結尾說下侷限性
更多Prompt相關論文,AIGC相關玩法戳這裡DecryptPrompt