大模型LLM微調策略一覽

techlead_krischang發表於2024-11-25

大語言模型(LLM)藉助大規模資料集進行訓練,能夠在零樣本或少樣本提示下完成多種任務。隨著檢索增強生成(RAG)方法的興起,這些通用模型越來越多地被組織用於各種應用,從簡單的聊天機器人到更復雜的智慧自動化代理。儘管像 GraphRAG 這樣的技術已經被開發出來,用於基於實體跨文件提取關係,但由於基礎模型缺乏足夠的上下文,這些技術可能無法完全滿足每個領域的特定需求。這一侷限性導致每月都有新的模型不斷被推出。

對於領域特定的模型,可以在現有LLM架構的基礎上調整其權重,使其學習特定領域的上下文資訊,這一過程被稱為** 微調(fine-tuning) **。在本文中,我們將探討語言模型的微調過程,分析微調的多種型別、涉及的關鍵考慮因素,並舉例介紹一種幾乎無需編碼的開源工具。

file

微調

為了更好地理解微調,我們用一個類比來說明。想象你是一名學生,正在為一場科學考試做準備。你從課堂上獲得了紮實的基礎知識。隨著考試臨近,你開始專注於即將考查的特定主題。你透過練習題檢驗自己的理解,然後根據表現重新審視相關的學習材料。與此同時,你可能會向朋友尋求指導、查閱線上資源或重溫關鍵主題。

這一過程與微調非常相似:我們利用一個經過預訓練的模型(就像擁有紮實基礎的學生),讓它專注於特定任務(複習特定主題),評估其表現(透過練習測試),並反覆迭代,直到根據效能指標實現最佳結果。正如一個學生能夠在特定領域達到精通一樣,我們也可以開發一個在某些領域或多個領域都表現卓越的語言模型。最終,這一過程的成效取決於所選模型、具體任務以及所使用訓練資料的質量。

微調應用場景

在深入探討微調之前,讓我們透過一些場景分析它為何必要。

語言學習

以下是兩個Llama版本在回答泰米爾語問題時的對比。

示例:

file
基礎模型

file
微調後的模型

如上圖所示,基礎版本的Llama模型難以理解請求的語言,而經過微調的模型則能夠流利地用泰米爾語響應。這一能力來自微調過程,使模型能夠學習並識別新語言中的模式。
簡單的RAG應用無法有效地將新上下文與現有知識聯絡起來。在需要模型整合和學習多樣化上下文的情況下,微調顯得尤為重要。

可控輸出

大模型開發中的一個重要挑戰是大模型的可控輸出。假設一個稅務助手AI突然開始回答心理健康相關的問題。這種多功能性固然令人驚歎,但也可能帶來風險,尤其是在涉及敏感領域時。

即使透過指令限制模型不回答特定問題,也存在以下問題:
• 提示注入攻擊(Prompt Hacking): 使用者可以透過操縱輸入繞過限制。
• 上下文視窗問題: 大模型的上下文視窗有限,儘管像Llama 3.1提供128k的上下文視窗,但過多的指令仍然會佔用實際內容的空間。

有效的提示模板可以有所幫助,但無法涵蓋所有可能的細微差別。即使上下文視窗變大,也不能完全解決問題,這使得微調成為更可靠的選擇。例如,Meta推出的LlamaGuard是一個經過微調的Llama版本,用於防止有害響應並強化聊天安全。

角色定製

新聞媒體通常報導相同的新聞,但每個渠道的視角和風格都不同。想象一個輔助寫作的聊天助手,透過多個來源收集資訊。如果您使用預訓練模型(如ChatGPT),透過設計有效的使用者指令和系統提示可以生成有用的新聞摘要。然而,這些內容可能並不完全符合您組織的風格或準則。

透過使用您團隊撰寫的新聞文章對模型進行微調,可以確保生成的內容始終符合您的組織語調和標準。此外,許多初創企業正在開發企業級AI角色,簡化重複性任務。

小引數但智慧

實現卓越表現並不總需要龐大的模型。引數規模較小的模型(甚至僅有幾百萬引數)通常能夠以更高的效率完成特定任務,同時節約執行成本。這一策略顯著降低了模型執行和維護的成本。

本文將探討一種稱為** 引數高效微調(PEFT)** 的技術。這一方法利用矩陣分解將大模型轉換為更小、更易管理的形式,從而避免使用全部引數以完成目標任務。

微調考量

在微調之前,需要考慮以下因素:

  1. ** 資料充足性 **: 是否擁有足夠的資料用於有效訓練模型?
  2. ** 硬體可用性 **: 是否有必要的硬體用於訓練和執行模型?
  3. ** RAG策略 **: 問題是否可以透過現有LLM API和RAG方法解決?
  4. ** 上線時間 **: 您需要多快將服務投入使用?

這些考慮因素將幫助您判斷是否應採用微調方法,或者透過現有API結合打造統一產品。

引數高效微調 (PEFT)

引數高效微調(PEFT)是一種技術,其核心思想是並非需要更新大型語言模型(LLM)的所有引數才能實現最佳效能。透過凍結大多數引數,僅最佳化一小部分關鍵引數,可以顯著減少微調所需的計算資源和時間。

