幫別人做網(wǎng)站如何備案怎么自己建網(wǎng)站
一. SFT微調(diào)是什么
-
在大模型的加持下現(xiàn)有的語義理解系統(tǒng)的效果有一個(gè)質(zhì)的飛躍;相對于之前的有監(jiān)督的Pre-Train模型;大模型在某些特定的任務(wù)中碾壓式的超過傳統(tǒng)nlp效果;由于常見的大模型參數(shù)量巨大;在實(shí)際工作中很難直接對大模型訓(xùn)練適配特定的任務(wù)
-
SFT (Supervised fine-tuning) 有監(jiān)督微調(diào) 意味著使用有標(biāo)簽的數(shù)據(jù)來調(diào)整一個(gè)已預(yù)訓(xùn)練好的語言模型(LLM)使其更適應(yīng)某一特定任務(wù);通常LLM的預(yù)訓(xùn)練是無監(jiān)督的,但微調(diào)過程往往是有監(jiān)督的
-
在大模型應(yīng)用中,SFT指令微調(diào)已成為預(yù)訓(xùn)練大模型在實(shí)際業(yè)務(wù)應(yīng)用最重要的方式。眾多垂直領(lǐng)域模型,都是在預(yù)訓(xùn)練模型的基礎(chǔ)上,通過針對性的SFT指令微調(diào),更好地適應(yīng)最終任務(wù)和對齊用戶偏好;現(xiàn)有的對話系統(tǒng)或者推薦系統(tǒng)中有較多的語義理解任務(wù)需要進(jìn)行指令微調(diào)
-
SFT主要是激發(fā)模型在預(yù)訓(xùn)練中已學(xué)到的知識、讓模型學(xué)習(xí)業(yè)務(wù)所需要的特定規(guī)則、以及輸出格式穩(wěn)定下文中會(huì)給出具體的例子
二、SFT微調(diào)的方案
-
參數(shù)高效微調(diào)(PEFT)??Prefix/Prompt-Tuning,Adapter-Tuning、P-Tuning、LoRA、QLoRA
-
優(yōu)點(diǎn):輕量化,低資源
-
缺點(diǎn):模型參與訓(xùn)練參數(shù)較少,部分任務(wù)微調(diào)效果可能會(huì)不及預(yù)期
-
LoRA原理
-
??低秩分解來模擬參數(shù)的改變量,使用比較小的參數(shù)來實(shí)現(xiàn)大模型的間接的訓(xùn)練
-
原始的PLM旁邊增加一個(gè)新的通路,通過A矩陣和B矩陣進(jìn)行相乘
-
第一個(gè)A矩陣進(jìn)行降低維度,第二個(gè)矩陣B進(jìn)行升維度,中間層維度為r
-
維度d經(jīng)過fc 降低到r ,再從r 映射到d (其中 r << d)
-
矩陣的計(jì)算就是從 dxd 變成 dxr + rxd (參數(shù)量減少很多)
-
在下游任務(wù)訓(xùn)練時(shí),固定模型的其他參數(shù),只優(yōu)化新增的兩個(gè)矩陣的權(quán)重參數(shù),將PLM跟新增的通路兩部分的結(jié)果加起來作為最終的結(jié)果(兩邊通路的輸入跟輸出維度是一致的),即h=Wx+BAx
-
第一個(gè)矩陣的A的權(quán)重參數(shù)會(huì)通過高斯函數(shù)初始化,而第二個(gè)矩陣的B的權(quán)重參數(shù)則會(huì)初始化為零矩陣,這樣能保證訓(xùn)練開始時(shí)新增的通路BA=0從而對模型結(jié)果沒有影響
-
在推理時(shí),將左右兩部分的結(jié)果加到一起即可,h=Wx+BAx=(W+BA)x,所以只要將訓(xùn)練完成的矩陣乘積BA跟原本的權(quán)重矩陣W加到一起作為新權(quán)重參數(shù)替換原本PLM的W即可,對于推理來說,不會(huì)增加額外的計(jì)算資源
-
-
-
-
LoRA微調(diào)相關(guān)代碼請參考https://github.com/hiyouga/LLaMA-Factory
-
三、SFT微調(diào)的訓(xùn)練心得經(jīng)驗(yàn)?????????
-
遇到的困難和挑戰(zhàn)
-
SFT數(shù)據(jù)從0到1構(gòu)建,怎么獲取挖掘線上的badcase,補(bǔ)充篩選SFT高質(zhì)量的數(shù)據(jù)
-
NLG過程中的幻覺 大模型的胡編亂造
-
prompt的效果迭代和Lora微調(diào)的超參數(shù)的調(diào)試
-
實(shí)際項(xiàng)目落地時(shí)候模型的推理加速(eg:大模型的量化手段、流量請求時(shí)候的預(yù)剪枝,減少大模型的請求)
-
-
效果優(yōu)化思路
-
pompt的迭代
-
prompt優(yōu)化主要在訓(xùn)練階段,用于增強(qiáng)指令的多樣性,讓模型更好的理解指令
-
預(yù)測階段的prompt優(yōu)化主要用于無法進(jìn)行finetune的場景,在開源的基座大模型上進(jìn)行適配
-
對于特定下游任務(wù),預(yù)測階段建議與訓(xùn)練階段保持一致或者接近的prompt
-
適當(dāng)構(gòu)建few shot 及COT(Chain of Thought) 數(shù)據(jù)加入訓(xùn)練,可以有助于模型的指令理解
-
-
prompt的例子
? ? ? ? 輸入是:打開音樂和空調(diào)并幫我播放我喜歡的歌曲 輸出是:?打開音樂、打開空調(diào)、播放我喜歡的歌曲
-
實(shí)際工作中的心得體會(huì)
-
prompt盡量給出指定模型扮演的角色,比如nlu理解任務(wù)時(shí)候說是語音助手,泛化數(shù)據(jù)的時(shí)候是語言大師等等
- 越詳細(xì)越好,給到的定義越細(xì)越好,需要給出關(guān)于任務(wù)需求的詳細(xì)信息,比如上面的分句改寫任務(wù),需要定義例子的輸入和輸出,給出詳細(xì)的例子,還有囑咐清楚
-
針對任務(wù)給出幾個(gè)示例,符合few-shot 過程,有助于模型的很好理解;使用分隔符清晰的區(qū)分輸入的不同部分
-
建立懲罰機(jī)制,比如?做錯(cuò)了扣分,不要胡編亂造等等
-
prompt中可以嘗試讓大模型step by step的先思考再?zèng)Q策提升效果
-
-
結(jié)論
-
結(jié)合ICL上下文學(xué)習(xí),在prompt中加入輸入輸出對,讓LLM能夠通過理解這些演示樣例去進(jìn)行預(yù)測。
-
在prompt里增加一些角色信息相關(guān)的內(nèi)容,讓 AI 生成的內(nèi)容更符合我們的需求。
-
輸出格式盡可能是json、xml等等這樣的結(jié)構(gòu)化數(shù)據(jù);便于后續(xù)的結(jié)果的解析和輸出
-
優(yōu)質(zhì)Prompt能夠提高模型的精度。通過精心設(shè)計(jì)的提示詞或問題,可以引導(dǎo)模型關(guān)注到輸入文本的關(guān)鍵信息,從而減少誤判和誤差
-
優(yōu)質(zhì)Prompt能夠提高模型的泛化能力。在面對未曾訓(xùn)練過的場景時(shí),優(yōu)質(zhì)Prompt可以幫助模型更好地適應(yīng)新環(huán)境,減少過擬合現(xiàn)象
-
優(yōu)質(zhì)Prompt能夠提高模型的可解釋性。通過分析優(yōu)質(zhì)Prompt的輸出結(jié)果,我們可以更好地理解模型的決策過程和推理邏輯,從而更好地評估模型的效果和可靠性
-
-
版本2
'你是一個(gè)專業(yè)的車載語音助手,任務(wù)是協(xié)助處理用戶的文本輸入,并將其抽取為觸發(fā)條件conditions和執(zhí)行指令actions兩項(xiàng)內(nèi)容 \你需要遵循下列這些注意事項(xiàng) \ 1. 觸發(fā)條件代表執(zhí)行指令執(zhí)行的觸發(fā)時(shí)機(jī),如果用戶輸入中不包含這部分,則不用輸出conditions\ 2. 執(zhí)行指令代表用戶下達(dá)的執(zhí)行指令,文本輸入中一定包含這部分內(nèi)容。 \ 3. 用戶輸入中可能會(huì)包含多個(gè)觸發(fā)條件和執(zhí)行指令,請仔細(xì)做好內(nèi)容的識別和拆分,并以JSON格式輸出 \ 4. 用戶輸入是由語音識別轉(zhuǎn)寫而來的,可能口語化、重復(fù)啰嗦等問題,在不影響語義的情況下,請把觸發(fā)條件conditions中的`時(shí)`,`的時(shí)候`之類的詞語,以及執(zhí)行指令actions中的語氣詞、連詞去掉(如`還有`,`同時(shí)`,`請幫我`等等),保證抽取結(jié)果盡量精簡。 \ 5. 處理文本時(shí)應(yīng)遵循用戶的意圖,不能編造和虛構(gòu)不存在的內(nèi)容;不需要解釋和過程,嚴(yán)格按照示例的輸出形式給出結(jié)果。如果輸出指令不正確,則你將會(huì)被扣分! \下面是4個(gè)示例的輸入輸出:\ 輸入:上車的時(shí)候自動(dòng)播放QQ音樂 \ 輸出:{"conditions":["上車"], "actions":["播放QQ音樂"]} \輸入:每周五晚上下班時(shí)幫我導(dǎo)航回杭州的家調(diào)節(jié)空調(diào)再讓NOMI給我周末的問候 \ 輸出:{"conditions":["每周五晚上", "下班"], "actions":["導(dǎo)航回杭州的家", "調(diào)節(jié)空調(diào)", "播報(bào)周末的問候"]} \輸入:打開車窗和空調(diào)還有香氛關(guān)閉閱讀燈還有車門 \ 輸出:{"actions":["打開車窗", "打開空調(diào)", "打開香氛", "關(guān)閉閱讀燈", "關(guān)閉車門"]} \輸入:打開座椅加熱和通風(fēng)再幫我設(shè)置導(dǎo)航目的地為人民廣場 \ 輸出:{"actions":["打開座椅加熱", "打開座椅通風(fēng)", "設(shè)置導(dǎo)航目的地為人民廣場"]} \----示例結(jié)束---- \ 請你協(xié)助處理下面這一條用戶輸入,并直接給出JSON形式的輸出 \ 輸入:%s \ 輸出:' % query
-
版本1
經(jīng)過多次效果迭代,版本2相對比版本1中的prompt,大模型的效果提升2%'你是智能車載語音助手機(jī)器人,你的任務(wù)是,基于用戶輸入的文本進(jìn)行分句和改寫需要把輸入文本中多個(gè)意圖的句子切分開,用逗號分隔,如果文本中沒有多個(gè)意圖的話,那就不需要進(jìn)行切分。以下是需要進(jìn)行切分和改寫的句子:%s' % query
-
-
PEFT微調(diào)LoRA超參數(shù)的迭代
-
學(xué)習(xí)率設(shè)置
- 學(xué)習(xí)率是一個(gè)非常重要的參數(shù) ,如果學(xué)習(xí)率設(shè)置不當(dāng),很容易讓你的SFT模型效果較差。SFT數(shù)據(jù)集不是特別大的情況下,建議設(shè)置較小學(xué)習(xí)率,一般設(shè)置為pre-train階段學(xué)習(xí)率的0.1左右,如在pre-train階段的學(xué)習(xí)率為3e-4,則SFT學(xué)習(xí)率設(shè)置為3e-5
- warmup_ratio
- 通常pre-train訓(xùn)練的warmup_ratio 0.01~0.015之間,warmup-steps在2000左右。在SFT的時(shí)候,建議使用更小的ratio,因?yàn)橄噍^于pre-train,SFT樣本非常小,較小warmup_ratio可以使模型收斂更平滑。但如果你的學(xué)習(xí)率設(shè)置較大,那可以增大你的warmup_ratio,兩者呈正相關(guān)
-
-
-
四、總結(jié)
-
SFT的主要是使用于領(lǐng)域相關(guān)能力的增強(qiáng),如果通過大模型通用能力,例如embedding、prompt提取、Lang Chain等知識庫的形式可以解決的,沒有必要再進(jìn)行SFT微調(diào)
-
通用大模型泛化性好,精度不夠,SFT后的模型領(lǐng)域體驗(yàn)更佳,兩者可能是并行存在較好
-
SFT中僅使用領(lǐng)域數(shù)據(jù),會(huì)導(dǎo)致通用能力下降以及安全相關(guān)回復(fù)能力的下降甚至丟失,因此需要人工梳理,增加數(shù)據(jù)的多樣性的同時(shí)并把握好SFT數(shù)據(jù)的質(zhì)量,質(zhì)量非常重要
-
SFT不要訓(xùn)練較多輪次,比如10萬個(gè)樣本2-3個(gè)epoch內(nèi)為佳,2~5萬個(gè)樣本 一般是4-5個(gè) epoch 并且領(lǐng)域增強(qiáng)的SFT數(shù)據(jù)不需要太多,質(zhì)量一定要把握好,一般的領(lǐng)域總結(jié)回復(fù)的任務(wù)幾百條數(shù)據(jù)即可( 個(gè)人經(jīng)驗(yàn) ),視情況而定;小數(shù)據(jù)量可以適當(dāng)增大epoch,讓模型充分收斂。
-
通用數(shù)據(jù)和領(lǐng)域數(shù)據(jù)增加數(shù)據(jù)之間的比例(7:1)左右
-
SFT數(shù)據(jù)質(zhì)量的篩選數(shù)據(jù)質(zhì)量可以通過ppl、reward model,文本質(zhì)量分類模型等方式進(jìn)行初步評估。經(jīng)過人工進(jìn)行后續(xù)篩選
-
過高的epoch可能會(huì)帶來通用NLP能力的遺忘,需要根據(jù)實(shí)際需求核定,若您只需要下游能力提升,則通用NLP能力的略微下降影響不大
???
五、相關(guān)refer
-
https://zhuanlan.zhihu.com/p/692892489
-
https://zhuanlan.zhihu.com/p/635791164
-
https://zhuanlan.zhihu.com/p/649277113
-
https://zhuanlan.zhihu.com/p/662657529
-
https://zhuanlan.zhihu.com/p/682604566
-
https://hub.baai.ac.cn/view/31947
-
https://developer.baidu.com/article/details/2587180
-
https://zhuanlan.zhihu.com/p/676723672?utm_psn=1727814727898763264
-
https://cloud.baidu.com/doc/WENXINWORKSHOP/s/9liblgyh7