天天看點

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

作者:AI吃果凍不吐果凍皮

随着,ChatGPT 迅速爆火,引發了大模型的時代變革。然而對于普通大衆來說,進行大模型的預訓練或者全量微調遙不可及。由此,催生了各種參數高效微調技術,讓科研人員或者普通開發者有機會嘗試微調大模型。

是以,該技術值得我們進行深入分析其背後的機理,本系列大體分七篇文章進行講解。

  • 大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介
  • 大模型參數高效微調技術原理綜述(二)-BitFit、Prefix Tuning、Prompt Tuning
  • 大模型參數高效微調技術原理綜述(三)-P-Tuning、P-Tuning v2
  • 大模型參數高效微調技術原理綜述(四)-Adapter Tuning及其變體
  • 大模型參數高效微調技術原理綜述(五)-LoRA、AdaLoRA、QLoRA
  • 大模型參數高效微調技術原理綜述(六)-MAM Adapter、UniPELT
  • 大模型參數高效微調技術原理綜述(七)-最佳實踐、總結

本文為大模型參數高效微調技術綜述的第一篇。

背景

目前,基于 Transformers 架構的大型語言模型 (LLM),如 GPT、T5 和 BERT,已經在各種自然語言處理 (NLP) 任務中取得了 SOTA 結果。此外,還開始涉足其他領域,例如:計算機視覺 (VIT、Stable Diffusion、LayoutLM) 和音頻 (Whisper、XLS-R)。

将預訓練好的語言模型(LM)在下遊任務上進行微調已成為處理 NLP 任務的一種範式。與使用開箱即用的預訓練 LLM (例如:零樣本推理) 相比,在下遊資料集上微調這些預訓練 LLM 會帶來巨大的性能提升。

但是,随着模型變得越來越大,在消費級硬體上對模型進行全部參數的微調(full fine-tuning)變得不可行。

此外,為每個下遊任務獨立存儲和部署微調模型變得非常昂貴,因為微調模型(調整模型的所有參數)與原始預訓練模型的大小相同。

是以,近年來研究者們提出了各種各樣的參數高效遷移學習方法(Parameter-efficient Transfer Learning),即固定住Pretrain Language model(PLM)的大部分參數,僅調整模型的一小部分參數來達到與全部參數的微調接近的效果(調整的可以是模型自有的參數,也可以是額外加入的一些參數)。

Tansformer

上面談到目前主流大語言模型都是基于 Transformers 架構,下面我們來詳細看看 Transformers 架構内部構造。

Transformer(論文:Attention is All You Need)是谷歌在 2017年的提出的,它針對RNN的弱點進行重新設計,解決了RNN效率問題和傳遞中的缺陷等,在很多問題上都超過了RNN的表現。

Transformer 的整體結構如下圖所示,圖中 Transformer 用于中英文翻譯。可以看到,Transformer 由 Encoder 和 Decoder 兩個部分組成,Encoder 和 Decoder 都包含 6 個 block。

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

而 Transformer 的内部結構如下圖,左側為 Encoder block,右側為 Decoder block。 可以看到 Encoder block 包含一個 Multi-Head Attention(Multi-Head Attention是由多個 Self-Attention組成的),而 Decoder block 包含兩個 Multi-Head Attention (其中,有一個用到 Masked)。Multi-Head Attention 上方還包括一個 Add & Norm 層,Add 表示殘差連接配接 (Residual Connection) 用于防止網絡退化,Norm 表示 Layer Normalization,用于對每一層的激活值進行歸一化。

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

而 Transformer 的核心就是自注意力(Self-Attention)。引入Self Attention後會更容易捕獲句子中長距離的互相依賴的特征,因為如果是RNN或者LSTM,需要依次序序列計算,對于遠距離的互相依賴的特征,要經過若幹時間步步驟的資訊累積才能将兩者聯系起來,而距離越遠,有效捕獲的可能性越小。但是Self Attention在計算過程中會直接将句子中任意兩個單詞的聯系通過一個計算步驟直接聯系起來,是以,遠距離依賴特征之間的距離被極大縮短,有利于有效地利用這些特征。除此之外,Self Attention 對于增加計算的并行性也有直接幫助作用。

