PEFT 文件

介面卡

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

介面卡

基於介面卡的方法透過在一個凍結的預訓練模型中的注意力和全連線層之後新增額外的可訓練引數,從而減少記憶體使用並加速訓練。具體方法因介面卡而異,可能只是簡單地增加一個額外的層,也可能是將權重更新 ∆W 表示為權重矩陣的低秩分解。無論哪種方式,介面卡通常都很小,但能表現出與完全微調模型相當的效能,並且能用更少的資源訓練更大的模型。

本指南將簡要介紹 PEFT 支援的各種介面卡方法(如果您對特定方法的更多細節感興趣,請查閱連結的論文)。

低秩適配 (LoRA)

LoRA 是最受歡迎的 PEFT 方法之一,如果你剛開始接觸 PEFT,它是一個很好的起點。它最初是為大型語言模型開發的,但由於其高效性和有效性,它現在是擴散模型中非常流行的訓練方法。

正如前面簡要提到的,LoRA 是一種在消耗更少記憶體的同時加速大型模型微調的技術。

LoRA 透過低秩分解,用兩個較小的矩陣(稱為*更新矩陣*)來表示權重更新 ∆W。這些新矩陣可以被訓練以適應新資料,同時保持總引數數量較低。原始權重矩陣保持凍結,不接收任何進一步的更新。為了產生最終結果,原始權重和額外的適配權重會結合在一起。你也可以將介面卡權重與基礎模型合併,以消除推理延遲。

這種方法有許多優點:

  • LoRA 透過大幅減少可訓練引數的數量,使微調更高效。
  • 原始預訓練權重保持凍結,這意味著你可以為各種下游任務構建多個輕量級、可移植的 LoRA 模型。
  • LoRA 與其他引數高效方法是正交的,並且可以與其中許多方法結合使用。
  • 使用 LoRA 微調的模型的效能與完全微調模型的效能相當。

原則上,LoRA 可以應用於神經網路中任何權重矩陣子集,以減少可訓練引數的數量。然而,為了簡化和進一步提高參數效率,LoRA 通常只應用於 Transformer 模型中的注意力塊。LoRA 模型中可訓練引數的數量取決於更新矩陣的大小,這主要由秩 `r` 和原始權重矩陣的形狀決定。

探索文字到影像的定製:從 LyCORIS 微調到模型評估

LoRA 專家混合 (X-LoRA)

X-LoRA 是一種針對 LoRA 的專家混合方法,透過使用密集或稀疏門控來動態啟用 LoRA 專家。在訓練期間,LoRA 專家以及基礎模型都保持凍結,因此只有門控層需要訓練,從而導致引數數量較低。具體來說,門控層輸出縮放值,這些縮放值(根據配置)在層級和詞元級上是細粒度的。此外,在推理過程中,X-LoRA 會動態啟用 LoRA 介面卡來回憶知識並有效地混合它們。

下圖展示了對於不同提示,每個詞元的縮放值如何變化。這突顯了隨著生成過程的進行和序列建立新上下文時,不同介面卡的啟用情況。

Token-by-token scalings

在每一步中,X-LoRA 需要執行兩次基礎模型:第一次,獲取沒有任何 LoRA 介面卡時的隱藏狀態;第二次,使用隱藏狀態計算縮放值,將這些縮放值應用於 LoRA 介面卡,然後再次執行模型。第二次執行的輸出即為該模型步驟的結果。

最終,由於其雙重前向傳遞機制,X-LoRA 允許模型反思其知識,並動態地重新配置架構。

低秩哈達瑪積 (LoHa)

低秩分解可能會影響效能,因為權重更新被限制在低秩空間內,這可能會限制模型的表達能力。然而,你並不希望使用更大的秩,因為它會增加可訓練引數的數量。為了解決這個問題,LoHa(一種最初為計算機視覺開發的方法)被應用於擴散模型,其中生成多樣化影像的能力是一個重要考慮因素。LoHa 也應該適用於通用模型型別,但目前 PEFT 尚未實現嵌入層。

LoHa 使用哈達瑪積(逐元素乘積)代替矩陣乘積。∆W 由四個較小的矩陣表示,而不是像 LoRA 中那樣用兩個,並且每對低秩矩陣都透過哈達瑪積進行組合。結果是,∆W 可以在擁有相同數量的可訓練引數的情況下,具有更高的秩和表達能力。

低秩克羅內克積 (LoKr)

LoKr 與 LoRA 和 LoHa 非常相似,主要應用於擴散模型,但你也可以將它用於其他模型型別。LoKr 用克羅內克積來代替矩陣乘積。克羅內克積分解會建立一個塊矩陣,保留了原始權重矩陣的秩。克羅內克積的另一個好處是它可以透過堆疊矩陣的列來進行向量化。這可以加快處理速度,因為你避免了完全重構 ∆W。

正交微調 (OFT)

透過正交微調控制文字到影像擴散

OFT 是一種主要關注在微調模型中保留預訓練模型生成效能的方法。它試圖保持層內所有神經元對之間的餘弦相似度(超球面能量)不變,因為這能更好地捕捉神經元之間的語義資訊。這意味著 OFT 更能保留主題,更適合可控生成(類似於 ControlNet)。

OFT 透過學習神經元的正交變換來保持超球面能量不變,從而使它們之間的餘弦相似度保持不變。在實踐中,這意味著將一個正交矩陣與預訓練權重矩陣進行矩陣乘積。然而,為了實現引數高效,這個正交矩陣被表示為一個具有秩為 `r` 的塊的塊對角矩陣。LoRA 透過低秩結構減少可訓練引數的數量,而 OFT 則透過稀疏的塊對角矩陣結構減少可訓練引數的數量。

