Fine Tuning 概念大全集

Bowen Chiu
Oct 22, 2023

--

改變模型目標

如何使用預先訓練好的語言模型(LLM)去完成其他的任務。舉例來說,我們已經有一個能夠生成文字的模型,但是現在我們想用它來做情感分析或主題分類。

要做到這點,我們可以利用該模型內部產生的「嵌入向量」(embeddings),這些嵌入向量其實就是數字向量,可以捕捉到輸入文字的特徵。接著,我們可以將這些嵌入向量接到一個分類器上,這個分類器就是用來預測文字的情感或主題。

但最麻煩的是,要訓練這個分類器,你需要有一個標記好的數據集,也就是說你需要知道每一段文字對應到的情感或主題。

另外,有時候你還需要調整模型的權重,這時你就需要「解凍」模型的某些層,讓它在訓練過程中可以更新。這樣的操作比較複雜,也比較耗資源。

監督式微調

某些情境下,可能只是想更新LLM(大型語言模型)的知識。例如,醫學文獻或新語言上微調模型。對於這些情境可以使用非結構化的數據集,例如從醫學期刊收集的文章和科學論文。目的是在新的領域訓練模型。

非結構化數據的優點是它可以擴展,因為模型可以透過無監督或自監督學習進行訓練。微調新領域的模型收集非結構化數據也相對容易,尤其是如果你有內部知識庫和文件。

但在某些情況下,只更新模型的知識是不夠的,你可能想要修改LLM的行為。在這些情境下,你將需要一個監督式微調(SFT)數據集,這是一組提示和其相應反應的集合。SFT數據集可以由用戶手動策劃,或由其他LLM生成。對於像ChatGPT這樣的LLM特別重要,因為它們被設計為遵循用戶指示,在長篇文字中保持特定的任務。這種特定類型的微調也被稱為指令微調

RLHF

進一步優化SFT或指令微調,使用「人類反饋的強化學習」(RLHF)。這是一個複雜又昂貴的過程,需要招募人類評審和建立輔助模型來微調LLM。因此目前只有擁有大量技術和財務資源的公司和AI實驗室才能負擔得起RLHF。

RLHF的方式有很多,LLM產生的文字是連貫有意義的,但仍然可能不是使用者想要的。RLHF將人帶入訓練循環。人類評審對模型在提示上的輸出進行評分。

PEFT & LoRA

LLM微調的研究中,有一個很有趣的領域就是如何降低更新模型參數的成本。這就是「參數高效微調」(PEFT)的目的,試圖減少需要更新的參數數量。

PEFT其中一種叫做LoRA,這個技術在開源語言模型中特別受歡迎。LoRA背後的想法是,對基礎模型進行下游任務微調不需要更新所有參數。有一個低維矩陣可以非常高精度地表示下游任務的空間。

使用LoRA微調訓練這個低維矩陣,而不是更新主LLM的參數。然後,將LoRA模型的參數權重整合到主LLM中。LoRA可以將微調的成本減少高達98%。還有助於存儲多個小型微調模型,可以在運行時插入到LLM中。

Fine Tuning:訓練好就沒有Tokens限制,但常常不夠即時

In Context Learning (Prompt Engineering):適合提示特定的個性、行為、指定回應格式。自然語言簡單好用,但有Tokens限制

RAG:適合大量PDF,向量資料庫可儲存大量片段免除Tokens限制,但可能會撈錯片段

Fine tuning可以產生各種用途,問答、辨識主體關鍵字、語意分析、摘要、辨識段落…

什麼時候需要Fine Tuning?

客製化

許多企業都有特定的需求和目標,這些可能無法被通用的語言模型所滿足。微調允許他們根據自己的具體目的來調整模型的行為,例如產生個性化的行銷內容或理解他們平台上的用戶生成內容。

尊重隱私以及法規

處理敏感數據或在嚴格的法規環境下運作的企業,他們可能需要微調模型以確保其尊重隱私要求、遵守內容指南並產生符合行業法規的適當回應。

特定領域語言

許多行業都使用專業詞彙、技術術語和特殊的詞彙,這些在大型語言模型的一般訓練數據中可能不太常見。在特定領域數據上微調模型可以讓它在業務所在行業的背景下理解和產生準確的回應。

增強性能

例如情感分析、文件分類、提取特定訊息

改善用戶體驗

例如製作聊天機器人、客戶服務系統

原始大語言模型,經過預訓練,可能是很會文字接龍寫字

Fine Tuning 讓大語言模型學會如何問答或者接收指令!

無監督 vs. 監督微調 (SFT)

有些時候,我們只是想更新大型語言模型(LLM)的知識,而不改變它的行為。比如說,想對模型進行微調,讓它更懂醫學文獻或者一門新語言。在這種情況下,使用來自醫學期刊的文章和學術論文組成的非結構化數據集就很適合。

可以選擇使用大型的無標籤數據集進行無監督的預訓練,或者使用小型的有標籤數據集進行有監督的微調。

非結構化數據的優點是可以透過無監督或自監督學習方法進行擴展。如果你有內部知識庫和檔案,為模型收集非結構化數據以便於新領域的微調相對容易。

但是,在某些情況下,僅更新模型的知識可能還不夠,你可能還想改變LLM的行為。在這種情況下,需要一個有監督的微調(SFT)數據集,這些數據集包含了一系列的提示和它們對應的回應。這些SFT數據集可以手工編輯,或由其他LLM生成。

ChatGPT這樣的LLM,SFT尤為重要,因為可以遵循用戶的指示,並在長篇文字中維持特定任務,這種微調方式也被稱為指令微調。

「Few-shot學習」和「情境學習」(In-context learning)雖然看似相似,但它們具體的差異主要在於如何使用和理解範例的方式:

  • Few-shot學習:目的是讓模型通過少數的範例學習到某一特定任務的模式或方法。例如,透過提供三個恐龍問題和答案的範例,使模型學會如何回答其他的恐龍問題。
  • 情境學習:目的是提供一個具體的情境背景,使模型在這個背景下做出更合適的回應。這背景可能包括範例,也可能是其他相關資訊。

「Few-shot學習」主要是通過少數範例來教導模型一種新任務,而「情境學習」則是提供一個背景或情境,讓模型能在這情境下產生回應。但在實際應用中,這兩者的界限可能不會那麼明確,有時會有所重疊。

--

--