LLM微調技術調研
ChatGTP、LLaMA2等通用大模型具備優(yōu)秀的推理性能,但在面對復雜多變的業(yè)務場景時,往往難以滿足多樣化的需求。ChatGPT等通用大模型通常需要經(jīng)過復雜漫長的訓練過程,預訓練期間需要巨大的算力和存儲消耗,大多場景下從0到1訓練一個模型不僅成本高昂,而且沒有必要,因此基于預訓練的模型并對其進行微調成為有價值的研究方向。微調預訓練的通用大模型,不僅可以節(jié)約成本,也可以使模型更符合特定領域的需求,變得更定制化、專業(yè)化。如下圖所示,用戶基于預訓練的基礎模型采用合適的微調技術,以定制化的數(shù)據(jù)集作為輸入,經(jīng)過微調訓練最終可輸出一個性能更優(yōu)的微調模型。本文主要調研并梳理了LLM微調常規(guī)流程及常用技術,其中介紹了Fine-Tuning(全量參數(shù)微調)及Parameter-Efficient Fine-Tuning(高效參數(shù)微調),RLHF(基于人類反饋的強化學習),F(xiàn)ine-Tuning全量參數(shù)微調成本巨大,應用較少。鑒此本文重點介紹Adapter、Prefix Tuning、LoRA、RLHF 4種常用微調技術的原理,通過歸納整理相關論文及資料,為模型微調工作的技術選型提供參考。

一、基本概念
1.微調的定義
首先對模型微調下個非嚴謹?shù)亩x,大模型微調(Fine-tuning)是指在預訓練模型基礎之上,采用標注的高質量數(shù)據(jù)集或基于人類反饋機制對基礎模型進行訓練,最終輸出具備或增強特定領域能力模型的技術。
2.微調的必要性
全量訓練成本高昂
據(jù)國盛證券報告《ChatGPT 需要多少算力》估算,GPT-3 訓練一次的成本約為 140 萬美元,對于一些更大的 LLM(大型語言模型),訓練成本介于 200 萬美元至 1200 萬美元之間。以 ChatGPT 在 1 月的獨立訪客平均數(shù) 1300 萬計算,其對應芯片需求為 3 萬多片英偉達 A100 GPU,初始投入成本約為 8 億美元,每日電費在 5 萬美元左右。因此全量訓練極其高昂,一般企業(yè)難以承受。
通用模型難以滿足特定領域需求
例如,通用的語言大模型,經(jīng)過高質量的醫(yī)療數(shù)據(jù)訓練,可更加專業(yè)的進行醫(yī)療對話。在面對“感冒了怎么辦?”之類的專業(yè)問題,微調前的模型回答可能相對寬泛,比如多喝水,癥狀嚴重時注意看醫(yī)生等,但微調后的模型會基于與用戶的多輪對話上下文,給出更精準、更專業(yè)的回答,經(jīng)過醫(yī)療數(shù)據(jù)集微調后的模型,在面對醫(yī)療專業(yè)知識領域時,將具備更優(yōu)的性能。
3.微調的價值
經(jīng)過微調后的模型具備更強的專業(yè)能力,諸如在問題回答、語言生成、命名實體識別、情感分析、摘要生成、文本匹配等領域具備更優(yōu)的性能。例如,基于財經(jīng)新聞數(shù)據(jù)的預訓練模型經(jīng)過微調后能夠在金融分析、股票預測等領域表現(xiàn)出色;基于醫(yī)療數(shù)據(jù)的預訓練模型經(jīng)過微調后能夠提供患者更精準的醫(yī)療咨詢和用藥建議。模型微調后將具備更專業(yè)化、特定化的推理能力。

二、微調技術
1.微調流程