而多頭注意力的機制則進一步細化了注意力層,多頭注意力是由多個自注意力組成。它通過以下兩種方式提高了注意力層的性能:

  • 擴充了模型專注于不同位置的能力。當多頭注意力模型和自注意力機制集合的時候,比如:我們翻譯“動物沒有過馬路,因為它太累了”這樣的句子的時候,我們想知道“它”指的是哪個詞,如果能分析出來代表動物,就很有用。
  • 為注意力層提供了多個“表示子空間”。對于多頭注意力,我們有多組Query/Key/Value權重矩陣,這些權重矩陣集合中的每一個都是随機初始化的。然後,在訓練之後,每組用于将輸入Embedding投影到不同的表示子空間中。多個head學習到的Attention側重點可能略有不同,這樣給了模型更大的容量。

Self-Attention和 Multi-Head Attention 的内部結構如下所示:

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

總之,Transformer 架構的提出,奠定了其作為目前大模型領域主流的算法架構的基礎。它不僅讓模型能夠支援更大的容量,使得模型參數能夠輕松突破達到上億規模。同時,還能夠使模型較好地并行訓練(Token并行、張量并行、流水線并行)。

Bert

随着Transformer在2017年釋出後,2018年谷歌又釋出了BERT(論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding),一經面世便一舉擊敗 11 個 NLP 任務的 State-of-the-art (Sota)結果,成為了 NLP 界新的裡程碑;

Bert的結構如下圖所示,左邊是Bert模型預訓練過程,右邊是對于具體任務的微調過程。 其中,微調階段是後續用于一些下遊任務的時候進行微調,例如:文本分類,詞性标注,問答系統等,BERT 無需調整結構就可以在不同的任務上進行微調。通過”預訓練語言模型 + 下遊任務微調”的任務設計,帶來了強大的模型效果。從此,“預訓練語言模型 + 下遊任務微調”便成為了 NLP 領域主流訓練範式。

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

全量參數微調與參數高效微調對比

上面提到以BERT模型為代表的“預訓練語言模型 + 下遊任務微調”訓練模式成為了自然語言處理研究和應用的新範式。此處的下遊任務微調是基于模型全量參數進行微調。

但是,以 GPT3 為代表的預訓練語言模型(PLM)參數規模變得越來越大,這使得在消費級硬體上進行全量微調變得不可行。

下表展示了在一張A100 GPU(80G 顯存)以及 CPU 記憶體 64GB以上的硬體上進行模型全量微調以及參數高效微調對于 CPU/GPU 記憶體的消耗情況。

模型名 全量參數微調 PEFT-LoRA (PyTorch) PEFT-LoRA(DeepSpeed+CPU Offloading技術)
bigscience/T0_3B (3B 參數) 47.14GB GPU / 2.96GB CPU 14.4GB GPU / 2.96GB CPU 9.8GB GPU / 17.8GB CPU
bigscience/bloomz-7b1 (7B 參數) OOM GPU 32GB GPU / 3.8GB CPU 18.1GB GPU / 35GB CPU
bigscience/mt0-xxl (12B 參數) OOM GPU 56GB GPU / 3GB CPU 22GB GPU / 52GB CPU

除此之外,模型全量微調還會損失多樣性,存在災難性遺忘的問題。

是以,如何高效的進行模型微調就成了業界研究的重點,這也為參數高效微調技術的快速發展帶來了研究空間。

高效參數微調

參數高效微調是指微調少量或額外的模型參數,固定大部分預訓練模型(LLM)參數,進而大大降低了計算和存儲成本,同時,也能實作與全量參數微調相當的性能。參數高效微調方法甚至在某些情況下比全量微調效果更好,可以更好地泛化到域外場景。

高效微調技術可以粗略分為以下三大類:增加額外參數(A)、選取一部分參數更新(S)、引入重參數化(R)。而在增加額外參數這類方法中,又主要分為類擴充卡(Adapter-like)方法和軟提示(Soft prompts)兩個小類。

大模型參數高效微調技術原理綜述(一)-背景、參數高效微調簡介

常見的參數高效微調技術有BitFit、Prefix Tuning、Prompt Tuning、P-Tuning、Adapter Tuning、LoRA等,後續文章将對一些主流的參數高效微調方法進行講解。

繼續閱讀