? ? ? ?隨著預(yù)訓(xùn)練模型的參數(shù)越來越大,尤其是175B參數(shù)大小的GPT3發(fā)布以來,讓很多中小公司和個人研究員對于大模型的全量微調(diào)望而卻步,近年來研究者們提出了各種各樣的參數(shù)高效遷移學(xué)習(xí)方法(Parameter-efficient Transfer Learning),即固定住Pretrain Language model(PLM)的大部分參數(shù),僅調(diào)整模型的一小部分參數(shù)來達到與全部參數(shù)的微調(diào)接近的效果(調(diào)整的可以是模型自有的參數(shù),也可以是額外加入的一些參數(shù))。本文將介紹一些常見的參數(shù)高效微調(diào)技術(shù),比如:BitFit、Prefix Tuning、Prompt Tuning、P-Tuning、P-Tuning v2、Adapter Tuning及其變體、LoRA、AdaLoRA、QLoRA、MAM Adapter、UniPELT等。
1、BitFit
論文地址:https://aclanthology.org/2022.acl-short.1.pdf
代碼地址:https://github.com/benzakenelad/BitFit
? ? ? ?BitFIt只對模型的bias進行微調(diào)。在小規(guī)模-中等規(guī)模的訓(xùn)練數(shù)據(jù)上,BitFit的性能與全量微調(diào)的性能相當,甚至有可能超過,在大規(guī)模訓(xùn)練數(shù)據(jù)上,與其他fine-tuning方法也差不多。在大模型中bias存在Q,K,V,MLP,LayerNorm中,具體公式如下:
? ? ? 在Bert-Base/Bert-Large這種模型里,bias參數(shù)僅占模型全部參數(shù)量的0.08%~0.09%。但是通過在Bert-Large模型上基于GLUE數(shù)據(jù)集進行了 BitFit、Adapter和Diff-Pruning的效果對比發(fā)現(xiàn),BitFit在參數(shù)量遠小于Adapter、Diff-Pruning的情況下,效果與Adapter、Diff-Pruning想當,甚至在某些任務(wù)上略優(yōu)于Adapter、Diff-Pruning。
? ? ? ?通過Bitfit訓(xùn)練前后的參數(shù)對比,發(fā)現(xiàn)很多bias參數(shù)沒有太多變化,例如跟計算key所涉及到的bias參數(shù)。發(fā)現(xiàn)其中計算query與中間MLP層的bias(將特征維度從N放大到4N的FFN層——將輸入從768d轉(zhuǎn)化為到3072d)變化最為明顯,只更新這兩類bias參數(shù)也能達到不錯的效果,反之,固定其中任何一者,模型的效果都有較大損失。
作者給出了Hugging Face與BitFit參數(shù)的映射關(guān)系表,如下所示:
2、Prefix?Tuning
論文地址:https://arxiv.org/pdf/2101.00190.pdf
代碼地址:https://github.com/XiangLi1999/PrefixTuning
??? ? ?prefix-tuning方法是一個輕量級的fine-tuning方法用于自然語言處理的生成任務(wù)。該方法可以保持預(yù)訓(xùn)練語言模型參數(shù)固定(frozen),而只需要在task-specific vector(稱為prefix)上進行優(yōu)化。即只需要少量(約0.1%)的優(yōu)化參數(shù),即可以在量和小量數(shù)據(jù)上達到不錯的效果。
針對不同的模型結(jié)構(gòu),需要構(gòu)造不同的Prefix。
-
針對自回歸架構(gòu)模型:在句子前面添加前綴,得到?
z = [PREFIX; x; y]
,合適的上文能夠在固定 LM 的情況下去引導(dǎo)生成下文(比如:GPT3的上下文學(xué)習(xí))。 -
針對編碼器-解碼器架構(gòu)模型:Encoder和Decoder都增加了前綴,得到?
z = [PREFIX1; x; PREFIX2; y]
。Encoder端增加前綴是為了引導(dǎo)輸入部分的編碼,Decoder 端增加前綴是為了引導(dǎo)后續(xù)token的生成。
? ? ? ? 如上圖所示,??表示prefix indices序列,??表示prefix的長度。Prefix-tuning通過初始化可訓(xùn)練矩陣??(維度為??)來存儲prefix參數(shù):
?
? ? ? ?training objective與Fine-tuning相同,但語言模型的參數(shù)?固定,僅僅prefix參數(shù)是可訓(xùn)練參數(shù)。因此是可訓(xùn)練的的函數(shù),當時,???由??直接復(fù)制得到,對于??, 由于prefix activations始終在left context因此可以影響到????。
? ? ? ?在實驗上,直接更新??的參數(shù)會導(dǎo)致優(yōu)化的不穩(wěn)定以及表現(xiàn)上的極具下降。因此通過使用較小的矩陣??通過大型前饋神經(jīng)網(wǎng)絡(luò)(??)來reparametrize矩陣??:
??
? ? ? ? 其中,??和??在相同的行維度(也就是相同的prefix length), 但不同的列維度。當訓(xùn)練完成后,reparametrization參數(shù)被丟掉,僅僅??需要被保存下來。
? ? ? ? 實驗中對比了Fine Tuning和Prefix Tuning在E2E、WebNLG和DART三個table-to-text任務(wù)上的效果:
3、Prompt?Tuning
論文地址:https://arxiv.org/pdf/2104.08691.pdf
代碼地址:https://github.com/google-research/prompt-tuning
? ? ? ?Prompt Tuning可以看作是Prefix Tuning的簡化版本,面向NLU任務(wù),進行了更全面的效果對比,并且在大模型上成功打平了LM微調(diào)的效果,它給每個任務(wù)定義了自己的Prompt,然后拼接到數(shù)據(jù)上作為輸入,但只在輸入層加入prompt tokens,并且不需要加入 MLP 進行調(diào)整來解決難訓(xùn)練的問題。通過反向傳播更新參數(shù)來學(xué)習(xí)prompts,而不是人工設(shè)計prompts;同時凍結(jié)模型原始權(quán)重,只訓(xùn)練prompts參數(shù),訓(xùn)練完以后,用同一個模型可以做多任務(wù)推理。
對比Prefix-Tunning,prompt-tuning的主要差異如下,
? ? ? 論文使用100個prefix token作為默認參數(shù),大于以上prefix-tuning默認的10個token,不過差異在于prompt-Tunning只對輸入層(Embedding)進行微調(diào),而Prefix是對虛擬Token對應(yīng)的上游layer全部進行微調(diào)。因此Prompt-Tunning的微調(diào)參數(shù)量級要更小,且不需要修改原始模型結(jié)構(gòu),這是“簡化”的來源。相同的prefix長度,Prompt-Tunning(<0.01%)微調(diào)的參數(shù)量級要比Prefix-Tunning(0.1%~1%)小10倍以上,如下圖所示
? ? ? 為什么上面prefix-tuning只微調(diào)embedding層效果就不好,放在prompt-tuning這里效果就好了呢?因為評估的任務(wù)不同無法直接對比,個人感覺有兩個因素,一個是模型規(guī)模,另一個是繼續(xù)預(yù)訓(xùn)練,前者的可能更大些,在下面的消融實驗中會提到???
效果&消融實驗
? ? ? 在SuperGLUE任務(wù)上,隨著模型參數(shù)的上升,PromptTunning快速拉近和模型微調(diào)的效果,110億的T5模型(上面prefix-tuning使用的是15億的GPT2),已經(jīng)可以打平在下游多任務(wù)聯(lián)合微調(diào)的LM模型,并且遠遠的甩開了Prompt Design(GPT3 few-shot)
? ? ? 作者也做了全面的消融實驗,包括以下4個方面,最核心的感受就是只要模型足夠夠大一切都好說
-
prompt長度(a):固定其他參數(shù),作者嘗試了{1,5,20,100,150},?Prompt token?的長度在20左右時的表現(xiàn)已經(jīng)不錯(超過20之后,提升Prompt token長度,對模型的性能提升不明顯了),同樣的,這個gap也會隨著模型參數(shù)規(guī)模的提升而減?。磳τ诔笠?guī)模模型而言,即使 Prompt token 長度很短,對性能也不會有太大的影響);
-
Prompt初始化(b): 作者嘗試了隨機uniform初始化,用標簽文本空間初始化,和用Top5K高頻詞采樣初始化,在10^8規(guī)模,類標簽詞初始化效果最好。作者發(fā)現(xiàn)預(yù)測label也會在對應(yīng)prompt空間內(nèi)。不過到百億規(guī)模后,初始化帶來的影響就會消失;
-
T5繼續(xù)預(yù)訓(xùn)練(c):作者認為T5本身的Span Corruption預(yù)訓(xùn)練目標和掩碼詞,并不適合凍結(jié)LM的場景,因為在微調(diào)中模型可以調(diào)整預(yù)訓(xùn)練目標和下游目標的差異,而只使用prompt可能無法彌合差異。其實這里已經(jīng)能看出En-Dn框架在生成場景下沒有GPT這樣的Decoder來的自然。因此作者基于LM目標對T5進行繼續(xù)預(yù)訓(xùn)練;
-
繼續(xù)預(yù)訓(xùn)練step(d):以上的繼續(xù)預(yù)訓(xùn)練steps,繼續(xù)預(yù)訓(xùn)練步數(shù)越高,模型效果在不同模型規(guī)模上越單調(diào);
可解釋性
? ? ? 考慮Prompt-Tunning使用Embedding來表征指令,可解釋性較差。作者使用cosine距離來搜索prompt embedding對應(yīng)的Top5近鄰。發(fā)現(xiàn)如下:
-
embedding的近鄰出現(xiàn)語義相似的cluster,例如{ Technology / technology / Technologies/ technological / technologies }, 說明連續(xù)prompt實際可能是相關(guān)離散prompt詞的聚合語義
-
當連續(xù)prompt較長(len=100), 存在多個prompt token的KNN相同:個人認為這和prefix-tuning使用MLP那里我的猜測相似,prompt應(yīng)該是一個整體文章來源:http://www.zghlxwxcb.cn/news/detail-822664.html
-
使用標簽詞初始化,微調(diào)后標簽詞也大概率會出現(xiàn)在prompt的KNN中,說明初始化可以提供更好的prior信息加速收斂文章來源地址http://www.zghlxwxcb.cn/news/detail-822664.html
到了這里,關(guān)于大模型PEFT技術(shù)原理(一):BitFit、Prefix Tuning、Prompt Tuning的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!