當(dāng)前以 ChatGPT 為代表的預(yù)訓(xùn)練語言模型(PLM)規(guī)模變得越來越大,在消費級硬件上進行全量微調(diào)(Full Fine-Tuning)變得不可行。此外,為每個下游任務(wù)單獨存儲和部署微調(diào)模型變得非常昂貴,因為微調(diào)模型與原始預(yù)訓(xùn)練模型的大小相同。
參數(shù)高效微調(diào)方法(Parameter-Efficient Fine-Tuning,PEFT) 方法被提出來解決這兩個問題, PEFT 可以使 PLM 高效適應(yīng)各種下游應(yīng)用任務(wù),而無需微調(diào)預(yù)訓(xùn)練模型的所有參數(shù) 。
微調(diào)大規(guī)模 PLM 所需的資源成本通常高得令人望而卻步。 在這方面, PEFT 方法僅微調(diào)少量或額外的模型參數(shù),固定大部分預(yù)訓(xùn)練參數(shù),大大降低了計算和存儲成本 ,同時最先進的 PEFT 技術(shù)也能實現(xiàn)了與全量微調(diào)相當(dāng)?shù)男阅堋?/p>
Huggface 開源的一個高效微調(diào)大模型的庫PEFT[1] ,該算法庫支持以下四類方法:
LoRA: LoRA: Low-Rank Adaptation of Large Language Models[2] Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation[3], P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks[4] P-Tuning: GPT Understands, Too[5] Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning[6]
LLM-Adapters[7] 是對 PEFT 庫的擴展,是一個簡單易用的框架,將各種適配器集成到 LLM 中,可針對不同的任務(wù)執(zhí)行 LLM 的基于適配器的 PEFT 方法,除了 PEFT 支持的 LoRA、Prefix Tuning、P-Tuning、Prompt Tuning 方法外,主要擴增了 AdapterH、AdapterP 和 Parallel 三種方法。
AdapterH: Parameter-Efficient Transfer Learning for NLP[8]
AdapterP: GMAD-X: An Adapter-Based Framework for Multi-Task Cross-Lingual Transfer[9]
Parallel: Towards a Unified View of Parameter-Efficient Transfer Learning[10]
如下圖所示,PEFT 方法可以分為三類,不同的方法對 PLM 的不同部分進行下游任務(wù)的適配:
Prefix-Tuning 在模型輸入前添加一個連續(xù)的且任務(wù)特定的向量序列 (continuous task-specific vectors),稱之為 前綴(prefix) 。前綴被視為一系列“虛擬 tokens”,但是它由不對應(yīng)于真實 tokens 的自由參數(shù)組成。
與更新所有 PLM 參數(shù)的全量微調(diào)不同, Prefix-Tuning 固定 PLM 的所有參數(shù),只更新優(yōu)化特定任務(wù)的 prefix 。因此,在生產(chǎn)部署時,只需要存儲一個大型 PLM 的副本和一個學(xué)習(xí)到的特定任務(wù)的 prefix,每個下游任務(wù)只產(chǎn)生非常小的額外的計算和存儲開銷。
Fine-tuning 更新所有 PLM 參數(shù),并且需要為每個任務(wù)存儲完整的模型副本。Prefix-tuning 凍結(jié)了 PLM 參數(shù)并且只優(yōu)化了 prefix。因此,只需要為每個任務(wù)存儲特定 prefix,使 Prefix-tuning 模塊化且節(jié)省存儲空間。
如下圖所示,以 GPT2 的自回歸語言模型為例,將輸入 x 和輸出 y 拼接為 ,經(jīng)過 LM 的某一層計算隱層表示
其中, 和 分別為輸入和輸出序列的索引。
Prefix-Tuning 在輸入前添加前綴,即 , 為前綴序列的索引, 為前綴的長度。
前綴索引對應(yīng)著由 參數(shù)化的向量矩陣 ,維度為 。隱層表示的計算如下式所示,若索引為前綴索引 ,直接從 復(fù)制對應(yīng)的向量作為 ( 在模型每一層都添加前綴向量 );否則直接通過 LM 計算得到,同時,經(jīng)過 LM 計算的 也依賴于其左側(cè)的前綴參數(shù) ,即 通過前綴來影響后續(xù)的序列隱層激化值 。
但是直接優(yōu)化 會導(dǎo)致訓(xùn)練不穩(wěn)定,通過一個更小的矩陣 和一個更大的前饋神經(jīng)網(wǎng)絡(luò) 對 進行重參數(shù)化: 。在訓(xùn)練時,LM 的參數(shù) 被固定,只有前綴參數(shù) 為可訓(xùn)練的參數(shù)。訓(xùn)練完成后,只有前綴 被保存。
在實驗中,作者進行了兩組方法變體的對比分析:
[ Full vs Embedding-only ]: Embedding-only 方法只在 embedding 層添加前綴向量并優(yōu)化,而 Full 代表的 Prefix-tuning 不僅優(yōu)化 embedding 層添加前綴參數(shù),還在模型所有層的激活添加前綴并優(yōu)化。實驗得到一個不同方法的 表達(dá)能力增強鏈條:discrete prompting < embedding-only < prefix-tuning 。同時,Prefix-tuning 可以直接修改模型更深層的表示,避免了跨越網(wǎng)絡(luò)深度的長計算路徑問題。
[ Prefix-tuning vs Infix-tuning ]: 通過將可訓(xùn)練的參數(shù)放置在 x 和 y 的中間來研究可訓(xùn)練參數(shù)位置對性能的影響,即 [x;Infix;y] ,這種方式成為 Infix-tuning。實驗表明 Prefix-tuning 性能好于 Infix-tuning ,因為 prefix 能夠同時影響 x 和 y 的隱層激活,而 infix 只能夠影響 y 的隱層激活。
同時,研究表明前綴的 embedding 使用詞表中真實單詞的激活來初始化明顯優(yōu)于隨機初始化。
P-Tuning 的方法思路與 Prefix-Tuning 很相近,P-Tuning 利用少量連續(xù)的 embedding 參數(shù)作為 prompt 使 GPT 更好的應(yīng)用于 NLU 任務(wù),而 Prefix-Tuning 是針對 NLG 任務(wù)設(shè)計 。同時, P-Tuning 只在 embedding 層增加參數(shù),而 Prefix-Tuning 在每一層都添加可訓(xùn)練參數(shù) 。
如下圖所示,具體的 NLU 任務(wù)以預(yù)測一個城市的首都為例,
直接優(yōu)化連續(xù)的 prompt 參數(shù)面臨兩個挑戰(zhàn):一是預(yù)訓(xùn)練模型原始的詞向量已經(jīng)高度離散,若隨機初始化 prompt 向量并進行 SGD 優(yōu)化,也只會在小范圍內(nèi)優(yōu)化并陷入局部最小值;二是 prompt 向量之間是相互關(guān)聯(lián)而不是獨立的。論文中 設(shè)計了一個 prompt 編碼器,該編碼器由一個 Bi-LSTM 和一個兩層的前饋神經(jīng)網(wǎng)絡(luò)組成,對 prompt embedding 序列進行編碼后再傳入到語言模型中 。
論文的實驗主要表明了:在 SuperGLUE 基準(zhǔn)測試中,P-tuning 使得 GPT-style 的生成式模型與相同大小的 BERT 在 NLU 方面實現(xiàn)可比較,有時甚至更好的性能。
P-Tuning V2 方法的思路其實和 Prefix-Tuning 相似,在 模型的每一層都應(yīng)用連續(xù)的 prompts 并對 prompts 參數(shù)進行更新優(yōu)化。同時,該方法是 針對 NLU 任務(wù)優(yōu)化和適配 的。
Prompt Tuning 方式可以看做是 Prefix Tuning 的簡化, 固定整個預(yù)訓(xùn)練模型參數(shù),只允許將每個下游任務(wù)的額外k個可更新的 tokens 前置到輸入文本中,也沒有使用額外的編碼層或任務(wù)特定的輸出層 。
如下圖所示,在模型大小增加到一定規(guī)模時,僅僅使用 Prompt Tuning 就足以達(dá)到 Fine Tuning 的性能。
T5 的 Model Tuning 實現(xiàn)了強大的性能,但需要為每個任務(wù)存儲單獨的模型副本。 隨著模型規(guī)模的增加,對 T5 的 Prompt Tuning 與 Model Tuning 的性能相當(dāng),同時允許所有任務(wù)復(fù)用同一固定模型。Prompt Tuning 方法明顯優(yōu)于使用 GPT-3 的少樣本 Prompt Design。
Prompt Tuning 以 T5 為基礎(chǔ),將所有任務(wù)轉(zhuǎn)化成文本生成任務(wù),表示為 。Prompt Tuning 在輸入 X 前額外添加一系列特殊 tokens ,輸入語言模型生成 ,即 。其中, 為預(yù)訓(xùn)練模型參數(shù),在訓(xùn)練過程被固定, 為 prompts 的專有參數(shù),在訓(xùn)練過程被更新優(yōu)化。通過將輸入 X 的 embedding 矩陣 與 prompts 的 embedding 矩陣進行拼接 輸入 T5 模型,最大化 Y 的概率訓(xùn)練模型,但是只有 prompt 參數(shù)被更新。
模型微調(diào)需要制作整個預(yù)訓(xùn)練模型的任務(wù)特定副本,推理分批執(zhí)行。Prompt tuning 只需為每個任務(wù)存儲一個 Task Prompts,并使用原始預(yù)訓(xùn)練模型進行混合任務(wù)推理。
Prompt Tuning 提出了 Prompt Ensembling 方法來集成預(yù)訓(xùn)練語言模型的多種 prompts。 通過在同一任務(wù)上訓(xùn)練 N 個 prompts,為一個任務(wù)創(chuàng)建了 N 個單獨的模型,同時在整個過程中共享核心的預(yù)訓(xùn)練語言建模參數(shù)。 除了大幅降低存儲成本外,提示集成還使推理更加高效。 處理一個樣例時,可以執(zhí)行批此大小為N的單個前向傳遞,而不是計算 N 次不同模型的前向傳遞,跨批次復(fù)制樣例并改變 prompts。在推理時可以使用 major voting 方法從 prompt ensembling 中得到整體的預(yù)測。
與 Prefix Tuning 和 Prompt Tuning 這類在輸入前可訓(xùn)練添加 prompt embedding 參數(shù)來以少量參數(shù)適配下游任務(wù), Adapter Tuning 則是在預(yù)訓(xùn)練模型內(nèi)部的網(wǎng)絡(luò)層之間添加新的網(wǎng)絡(luò)層或模塊來適配下游任務(wù) 。
假設(shè)預(yù)訓(xùn)練模型函數(shù)表示為 ,對于 Adapter Tuning ,添加適配器之后模型函數(shù)更新為: , 是預(yù)訓(xùn)練模型的參數(shù), 是新添加的適配器的參數(shù),在訓(xùn)練過程中, 被固定,只有 被更新。 ,這使得不同下游任務(wù)只需要添加少量可訓(xùn)練的參數(shù)即可,節(jié)省計算和存儲開銷,同時共享大規(guī)模預(yù)訓(xùn)練模型。
Adapter 主要包括 Series Adapter(串行) 和 Parallel Adapter(并行):
現(xiàn)有的 PEFT 方法主要有兩類:Adapter Tuning 和 Prefix Tuning。
給定一個由 參數(shù)化的預(yù)訓(xùn)練的自回歸語言模型 ,對于全量微調(diào),模型參數(shù)由預(yù)訓(xùn)練權(quán)重 初始化,并反復(fù)跟隨使得條件語言模型目標(biāo)函數(shù)最大化的梯度更新至 。
全量微調(diào)的一個主要缺點就是針對每個下游任務(wù)都學(xué)習(xí)和預(yù)訓(xùn)練權(quán)重維度相同的全新參數(shù)集合 ,即 。尤其是 GPT-3 175B 這類大模型,全量微調(diào)對計算和存儲資源的消耗是非常大的,存儲和部署不同微調(diào)模型實例也是不可能的。
LoRA 論文提出了一種計算和存儲高效的低秩(Low-Rank)表示方法,利用更小規(guī)模的參數(shù)集合 來對任務(wù)特定的參數(shù)增量進行編碼, 。利用該方法對 175B GPT-3 微調(diào),需要訓(xùn)練更新的參數(shù)數(shù)量 可以小到全量微調(diào)參數(shù)數(shù)量 的 。
具體地,Transformer 等神經(jīng)網(wǎng)絡(luò)包含許多執(zhí)行矩陣乘法的密集層,這些權(quán)重矩陣通常具有滿秩。研究Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning[11] 表明預(yù)訓(xùn)練的語言模型具有較低的'內(nèi)在維度(Instrisic Dimension)',并且可以和完整參數(shù)空間一樣進行有效學(xué)習(xí)。
受此啟發(fā),假設(shè)權(quán)重的更新在微調(diào)適配過程中也具有較低的'內(nèi)在秩(Instrisic Rank)'。對于預(yù)訓(xùn)練模型的權(quán)重矩陣 ,通過低秩分解(Low-Rank Decomposition)來表示約束其更新。
其中, 。訓(xùn)練過程, 被固定不再進行梯度更新,只訓(xùn)練 A 和 B ,如下圖所示。對于輸入 x ,模型的前向傳播過程 被更新為:
實驗將五種方法進行對比,包括:Fine-Tuning (全量微調(diào))、Bias-only or BitFit(只訓(xùn)練偏置向量)、Prefix-embedding tuning (PreEmbed,上文介紹的 Prefix Tuning 方法,只優(yōu)化 embedding 層的激活)、Prefix-layer tuning (PreLayer,Prefix Tuning 方法,優(yōu)化模型所有層的激活) 、 Adapter tuning(不同的 Adapter 方法:、、 、 、)
實驗結(jié)果以 LoRA 在 GPT-3 175B 上的驗證分析為例。如下表所示, LoRA 在三個數(shù)據(jù)集上都能匹配或超過微調(diào)基準(zhǔn),證明了 LoRA 方法的有效性 。
GPT-3 上不同適配方法性能。展示了 WikiSQL 上的邏輯形式驗證精度,MultiNLI-matched 上的精度,以及SAMSum上 的 Rouge-1/2/L 值。LoRA 比之前的方法表現(xiàn)更好,包括全量微調(diào)。在 WikiSQL 上的結(jié)果有 ±0.5% 左右的波動,MNLI-m 有 ±0.1% 左右的波動,SAMSum 有 ±0.2/±0.2/±0.1 左右的三個指標(biāo)
但是, 并不是所有方法都能從擁有更多的可訓(xùn)練參數(shù)中獲益,而 LoRA 表現(xiàn)出更好的可擴展性和任務(wù)性能 。當(dāng)使用超過256個特殊token進行 Prefix-embedding tuning 或使用超過32個特殊 tokens 進行 Prefix-layer tuning時,可以觀察到性能明顯下降。
[ 應(yīng)該對 Transformer 中的哪些權(quán)重矩陣應(yīng)用 LoRA ?] 把所有的參數(shù)放在 或 中會導(dǎo)致性能明顯下降,同時適配 和 會產(chǎn)生最好的結(jié)果。這表明,即使 r=4 的較小秩也能在 中捕捉到足夠的信息,因此, 適配更多的權(quán)重矩陣比適配具有較大秩的單一類型的權(quán)重矩陣更可取 。
[ LORA的最佳秩是什么? ] LoRA 在很小的 r 下已經(jīng)有了很好的表現(xiàn)了(適配 比只適配 更有競爭力)。這表明 更新矩陣 可能有一個很小的 'intrinsic rank',增加秩 r 不一定能夠覆蓋一個更有意義的子空間,一個低秩的適配矩陣已經(jīng)足夠 。
[適配矩陣 \Delta W 與 W 關(guān)系如何?] 通過計算 U^{T}WV^{T} 將 W 投射到 \Delta W 的 r 維子空間, U/V 是 \Delta W 的左/右奇異向量矩陣。然后,比較 ||U^{T}WV^{T}||_{F} 和 ||W||_{F} 之間的 Frobenius 范數(shù)。作為比較,還計算了將 ||U^{T}WV^{T}||_{F}中 U 、 V 替換為 W 的前 r 個奇異向量或一個隨機矩陣。
PEFT: https://github.com/huggingface/peft
[2]LoRA: Low-Rank Adaptation of Large Language Models: https://arxiv.org/abs/2106.09685
[3]Prefix-Tuning: Optimizing Continuous Prompts for Generation: https://aclanthology.org/2021.acl-long.353/
[4]P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks: https://arxiv.org/pdf/2110.07602.pdf
[5]GPT Understands, Too: https://arxiv.org/abs/2103.10385
[6]The Power of Scale for Parameter-Efficient Prompt Tuning: https://arxiv.org/abs/2104.08691
[7]LLM-Adapters: https://arxiv.org/abs/2304.01933
[8]Parameter-Efficient Transfer Learning for NLP: https://arxiv.org/pdf/1902.00751.pdf
[9]GMAD-X: An Adapter-Based Framework for Multi-Task Cross-Lingual Transfer: https://arxiv.org/pdf/2005.00052.pdf
[10]Towards a Unified View of Parameter-Efficient Transfer Learning: https://arxiv.org/pdf/2110.04366.pdf
[11]Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning: https://arxiv.org/pdf/2012.13255.pdf
聯(lián)系客服