人工智能大語言模型微調技術:SFT 監督微調、LoRA 微調方法、P-tuning v2 微調方法、Freeze 監督微調方法
1.SFT 監督微調
1.1 SFT 監督微調基本概念
SFT(Supervised Fine-Tuning)監督微調是指在源資料集上預訓練一個神經網絡模型,即源模型。然後建立一個新的神經網絡模型,即目标模型。目标模型複制了源模型上除了輸出層外的所有模型設計及其參數。這些模型參數包含了源資料集上學習到的知識,且這些知識同樣适用于目标資料集。源模型的輸出層與源資料集的标簽緊密相關,是以在目标模型中不予采用。微調時,為目标模型添加一個輸出大小為目标資料集類别個數的輸出層,并随機初始化該層的模型參數。在目标資料集上訓練目标模型時,将從頭訓練到輸出層,其餘層的參數都基于源模型的參數微調得到。
1.2 監督微調的步驟
具體來說,監督式微調包括以下幾個步驟:
- 預訓練: 首先在一個大規模的資料集上訓練一個深度學習模型,例如使用自監督學習或者無監督學習算法進行預訓練;
- 微調: 使用目标任務的訓練集對預訓練模型進行微調。通常,隻有預訓練模型中的一部分層被微調,例如隻微調模型的最後幾層或者某些中間層。在微調過程中,通過反向傳播算法對模型進行優化,使得模型在目标任務上表現更好;
- 評估: 使用目标任務的測試集對微調後的模型進行評估,得到模型在目标任務上的性能名額。
1.3 監督微調的特點
監督式微調能夠利用預訓練模型的參數和結構,避免從頭開始訓練模型,進而加速模型的訓練過程,并且能夠提高模型在目标任務上的表現。監督式微調在計算機視覺、自然語言處理等領域中得到了廣泛應用。然而監督也存在一些缺點。首先,需要大量的标注資料用于目标任務的微調,如果标注資料不足,可能會導緻微調後的模型表現不佳。其次,由于預訓練模型的參數和結構對微調後的模型性能有很大影響,是以選擇合适的預訓練模型也很重要。
1.4 常見案例
- 樣例 1
在計算機視覺中,低層的網絡主要學習圖像的邊緣或色斑,中層的網絡主要學習物體的局部和紋理,高層的網絡識别抽象的語義,如下圖所示。是以,可以把一個神經網絡分成兩塊:
- 低層的網絡進行特征抽取,将原始資訊變成容易被後面任務使用的特征;
- 輸出層的網絡進行具體任務的預測。輸出層因為涉及到具體任務沒辦法在不同任務中複用,但是低層的網絡是具有通用型的,可以應用到其他任務上。
- 下圖表示的是将預訓練模型的前 L-1 層的參數複制到微調模型,而微調模型的輸出層參數随機初始化。在訓練過程中,通過設定很小的學習率,進而達到微調的目的。
- 樣例 2
BERT 模型是 Google AI 研究院提出的一種預訓練模型,通過預訓練 + 微調的方式于多個 NLP 下遊任務達到當時最先進水準,如實體識别、文本比對、閱讀了解等。與樣例 1 一樣,BERT 模型微調時,将預訓練好的模型參數複制到微調模型,而輸出層參數随機初始化。
1.5 SFT 監督微調的主流方法
随着技術的發展,湧現出越來越多的大語言模型,且模型參數越來越多,比如 GPT3 已經達到 1750 億的參數量,傳統的監督微調方法已經不再能适用現階段的大語言模型。為了解決微調參數量太多的問題,同時也要保證微調效果,急需研發出參數高效的微調方法(Parameter Efficient Fine Tuning, PEFT)。目前,已經湧現出不少參數高效的微調方法,其中主流的方法包括:
- LoRA
- P-tuning v2
- Freeze
2. LoRA 微調方法
2.1 LoRA 微調方法的基本概念
LoRA(Low-Rank Adaptation of Large Language Models),直譯為大語言模型的低階自适應。LoRA 的基本原理是當機預訓練好的模型權重參數,在當機原模型參數的情況下,通過往模型中加入額外的網絡層,并隻訓練這些新增的網絡層參數。由于這些新增參數數量較少,這樣不僅 finetune 的成本顯著下降,還能獲得和全模型參數參與微調類似的效果。
随着大語言模型的發展,模型的參數量越來越大,比如 GPT-3 參數量已經高達 1750 億,是以,微調所有模型參數變得不可行。LoRA 微調方法由微軟提出,通過隻微調新增參數的方式,大大減少了下遊任務的可訓練參數數量。
2.2 LoRA 微調方法的基本原理
神經網絡的每一層都包含矩陣的乘法。這些層中的權重矩陣通常具有滿秩。當适應特定任務時,預訓練語言模型具有低的 “内在次元”,将它們随機投影到更小的子空間時,它們仍然可以有效地學習。
在大語言模型微調的過程中,LoRA 當機了預先訓練好的模型權重,并将可訓練的秩的分解矩陣注入到 Transformer 體系結構的每一層。例如,對于預訓練的權重矩陣W0,可以讓其更新受到用低秩分解表示後者的限制:
$W0+△W=W0+BA$
其中:
$W0∈Rd×k,B∈Rd×r,A∈Rr×k$
而且,秩r≪min(d,k),
此時,修正後的正向傳播計算公式就變成:
$h=W0x+△Wx=W0x+BAx$
在模型微調時,W0被當機,不接受梯度更新,隻微調參數A和B。與所有參數參與模型微調相比,此時該步驟模型微調的參數量由d×k變成d×r+r×k,而r≪min(d,k),是以微調參數量大量減少了。
如下圖所示,LoRA 微調時,對A使用随機高斯初始化,對B使用零初始化,是以ΔW=BA在訓練開始時為零。
對 Transformer 的每一層結構都采用 LoRA 微調的方式,最終可以使得模型微調參數量大大減少。當部署到生産環境中時,隻需要計算和存儲W=W0+BA,并像往常一樣執行推理。與其它方法相比,沒有額外的延遲,因為不需要附加更多的層。
在 Transformer 體系結構中,自注意力機制子產品中有四個權重矩陣 (Wq、Wk、Wv、Wo), MLP 子產品中有兩個權重矩陣。LoRA 在下遊任務微調時,隻調整自注意力機制子產品的權重,并當機 MLP 子產品。是以對于大型 Transformer,使用 LoRA 可減少高達 2/3 的顯存(VRAM)使用量。比如在 GPT-3 175B 上,使用 LoRA 可以将訓練期間的 VRAM 消耗從 1.2TB 減少到 350GB。
2.3 LoRA 微調方法的主要優勢
- 預訓練模型參數可以被共享,用于為不同的任務建構許多小的 LoRA 子產品。當機共享模型,并通過替換矩陣 A 和 B 可以有效地切換任務,進而顯著降低存儲需求和多個任務切換的成本。
- 當使用自适應優化器時,由于不需要計算梯度以及儲存太多模型參數,LoRA 使得微調效果更好,并将微調的硬體門檻降低了 3 倍。
- 低秩分解采用線性設計的方式使得在部署時能夠将可訓練的參數矩陣與當機的參數矩陣合并,與完全微調的方法相比,不引入推理延遲。
- LoRA 與其它多種微調方法不沖突,可以與其它微調方法相結合,比如下節實訓将要介紹的字首調優方法等。
3. P-tuning v2 微調方法
3.1 P-tuning v2 微調方法的相關技術
傳統的微調方法需要微調整個預訓練語言模型,對于大語言模型的微調需要大量的資源和時間,急需更加高效的微調方法。了解 P-tuning v2 微調方法,首先需要了解 prefix-tuning 微調方法和 P-tuning v1 微調方法。
3.1.1 Prefix-tuning 微調方法
Prefix-tuning 微調方法在模型中加入 prefix,即連續的特定任務向量,微調時隻優化這一小段參數。對于條件生成任務,如下圖所示,其輸入是文本x,輸出是序列y。
在上圖中,z=[x;y]是x和y的拼接,Xidx和Yidx表示序列的索引,hi∈Rd表示每個時刻i下的激活值,hi=[hi(1);...;hi(n)]表示目前時刻所有層輸出向量的拼接,hi(j)是時刻i的第j層 Transformer 的輸出,于是自回歸語言模型計算每一時刻的輸出hi即:
$hi=LMϕ(zi,h<i)$
hi的最後一層用來計算下一個詞的分布:
$pϕ(zi+1∣h≤i)=softmax(Wϕhi(n))$
其中ϕ是語言模型的參數。在自回歸語言模型前添加 prefix 後,z=[PREFIX;x;y]或者z=[PREFIX;x;PREFIX;y],Pidx表示 prefix 的索引,|Pidx|表示 prefix 的長度。Prefix-tuning 通過初始化可訓練矩陣Pθ(次元為∣Pidx×dim(hi)∣) 來存儲 prefix 參數:
$hi={Pθ[i,:],ifi∈PidxLMϕ(zi,h<i),otherwise$
訓練對象與 Fine-tuning 相同,但語言模型的參數ϕ固定,僅 prefix 參數θ是可訓練的參數。是以hi是可訓練的Pθ的函數。
3.1.2 P-tuning v1 微調方法
P-tuning v1 微調方法是将 Prompt 加入到微調過程中,隻對 Prompt 部分的參數進行訓練,而語言模型的參數固定不變。如下圖所示:
P-tuning v1 設計一個自動的生成連續 prompt 的方法來提升模型的微調效果。由上圖,P-tuning v1 的模版可以用下面公式表示:
${h0,…,hi,e(x),hi+1,…,hm,e(y)}$
其中h代表 P-tuning v1 的連續 prompt 表征,e代表一個預訓練的語言模型,x代表資料的原始輸入,y代表資料的标簽。在面對下遊任務微調是,通過優化h的參數來進行模型微調:
$h^0:m=arghminL(M(x,y))$
3.1.3 存在不足
P-tuning v1 微調方法缺少普遍性。實驗表明,當模型規模超過 100 億個參數時,P-tuning v1 可以與全參數微調方法相媲美,但對于那些較小的模型,P-tuning v1 方法和全參數微調方法的表現有很大差異,效果很差。同時,P-tuning v1 缺少跨任務的通用性,在序列标注任務中的有效性沒有得到驗證。序列标注需要預測一連串的标簽,而且大都是無實際意義的标簽,對于 P-tuning v1 微調方法極具挑戰。此外,當模型層數很深時,微調時模型的穩定性難以保證。模型層數越深,第一層輸入的 prompt 對後面的影響難以預估。
3.2 P-tuning v2 微調方法的原理
P-tuning v2 微調方法是 P-tuning v1 微調方法的改進版,同時借鑒了 prefix-tuning 微調的方法。如下圖所示:
與 P-tuning v1 微調方法相比,P-tuning v2 微調方法采用了 prefix-tuning 的做法,在輸入前面的每一層都加入可微調的參數。在 prefix 部分,每一層的 transformer 的 embedding 輸入都需要被微調,而 P-tuning v1 隻在第一層進行微調。同時,對于 prefix 部分,每一層 transformer 的輸入不是從上一層輸出,而是随機初始化的 embedding 作為輸入。
此外,P-Tuning v2 還包括以下改進:
- 移除 Reparamerization 加速訓練方式;
- 采用多任務學習優化:基于多任務資料集的 Prompt 進行預訓練,然後再适配的下遊任務。
- 舍棄詞彙 Mapping 的 Verbalizer 的使用,重新利用 [CLS] 和字元标簽,跟傳統微調方法一樣利用 cls 或者 token 的輸出做自然語言了解,以增強通用性,可以适配到序列标注任務。
3.3 P-tuning v2 微調方法優點
P-tuning v2 微調方法解決了 P-tuning v1 方法的缺陷,是一種參數高效的大語言模型微調方法。
- P-tuning v2 微調方法僅精調 0.1% 參數量(固定 LM 參數),在各個參數規模語言模型上,均取得和 Fine-tuning 相比肩的性能,解決了 P-tuning v1 在參數量不夠多的模型中微調效果很差的問題。如下圖所示(橫坐标表示模型參數量,縱坐标表示微調效果):
- 将 Prompt tuning 技術首次拓展至序列标注等複雜的 NLU 任務上,而 P-tuning v1 在此任務上無法運作。
4. Freeze 監督微調方法
4.1 Freeze 微調方法的概念
Freeze 方法,即參數當機,對原始模型部分參數進行當機操作,僅訓練部分參數,以達到在單卡或不進行 TP 或 PP 操作,就可以對大模型進行訓練。在語言模型模型微調中,Freeze 微調方法僅微調 Transformer 後幾層的全連接配接層參數,而當機其它所有參數。
4.2 Freeze 微調方法的原理
Freeze 微調方法為什麼隻微調 Transformer 後幾層的全連接配接層參數呢?下面對其原因進行展開講述。
Transformer 模型主要由自注意力層和全連接配接層(FF 層)構成。對于 Transformer 的每一層結構,自注意力層的參數量為4⋅d2,即WQ、WQ、WQ和WQ ∈Rd×d;FF 層的參數量為8⋅d2,即W1∈Rd×4d,W2∈Rd×4d。是以 FF 層占據了模型的32的參數,具有重要的研究價值。Transformer 的全連接配接層網絡結構圖如下圖所示:
Transformer 的 FF 層可以視為一個 key-value memory,其中每一層的 key 用于捕獲輸入序列的特征,value 可以基于 key 捕獲的特征,給出下一個 token 的詞表分布。Transformer 每一層的 FF 層是由多個 key-value 組合而成,然後結合殘差連接配接對每層結果細化,最終産生模型的預測結果。FF 層的公式可以表示為:
$FF(x)=f(x⋅KT)⋅V$
其中K,V∈Rdm×d是可訓練的參數矩陣,f是非線性激活函數,如 ReLU。
此外,實驗表明,Transformer 的淺層傾向于提取出淺層特征,深層傾向于提取語義特征,如下圖所示。層數越深提取的語義特征所占的比例越重。
對于各類不同的 NLP 任務,淺層特征往往是具有 “共性”,而主要差別在于各自深層次的語義特征。是以,通過僅微調 Transformer 後幾層的全連接配接層參數,在保證參數高效微調的前提下,可以最大程度的發揮大語言模型的微調作用。
4.3 Freeze 微調方法的優勢
- 大量減少了大語言模型的微調參數,是一種參數高效的微調方法;
- 由于隻需微調高層特征,加快了模型的收斂,節約了微調的時間;
- 最大程度地保留了大語言模型預訓練所學習到的語言的 “共性”,可解釋性較強。
5.關鍵知識點總結
- SFT監督微調時監督微調時,學習率通常會設定得很小
常見誤區:1.監督微調需要大量的訓練時間和資料 2.監督微調将複制源模型的所有參數至目标模型 3.監督微調隻需要幾十條監督資料即可
- 監督微調常見任務:1.用中文預訓練BERT模型完成中文實體識别任務 2.訓練語言模型GPT3 3.UIE模型在垂直領域的資料集上微調
常見誤區:在ImageNet上的預訓練的模型再來訓練目标檢測任務 (則不是)
- 目前,主流的SFT監督方法包括:LoRA、P-tuning v2、Freeze
- LoRA微調方法預訓練的模型參數不參與微調,LoRA微調方法一般會在各層新增參數,LoRA微調方法的核心思想是利用高階矩陣秩的分解來減少微調參數量
- LoRA微調方法的優勢:減少大語言預訓練模型微調的參數量、節省成本、能取得與全模型微調類似的效果
- LoRA微調方法不會 對Transformer的每個權重矩陣采用秩分解。
- P-tuning v2微調方法是在P-tuning v1的基礎上引入了prefix-tuning的思想
常見誤區:1.P-tuning v1微調方法能微調實體識别的任務、2.P-tuning v1微調方法在效果上可以媲美全參數微調的方式 3.P-tuning v2微調方法在自然語言了解任務上表現不佳
- P-tuning v2微調方法原理方面:1.P-tuning v2微調方法在transformer的每一層都加入了prefix、2.P-tuning v2微調方法采用了多任務學習、3.P-tuning v2微調方法prefix部分的參數不是由上一層的prefix輸出來輸入
常見誤區:P-tuning v2微調方法微調的參數對象是每一層離散表示的prefix
- P-tuning v2微調方法解決了P-tuning v1微調方法中序列标注任務不佳、普遍性很差等問題。
- Freeze微調優點:1.Freeze微調方法是一種參數高效的微調方法 2.大語言模型的後幾層網絡主要提取的是語義特征,前幾層主要提取的是文本的表層特征 3.Transformer的全連接配接層參數量多于自注意力層參數量