正交蝶形 (BOFT)

BOFT 是一種主要關注在微調模型中保留預訓練模型生成效能的方法。它試圖保持層內所有神經元對之間的餘弦相似度(超球面能量)不變,因為這能更好地捕捉神經元之間的語義資訊。這意味著 OFT 更能保留主題,更適合可控生成(類似於 ControlNet)。

OFT 透過學習神經元的正交變換來保持超球面能量不變,從而使它們之間的餘弦相似度保持不變。在實踐中,這意味著將一個正交矩陣與預訓練權重矩陣進行矩陣乘積。然而,為了實現引數高效,這個正交矩陣被表示為一個具有秩為 `r` 的塊的塊對角矩陣。LoRA 透過低秩結構減少可訓練引數的數量,而 OFT 則透過稀疏的塊對角矩陣結構減少可訓練引數的數量。

自適應低秩適配 (AdaLoRA)

AdaLoRA 透過為那些更能適應任務的重要權重矩陣分配更多引數(即更高的秩 `r`),並剪枝掉不太重要的矩陣,來管理 LoRA 引入的引數預算。秩的控制是透過一種類似於奇異值分解(SVD)的方法實現的。∆W 用兩個正交矩陣和一個包含奇異值的對角矩陣進行引數化。這種引數化方法避免了迭代應用 SVD,後者計算成本很高。基於這種方法,∆W 的秩會根據一個重要性分數進行調整。∆W 被分成三元組,每個三元組根據其對模型效能的貢獻進行評分。重要性分數低的三元組被剪枝,而重要性分數高的三元組則保留用於微調。

使用 AdaLoRA 進行訓練分為三個階段:初始化階段、預算階段和最終階段。在初始化階段,不應用預算,因此秩保持不變。在預算階段,應用上述過程,根據預算重新分配秩,目標是為更重要的介面卡分配更高的秩,為不重要的層分配更低的秩。當進入最終階段時,預算分配結束,秩已重新分配,但我們可能會繼續用重新分配的秩訓練一段時間,以進一步提高效能。

Llama-Adapter

Llama-Adapter 是一種將 Llama 適配為指令跟隨模型的方法。為了幫助模型適應指令跟隨,該介面卡使用了一個包含 52K 指令-輸出對的資料集進行訓練。

一組可學習的適配提示被前置到輸入指令詞元中。這些提示被插入到模型的較高層,因為利用預訓練模型更高層次的語義進行學習效果更好。前置到輸入的指令-輸出詞元引導適配提示生成上下文相關的響應。

LLaMA-Adapter:使用零初始化注意力的語言模型高效微調

為了避免給詞元增加噪聲,該介面卡使用零初始化的注意力。除此之外,介面卡還增加了一個可學習的門控因子(初始化為零),以便在訓練過程中逐步向模型新增資訊。這可以防止新學習到的指令淹沒模型預訓練的知識。

Householder 反射適配 (HRA)

HRA 提供了一個連線 LoRA 和 OFT 的新視角,這意味著它可以利用這兩種策略的優勢,減少引數和計算成本,同時懲罰預訓練知識的損失。

透過 Householder 反射適配彌合低秩和正交適配之間的差距

HRA 構建了一個由 `r` 個可訓練的 Householder 反射 (HR) 組成的鏈。因為 Householder 反射矩陣是正交矩陣,而正交矩陣的乘積也是正交矩陣,所以 HRA 滿足正交微調 (OFT) 的理論保證。同時,HRA 也可以透過重寫公式被看作是一種低秩微調適配器。

r 越高,可訓練的引數就越多,從而帶來更大的模型容量和更好的效能。此外,由於鏈式結構,HR 平面的正交性影響了 HRA 的容量和正則性。為了在模型容量和正則性之間取得平衡,我們在損失函式中增加了一個 HR 平面的正交性正則化器。權重λ\lambda可以控制正則化器的強度。

Bone

MiSS 論文新版本 (MiSS: Balancing LoRA Performance and Efficiency with Simple Shard Sharing)。如果你已經有了一個 Bone 檢查點,可以使用 `/scripts/convert-bone-to-miss.py` 將其轉換為 MiSS 檢查點,然後繼續使用 MiSS 進行訓練。

MiSS

MiSS MiSS (Matrix Shard Sharing) 是一種新穎的引數高效微調(PEFT)方法,旨在解決大型語言模型中適應性和效率之間的權衡問題。MiSS 的核心方法涉及一個簡單的分片共享機制。它透過將權重矩陣分解為多個片段,然後利用一個共享的、可訓練的“公共片段”來實現低秩適配。最終的低秩更新矩陣是透過複製這些共享的分割槽片段來構建的。(MiSS 是一種採用低秩結構的新型 PEFT 方法,僅需一個可訓練矩陣,並引入了不同於 LoRA 的新更新機制,在效能和效率之間實現了極佳的平衡。)

MiSS:透過簡單的分片共享平衡 LoRA 的效能和效率

直觀地看,MiSS 中單個可訓練矩陣的形狀與 `lora_B` 一致,因此 MiSS 中的 `r` 引數比 LoRA 中的 `r` 引數少 ( `in_feature * r` )。

注意:Bat 的 r (b) 很特殊,要求權重 W 滿足 `in_features % r == 0` 和 `out_features % r == 0` 的條件。此外,當 `in_features == out_features` 且 MiSS 的 r 等於 LoRA 的 r 時,MiSS 的可訓練引數數量僅為 LoRA 的一半。

雖然 Bat 的非線性更新帶來了一些效能提升,但也增加了計算開銷。其主要目的是為研究人員提供一個改進方向。因此,我們推薦微調綜合性的 MiSS 模型。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.