解密prompt系列27. LLM對齊經驗之如何降低通用能力損失

风雨中的小七發表於2024-04-13

前面我們已經聊過眾多指令微調的方案,這一章我們重點討論下如何注入某一類任務或能力的同時,儘可能不損失模型原有的通用指令理解能力。因為在下游或垂直領域應用中,我們設計的推理任務風格或形式,往往很難透過prompt來穩定實現。這種情況下就會依賴微調來注入穩定的推理風格,但同時在部分場景下我們又需要模型微調前的通用指令理解能力。雖然理論上說有得必有失,但成年人真的不想做選擇!這裡我們討論兩種方案,來儘可能降低通用能力的損失,一種資料方案,一種訓練方案。

Two Stage Finetune - ProMoT

  • Preserving In-Context Learning ability in Large Language Model Fine-tuning
  • TWO-STAGE LLM FINE-TUNING WITH LESS SPECIALIZATION AND MORE GENERALIZATION

先說訓練方案,論文先是分析了模型在微調過程中能力損失的一個主要原因是Format Specialization,也就是模型過擬合了微調任務的輸出格式。舉幾個例子

  • 下游是二分類任務的,微調之後即便丟掉分類任務的指令,模型的輸出還是True/False,損失了對話和其他指令理解能力
  • 下游是摘要任務的,微調之後即便丟掉TL;DL的總結指令,你讓模型翻譯模型還是給你總結。這個在當前推出的一些長文字無敵的基座模型上可能會看到,他們後期的指令微調中指令分佈都比較偏向於長文字的QA和總結,其他能力會略弱
  • 透過微調讓模型學習拒絕回答的,你會發現你的模型可能在很多不該拒絕的場景也拒絕你

其實核心就是我們本想讓模型學習條件生成能力,也就是在分類指令時分類,摘要指令下摘要,該拒絕的場景下再拒絕。但論文透過分析發現在傳統微調任務中,模型是先無腦擬合輸出格式,例如二分類的True/False,拒絕裡的對不起,在微調後期才開始學習input和ouput之間的關係(Semantic Relation),例如何時該分類,何時該拒絕。

那能否把下游任務的Task Format先行注入到額外的引數中,之後把這部分資訊餵給模型,讓大模型微調直接學習Semantic Relation,這樣在穩定注入新的Format的前提下,儘可能不影響其他input的推理格式。

論文提出了兩階段微調,第一階段也使用了谷歌提出的Prompt Tuning用來學習Format,第二階段再進行全量微調。如下
image

第一階段Prompt Tuning,簡單說就是凍結大模型,只微調Embedding層的一組虛擬Token,這一組虛擬Token學習的就是下游推理任務Format的任務表徵。

這裡可以反過來思考,之前有論文提出任務指令(prompt)其實可以壓縮成一個Task Vector的任務表徵用來引導模型給出不同的推理輸出;那反過來我們想讓模型學習一種推理風格/任務,其實就是構建該Format對應的Task Vector,以及Task Vector對應的任務指令的過程。只不過prompt tunning的prompt使用的是虛擬Token。想更多瞭解Prompt Tuning的童鞋看這裡解密Prompt系列3. 凍結LM微調Prompt: Prefix-tuning & Prompt-tuning & P-tuning

image

第二階段Fine-tuning預設在輸入層Embedding前拼接Prompt Embedding,b並凍結這部分Embedding,然後全量微調大模型, 讓模型在已知輸出格式的前提下,學習Input和Output格式之間的Semantic聯絡。之前有些疑惑這裡為何要凍結prompt,後來又想了想應該是為了避免模型再把Task Format相關資訊更新到模型內部引數中,但感覺不凍結的方式也值得測試下。

幾個值得聊聊的細節

  1. 第一階段微調能否用Lora,從Prompt實際學習的是推理格式的任務表徵這個邏輯原理來說其實Adapter類的微調方案,似乎並不合理。論文測試後也發現Lora的效果並不好
  2. 能否把兩個階段合二為一,既加上一個虛擬Prompt,同時微調模型和prompt,論文測試後發現效果和SFT相差不多,都會有過擬合。畢竟這種微調方式無法引導模型把格式學到Prompt Embedding上。

