定制你的AI助手:大型語(yǔ)言模型適配方法詳解
這是一個(gè)由三部分組成的系列博客文章中的第一篇,主題是關(guān)于如何適配開(kāi)源大型語(yǔ)言模型(LLMs)。在這篇文章中,我們將探討適配LLMs到特定領(lǐng)域數(shù)據(jù)的各種方法。
- 在第2部分,我們將討論如何確定微調(diào)是否適合你的使用場(chǎng)景。
- 在第3部分,我們將探討一些整理優(yōu)質(zhì)訓(xùn)練數(shù)據(jù)集的經(jīng)驗(yàn)法則。
引言
大型語(yǔ)言模型(LLMs)在大量語(yǔ)言任務(wù)和自然語(yǔ)言處理(NLP)基準(zhǔn)測(cè)試中展現(xiàn)出了卓越的能力。基于這些"通用"模型的產(chǎn)品應(yīng)用正在興起。在這篇博客文章中,我們將為希望適配和整合LLMs到自己項(xiàng)目中的小型AI產(chǎn)品團(tuán)隊(duì)提供指導(dǎo)。讓我們首先澄清LLMs相關(guān)的(常常令人困惑的)術(shù)語(yǔ),然后簡(jiǎn)要比較可用的不同適配方法,最后推薦一個(gè)step-by-step流程圖來(lái)為你的使用場(chǎng)景識(shí)別正確的方法。
LLM適配方法
預(yù)訓(xùn)練
預(yù)訓(xùn)練是使用數(shù)萬(wàn)億數(shù)據(jù)token從頭開(kāi)始訓(xùn)練LLM的過(guò)程。模型使用自監(jiān)督算法進(jìn)行訓(xùn)練。最常見(jiàn)的是通過(guò)自回歸地預(yù)測(cè)下一個(gè)token來(lái)進(jìn)行訓(xùn)練(也稱(chēng)為因果語(yǔ)言建模)。預(yù)訓(xùn)練通常需要數(shù)千個(gè)GPU小時(shí)(10^5 – 10^7 [來(lái)源1, 來(lái)源2])分布在多個(gè)GPU上。預(yù)訓(xùn)練輸出的模型被稱(chēng)為基礎(chǔ)模型。
持續(xù)預(yù)訓(xùn)練
持續(xù)預(yù)訓(xùn)練(又稱(chēng)二階段預(yù)訓(xùn)練)涉及使用新的、未見(jiàn)過(guò)的領(lǐng)域數(shù)據(jù)進(jìn)一步訓(xùn)練基礎(chǔ)模型。使用與初始預(yù)訓(xùn)練相同的自監(jiān)督算法。通常涉及所有模型權(quán)重,并將一部分原始數(shù)據(jù)與新數(shù)據(jù)混合。
微調(diào)
微調(diào)是使用帶注釋的數(shù)據(jù)集以監(jiān)督方式或使用基于強(qiáng)化學(xué)習(xí)的技術(shù)來(lái)適配預(yù)訓(xùn)練語(yǔ)言模型的過(guò)程。與預(yù)訓(xùn)練相比有兩個(gè)主要區(qū)別:
- 在帶注釋的數(shù)據(jù)集上進(jìn)行監(jiān)督訓(xùn)練——包含正確的標(biāo)簽/答案/偏好——而不是自監(jiān)督訓(xùn)練
- 需要更少的token(數(shù)千或數(shù)百萬(wàn),而不是預(yù)訓(xùn)練所需的數(shù)十億或數(shù)萬(wàn)億),其主要目的是增強(qiáng)指令跟隨、人類(lèi)對(duì)齊、任務(wù)表現(xiàn)等能力
理解當(dāng)前微調(diào)領(lǐng)域有兩個(gè)維度:改變的參數(shù)百分比和微調(diào)結(jié)果增加的新能力。
改變的參數(shù)百分比
根據(jù)改變的參數(shù)數(shù)量,有兩類(lèi)算法:
- 全量微調(diào):顧名思義,這包括改變模型的所有參數(shù),包括在較小模型(如XLMR和BERT,1億-3億參數(shù))上進(jìn)行的傳統(tǒng)微調(diào),以及在大型模型(如Llama 2、GPT3,10億+參數(shù))上進(jìn)行的微調(diào)等。
- 參數(shù)高效微調(diào)(PEFT):不同于微調(diào)所有LLM權(quán)重,PEFT算法只微調(diào)少量額外參數(shù)或更新預(yù)訓(xùn)練參數(shù)的一個(gè)子集,通常是總參數(shù)的1-6%。
為基礎(chǔ)模型增加的能力
進(jìn)行微調(diào)的目的是為預(yù)訓(xùn)練模型增加能力——例如:指令跟隨、人類(lèi)對(duì)齊等。經(jīng)過(guò)聊天微調(diào)的Llama 2是一個(gè)微調(diào)模型的例子,增加了指令跟隨和對(duì)齊能力。
檢索增強(qiáng)生成(RAG)
企業(yè)也可以通過(guò)添加特定領(lǐng)域的知識(shí)庫(kù)來(lái)適配LLMs。RAG本質(zhì)上是"搜索驅(qū)動(dòng)的LLM文本生成"。RAG于2020年被引入,它使用基于用戶(hù)問(wèn)題檢索到的動(dòng)態(tài)提示上下文,并將其注入到LLM提示中,以引導(dǎo)模型使用檢索到的內(nèi)容,而不是其預(yù)訓(xùn)練的——可能已過(guò)時(shí)的——知識(shí)。Chat LangChain是一個(gè)由RAG驅(qū)動(dòng)的流行的LangChain文檔問(wèn)答聊天機(jī)器人。
上下文學(xué)習(xí)(ICL)
通過(guò)ICL,我們通過(guò)在提示中放置原型示例來(lái)適配LLM。多項(xiàng)研究表明"通過(guò)示例演示"是有效的。這些示例可以包含不同類(lèi)型的信息:
- 僅輸入和輸出文本——即少樣本學(xué)習(xí)
- 推理痕跡:添加中間推理步驟;參見(jiàn)思維鏈(CoT)提示
- 計(jì)劃和反思痕跡:添加教導(dǎo)LLM進(jìn)行計(jì)劃和反思其問(wèn)題解決策略的信息;參見(jiàn)ReACT
還存在多種其他修改提示的策略,Prompt Engineering Guide包含了全面的概述。
選擇正確的適配方法
為了決定哪些上述方法適合特定應(yīng)用,你應(yīng)該考慮各種因素:所追求任務(wù)所需的模型能力、訓(xùn)練成本、推理成本、數(shù)據(jù)集類(lèi)型等。下面的流程圖總結(jié)了我們的建議,以幫助你選擇正確的LLM適配方法。
? 預(yù)訓(xùn)練
預(yù)訓(xùn)練是LLM訓(xùn)練的重要部分,使用token預(yù)測(cè)變體作為損失函數(shù)。其自監(jiān)督性質(zhì)允許在大量數(shù)據(jù)上進(jìn)行訓(xùn)練。例如,Llama 2在2萬(wàn)億個(gè)token上進(jìn)行了訓(xùn)練。這需要大規(guī)模的計(jì)算基礎(chǔ)設(shè)施:Llama 2 70B花費(fèi)了1,720,320 GPU小時(shí)。因此,對(duì)于資源有限的團(tuán)隊(duì),我們不建議將預(yù)訓(xùn)練作為L(zhǎng)LM適配的可行方法。
由于預(yù)訓(xùn)練在計(jì)算上是禁止的,更新已經(jīng)預(yù)訓(xùn)練的模型權(quán)重可能是適配LLM以完成特定任務(wù)的有效方法。任何更新預(yù)訓(xùn)練模型權(quán)重的方法都容易遭受災(zāi)難性遺忘現(xiàn)象,這是一個(gè)術(shù)語(yǔ),指模型忘記先前學(xué)習(xí)的技能和知識(shí)。例如,這項(xiàng)研究顯示了一個(gè)在醫(yī)療領(lǐng)域微調(diào)的模型在指令遵循和常見(jiàn)QA任務(wù)方面的性能如何下降。其他研究也表明,通過(guò)預(yù)訓(xùn)練獲得的一般知識(shí)可能在后續(xù)訓(xùn)練中被遺忘。例如,這項(xiàng)研究從領(lǐng)域知識(shí)、推理和閱讀理解的角度提供了一些LLMs知識(shí)遺忘的證據(jù)。
? 持續(xù)預(yù)訓(xùn)練
考慮到災(zāi)難性遺忘,最近的發(fā)展表明,持續(xù)預(yù)訓(xùn)練(CPT)可以以預(yù)訓(xùn)練所需計(jì)算成本的一小部分進(jìn)一步提高性能。對(duì)于需要LLM獲得新轉(zhuǎn)換技能的任務(wù),CPT可能是有益的。例如,據(jù)報(bào)道,持續(xù)預(yù)訓(xùn)練在添加多語(yǔ)言能力方面取得了成功。
但CPT仍然是一個(gè)昂貴的過(guò)程,需要大量的數(shù)據(jù)和計(jì)算資源。例如,Pythia套件經(jīng)歷了第二階段的預(yù)訓(xùn)練,結(jié)果創(chuàng)建了FinPythia-6.9B。這個(gè)專(zhuān)門(mén)為金融數(shù)據(jù)設(shè)計(jì)的模型進(jìn)行了18天的CPT,使用了一個(gè)包含240億個(gè)token的數(shù)據(jù)集。此外,CPT也容易發(fā)生災(zāi)難性遺忘。因此,對(duì)于資源有限的團(tuán)隊(duì),我們不建議將持續(xù)預(yù)訓(xùn)練作為L(zhǎng)LM適配的可行方法。
總之,使用自監(jiān)督算法和未注釋數(shù)據(jù)集來(lái)適配LLM(如在預(yù)訓(xùn)練和持續(xù)預(yù)訓(xùn)練中所做的那樣)是資源和成本密集型的,不推薦作為可行的方法。
? 全量微調(diào)和參數(shù)高效微調(diào)(PEFT)
與使用未注釋數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練相比,使用小型注釋數(shù)據(jù)集進(jìn)行微調(diào)是一種更具成本效益的方法。通過(guò)將預(yù)訓(xùn)練模型適配到特定任務(wù),微調(diào)模型已被證明在廣泛的應(yīng)用和專(zhuān)業(yè)領(lǐng)域(如法律、醫(yī)療或金融)中達(dá)到最先進(jìn)的結(jié)果。
微調(diào),特別是參數(shù)高效微調(diào)(PEFT),只需要預(yù)訓(xùn)練/持續(xù)預(yù)訓(xùn)練所需計(jì)算資源的一小部分。因此,這對(duì)于資源有限的團(tuán)隊(duì)來(lái)說(shuō)是一種可行的LLM適配方法。在本系列的第3部分,我們深入探討微調(diào)細(xì)節(jié),包括全量微調(diào)、PEFT,以及如何進(jìn)行微調(diào)的實(shí)用指南。
? 檢索增強(qiáng)生成(RAG)
RAG是另一種流行的LLM適配方法。如果你的應(yīng)用需要從動(dòng)態(tài)知識(shí)庫(kù)中提取信息(例如QA機(jī)器人),RAG可能是一個(gè)很好的解決方案。RAG系統(tǒng)的復(fù)雜性主要在于檢索引擎的實(shí)現(xiàn)。這種系統(tǒng)的推理成本可能更高,因?yàn)樘崾景z索到的文檔,而且大多數(shù)提供商使用按token計(jì)費(fèi)的模型。在本系列的第2部分,我們更廣泛地討論RAG,并與微調(diào)進(jìn)行比較。
? 上下文學(xué)習(xí)(ICL)
這是適配LLMs最具成本效益的方式。ICL不需要任何額外的訓(xùn)練數(shù)據(jù)或計(jì)算資源,使其成為一種成本效益高的方法。然而,與RAG類(lèi)似,由于在推理時(shí)處理更多的token,推理的成本和延遲可能會(huì)增加。
總結(jié)
創(chuàng)建基于LLM的系統(tǒng)是一個(gè)迭代過(guò)程。我們建議從簡(jiǎn)單的方法開(kāi)始,逐步增加復(fù)雜性,直到達(dá)成目標(biāo)。上面的流程圖概述了這個(gè)迭代過(guò)程,為你的LLM適配策略提供了堅(jiān)實(shí)的基礎(chǔ)。
本文轉(zhuǎn)載自??芝士AI吃魚(yú)??,作者: 愛(ài)滑冰的咸魚(yú) ????
