LLM微調(diào)技術(shù)調(diào)研
ChatGTP、LLaMA2等通用大模型具備優(yōu)秀的推理性能,但在面對復(fù)雜多變的業(yè)務(wù)場景時(shí),往往難以滿足多樣化的需求。ChatGPT等通用大模型通常需要經(jīng)過復(fù)雜漫長的訓(xùn)練過程,預(yù)訓(xùn)練期間需要巨大的算力和存儲(chǔ)消耗,大多場景下從0到1訓(xùn)練一個(gè)模型不僅成本高昂,而且沒有必要,因此基于預(yù)訓(xùn)練的模型并對其進(jìn)行微調(diào)成為有價(jià)值的研究方向。微調(diào)預(yù)訓(xùn)練的通用大模型,不僅可以節(jié)約成本,也可以使模型更符合特定領(lǐng)域的需求,變得更定制化、專業(yè)化。如下圖所示,用戶基于預(yù)訓(xùn)練的基礎(chǔ)模型采用合適的微調(diào)技術(shù),以定制化的數(shù)據(jù)集作為輸入,經(jīng)過微調(diào)訓(xùn)練最終可輸出一個(gè)性能更優(yōu)的微調(diào)模型。本文主要調(diào)研并梳理了LLM微調(diào)常規(guī)流程及常用技術(shù),其中介紹了Fine-Tuning(全量參數(shù)微調(diào))及Parameter-Efficient Fine-Tuning(高效參數(shù)微調(diào)),RLHF(基于人類反饋的強(qiáng)化學(xué)習(xí)),F(xiàn)ine-Tuning全量參數(shù)微調(diào)成本巨大,應(yīng)用較少。鑒此本文重點(diǎn)介紹Adapter、Prefix Tuning、LoRA、RLHF 4種常用微調(diào)技術(shù)的原理,通過歸納整理相關(guān)論文及資料,為模型微調(diào)工作的技術(shù)選型提供參考。
一、基本概念
1.微調(diào)的定義
首先對模型微調(diào)下個(gè)非嚴(yán)謹(jǐn)?shù)亩x,大模型微調(diào)(Fine-tuning)是指在預(yù)訓(xùn)練模型基礎(chǔ)之上,采用標(biāo)注的高質(zhì)量數(shù)據(jù)集或基于人類反饋機(jī)制對基礎(chǔ)模型進(jìn)行訓(xùn)練,最終輸出具備或增強(qiáng)特定領(lǐng)域能力模型的技術(shù)。
2.微調(diào)的必要性
全量訓(xùn)練成本高昂
據(jù)國盛證券報(bào)告《ChatGPT 需要多少算力》估算,GPT-3 訓(xùn)練一次的成本約為 140 萬美元,對于一些更大的 LLM(大型語言模型),訓(xùn)練成本介于 200 萬美元至 1200 萬美元之間。以 ChatGPT 在 1 月的獨(dú)立訪客平均數(shù) 1300 萬計(jì)算,其對應(yīng)芯片需求為 3 萬多片英偉達(dá) A100 GPU,初始投入成本約為 8 億美元,每日電費(fèi)在 5 萬美元左右。因此全量訓(xùn)練極其高昂,一般企業(yè)難以承受。
通用模型難以滿足特定領(lǐng)域需求
例如,通用的語言大模型,經(jīng)過高質(zhì)量的醫(yī)療數(shù)據(jù)訓(xùn)練,可更加專業(yè)的進(jìn)行醫(yī)療對話。在面對“感冒了怎么辦?”之類的專業(yè)問題,微調(diào)前的模型回答可能相對寬泛,比如多喝水,癥狀嚴(yán)重時(shí)注意看醫(yī)生等,但微調(diào)后的模型會(huì)基于與用戶的多輪對話上下文,給出更精準(zhǔn)、更專業(yè)的回答,經(jīng)過醫(yī)療數(shù)據(jù)集微調(diào)后的模型,在面對醫(yī)療專業(yè)知識領(lǐng)域時(shí),將具備更優(yōu)的性能。
3.微調(diào)的價(jià)值
經(jīng)過微調(diào)后的模型具備更強(qiáng)的專業(yè)能力,諸如在問題回答、語言生成、命名實(shí)體識別、情感分析、摘要生成、文本匹配等領(lǐng)域具備更優(yōu)的性能。例如,基于財(cái)經(jīng)新聞數(shù)據(jù)的預(yù)訓(xùn)練模型經(jīng)過微調(diào)后能夠在金融分析、股票預(yù)測等領(lǐng)域表現(xiàn)出色;基于醫(yī)療數(shù)據(jù)的預(yù)訓(xùn)練模型經(jīng)過微調(diào)后能夠提供患者更精準(zhǔn)的醫(yī)療咨詢和用藥建議。模型微調(diào)后將具備更專業(yè)化、特定化的推理能力。
二、微調(diào)技術(shù)
1.微調(diào)流程
模型微調(diào)是一個(gè)循序漸進(jìn)、不斷優(yōu)化迭代的系統(tǒng)工程,一般需要經(jīng)過模型選取、任務(wù)定義、數(shù)據(jù)準(zhǔn)備、策略選擇、模型配置、模型微調(diào)、結(jié)果評估、優(yōu)化迭代、模型測試、模型部署等流程,通過系統(tǒng)化、流程化的模型微調(diào),將輸出令人滿意的結(jié)果。具體步驟簡述如下:
模型選取選取一個(gè)優(yōu)秀的基礎(chǔ)大模型,比如OpenAI的ChatGPT,Meta的LLaMA2等,成熟的大模型有大廠背書及活躍的社區(qū)支持,可以具備高質(zhì)量的模型能力。
任務(wù)定義定義一個(gè)特定領(lǐng)域的任務(wù),比如上文所述的醫(yī)療問答任務(wù)。
數(shù)據(jù)準(zhǔn)備收集標(biāo)簽化的專業(yè)數(shù)據(jù),比如上文的醫(yī)療問答數(shù)據(jù)可分為訓(xùn)練集和測試集,一部分用于訓(xùn)練,一部分用于測試。
策略選擇選擇合適的模型微調(diào)策略,比如下文將詳細(xì)描述的PERT或RLHF,選擇更適合的微調(diào)技術(shù)。
模型配置以第一步選取的基礎(chǔ)模型作為起點(diǎn),完成模型微調(diào)前的前置配置。
模型微調(diào)基于選擇的微調(diào)技術(shù),不同不斷的迭代訓(xùn)練模型,期間不斷調(diào)整參數(shù)并監(jiān)控模型的損失函數(shù)即精準(zhǔn)度。
結(jié)果評估使用測試數(shù)據(jù)集驗(yàn)證微調(diào)后模型的優(yōu)劣
優(yōu)化迭代基于上一步評估的結(jié)果,不斷迭代微調(diào)過程直到達(dá)到滿意的預(yù)期效果。
模型測試使用驗(yàn)證模型的性能。
模型部署將微調(diào)后滿足預(yù)期的模型部署后等待投入推理使用
2.Fine-Tuning
Fine-Tuning指的是全量參數(shù)微調(diào),訓(xùn)練時(shí)間成本高。一般較少使用,因此本文重點(diǎn)介紹高效參數(shù)微調(diào),通過凍結(jié)參數(shù),局部微調(diào),顯著提供微調(diào)效率。
3.PERT
- Adapter在《Parameter-Efficient Transfer Learning for NLP 》論文中提出了Adapter方法,論文指出對預(yù)訓(xùn)練模型每層中插入下游任務(wù)參數(shù),微調(diào)時(shí)凍結(jié)模型主體參數(shù),僅訓(xùn)練特定任務(wù)的參數(shù),最終顯著減少訓(xùn)練過程中產(chǎn)生的算力成本。為論證Adapter方法的有效性,論文作者基于BERT Transformer模型,對26種類別的文本任務(wù)進(jìn)行GLUE基準(zhǔn)測試,最終Adapter展示了令人滿意的效果,在GLUE基準(zhǔn)測試中,相比較于100%的全量參數(shù)微調(diào),每個(gè)任務(wù)在僅添加3.6%參數(shù)的情況下,僅有0.4% 以內(nèi)的性能差異。如下圖所示,Adapter結(jié)構(gòu)在Transformer Layer中加入Adapter Layer,位置分別位于多頭注意力的投影之后及第二個(gè)前饋層之后,訓(xùn)練時(shí)固定原始預(yù)訓(xùn)練模型參數(shù),僅對新增的Adapter及Layer Norm層進(jìn)行微調(diào)。其中每個(gè)Adapter 由2個(gè)Feedward前饋層組成,首個(gè)前饋層接受Transformer輸出作為輸入,通過將高維特征d投影至低維特征m以控制模型參數(shù)量,低維特征m經(jīng)過中間非線性層輸出,第二個(gè)前饋層將低維特征m反向還原為高維度特征d,最后作為Adapter的輸出。
經(jīng)實(shí)驗(yàn)結(jié)果表明,通過添加并訓(xùn)練少量參數(shù),Adapter方法的性能可媲美全量微調(diào),論證了Adapter方法可作為一種高效的參數(shù)微調(diào)方法。
- Prefix Tuning基于Prompt的設(shè)計(jì)靈感斯坦福大學(xué)團(tuán)隊(duì)在論文中提出的一種通過凍結(jié)模型參數(shù),通過連續(xù)的特定任務(wù)向量而實(shí)現(xiàn)的更輕量級模型微調(diào)技術(shù)。Prefix Tuning屬于連續(xù)的模板構(gòu)建,通過把傳統(tǒng)人工設(shè)計(jì)模版中的token替換成可微調(diào)的Virtual Token。其中模型輸入前添加的連續(xù)的針對特定任務(wù)的向量序列我們稱之為Prefix,通過更新特定任務(wù)的Prefix參數(shù)大幅提高微調(diào)效率。
對于Decoder-only的GPT,prefix只加在句首,模型的輸入表示為:
對于Encoder-Decoder的BART,prefix同時(shí)加在編碼器和解碼器的開頭:
如下圖所示,在下游任務(wù)微調(diào)時(shí),模型參數(shù)被凍結(jié),之后Prefix部分參數(shù)被更新,顯著提高訓(xùn)練效率。
- LoRA
Prefix Tuning通過輸入序列的前綴加入prefix token,引導(dǎo)模型模型提取x特征相關(guān)的信息,以便更好的生成結(jié)果y。訓(xùn)練微調(diào)過程中,我們只需要凍結(jié)模型其余參數(shù),僅單獨(dú)訓(xùn)練prefix token相關(guān)參數(shù)即可,每個(gè)下游任務(wù)均可單獨(dú)訓(xùn)練一套prefix token,Prefix-Tuning雖然過程看似方便,但也存在以下弊端:
- 訓(xùn)練難度大原始論文指出,訓(xùn)練模型的效果并非嚴(yán)格隨prefix參數(shù)量單調(diào)遞增
- 會(huì)降低原始文字prompt表達(dá)能力為節(jié)省計(jì)算量和顯存,我們一般會(huì)固定數(shù)據(jù)的輸入長度,增加prefix之后,留給原始文本數(shù)據(jù)的空間會(huì)被擠壓,因此可能會(huì)降低原始文本prompt的表達(dá)能力,使得輸入層有效信息減少。
Prefix Tuning訓(xùn)練難度大,那是否有其他的微調(diào)方法呢?LoRA(Low-Rank Adaptation)是微軟研究團(tuán)隊(duì)提出的一種通過凍結(jié)預(yù)訓(xùn)練模型參數(shù),在Transformer每一層中加入2個(gè)可供訓(xùn)練的A、B低秩旁路矩陣(其中一個(gè)矩陣負(fù)責(zé)降維、另一個(gè)負(fù)責(zé)升維),可大幅減少微調(diào)參數(shù)量的方法。LoRA整體架構(gòu)如下圖:
如圖左側(cè)表示全參微調(diào)的場景,參數(shù)分為和兩部分:
:預(yù)訓(xùn)練權(quán)重
:微調(diào)增量更新權(quán)重
全參微調(diào)可視為凍結(jié)的預(yù)訓(xùn)練權(quán)重W+微調(diào)過程中產(chǎn)生的增量更新權(quán)重 ,假設(shè)輸入為x,輸出為y,則有
。
如圖右側(cè)表示LoRA微調(diào)場景,我們用矩陣A和矩陣B近似表示 :
:低秩矩陣A,其中r被稱為“秩”,對A進(jìn)行高斯初始化。
:低秩矩陣B,對B采用零初始化。
經(jīng)過拆分,我們將 改寫成
的等價(jià)形式,微調(diào)參數(shù)
從降為
,同時(shí)不改變輸出數(shù)據(jù)的維度,即在LoRA下我們可以定義為:
。
其中,論文指出對于AB兩個(gè)低秩矩陣,會(huì)使用超參α(常數(shù))來做調(diào)整,以適配更優(yōu)的微調(diào)性能。基于LoRA架構(gòu),在原始預(yù)訓(xùn)練矩陣的旁路,我們用低秩矩陣A和B來近似代替增量更新權(quán)重 ,訓(xùn)練過程中通過固定預(yù)訓(xùn)練權(quán)重
,只對低秩矩陣A和B進(jìn)行微調(diào)訓(xùn)練,可大幅提高效率,據(jù)論文統(tǒng)計(jì),采用LoRA方法在微調(diào)GPT3 175B時(shí),顯存消耗從1.2TB降至350GB,極大的降低了訓(xùn)練開銷。
4.RLHF
RLHF(Reinforcement Learning from Human Feedback)是基于人類反饋的強(qiáng)化學(xué)習(xí)。傳統(tǒng)基于prompt提示詞生成的結(jié)果相對主觀并依賴上下文,缺少人類的偏好和主觀意見。RLHF中使用人類反饋?zhàn)鳛樾阅芎饬繕?biāo)準(zhǔn),不斷通過反饋結(jié)果來優(yōu)化模型,可使訓(xùn)練后的模型更符合人類預(yù)期。RLHF涉及多個(gè)模型和多個(gè)訓(xùn)練階段,一般分為以下3大核心步驟:
- 預(yù)訓(xùn)練模型使用標(biāo)注過的數(shù)據(jù)來調(diào)整預(yù)訓(xùn)練模型參數(shù),例如OpenAI在其InstructGPT中采用較小版本的GPT-3,Anthropic使用1000萬-52B參數(shù)的Transformer進(jìn)行訓(xùn)練使其更好的適應(yīng)特定任務(wù)領(lǐng)域。
- 訓(xùn)練獎(jiǎng)勵(lì)模型RM獎(jiǎng)勵(lì)模型用于評估文本序列質(zhì)量,它接收一系列文本并返回?cái)?shù)值,數(shù)值對應(yīng)人類的偏好程度。訓(xùn)練數(shù)據(jù)通常由多個(gè)語言模型生成的文本序列組成,這些序列經(jīng)過人工評估或使用其他模型(比如ChatGPT)進(jìn)行打分。獎(jiǎng)勵(lì)模型不斷指導(dǎo)模型生成更符合人類預(yù)期的高質(zhì)量文本。
- 基于強(qiáng)化學(xué)習(xí)微調(diào)利用上一步輸出的獎(jiǎng)勵(lì)值,采用強(qiáng)化學(xué)習(xí)進(jìn)一步微調(diào),在強(qiáng)化學(xué)習(xí)中需要定義狀態(tài)空間、動(dòng)作空間、策略函數(shù)及價(jià)值函數(shù)。其中,狀態(tài)空間使輸入的序列分布,動(dòng)作空間是全量的token(詞匯表中的詞),價(jià)值函數(shù)基于獎(jiǎng)勵(lì)模型的輸出和策略約束,用于評估給定狀態(tài)下采取特定動(dòng)作的價(jià)值,策略函數(shù)根據(jù)當(dāng)前狀態(tài)選擇下一個(gè)動(dòng)作(token),最大化獎(jiǎng)勵(lì)。
三、討論與展望
本文重點(diǎn)介紹了幾種常用微調(diào)技術(shù),各種技術(shù)的特點(diǎn)描述總結(jié)如下表所示:
模型微調(diào)過程中可根據(jù)實(shí)際場景選擇合適的微調(diào)方案,以獲得更優(yōu)的性能。
參考文獻(xiàn)
[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??
本文轉(zhuǎn)載自 ??AI遇見云??,作者: 李飛強(qiáng)