模型微調是一個循序漸進、不斷優(yōu)化迭代的系統(tǒng)工程,一般需要經(jīng)過模型選取、任務定義、數(shù)據(jù)準備、策略選擇、模型配置、模型微調、結果評估、優(yōu)化迭代、模型測試、模型部署等流程,通過系統(tǒng)化、流程化的模型微調,將輸出令人滿意的結果。具體步驟簡述如下:
模型選取選取一個優(yōu)秀的基礎大模型,比如OpenAI的ChatGPT,Meta的LLaMA2等,成熟的大模型有大廠背書及活躍的社區(qū)支持,可以具備高質量的模型能力。
任務定義定義一個特定領域的任務,比如上文所述的醫(yī)療問答任務。
數(shù)據(jù)準備收集標簽化的專業(yè)數(shù)據(jù),比如上文的醫(yī)療問答數(shù)據(jù)可分為訓練集和測試集,一部分用于訓練,一部分用于測試。
策略選擇選擇合適的模型微調策略,比如下文將詳細描述的PERT或RLHF,選擇更適合的微調技術。
模型配置以第一步選取的基礎模型作為起點,完成模型微調前的前置配置。
模型微調基于選擇的微調技術,不同不斷的迭代訓練模型,期間不斷調整參數(shù)并監(jiān)控模型的損失函數(shù)即精準度。
結果評估使用測試數(shù)據(jù)集驗證微調后模型的優(yōu)劣
優(yōu)化迭代基于上一步評估的結果,不斷迭代微調過程直到達到滿意的預期效果。
模型測試使用驗證模型的性能。
模型部署將微調后滿足預期的模型部署后等待投入推理使用
2.Fine-Tuning
Fine-Tuning指的是全量參數(shù)微調,訓練時間成本高。一般較少使用,因此本文重點介紹高效參數(shù)微調,通過凍結參數(shù),局部微調,顯著提供微調效率。
3.PERT
- Adapter在《Parameter-Efficient Transfer Learning for NLP 》論文中提出了Adapter方法,論文指出對預訓練模型每層中插入下游任務參數(shù),微調時凍結模型主體參數(shù),僅訓練特定任務的參數(shù),最終顯著減少訓練過程中產(chǎn)生的算力成本。為論證Adapter方法的有效性,論文作者基于BERT Transformer模型,對26種類別的文本任務進行GLUE基準測試,最終Adapter展示了令人滿意的效果,在GLUE基準測試中,相比較于100%的全量參數(shù)微調,每個任務在僅添加3.6%參數(shù)的情況下,僅有0.4% 以內的性能差異。如下圖所示,Adapter結構在Transformer Layer中加入Adapter Layer,位置分別位于多頭注意力的投影之后及第二個前饋層之后,訓練時固定原始預訓練模型參數(shù),僅對新增的Adapter及Layer Norm層進行微調。其中每個Adapter 由2個Feedward前饋層組成,首個前饋層接受Transformer輸出作為輸入,通過將高維特征d投影至低維特征m以控制模型參數(shù)量,低維特征m經(jīng)過中間非線性層輸出,第二個前饋層將低維特征m反向還原為高維度特征d,最后作為Adapter的輸出。
 

經(jīng)實驗結果表明,通過添加并訓練少量參數(shù),Adapter方法的性能可媲美全量微調,論證了Adapter方法可作為一種高效的參數(shù)微調方法。
- Prefix Tuning基于Prompt的設計靈感斯坦福大學團隊在論文中提出的一種通過凍結模型參數(shù),通過連續(xù)的特定任務向量而實現(xiàn)的更輕量級模型微調技術。Prefix Tuning屬于連續(xù)的模板構建,通過把傳統(tǒng)人工設計模版中的token替換成可微調的Virtual Token。其中模型輸入前添加的連續(xù)的針對特定任務的向量序列我們稱之為Prefix,通過更新特定任務的Prefix參數(shù)大幅提高微調效率。
 

對于Decoder-only的GPT,prefix只加在句首,模型的輸入表示為:

對于Encoder-Decoder的BART,prefix同時加在編碼器和解碼器的開頭:

如下圖所示,在下游任務微調時,模型參數(shù)被凍結,之后Prefix部分參數(shù)被更新,顯著提高訓練效率。

- LoRA
 
Prefix Tuning通過輸入序列的前綴加入prefix token,引導模型模型提取x特征相關的信息,以便更好的生成結果y。訓練微調過程中,我們只需要凍結模型其余參數(shù),僅單獨訓練prefix token相關參數(shù)即可,每個下游任務均可單獨訓練一套prefix token,Prefix-Tuning雖然過程看似方便,但也存在以下弊端:
- 訓練難度大原始論文指出,訓練模型的效果并非嚴格隨prefix參數(shù)量單調遞增
 - 會降低原始文字prompt表達能力為節(jié)省計算量和顯存,我們一般會固定數(shù)據(jù)的輸入長度,增加prefix之后,留給原始文本數(shù)據(jù)的空間會被擠壓,因此可能會降低原始文本prompt的表達能力,使得輸入層有效信息減少。
 
Prefix Tuning訓練難度大,那是否有其他的微調方法呢?LoRA(Low-Rank Adaptation)是微軟研究團隊提出的一種通過凍結預訓練模型參數(shù),在Transformer每一層中加入2個可供訓練的A、B低秩旁路矩陣(其中一個矩陣負責降維、另一個負責升維),可大幅減少微調參數(shù)量的方法。LoRA整體架構如下圖:

