LoRA Adapters/zh

    From Marovi AI
    This page is a translated version of the page LoRA Adapters and the translation is 100% complete.
    Other languages:
    Article
    Topic area deep learning
    Prerequisites Transformer, AdamW, Backpropagation


    概述

    LoRA(Low-Rank Adaptation,低秩適配)是一種參數高效微調方法,通過向凍結的預訓練模型的各層注入可訓練的小型秩分解矩陣來工作。該方法由 Hu 等人於 2021 年提出,LoRA 將選定的權重更新重新參數化為兩個低秩因子的乘積,僅訓練這些因子,同時保持原始權重不變。所得的「適配器」通常僅包含基礎模型 0.01% 到 1% 的參數,卻能在下游任務上恢復全量微調的大部分性能。由於適配器權重在推理時可以合併回基礎權重,LoRA 在部署階段不引入任何額外延遲,這使其區別於早期那些會在前向傳播中插入額外層的適配器方法。[1]LoRA 已成為大型語言模型擴散模型Vision Transformer 的主流微調方案,也是社區共享適配器樞紐的基礎構件,這些適配器用於將模型專門化到特定任務、風格或角色上。

    動機

    對現代基礎模型進行全量微調意味著要更新每一個參數,然後為每個任務存儲一份完整的模型副本。對於一個 16 位精度下的 70B 參數語言模型,每個微調後的檢查點大約占用 140 GB;訓練期間所需的優化器狀態還要再大上幾倍。當同一個基礎模型需要被專門化到數百個任務、用戶或領域時,這種做法是不切實際的。

    LoRA 的動機來自這樣一條經驗觀察:一次微調對預訓練權重矩陣所施加的變化往往位於一個低秩子空間中。若 $ W_0 \in \mathbb{R}^{d \times k} $ 是預訓練權重矩陣、$ W_0 + \Delta W $ 是微調後的版本,那麼對 $ \Delta W $奇異值分解通常會發現少數幾個奇異方向就承載了大部分能量。Hu 等人據此認為,針對具體任務的適配的「本徵秩」足夠小,以至於可以將 $ \Delta W $ 直接參數化為一個低秩乘積而不損失表達能力。

    形式化定義

    LoRA 將所選權重矩陣的更新 $ \Delta W $ 替換為如下因式分解形式 $ {\displaystyle \Delta W = \frac{\alpha}{r}\, B A,} $ 其中 $ A \in \mathbb{R}^{r \times k} $$ B \in \mathbb{R}^{d \times r} $,秩 $ r $ 遠小於 $ \min(d, k) $(常取 4、8、16 或 64),$ \alpha $ 為一個常數縮放因子。修改後層的前向傳播變為 $ {\displaystyle h = W_0 x + \frac{\alpha}{r}\, B A x.} $ 原始矩陣 $ W_0 $ 被凍結,不接收任何梯度更新。僅有 $ A $$ B $ 被訓練。

    在初始化時,$ A $高斯分布(或 Kaiming 分布)中採樣,$ B $ 被置為零,使得初始步驟下 $ \Delta W = 0 $,網絡的預測與預訓練模型完全一致。隨後,通過乘積 $ BA $梯度流打破對稱性,適配器開始學習一個針對具體任務的更新。

    縮放因子 $ \alpha/r $ 將適配器的有效學習率與秩解耦。否則,在參數值不變的情況下將 $ r $ 加倍會使 $ \Delta W $ 的幅值也加倍;$ 1/r $ 因子抵消了這一效應,使得在某個秩下調好的超參數能夠合理地遷移到另一秩。常見的約定是設 $ \alpha = r $$ \alpha = 2r $

    LoRA 的應用位置

    Transformer 中,LoRA 最常被應用於注意力機制的投影矩陣——查詢、鍵、值和輸出投影 $ W_Q $$ W_K $$ W_V $$ W_O $。原始論文發現,僅對 $ W_Q $$ W_V $ 進行適配在 GLUE 風格的任務上就已足夠;而面向大型語言模型的較新做法則會對全部四個注意力投影外加前饋網絡的上投影和下投影都施加 LoRA,因為指令跟隨和推理類任務能從更廣泛的覆蓋中獲益。

    LoRA 可以應用於任何線性層,包括 embedding 表和輸出的 softmax 頭,不過對嵌入表施加 LoRA 時需要謹慎,因為其反向傳播會經過非標準的索引選取操作。卷積可以被重排為二維矩陣並以類似方式適配,這正是 LoRA 用於視覺模型和擴散模型的基礎。

    訓練與推理

    在訓練期間,優化器狀態——梯度、Adam/AdamW 動量以及混合 精度 的主權重——僅為 $ A $$ B $ 分配。在秩為 8 並對 $ W_Q, W_V $ 進行適配的設置下,一個 7B 參數語言模型的可訓練參數量從 7B 降至約 4M,相當於約 1700 倍的縮減。對應的顯存節省再結合梯度檢查點和 4 位權重量化,正是 QLoRA 等技術能夠在單張消費級 GPU 上微調 65B+ 模型的關鍵。

    在推理時,適配器可以被合併進基礎權重: $ {\displaystyle W_{\text{merged}} = W_0 + \frac{\alpha}{r}\, B A.} $ 一旦合併,修改後的層就與全量微調過的層無異,且不會帶來任何延遲或顯存開銷。另一種做法是讓適配器保持不合併狀態,在運行時作為加性分支應用;這使得可以在同一基礎模型上熱切換不同的適配器而無需重新加載權重,正是多租戶適配器服務以及圖像生成工具中「適配器庫」的基礎。

    變體與擴展

    圍繞 LoRA 的思路衍生出了一大批方法:

    • QLoRA(Dettmers 等人,2023 年)——將 LoRA 與凍結基礎權重的 4 位量化相結合,使用 NF4 數據類型和雙重量化。適配器以 16 位訓練,梯度則流經反量化後的基礎權重。這使得在單張 24 GB GPU 上對 30B+ 模型進行微調成為可能。[2]
    • DoRA(Weight-Decomposed Low-Rank Adaptation,權重分解低秩適配)——將 $ W_0 $ 分解為一個幅值向量和一個方向矩陣,僅對方向部分施加 LoRA。在原始 LoRA 表現欠佳的任務上,經驗上能更好地縮小與全量微調的差距。
    • AdaLoRA ——使用類似奇異值分解的參數化(帶顯式奇異值)來跨層學習秩分配,並在訓練過程中剪除不重要的方向。
    • LoRA+ ——為 $ A $$ B $ 使用不同的學習率,其動機是 $ B $ 從零開始所引入的不對稱性。論文建議 $ \eta_B / \eta_A \approx 16 $
    • VeRA ——在所有層之間共享隨機投影矩陣,僅訓練每層一個小型縮放向量,在保持相似質量的同時相比 LoRA 實現 10 倍參數縮減。
    • LoRA 用於擴散模型 —— Stable Diffusion 及相關模型的主流微調方法。社區樞紐分發著數十萬個風格、角色和概念 LoRA,每個通常在 10–200 MB 之間。

    對比

    LoRA 處於更廣泛的參數高效微調(PEFT)方法圖景之中:

    • 全量微調 ——質量上限最高,成本也最高。適用於任務領域遠離預訓練數據、且可以接受為每個任務保留一個專用模型的場景。
    • 適配器模塊(Houlsby 等人,2019 年)——在 Transformer 子層之間插入小型瓶頸網絡。在推理時引入額外的參數和前向傳播延遲;沒有合併回基礎權重的選項。
    • 前綴微調提示微調 ——在輸入或每個注意力層前面拼接可學習的向量。參數極少;對初始化敏感,對於需要大幅改變行為的任務較難調好。
    • BitFit ——僅訓練偏置項。極其廉價但表達能力有限。

    LoRA 的吸引力在於它占據了一個甜蜜點:在大多數微調任務上達到與全量微調相當的質量、參數量與前綴微調相當、合併後在推理階段沒有任何額外開銷,並且具有乾淨的可組合性(針對不同概念訓練的多個 LoRA 可以線性組合,但需要注意若干前提條件)。

    局限性

    LoRA 假設具體任務的更新近似於低秩。對於需要大量注入知識的任務——例如把模型訓練到一種新語言或一個龐大的新事實語料上——為匹配全量微調所需的秩可能高到使參數節省優勢消失。僅使用 LoRA 式更新從零開始進行預訓練通常並不有效。

    選擇 LoRA 的應用位置及秩仍然是一項經驗性工作。常見的默認值(秩 8 或 16,僅作用於注意力投影)在語言模型指令微調上效果良好,但在代碼、數學或多模態適配上可能表現不足,這些場景通常需要在更多層上施加更高且統一的秩。

    適配器組合併不總是線性的:把若干獨立訓練的 LoRA 堆疊或相加可能產生相互干擾,在擴散模型中尤為明顯,為此人們提出了專門的合併算法(TIES、DARE)和正交化技術以緩解串擾。

    最後,LoRA 縮小了但並未消除其與全量微調之間的差距。在衡量狹窄技術能力的基準(數學推理、代碼合成)上,調優良好的全量微調仍以一個小但可測量的差距優於 LoRA,且差距在非常低的秩下會進一步擴大。

    參考文獻