大規模語言模型高效參數微調--BitFit/Prefix/Prompt 微調系列
2018 年Google發布了BERT,一經面世便一舉擊敗11 個NLP 任務的State-of-the-art (Sota) 結果,成為了NLP 界新的里程碑; BERT 的結構如下圖所示, 左邊是 BERT 模型預訓練過程, 右邊是特定任務的微調過程。其中, 微調 階段是後續用於一些下游任務的時候進行微調, 例如: 文本分類, 詞性標註, 問答系統等, BERT 無需調整結構 就可以在不同的任務上進行微調。透過」預訓練語言模式 下游任務微調」的任務設計, 帶來了強大的模式效 果。從此,「預訓練語言模式 下游任務微調」便成為了 NLP 領域主流訓練範式。
BERT 結構圖,左邊是預訓練過程,右邊是具體任務微調過程
然而,隨著以GPT3為代表的大規模語言模型(LLM)參數規模的增加,消費級硬體上進行全量微調變得不可行。下表展示了在一張A100 GPU(80G顯存)以及CPU記憶體64GB以上的硬體上進行模型全量微調以及參數高效微調對於CPU/GPU記憶體的消耗情況
#全量參數微調與參數高效能微調顯存佔用對比
除此之外,全面微調模型還會導致多樣性的喪失,並且存在嚴重的遺忘問題。因此,如何高效地進行模型微調已成為業界研究的重點,這也為參數高效微調技術的快速發展提供了研究空間
參數高效微調是指微調少量或額外的模型參數,固定大部分預訓練模型(LLM) 參數, 因而大幅降低了計 算與儲存成本, 同時, 也能達到與全量參數微調相當的效能。參數高效微調方法甚至在某些情況下比全量微調 效果更好,可以更好地泛化到域外場景。
高效能微調技術可粗略分為以下三大類,如下圖所示:增加額外參數(A)、選取一部分參數更新(S)、引入重參數化(R)。 而在增加額外參數這類方法中,又主要分為類適配器(Adapter-like)方法和軟提示(Soft prompts)兩個小類。
常見的參數高效能微調技術包括BitFit、Prefix Tuning、Prompt Tuning、P-Tuning、Adapter Tuning、LoRA等。接下來的章節將對一些主流的參數高效微調方法進行詳細講解
#常見的參數高效微調技術和方法
#BitFit/Prefix/Prompt 微調系列
BitFit
雖然對每個任務進行全量微調非常有效,但它也會為每個預訓練任務產生一個獨特的大型模型, 這使得很 難推斷微調過程中發生了什麼變化,也很難部署,特別是隨著任務數量的增加,很難維護。
理想狀況下,我們希望有一種滿足以下條件的高效微調方法:
上述的問題取決於微調過程能多大程度引導新能力的學習以及暴露在預訓練LM 中學到的能力。雖然, 之 前的高效率微調方法 Adapter-Tuning 、Diff-Pruning 也能夠部分滿足上述的需求。一種參數量較小的稀疏的微調方 法 BitFit 可以滿足上述所有需求。
BitFit 是一種稀疏的微調方法, 它訓練時只更新 bias 的參數或部分 bias 參數。對 Transformer 模型而言, 凍結大部分 transformer-encoder 參數, 只更新 bias 參數跟特定任務的分類層參數。涉及的bias 參數有attention 模組中計算query,key,value 跟隨合併多個attention 結果時涉及到的bias,MLP 層中的bias,Layernormalization 層的bias 參數,預訓練模型中的bias參數如下圖所示。
圖片
PLM 模組代表了一個特定的 PLM 子層, 例如注意力或 FFN,圖中橘色區塊表示可訓練的提示向量, 藍色 塊表示凍結的預訓練模型參數
#在 Bert-Base/Bert-Large 這種模型裡, bias 參數只佔模型全部參數量的 0.08%~0.09%。但透過在Bert-Large 模型上基於GLUE 資料集進行了BitFit、Adapter 和Diff-Pruning 的效果比較發現, BitFit 在參數量遠小於Adapter、 Diff-Pruning 的情況下,效果與Adapter 、Diff-Pruning 想當,甚至在某些任務上略優於Adapter 、Diff-Pruning。
透過實驗結果可以看出,相對於全量參數微調,BitFit微調結果只更新了極少量的參數,在多個資料集上都取得了不錯的效果。雖然不如全量參數微調,但遠超過固定全部模型參數的Frozen方式。同時,透過比較BitFit訓練前後的參數,發現許多偏移參數並沒有太多變化,例如與計算key相關的偏移參數。而發現計算query和將特徵維度從N放大到4N的FFN層的偏移參數變化最為明顯,只更新這兩類偏壓參數也能取得不錯的效果。反之,固定其中任何一者,模型的效果都會有較大損失
Prefix Tuning
在 Prefix Tuning 之前的工作主要是人工設計離散的模版或自動化搜尋離散的模版。對於人工設計的模版, 模版的變化對模型的最終表現特別敏感, 加一個字、少一個字或是變動位置都會造成比較大的變化。而對於自動 化搜尋模版, 成本也比較高;同時, 以前這種離散化的 token 搜尋出來的結果可能並不是最優的。除此之外, 傳統的微調範式利用預訓練模型去對不同的下游任務進行微調, 對每個任務都要保存一份微調後的模型權重, 一 方面微調整個模型耗時長;另一方面也會佔很多儲存空間。基於上述兩點, Prefix Tuning 提出固定預訓練LM,為LM 添加可訓練, 任務特定的前綴, 這樣就可以為不同任務保存不同的前綴, 微調成本也小; 同時, 這種 Prefix 實際是連續可微的 Virtual Token (Soft Prompt/Continuous Prompt),相較於離散的 Token ,較佳優化,效果較好。
那麼,需要重寫的內容是:那麼 prefix 的意思是什麼呢? prefix 的作用是引導模型提取 x 相關的訊息,進而更好地產生 y。例如,我們要做一個summarization 的任務,那麼經過微調後,prefix 就能領悟到當前要做的是個「總結形式」的任務,然後引導模型去x 中提煉關鍵訊息;如果我們要做一個情感分類的任務,prefix 就能引導模型去提煉出x 中和情感相關的語意訊息,以此類推。這樣的解釋可能不那麼嚴謹,但大家可以大致體會一下prefix 的作用
Prefix Tuning 是在輸入token 之前構造一段任務相關的virtual tokens 作為Prefix,然後訓練的時候只更新Prefix 部分的參數,而PLM 中的其他部分參數固定。針對不同的模型結構,需要建構不同的Prefix:
- 針對自迴歸架構模型:在句子前面加上前綴, 得到z = [PREFIX; x; y],適合的上文能夠在固定LM 的情況下去引導生成下文(例如:GPT3 的上下文學習)。
- 針對編碼器-解碼器架構模型:Encoder 和 Decoder 都增加了前綴,得到 z = [PREFIX; x; PREFIX0; y]。 Encoder 端增加前綴是為了引導輸入部分的編碼, Decoder 端增加前綴是為了引導後續 token 的產生。
圖片
對內容重寫,不改變原意,使用中文重寫: 對於上一個部分的微調,我們會更新所有Transformer參數(紅色框),並且需要為每個任務儲存完整的模型副本。而下部分的前綴調整則會凍結Transformer參數,並且只優化前綴(紅色框)
該方法其實和構造Prompt 類似, 只是Prompt 是人為構造的“顯式”的提示,且無法更新參數, 而Prefix 則是可以學習的「隱式」的提示。同時,為了防止直接更新 Prefix 的參數導致訓練不穩定和表現下降的情況,在 Prefix 層前面加了 MLP 結構, 訓練完成後, 只保留 Prefix 的參數。除此之外, 透過消融實驗證實, 只調整 embedding 層的表現力不夠,將導致表現顯著下降,因此,每層都加了 prompt 的參數,而改變較大。
Prefix Tuning 雖然看起來方便,但也存在以下兩個顯著劣勢:
Prompt Tuning
大模型全量微調對每個任務訓練一個模型, 開銷和部署成本都比較高。同時, 離散的 prompts (指人工設計 prompts 提示語加入到模型) 方法, 成本比較高, 且效果不太好。 Prompt Tuning 透過反向傳播更新參數來學習 prompts,而不是人工設計 prompts;同時凍結模型原始權重, 只訓練 prompts 參數, 訓練完以後, 用同一個模型 可以做多任務推理。
圖片
模型調整需要為每個任務製作整個預訓練模型的特定任務副本下游任務和推理必須在分開批次。 Prompt Tuning 只需要為每個任務儲存一個小的特定於任務的提示,並且使用原始預訓練模型啟用混合任務推理。
Prompt Tuning 可以看作是Prefix Tuning 的簡化版本,它給每個任務定義了自己的Prompt,然後拼接到資料 上作為輸入,但只在輸入層加入prompt tokens,並且不需要加入MLP 進行調整來解決難訓練的問題。
透過實驗發現,隨著預訓練模型參數量的增加,Prompt Tuning 的方法會逼近全參數微調的結果。同時, Prompt Tuning 也提出了Prompt Ensembling,也就是在一個批次(Batch) 裡同時訓練同一個任務的不同prompt (即採用 多種不同方式詢問同一個問題) ,這樣相當於訓練了不同模型, 比模型整合的成本小多了。除此之外, Prompt Tuning 論文中也探討了 Prompt token 的初始化方法和長度對於模型效能的影響。透過消融實驗結果發現, 與隨機 初始化和使用樣本詞彙表初始化相比, Prompt Tuning 採用類別標籤初始化模型的效果更好。不過隨著模型參數規 模的提升, 這種 gap 最終會消失。 Prompt token 的長度在20 左右時的表現已經不錯(超過20 之後, 提升Prompt token 長度, 對模型的性能提升不明顯了),同樣的, 這個gap 也會隨著模型參數規模的提升而減小(即對於超大規模模型而言,即使Prompt token 長度很短,對性能也不會有太大的影響)。
以上是大規模語言模型高效參數微調--BitFit/Prefix/Prompt 微調系列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

