最近,深度學習的研究中出現了許多大型預訓練模型,例如 GPT-3、BERT 等,這些模型可以在多種自然語言處理任務中取得優異的性能表現。而其中,ChatGPT 模型因為在對話生成方面的表現而備受矚目,成為了自然語言處理領域的熱門研究方向。 ? 然而,這些大型預訓練模型的訓練成本非常高昂,需要龐大的計算資源和大量的數據,一般人難以承受。這也導致了一些研究人員難以重復和驗證先前的研究成果。為了解決這個問題,研究人員開始研究 Parameter-Efficient Fine-Tuning(PEFT)技術。 ? PEFT 技術旨在通過最小化微調參數的數量和計算復雜度,來提高預訓練模型在新任務上的性能,從而緩解大型預訓練模型的訓練成本。這樣一來,即使計算資源受限,也可以利用預訓練模型的知識來迅速適應新任務,實現高效的遷移學習。因此,PEFT 技術可以在提高模型效果的同時,大大縮短模型訓練時間和計算成本,讓更多人能夠參與到深度學習研究中來。下面我們將深入探討 PEFT 的一些主要做法。 ? ?
Adapter Tuning
谷歌的研究人員首次在論文《Parameter-Efficient Transfer Learning for NLP》提出針對 BERT 的 PEFT 微調方式,拉開了 PEFT 研究的序幕。他們指出,在面對特定的下游任務時,如果進行 Full-fintuning(即預訓練模型中的所有參數都進行微調),太過低效;而如果采用固定預訓練模型的某些層,只微調接近下游任務的那幾層參數,又難以達到較好的效果。 ? 于是他們設計了如下圖所示的 Adapter 結構,將其嵌入 Transformer 的結構里面,在訓練時,固定住原來預訓練模型的參數不變,只對新增的 Adapter 結構進行微調。 ? 同時為了保證訓練的高效性(也就是盡可能少的引入更多參數),他們將 Adapter 設計為這樣的結構:首先是一個 down-project 層將高維度特征映射到低維特征,然后過一個非線形層之后,再用一個 up-project 結構將低維特征映射回原來的高維特征;同時也設計了 skip-connection 結構,確保了在最差的情況下能夠退化為 identity。 ?
從實驗結果來看,該方法能夠在只額外對增加的 3.6% 參數規模(相比原來預訓練模型的參數量)的情況下取得和 Full-finetuning 接近的效果(GLUE 指標在 0.4% 以內)。 ?
Prefix Tuning
Prefix Tuning 方法由斯坦福的研究人員提出,與 Full-finetuning 更新所有參數的方式不同,該方法是在輸入 token 之前構造一段任務相關的 virtual tokens 作為 Prefix,然后訓練的時候只更新 Prefix 部分的參數,而 Transformer 中的其他部分參數固定。該方法其實和構造 Prompt 類似,只是 Prompt 是人為構造的“顯式”的提示,并且無法更新參數,而 Prefix 則是可以學習的“隱式”的提示。 ? 同時,為了防止直接更新 Prefix 的參數導致訓練不穩定的情況,他們在 Prefix 層前面加了 MLP 結構(相當于將 Prefix 分解為更小維度的 Input 與 MLP 的組合后輸出的結果),訓練完成后,只保留 Prefix 的參數。 ? 實驗結果也說明了 Prefix Tuning 的方式可以取得不錯的效果。 ?
除此之外,作者還做了一系列的消融實驗說明該方法的有效性: ?
1. Prefix 長度的影響:不同的任務所需要的 Prefix 的長度有差異。
2. Full vs Embedding-only:作者對比了 Embedding-only(只有最上層輸入處的 Embedding 作為參數更新,后續的參數固定)和 Full(每一層的 Prefix 相關的參數都訓練)的方式的效果。
3. Prefixing vs Infixing:對比了 [PREFIX; x; y] 方式與 [x; INFIX; y] 方式的差異,還是 Prefix 方式最好。
4. Initialization:用任務相關的 Prompt 去初始化 Prefix 能取得更好的效果。
Prompt Tuning
論文《The Power of Scale for Parameter-Efficient Prompt Tuning》 ? 我給這篇文章取了個新名字:Scale is All You Need,總的來說就是,只要模型規模夠大,簡單加入 Prompt tokens 進行微調,就能取得很好的效果。 ? 該方法可以看作是 Prefix Tuning 的簡化版本,只在輸入層加入 prompt tokens,并不需要加入 MLP 進行調整來解決難訓練的問題,主要在 T5 預訓練模型上做實驗。似乎只要預訓練模型足夠強大,其他的一切都不是問題。作者也做實驗說明隨著預訓練模型參數量的增加,Prompt Tuning 的方法會逼近 Fine-tune 的結果。 ?
3.1 實驗
作者做了一系列對比實驗,都在說明:隨著預訓練模型參數的增加,一切的問題都不是問題,最簡單的設置也能達到極好的效果。 ?
a)Prompt 長度影響:模型參數達到一定量級時,Prompt 長度為 1 也能達到不錯的效果,Prompt 長度為 20 就能達到極好效果。
b)Prompt 初始化方式影響:Random Uniform 方式明顯弱于其他兩種,但是當模型參數達到一定量級,這種差異也不復存在。
c)預訓練的方式:LM Adaptation 的方式效果好,但是當模型達到一定規模,差異又幾乎沒有了。
d)微調步數影響:模型參數較小時,步數越多,效果越好。同樣隨著模型參數達到一定規模,zero shot 也能取得不錯效果。
P-Tuning
4.1 V1
P-Tuning 方法的提出主要是為了解決這樣一個問題:大模型的 Prompt 構造方式嚴重影響下游任務的效果。 ?
P-Tuning 提出將 Prompt 轉換為可以學習的 Embedding 層,只是考慮到直接對 Embedding 參數進行優化會存在這樣兩個挑戰: ?
Discretenes:對輸入正常語料的 Embedding 層已經經過預訓練,而如果直接對輸入的 prompt embedding 進行隨機初始化訓練,容易陷入局部最優。
Association:沒法捕捉到 prompt embedding 之間的相關關系。
作者在這里提出用 MLP+LSTM 的方式來對 prompt embedding 進行一層處理
4.1.1 與 Prefix-Tuning 的區別
這篇文章(2021-03)和 Prefix-Tuning(2021-01)差不多同時提出,做法其實也有一些相似之處,主要區別在 ?
Prefix Tuning 是將額外的 embedding 加在開頭,看起來更像是模仿 Instruction 指令;而 P-Tuning 的位置則不固定。
Prefix Tuning 通過在每個 Attention 層都加入 Prefix Embedding 來增加額外的參數,通過 MLP 來初始化;而 P-Tuning 只是在輸入的時候加入 Embedding,并通過 LSTM+MLP 來初始化。
4.2 V2?
論文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》 ? 從標題就可以看出這篇文章的野心,P-Tuning v2 的目標就是要讓 Prompt Tuning 能夠在不同參數規模的預訓練模型、針對不同下游任務的結果上都達到匹敵 Fine-tuning 的結果。 ? 那也就是說當前 Prompt Tuning 方法未能在這兩個方面都存在局限性。 ?
不同模型規模:Prompt Tuning 和 P-tuning 這兩種方法都是在預訓練模型參數規模夠足夠大時,才能達到和 Fine-tuning 類似的效果,而參數規模較小時效果則很差。
不同任務類型:Prompt Tuning 和 P-tuning 這兩種方法在 sequence tagging 任務上表現都很差。
4.2.1 主要結構
相比 Prompt Tuning 和 P-tuning 的方法,P-tuning v2 方法在多層加入了 Prompts tokens 作為輸入,帶來兩個方面的好處: ? 1. 帶來更多可學習的參數(從 P-tuning 和 Prompt Tuning 的 0.1% 增加到0.1%-3%),同時也足夠 parameter-efficient。 ? 2. 加入到更深層結構中的 Prompt 能給模型預測帶來更直接的影響。
4.2.2 幾個關鍵設計因素
Reparameterization:Prefix Tuning 和 P-tuning 中都有 MLP 來構造可訓練的 embedding。本文發現在自然語言理解領域,面對不同的任務以及不同的數據集,這種方法可能帶來完全相反的結論。
Prompt Length:不同的任務對應的最合適的 Prompt Length 不一樣,比如簡單分類任務下 length=20 最好,而復雜的任務需要更長的 Prompt Length。
Multi-task Learning 多任務對于 P-Tuning v2 是可選的,但可以利用它提供更好的初始化來進一步提高性能。
Classification Head 使用 LM head 來預測動詞是 Prompt Tuning 的核心,但我們發現在完整的數據設置中沒有必要這樣做,并且這樣做與序列標記不兼容。P-tuning v2 采用和 BERT 一樣的方式,在第一個 token 處應用隨機初始化的分類頭。
4.2.3 實驗結果
不同預訓練模型大小下的表現,在小模型下取得與Full-finetuning相近的結果,并遠遠優于P-Tuning。
不同任務下的 P-Tuning v2 效果都很好,而 P-Tuning 和 Prompt Learning 效果不好;同時,采用多任務學習的方式能在多數任務上取得最好的結果。
Verbalizer with LM head v.s. [CLS] label with linear head,兩種方式沒有太明顯的區別
Prompt depth,在加入相同層數的 Prompts 前提下,往更深層網絡加效果優于往更淺層網絡(只有 BoolQ 中 17-24 反而低于 1-8 是例外)。
微軟和 CMU 的研究者指出,現有的一些 PEFT 的方法還存在這樣一些問題: ?
由于增加了模型的深度從而額外增加了模型推理的延時,如 Adapter 方法
Prompt 較難訓練,同時減少了模型的可用序列長度,如 Prompt Tuning、Prefix Tuning、P-Tuning 方法
往往效率和質量不可兼得,效果差于 full-finetuning
有研究者對語言模型的參數進行研究發現:語言模型雖然參數眾多,但是起到關鍵作用的還是其中低秩的本質維度(low instrisic dimension)。本文受到該觀點的啟發,提出了 Low-Rank Adaption(LoRA),設計了如下所示的結構,在涉及到矩陣相乘的模塊,引入 A、B 這樣兩個低秩矩陣模塊去模擬 Full-finetune 的過程,相當于只對語言模型中起關鍵作用的低秩本質維度進行更新。 ?
這么做就能完美解決以上存在的 3 個問題: ?
相比于原始的 Adapter 方法“額外”增加網絡深度,必然會帶來推理過程額外的延遲,該方法可以在推理階段直接用訓練好的 A、B 矩陣參數與原預訓練模型的參數相加去替換原有預訓練模型的參數,這樣的話推理過程就相當于和 Full-finetune 一樣,沒有額外的計算量,從而不會帶來性能的損失。
由于沒有使用 Prompt 方式,自然不會存在 Prompt 方法帶來的一系列問題。
該方法由于實際上相當于是用 LoRA 去模擬 Full-finetune 的過程,幾乎不會帶來任何訓練效果的損失,后續的實驗結果也證明了這一點。
在實驗中,研究人員將這一 LoRA 模塊與 Transformer 的 attention 模塊相結合,在 RoBERTa 、DeBERTa、GPT-2 和 GPT-3 175B 這幾個大模型上都做了實驗,實驗結果也充分證明了該方法的有效性。 ?
5.1 Towards a Unified View of PETL
這篇 ICLR2022 的文章研究了典型的 PEFT 方法,試圖將 PEFT 統一到一個框架下,找出它們起作用的具體原因,并進行改進。主要研究了三個問題: ?
典型的PEFT方法有什么聯系?
典型的PEFT方法中是哪些關鍵模塊在起作用?
能否對這些關鍵模塊進行排列組合,找出更有用的 PEFT 方法?
5.1.1 通用形式
通過對 Prefix Tuning 的推導,得出了和 Adapter Tuning 以及 LoRA 形式一致的形式。
更近一步地,可以將這些 Tuning 的方法統一在同一套框架下, ?
包括這幾大要素: ?
的形式
嵌入 Transformer 結構的方式(分為 Parrell 和 Sequential 兩種。Parallel 指的是在輸入層嵌入,這樣與原有結構可以并行計算;Sequential 指的是在輸出層嵌入,相當于增加了網路的深度,與原有結構存在依賴關系)
修改的表示層(主要指對 attention層的修改還是對 ffn 層的修改)
組合方式。怎么與原有的參數組合,包括簡單相加(Adapter)、門控式(Prefix Tuning)、縮放式(LoRA)三種)
根據這個統一的框架,還另外設計了三種變體Parallel Adapter、Multi-head Parallel Adapter、Scaled Parallel Adapter。 ?
5.1.2 一些實驗
哪種嵌入形式更好:Parallel or Sequencial?
答案是:Parallel 更好
對哪塊結構做修改更好?Attention or FFN?
當微調的參數量較多時,從結果來看,對 FFN 層進行修改更好。一種可能的解釋是 FFN 層學到的是任務相關的文本模式,而 Attention 層學到的是成對的位置交叉關系,針對新任務并不需要進行大規模調整。
當微調參數量較少(0.1%)時,對 Attention 進行調整效果更好。
哪種組合方式效果更好? 從結果來看,縮放式的組合效果更好。
5.1.3 結論
基于以上的經驗,
Scaled parallel adapter is the best variant to modify FFN
FFN can better utilize modification at larger capacities
modifying head attentions like prefix tuning can achieve strong performance with only 0.1% parameters
研究者設計出最新的結構 MAM Adapter,取得了最好的效果:
編輯:黃飛
評論
查看更多