想象一間教室裡有一名學生,在許多學科中表現優秀,但在某些特定領域需要提高。與其徹底重建整個課程,老師會在這些領域提供有針對性的額外練習。這種方法效率更高,因為它基於學生現有的知識,集中資源在最需要的地方。同樣,在PEFT中,我們僅最佳化最具影響力的權重。

透過凍結大多數引數、繼續使用殘差連線(residual connections)、並應用適當的正則化技術,這些模型能夠保留其已有知識,從而避免災難性遺忘(catastrophic forgetting)。例如,像GaLore這樣的方法使得在個人計算機上微調大型模型(如Llama-3)成為可能,從而讓高階語言建模更易於實現。

file

如上圖所示,PEFT方法可分為三大類:

  1. ** 基於新增 (Addition-based) **: 透過在現有模型中新增新的可訓練引數模組來實現微調。這些新增模組通常會減少對原始模型引數的修改,從而提高訓練效率。
  2. ** 基於選擇 (Selection-based) **: 從基礎模型中選擇一個引數子集進行微調,而不是對整個模型的所有引數進行最佳化。這種方法透過專注於最相關的引數,顯著降低計算成本。
  3. ** 基於重新引數化 (Reparametrization-based) **: 使用替代表示形式對模型進行微調。例如,透過將權重矩陣分解為低秩表示,僅最佳化分解後的小部分引數。

接下來,我們將探討幾種代表性的PEFT技術,需注意的是,這些技術並非相互排斥,可以結合使用。

介面卡(Adapters)

介面卡屬於基於新增(Addition-based)的PEFT方法。它們是新增到現有Transformer架構中的前饋模組,用於減少全連線層之間的引數空間,如下圖所示。

file

如何減少特徵空間?

假設一個全連線層將256維輸入降維到16維,然後下一個全連線層將其重新升維回256維。計算其引數數量為:256 x 16 + 16 x 256 = 8192

相比之下,單個全連線層直接將256維輸入對映到256維輸出需要:256 x 256 = 65536

透過這種方式,介面卡模組顯著減少了引數數量。在介面卡微調中,僅對介面卡模組、層歸一化(Layer Norms)和最終輸出層進行訓練,而不是調整整個模型的所有引數。這使得訓練更快且更高效。

低秩適配 (LoRA)

這是一種重新引數化(Reparameterization)的方法,透過採用語言模型的替代表示形式進行微調。該技術透過將注意力層中的大權重矩陣分解為兩個較小的矩陣,顯著減少了微調過程中需要調整的引數數量。與直接分解矩陣不同,它從分解後的表示(偽分解)中進行學習。

相比於向模型新增新引數,LoRA方法專注於這種替代表示形式。一般共識是根據訓練資料量和模型規模設定秩(rank)r,以緩解過擬合問題並有效管理模型預算。同時,研究表明LoRA的特性是“學得少,忘得少”,這也是預期的結果。

file

假設我們有兩個矩陣A和B,分別包含 100 和 500 個引數。那麼,總的權重引數數量WA和WB為:

WA x WB = 100 * 500 = 50000

現在假設秩(rank)為 5,新生成的權重矩陣WA和 WB 分別為:

WA = 100 x 5 = 500,WB = 500 x 5 = 2500

新的權重引數數量為:

W = WA + WB = 3000

相比原始的 50,000 個引數,這減少了 94%。

透過抑制和放大內部啟用的注入式介面卡 (IA3)

IA3 是另一種基於新增的微調方法,涉及三個階段:向量新增、重新縮放(抑制/放大)以及下游任務的微調。在微調過程中,學習到的向量用於對模型中相應的元素進行重新縮放。這種縮放可以根據學習向量的值來抑制(減少)或放大(增加)啟用值。透過這種方式,模型在特定任務中調整其表現。最終,這些重新縮放的向量在下游任務中微調,隨著微調過程的進行,向量不斷更新以最佳化模型效能。

file

具體包括以下三種新增向量:

  1. 鍵值重新縮放向量(Key Rescaling Vector):
    該向量與自注意力層中的鍵(keys)相乘。
  2. 值重新縮放向量(Value Rescaling Vector):
    該向量與自注意力層以及編碼器-解碼器注意力層中的值(values)相乘。
  3. 中間啟用重新縮放向量(Intermediate Activation Rescaling Vector):
    該向量與位置前饋網路中的中間啟用相乘。

這種方法可以簡單理解為,模型在處理輸入資料時,會針對不同的任務“調整音量”。“音量大”意味著放大啟用值,“音量小”意味著抑制啟用值,從而靈活地適應任務需求。比如,在文字分類任務中,模型可能需要放大與關鍵主題詞相關的啟用值,而抑制無關詞的啟用值,以確保準確地分類。同樣地,在機器翻譯任務中,模型可能會放大與句子語法結構相關的啟用值,而對不影響翻譯質量的冗餘資訊進行抑制。透過這種方式,IA3不僅能夠以最少的引數調整完成對任務特定需求的適配,還能提高計算效率,減少過擬合風險,保持模型整體效能。

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章