語言模型是對文字進行推理的,文字通常是字串形式,但模型的輸入只能是數字,因此需要將文字轉換成數字形式。 Tokenization是自然語言處理的基本任務,根據特定需求能夠把一段連續的文字序列(如句子、段落等)切分為一個字元序列(如單字、片語、字元、標點等多個單元),其中的單元稱為token或詞語。根據下圖所示的具體流程,首先將文字句子切分成一個個單元,然後將單元素數值化(映射為向量),再將這些向量輸入到模型進行編碼,最後輸出到下游任務進一步得到最終的結果。文本切分依照文本切分的粒度可以將Toke

編譯|星璇出品|51CTO技術堆疊(微訊號:blog51cto)在過去的兩年裡,我更參與了使用大型語言模型(LLMs)的生成AI項目,而非傳統的系統。我開始懷念無伺服器雲端運算。它們的應用範圍廣泛,從增強對話AI到為各行各業提供複雜的分析解決方案,以及其他許多功能。許多企業將這些模型部署在雲端平台上,因為公有雲供應商已經提供了現成的生態系統,而且這是阻力最小的路徑。然而,這並不便宜。雲端還提供了其他好處,如可擴展性、效率和高階運算能力(按需提供GPU)。在公有雲平台上部署LLM的過程有一些鮮為人知的

