LLM微調方法(Efficient-Tuning)六大主流方法:思路講解&優缺點對比[P-tuning、Lora、Prefix tuing等]

汀、人工智能發表於2024-06-17

LLM微調方法(Efficient-Tuning)六大主流方法:思路講解&優缺點對比[P-tuning、Lora、Prefix tuing等]

由於LLM引數量都是在億級以上,少則數十億,多則數千億。當我們想在用特定領域的資料微調模型時,如果想要full-tuning所有模型引數,看著是不太實際,一來需要相當多的硬體裝置(GPU),二來需要相當長的訓練時間。因此,我們可以選擇一條捷徑,不需要微調LLM的全量引數,而只需要新增少量的引數,透過固定原始模型引數,而只需要微調新增的少量引數,從而達到接近使用全引數full-tuning的效果。本章主要講述在LLM時代,當下主流的微調方法。

1.Adapter tuning(2019)

(1) 論文資訊

來自2019年,論文《Parameter-Efficient Transfer Learning for NLP

摘要內容:微調大型預訓練模型在自然語言處理中是一種有效的遷移學習機制。然而,在存在許多下游任務的情況下,微調顯得引數效率低下:因為每個任務都需要一個全新的模型。作為替代方案,我們提出了帶有介面卡模組的遷移學習方法。介面卡模組能夠生成一個緊湊且可擴充套件的模型;它們僅為每個任務增加少量可訓練引數,並且可以在不重新訪問先前任務的情況下新增新任務。原始網路的引數保持不變,從而實現了高度的引數共享。

為了展示介面卡的有效性,我們將最近提出的BERT Transformer模型遷移到了26個不同的文字分類任務中,包括GLUE基準測試。介面卡在僅為每個任務增加少量引數的情況下,達到了接近最先進效能的水平。在GLUE基準測試中,我們在僅為每個任務增加3.6%引數的情況下,實現了與完整微調效能相差不到0.4%的結果。相比之下,微調則需要對每個任務的100%引數進行訓練。

(2) 思路

  • 固定Transformer的全部引數
  • 在Transformer的每一個Block裡嵌入一些新初始化的Adapter Network。
    • 其中Adapter由兩層MLP組成,分別負責將Transformer的表徵降維和升維

(3) 優勢

  • 只需要新增不到5%的可訓練引數,即可以幾乎達到全引數訓練的效果
  • 在訓練過程中大大節省了訓練時間,做到時間有效性。
  • 基本不降低模型在下游任務中的表現

2.Prefix tuning(2021)

(1) 論文資訊

來自論文《Prefix-Tuning: Optimizing Continuous Prompts for Generation

摘要內容:微調是實際上利用大型預訓練語言模型執行下游任務的首選方法。然而,這種方法會修改所有語言模型的引數,因此必須為每個任務儲存完整的副本。在本文中,我們提出了字首微調(prefix-tuning),這是一種針對自然語言生成任務的輕量級微調替代方案。該方法保持語言模型引數不變,但最佳化了一個小的、連續的任務特定向量(稱為字首)。字首微調受到提示機制的啟發,允許後續標記關注這個字首,就像它們是“虛擬標記”一樣。我們將字首微調應用於GPT-2進行表格到文字的生成,以及應用於BART進行文字摘要。我們發現,透過僅學習0.1%的引數,字首微調在全資料設定下取得了與微調相當的效能,在低資料設定下超越了微調,並且更好地推廣到了訓練過程中未見過的主題示例。

(2) 思路

固定預訓練引數,為每一個任務額外新增一個或多個embedding,且利用多層感知編碼prefix。不再像prompt tuning繼續輸入LLM。

(3) 結構

在seq前面加idx個虛擬token,以此構造一個連續的token,作為微調引數(結構一樣是transformer)

固定LLM的引數

