LLM高效微調詳解-從Adpter、PrefixTuning到LoRA
一、背景
目前NLP主流范式是在大量通用數(shù)據(jù)上進行預訓練語言模型訓練,然后再針對特定下游任務進行微調,達到領域適應(遷移學習)的目的。
Context Learning v.s. SFT
指令微調是預訓練語言模型微調的主流范式,其目的是盡量讓下游任務的形式盡量接近預訓練任務。
從而減少下游任務和預訓練任務之間的Gap, 實現(xiàn)預訓練語言模型適應下游任務,而非下游任務去適應模型
指令微調的效果要優(yōu)于基于Zero/Few-shot的提示詞工程的上下文學習。
但隨著預訓練語言模型進入LLM時代,其參數(shù)量愈發(fā)龐大。全量微調模型所有參數(shù)所需的顯存早已水漲船高。
例如:
全參微調Qwen1.5-7B-Chat預估要2張80GB的A800,160GB顯存 全參微調Qwen1.5-72B-Chat預估要20張80GB的A800,至少1600GB顯存
而且,通常不同的下游任務還需要LLM的全量參數(shù),對于算法服務部署來說簡直是個災難(當然,一種折衷做法就是全量微調后把增量參數(shù)進行SVD分解保存,推理時再合并參數(shù) )。
為了尋求一個不更新全部參數(shù)的廉價微調方案,之前一些預訓練語言模型的高效微調(Parameter Efficient, PEFT)工作,要么插入一些參數(shù)或學習外部模塊來適應新的下游任務。
接下來將介紹如下4個PEFT方法(重點是主流的LoRA):
- Adatper Tuning
- Prompt Tuning
- Prefix Tuning
- LoRA
二、參數(shù)高效微調
2.1 Adapter Tuning
Adapter Tuning試圖在Transformer Layer的Self-Attetion+FFN之后插入一個先降維再升維的MLP(以及一層殘差和LayerNormalization)來學習模型微調的知識。
Adapter即插入的FF up + FF Down。
在微調時,Transformer Layer原有的所有參數(shù)凍結,反向傳播后僅更新Adapter參數(shù)。
缺點:需要修改原有模型結構,同時還會增加模型參數(shù)量。
2.2 Promot Tuning
Prompt Tuning設計了一種prefix prompt方法,即在模型輸入的token序列前添加前綴prompt token,而這個前綴prompt token的embedding是由網(wǎng)絡學到。
Prompt Tuning可以看做token已經(jīng)確定,但是embedding是可以學的。
它相當于僅用prompt token的embedding去適應下游任務,相比手工設計或挑選prompt,它是一種Soft的prompt(軟提示)
在針對下游任務微調時,Prompt Tuning將凍結原始LLM的參數(shù),只學習獨立的prompt token參數(shù)(參數(shù)化的prompt token加上輸入的token送入模型進行前向傳播,反向傳播只更新prompt token embedding的參數(shù))。
在針對不同的下游任務微調時,就可以分別學習不同的Task Specifical的Prompt Token參數(shù)。
- Soft Prompt Tuning在模型增大時可以接近Model Tuning(fine-tuning)的效果
- 離散Prompt Tuning(Prompt Design)基本不能達到Model Tuning的效果
Promot Tuning方法的參數(shù)成本是,其中是提示長度,是token嵌入維度。
提示越短,必須調整的新參數(shù)就越少,那么調參的目標是就是找到表現(xiàn)仍然良好的最小prefix prompt長度。
2.3 Prefix-Tuning
為了避免人為的離散Prompt選取優(yōu)化,Prefix-Tuning提出可學習的Prefix Prompt。
Prefix-Tuning提出可學習的Prompt,即:
learns a sequence of prefixes that are prepended at every transformer layer
Prefix tuning為層的Transformer Layer的每層多頭注意力的鍵和值都配置了可學習的prefix vectors.
Two sets of prefix vectors , are concatenatedwith the original key and value
看到這里可以知道,Prefix-Tuning可以算是Promot Tuning的一個特例(Promot Tuning只在輸入側加入可學習的Prefix Prompt Token)
2.4 LoRA
為緩解該問題,LoRA(Low-Rank Adaption of LLMs),即LLMs的低秩適應,被提出用于高效參數(shù)微調。
相關論文表明訓練學到的過度參數(shù)化的模型實際上存在于一個較低的內在維度上
類似于機器學習中的降維算法,假設高維數(shù)據(jù)實際是在低維的流形上一樣
其具體操作是,凍結了預訓練的模型權重,并將可訓練的LoRA秩分解矩陣注入到LLM的每個Transformer Decoder層中,從而大大減少了下游任務的可訓練參數(shù)數(shù)量。
LoRA 方法的計算流程如下圖:
對于使用LoRA的模型來說,由于可以將原權重與訓練后權重合并,因此在推理時不存在額外的開銷。
Prefix Tuning是指在輸入序列前綴添加連續(xù)可微的軟提示作為可訓練參數(shù)。由于模型可接受的最大輸入長度有限,隨著軟提示的參數(shù)量增多,實際輸入序列的最大長度也會相應減小,影響模型性能。
三、適用范圍
近來LLM主要是指,Decoder-Only架構的大規(guī)模預訓練語言模型。
畢竟,同等參數(shù)規(guī)模和訓練數(shù)據(jù)量,Encoder-Decoder架構的T5和Bart在生成任務熵,相比Decoder-Only架構并不具備優(yōu)勢。更不用說,Encoder-Only架構的BERT了。
但是,所有使用Transformer架構的算法都可以使用上述PEFT方法。
針對主流的Decoder Only的生成式因果語言模型,其訓練范式具體是:
圖片源自:《大規(guī)模語言模型:從理論到實踐》
- 有監(jiān)督微調(Supervised Finetuning):基于高質量的指令數(shù)據(jù)(用戶輸入的提示詞 + 對應的理想輸出結果)微調LLM,從而得到有監(jiān)督微調模型(SFT模型)。SFT模型將具備初步的指令理解能力和上下文理解能力(預訓練得到的LLM在指令微調的過程中被引導如何使用其學到的知識)進一步基于結果有排序指令樣本,
- 獎勵建模(Reward Modeling):獎勵階段試圖構建一個文本質量對比模型(相當于一個Critor)。對同一個提示詞,它將對SFT模型給出的多個不同輸出的質量做排序。獎勵模型可通過二分類模型,對輸入的兩個結果之間的優(yōu)劣進行判斷。
- 強化學習(Reinforcement Learning):強化學習階段將根據(jù)給定的提示詞樣本數(shù)據(jù),利用在前一階段訓練的獎勵模型,給出SFT模型對用戶提示詞補全結果的質量評估,并與語言模型建模目標綜合得到更好的效果。強化學習微調將在SFT模型基礎上,它將使LLM生成的結果文本能獲得更高的獎勵。
除了預訓練,增量預訓練、有監(jiān)督微調、有監(jiān)督微調、獎勵建模、強化學習階段都可以采用PEFT方式。
本文轉自 AI生成未來 ,作者:LeonYi