如圖左側表示全參微調的場景,參數(shù)分為和兩部分:
:預訓練權重
:微調增量更新權重
全參微調可視為凍結的預訓練權重W+微調過程中產(chǎn)生的增量更新權重  ,假設輸入為x,輸出為y,則有 
 。
如圖右側表示LoRA微調場景,我們用矩陣A和矩陣B近似表示  :
:低秩矩陣A,其中r被稱為“秩”,對A進行高斯初始化。
:低秩矩陣B,對B采用零初始化。
經(jīng)過拆分,我們將  改寫成 
 的等價形式,微調參數(shù) 
 從降為 
 ,同時不改變輸出數(shù)據(jù)的維度,即在LoRA下我們可以定義為: 
 。
其中,論文指出對于AB兩個低秩矩陣,會使用超參α(常數(shù))來做調整,以適配更優(yōu)的微調性能?;贚oRA架構,在原始預訓練矩陣的旁路,我們用低秩矩陣A和B來近似代替增量更新權重  ,訓練過程中通過固定預訓練權重 
 ,只對低秩矩陣A和B進行微調訓練,可大幅提高效率,據(jù)論文統(tǒng)計,采用LoRA方法在微調GPT3 175B時,顯存消耗從1.2TB降至350GB,極大的降低了訓練開銷。
4.RLHF
RLHF(Reinforcement Learning from Human Feedback)是基于人類反饋的強化學習。傳統(tǒng)基于prompt提示詞生成的結果相對主觀并依賴上下文,缺少人類的偏好和主觀意見。RLHF中使用人類反饋作為性能衡量標準,不斷通過反饋結果來優(yōu)化模型,可使訓練后的模型更符合人類預期。RLHF涉及多個模型和多個訓練階段,一般分為以下3大核心步驟:
- 預訓練模型使用標注過的數(shù)據(jù)來調整預訓練模型參數(shù),例如OpenAI在其InstructGPT中采用較小版本的GPT-3,Anthropic使用1000萬-52B參數(shù)的Transformer進行訓練使其更好的適應特定任務領域。
 

- 訓練獎勵模型RM獎勵模型用于評估文本序列質量,它接收一系列文本并返回數(shù)值,數(shù)值對應人類的偏好程度。訓練數(shù)據(jù)通常由多個語言模型生成的文本序列組成,這些序列經(jīng)過人工評估或使用其他模型(比如ChatGPT)進行打分。獎勵模型不斷指導模型生成更符合人類預期的高質量文本。
 

- 基于強化學習微調利用上一步輸出的獎勵值,采用強化學習進一步微調,在強化學習中需要定義狀態(tài)空間、動作空間、策略函數(shù)及價值函數(shù)。其中,狀態(tài)空間使輸入的序列分布,動作空間是全量的token(詞匯表中的詞),價值函數(shù)基于獎勵模型的輸出和策略約束,用于評估給定狀態(tài)下采取特定動作的價值,策略函數(shù)根據(jù)當前狀態(tài)選擇下一個動作(token),最大化獎勵。
 

三、討論與展望
本文重點介紹了幾種常用微調技術,各種技術的特點描述總結如下表所示:

模型微調過程中可根據(jù)實際場景選擇合適的微調方案,以獲得更優(yōu)的性能。
參考文獻
[1] Edward Hu?、Yelong Shen?、Phillip Wallis Zeyuan Allen-Zhu、Yuanzhi Li Shean Wang Lu Wang Weizhu Chen 《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》
[2] Neil Houlsby、Andrei Giurgiu、 Stanis?aw Jastrze?bski、Bruna Morrone、Quentin de Laroussilhe、Andrea Gesmundo 、Mona Attariyan、Sylvain Gelly《Parameter-Efficient Transfer Learning for NLP 》
[3] Xiang Lisa Li、Percy Liang 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》
[4] Long Ouyang、Jeff Wu、Xu Jiang、Diogo Almeida、Carroll L. Wainwright、Pamela Mishkin、Chong Zhang Sandhini、Agarwal Katarina Slama Alex Ray、John Schulman、Jacob Hilton、Fraser Kelton、Luke Miller、Maddie Simens《Training language models to follow instructions with human feedback》
[5] https://zhuanlan.zhihu.com/p/646831196
[6] https://zhuanlan.zhihu.com/p/660721012
[7] https://mp.weixin.qq.com/s/Rmnk39w92MDD4255fma-IQ
[8] https://www.theaidream.com/post/fine-tuning-large-language-models-llms-using-peft
[9] https://research.aimultiple.com/llm-fine-tuning/
[10] ??https://www.superannotate.com/blog/llm-fine-tuning??
本文轉載自 ??AI遇見云??,作者: 李飛強


