效果上,論文在mT5模型上對比了SFT,Prompt-Tuning,和ProMoT在下游微調任務,和微調任務之外其他通用任務的能力對比。發現ProMoTe可以在分類,翻譯,NLI,QA等任務微調上對比全量微調都有更好的效果。同時以分類任務為例,在分類任務上進行微調後,在QA等其他任務上相比基座模型能力也沒有顯著下降,作為對照組的SFT會有顯著的通用能力的下降。

image

image

Dual-Stage Mixed Finetuning - DMT

  • How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition
  • Scaling Relationship on Learning Mathematical Reasoning with Large Language Models

DMT的論文主要探究了不同領域資料混合,以及混合訓練策略對模型在多領域能力的影響。

1. 單領域Scaling curve

要想設計更合理的多領域混合訓練策略,首先要確認不同領域樣本模型學習的scaling curve。這個問題之前已經有很多論文討論過,這裡簡單回顧下,如下圖所示

image

  • 數學和程式碼等領域能力,會隨樣本量上升而持續提升,並且模型規模越大scaling curve越單調且陡峭。 這一點和我們的測試效果相似,數學和程式碼樣本你就可勁加,加一點模型好一點,更多細節看上面Scaling的論文。
  • 通用指令能力,基本在1K(1/256的樣本)的樣本上效果就很好了,後續能力提升會比較慢,並且在不同規模的模型上差異相對有限。 這一點我們在前文討論過詳見LLM對齊經驗之資料越少越好?

2. 多領域混合Scaling curve

明確單一領域的scling curve之後,我們來看多領域的資料混合,這裡會分別討論資料混合中的兩個要點:整體量級和混合比例

  1. 整體量級:和以上單領域實驗相同的5種不同取樣比例,直接對三個領域的資料進行混合,和上面的單領域實驗結果進行對比。觀察下圖會發現在低資源上領域混合會有提升,但在更大的樣本量級上單領域微調效果會略好 一個可能的解釋是在小量級樣本上會有彼此的能力遷移,而當單領域資訊逐步提升後資訊衝突會逐漸顯現

image

  1. 混合比例:為了進一步探究以上全樣本混合訓練中出現的資訊衝突的來源,作者進一步做了控制變數的實驗。固定一個領域(math和code合成一個領域)的樣本量改變另一個領域的樣本量,看不同比例資料混合的影響。主要結論有
  • 主領域樣本還是越多越好
  • 當領域樣本差異(輸出格式/輸入分佈)較大時,通用領域資料對特殊領域影響有限
  • 當樣本存在相似性時混合會帶來衝突,但衝突和資料比例沒有顯著單調性

image

3. 訓練策略影響

論文實驗了不同訓練策略的影響,包括多領域聯合訓練,有序訓練(Code->Math->General),以及先訓練Math+Code再訓練general的有序混合訓練,。這幾種策略之前也有很多論文做過測試,這裡簡單說下結論

  • 多領域聯合訓練:會更多學到特殊領域(Math+code),更多損傷通用能力。這塊可以更多借用ProMoT的邏輯,因為特殊領域輸出風格一致模型更容易學到,而通用領域輸出風格更多樣些
  • 有序訓練和有序混合訓練:只要是先訓練領域能力再訓練通用能力,因為災難遺忘的原因,最終模型會把先學到的領域能力遺忘

image

在以上三種訓練方案的基礎上,論文提出了兩階段混合訓練(DMT)如下

第一階段是領域資料的訓練,按照單領域scaling curve,這一部分的資料量越大效果越好,所以使用全量級的數學和程式碼進行訓練。

第二階段用於恢復通用能力,同時儘量避免有序訓練帶來的災難遺忘。 這裡使用了上面多領域混合的insight,領域資料的混合比例對通用能力影響較小;同時低資源混合帶來的衝突較小。因為論文使用了1/256的領域資料和通用資料進行混合進行第二階段的訓練。在儘量避免第一階段模型學到的能力丟失的基礎上,幫助模型恢復通用能力。

效果上在LLaMA7B,13B,和33B的模型上,DMT的訓練方案能在保留單領域訓練絕大多數領域能力的基礎上,保證模型通用能力不受損失,甚至略微有所提升。如果想要保留更多的領域能力,允許更多的通用能力損失,則可以適當提高第二階段的領域資料佔比,具體要資料集上case by case的測試。
image

想看更全的大模型相關論文梳理·微調及預訓練資料和框架·AIGC應用,移步Github >> DecryPrompt

相關文章