2018年Google發布了BERT,一經面世便一舉擊敗11個NLP任務的State-of-the-art(Sota)結果,成為了NLP界新的里程碑;BERT的結構如下圖所示,左邊是BERT模型預訓練過程,右邊是對於具體任務的微調過程。其中,微調階段是後續用於一些下游任務的時候進行微調,例如:文本分類,詞性標註,問答系統等,BERT無需調整結構就可以在不同的任務上進行微調。透過」預訓練語言模型+下游任務微調」的任務設計,帶來了強大的模型效果。從此,「預訓練語言模型+下游任務微調」便成為了NLP領域主流訓

編輯|ScienceAI問答(QA)資料集在推動自然語言處理(NLP)研究中發揮著至關重要的作用。高品質QA資料集不僅可以用於微調模型,也可以有效評估大語言模型(LLM)的能力,尤其是針對科學知識的理解和推理能力。儘管目前已有許多科學QA數據集,涵蓋了醫學、化學、生物等領域,但這些數據集仍有一些不足之處。其一,資料形式較為單一,大多數為多項選擇題(multiple-choicequestions),它們易於進行評估,但限制了模型的答案選擇範圍,無法充分測試模型的科學問題解答能力。相比之下,開放式問答

2月25日消息,Meta在當地時間週五宣布,它將推出一種針對研究社區的基於人工智慧(AI)的新型大型語言模型,與微軟、谷歌等一眾受到ChatGPT刺激的公司一同加入人工智能競賽。 Meta的LLaMA是「大型語言模式MetaAI」(LargeLanguageModelMetaAI)的縮寫,它可以在非商業許可下提供給政府、社區和學術界的研究人員和實體工作者。該公司將提供底層程式碼供用戶使用,因此用戶可以自行調整模型,並將其用於與研究相關的用例。 Meta表示,該模型對算力的要

隨著語言模型擴展到前所未有的規模,對下游任務進行全面微調變得十分昂貴。為了解決這個問題,研究人員開始注意並採用PEFT方法。 PEFT方法的主要想法是將微調的範圍限制在一小部分參數上,以降低計算成本,同時仍能實現自然語言理解任務的最先進性能。透過這種方式,研究人員能夠在保持高效能的同時,節省運算資源,為自然語言處理領域帶來新的研究熱點。 RoSA是一種新的PEFT技術,透過在一組基準測試的實驗中,發現在使用相同參數預算的情況下,RoSA表現出優於先前的低秩自適應(LoRA)和純稀疏微調方法。本文將深

近幾年自然語言處理的進展很大程度都來自於大規模語言模型,每次發布的新模型都將參數量、訓練資料量推向新高,同時也會對現有基準排行進行一次屠榜!例如今年4月,Google發布5400億參數的語言模型PaLM(Pathways Language Model)在語言和推理類的一系列測評中成功超越人類,尤其是在few-shot小樣本學習場景下的優異性能,也讓PaLM被認為是下一代語言模式的發展方向。同理,視覺語言模型其實也是大力出奇蹟,可以透過提升模型的規模來提升表現。當然了,如果只是多工的視覺語言模

譯者 | 李睿審校 | 孫淑娟BigScience研究計畫日前發布了一個大型語言模型BLOOM,乍一看,它看起來像是複製OpenAI的GPT-3的又一次嘗試。但BLOOM與其他大型自然語言模型(LLM)的不同之處在於,它在研究、開發、培訓和發布機器學習模型方面所做的努力。近年來,大型科技公司將大型自然語言模型(LLM)就像嚴守商業機密一樣隱藏起來,而BigScience團隊從專案一開始就把透明與開放放在了BLOOM的中心。其結果是一個大型語言模型,可以供研究和學習,並可供所有人使用。 B