由於發現直接加prefix層,模型不穩定,故在其後加了MLP層,用於reparametrization引數 $P_θ$
$$P_θ[i:]=MLP_θ(P'_θ[i,:])$$

原始$P_θ$維度為$ \mid P_{idx} \mid \times dim(h_{i})$,$P'θ$維度為$ \mid P\mid \times k$,經過$MLP$復原原始維度。

針對不同任務,有不同最優的k值,經過實驗,作者建議

  • Table-to-table任務,k=512
  • Summarization任務,k=800

(4) 優勢

  • 在Table2Text任務上,只有0.1%引數量級的prompt tuning效果要優於微調

(5) 缺點

  • 摘要任務上,prompt的效果要略差於微調

3.Prompt tuning(2021)

(1) 論文資訊

來自論文《The Power of Scale for Parameter-Efficient Prompt Tuning

  • 摘要:
    在這項工作中,我們探索了“提示微調”(prompt tuning),這是一種簡單而有效的機制,用於學習“軟提示”來條件化凍結的語言模型以執行特定的下游任務。與GPT-3使用的離散文字提示不同,軟提示是透過反向傳播學習的,並且可以根據任意數量的標記示例進行調整。我們的端到端學習方法在效能上大幅超越了GPT-3的少量樣本學習。

更值得一提的是,透過使用T5模型進行模型大小的消融實驗,我們展示了提示微調隨著規模的增加變得更加具有競爭力:當模型引數超過數十億時,我們的方法“縮小了差距”並達到了模型微調(即調整所有模型權重)的強大效能。這一發現尤為重要,因為大型模型的共享和部署成本高昂,而能夠重用一個凍結的模型來執行多個下游任務可以減輕這一負擔。

我們的方法可以看作是最近提出的Li和Liang(2021)的“字首微調”方法的簡化版本,我們提供了與此方法以及其他類似方法的比較。最後,我們展示了使用軟提示條件化凍結模型在提高域遷移魯棒性和實現高效“提示整合”方面的優勢。

(2) 思路

固定預訓練LLM的引數,為每一個任務額外新增一個或多個embedding。之後拼接query正常輸入LLM,並只訓練這些embedding

(3) 優勢

  • 效果優於GPT-3的few-shot learning
  • 當模型引數量達100億時,接近於全模型微調效果

4.P-tuning(2021)

V2版本:2023更新

(1) 論文資訊

來自論文《GPT Understands, Too》,發表於2021年

摘要:使用自然語言模式對預訓練語言模型進行提示已被證明在自然語言理解(NLU)任務中有效。然而,我們的初步研究表明,手動設計的離散提示往往導致效能不穩定——例如,僅改變提示中的一個單詞就可能導致效能大幅下降。為此,我們提出了一種新穎的方法P-Tuning,該方法在離散提示的基礎上結合了可訓練的連續提示嵌入。實驗表明,P-Tuning不僅透過最小化不同離散提示之間的差距來穩定訓練過程,而且在一系列NLU任務(包括LAMA和SuperGLUE)上顯著提高了效能。P-Tuning在完全監督和少量樣本設定下,對凍結和微調的語言模型均普遍有效。

(2) 思路

固定LLM引數,用多層感知機和LSTM對prompt進行編碼,編碼後與其他向量進行拼接,正常輸入LLM。

注意,訓練之後只保留prompt編碼之後的向量,無需保留編碼器。

(3) 結構

對於prompt模板,使用MLP+LSTM進行編碼,替代原始的input embedding

對於原始的輸入input和target,則使用原始的input embedding

(4) 使用方式

離散和連續template token混合時,顯示地插入一下anchor(離散的token)有助於template的最佳化

(5) 優勢

  • 能緩解離散prompt方法,導致的模型輸出結果到達區域性最優

(6) 缺點

  • 查詢的最優提示,可能是次優的
  • 在小引數量模型中表現差(小引數模型如Bert,330M),上了10B的模型效果才開始可以持平
  • 序列標註等對推理和理解要求高的任務,prompt-tuning效果會變差

5.P-tuning v2 (2022)

(1) 論文資訊

來自論文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》,發表於2022年。

摘要:提示微調(Prompt Tuning),該方法僅對凍結的語言模型中的連續提示進行微調,極大地減少了訓練時每個任務的儲存和記憶體使用。然而,在NLU(自然語言理解)的背景下,先前的工作表明,對於正常大小的預訓練模型,提示微調的效能並不理想。我們還發現現有的提示微調方法無法處理複雜的序列標註任務,這表明其缺乏普適性。

我們提出了一個新穎的實驗發現:經過適當最佳化的提示微調可以在廣泛的模型規模和NLU任務中普遍有效。它在效能上與微調相當,但僅需要調整0.1%-3%的引數。我們的方法P-Tuning v2是Deep Prompt Tuning(Li和Liang, 2021; Qin和Eisner, 2021)的一種實現,針對NLU進行了最佳化和適配。鑑於P-Tuning v2的普適性和簡單性,我們相信它可以作為微調的替代方案,併為未來的研究提供一個強大的基線。

(2) 思路

  • 固定LLM引數
  • 類似Prefix-tuning
    • 在Deep FT層:在seq前面加n個虛擬token,以此構造一個連續的token,作為微調引數(結構一樣是transformer)
  • 在多種任務上下進行微調
  • 完全變為生成模型,無需verbalizer

(3) 優勢

  • 在小、大模型上,效果均優於P-tuning。
  • 當引數量達10B,效果相當於FT

6.LoRA(2021)

(1) 論文資訊

來自論文《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

摘要:自然語言處理的一個重要正規化包括在通用領域資料上進行大規模預訓練,並適應特定任務或領域。隨著我們預訓練更大的模型,全面微調(即重新訓練所有模型引數)變得不太可行。以GPT-3 175B為例,部署獨立的微調模型例項,每個例項都有175B引數,成本是極其昂貴的。我們提出了低秩適應(Low-Rank Adaptation,簡稱LoRA),該方法凍結預訓練模型的權重,並在Transformer架構的每一層中注入可訓練的低秩分解矩陣,從而大大減少了下游任務的可訓練引數數量。與使用Adam對GPT-3 175B進行微調相比,LoRA可以將可訓練引數數量減少10,000倍,GPU記憶體需求減少3倍。儘管LoRA的可訓練引數較少,訓練吞吐量更高,並且與介面卡不同,沒有額外的推理延遲,但它在RoBERTa、DeBERTa、GPT-2和GPT-3上的模型質量上仍然與微調相當或更好。我們還對語言模型適應中的秩不足問題進行了實證調查,這揭示了LoRA的有效性

(2) 思路

固定LLM引數,在每一個self-attention層中,加入一個low-rank的矩陣,即$B \times A$。在微調時,只更新$B \times A$的引數。

(3) 結構

在每一層self-attention中,新增新的引數 $\bigtriangleup W$

$$h=W_0x+\bigtriangleup Wx=W_0x+BAx$$

其中,預訓練模型的原始引數為$W_0 \in R^{d \times k}$。

LoRA的新增引數為$B \in R^{d \times r}$,$A \in R^{r \times k}$。$B$ 初始化為一個全0矩陣,$A$ 是一個高斯隨機初始化的矩陣。$B$ 初始化為全0矩陣的目的是,在開始訓練時,讓$B \times A$等於0矩陣,即引數從0開始。

其中LoRA的中間維度$r$,遠小於原始模型的維度,即$r\ll min(d,k)$

(4) 學習目標

原始的LLM,一般也是CLM (Causal Language Model/Conditional Language Model),學習目標為

而加入LoRA後,學習目標為

(5) 配置

  • 在多個部位$(Q/K/V/Output)$同時新增$\bigtriangleup W$ ,會比只在單一部分上新增權重$\bigtriangleup W$,效果要好
  • 在wikiSQL/MultiNLI資料集上測試得出結論:小的γ值,能達到較好好的效果(一般為4-8)

(6) 優勢

  • 用於低資源的場景。也就是硬體裝置資源有限的情況下。
  • 更新引數量少。對於175B的GPT模型,使用該方法只需要額外更新0.01%的引數量。
  • 是全引數微調(FT)的一種替代方案

(7) 缺點

  • 全引數微調(FT)效果要比LoRA稍微要好

相關文章