1、為什麼大模型微調
之前在《大模型這塊蛋糕,想吃嗎》介紹了普通人如何搭上大模型這塊列車, 其中有一個就是模型微調,這個也是未來很多IT公司需要發力的方向,以及在《垂直領域大模型的應用更親民》中論述了為什麼微調適合大傢,以及微調有什麼價值? 作為小程序猿在開始進行微調實操之前,我們先了解一下微調大模型有什麼方法和技術嗎?
2、大模型微調的方式
(1)全量微調(Full Fine-tuning):這個其實算不上微調,算是全新訓練,但是大部分微調框架都支持這種方式需要較大的計算資源和時間,但可以獲得更好的性能.
(2)增加額外參數
(3)選取一部分參數調優
(4)引入重參數優化
3、大模型微調的技術
![](https://news.xinpengboligang.com/upload/keji/82c5bed0217cfcdcc4ed9e2f47f56189.jpeg)
由上面微調的方式的道路,引發的微調技術也是很多的
(1)《BitFit: BitFit: Simple Parameter-efficient Fine-tuning or Transformer-based Masked Language-models》訓練時隻更新bias的參數或者部分bias參數
(2)《Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation》在輸入token之前構造一段任務相關的virtual tokens作為Prefix,然後訓練的時候隻更新Prefix部分的參數,而PLM中的其他部分參數固定。
(3)《Prompt Tuning: The Power of Scale for Parameter-Efficient Prompt Tuning》 該方法可以看作是Prefix Tuning的簡化版本,它給每個任務定義了自己的Prompt,然後拼接到數據上作為輸入,但隻在輸入層加入prompt tokens,並且不需要加入 MLP 進行調整來解決難訓練的問題。
(4)《P-Tuning: GPT Understands, Too 》該方法將Prompt轉換為可以學習的Embedding層,並用MLP LSTM的方式來對Prompt Embedding進行一層處理。相比Prefix Tuning,P-Tuning加入的可微的virtual token,但僅限於輸入層,沒有在每一層都加;另外,virtual token的位置也不一定是前綴,插入的位置是可選的。這裡的出發點實際是把傳統人工設計模版中的真實token替換成可微的virtual token
(5)《P-Tuning v2: P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》該方法在每一層都加入了Prompts tokens作為輸入,而不是僅僅加在輸入層
(6)《Adapter Tuning :Parameter-Efficient Transfer Learning for NLP》,該方法設計了Adapter結構,並將其嵌入Transformer的結構裡面,針對每一個Transformer層,增加了兩個Adapter結構(分別是多頭註意力的投影之後和第二個feed-forward層之後),在訓練時,固定住原來預訓練模型的參數不變,隻對新增的 Adapter 結構和 Layer Norm 層進行微調,從而保證了訓練的高效性。
(7)《LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》,該方法的核心思想就是通過低秩分解來模擬參數的改變量,從而以極小的參數量來實現大模型的間接訓練.
........
小結:
(1)增加額外參數,如:Prefix Tuning、Prompt Tuning、Adapter Tuning及其變體。
(2)選取一部分參數更新,如:BitFit。
(3)引入重參數化,如:LoRA、AdaLoRA、QLoRA。
(4)混合高效微調,如:MAM Adapter、UniPELT
那怎麼選擇微調技術呢?
![](https://news.xinpengboligang.com/upload/keji/18cfccbbbcca682426b092211ada033d.jpeg)
(1)總的來說,像P-Tuning v2、LoRA等都是綜合評估很不錯的高效微調技術。如果顯存資源有限可以考慮QLoRA;如果隻是解決一些簡單任務場景,可以考慮P-Tuning、Prompt Tuning也行。
(2)Prompt Tuning、Prefix Tuning、LoRA等少部分微調技術針對不同參數規模的模型進行過評估,同時,這幾種方式也是目前應用比較多的高效微調方法.
4、微調框架
要參考論文實現那些技術嗎?當然不用,現在開源的能力越來越強,所以計算機發展越來越快,根本學不過來:
(1)DeepSpeed Chat : 微軟開源,提供了一鍵式RLHF訓練框架,獎勵模型微調和基於人類反饋的強化學習(RLHF),此外還實現了DeepSpeed HE,統一的高效混合引擎,達到訓練和推理引擎之間的過渡是無縫的。
(2)PEFT:PEFT 是 Huggingface 開源的一個參數高效微調庫,它提供了最新的參數高效微調技術,並且可以與 Transformers 和 Accelerate 進行無縫集成。
小結:
一般來說現在大傢基本選擇peft框架進行微調.
5、PEFT框架支持微調技術
不同任務下支持模型和技術都有所差別:
PERF支持微調技術有:
(1)LoRA
(2)Prefix Tuning
(3)P-Tuning
(4)Prompt Tuning
(5)AdaLoRA:Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning
(6)IA3:Infused Adapter by Inhibiting and Amplifying Inner Activations
..... 還在新增
6、當前高效微調技術存在的一些問題
(1)缺乏模型大小的考慮
(2)缺乏測量基準和評價標準
(3)代碼實現可讀性差
7、總結
立一下flag,鼓勵自己學下去,了解完微調技術和微調框架,接下來就是實踐微調