JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

參數高效微調:LoRA 家族

凍結龐大的模型,改為只訓練幾百萬個新權重。LoRA、QLoRA 及其親族,讓在單張 GPU 上微調 700 億參數模型成為可能——而你應該確切理解它們為何有效。

核心想法:適配,而非覆寫

PEFT 建立在一個經驗觀察上:儘管模型本身龐大,某個微調任務對權重所造成的改變卻是小而有結構的。因此,與其去編輯數十億個預訓練權重,你把它們凍結,然後在旁邊加上一個小而可訓練的*增量(delta)*。推論時你計算 `W·x + delta·x`。你只訓練增量、只儲存增量,並能藉由抽換增量來瞬間切換任務。

這把「適配」從改造一顆大腦重新框定為外掛一個小配件。基礎模型的通用知識原封不動地保留(較少災難性遺忘),而每個任務只花幾 MB,而非一份完整的模型副本。底下這整個家族,都是在變化那個配件長什麼樣子

LoRA:低秩更新

LoRA(Low-Rank Adaptation,低秩適配)是主力。針對形狀為 d×d 的權重矩陣 W,可訓練的增量並不是一個完整的 d×d 矩陣——那會跟 W 一樣大。LoRA 改為把它分解成兩個瘦長矩陣 B(d×r)與 A(r×d)的乘積,其中秩(rank)r 很小(常為 8–64)。可訓練參數量從 d² 降到 2dr。對一個 4096×4096、r=16 的層,這是約 13.1 萬個參數,而非約 1680 萬——縮減百倍。

W' = W + \frac{\alpha}{r}\,B A,\qquad B\in\mathbb{R}^{d\times r},\ A\in\mathbb{R}^{r\times d},\ r\ll d

LoRA 用低秩乘积 BA(按 alpha/r 缩放)取代完整的 d×d 权重更新。

# LoRA: W is frozen; only A, B are trained
# A ~ N(0, sigma), B = 0  ->  delta starts at zero (no-op at init)
h = x @ W.T                      # frozen base path
h = h + (x @ A.T @ B.T) * (alpha / r)   # low-rank adapter path
B 初始化為零,使適配器在訓練之初不造成任何改變;alpha/r 用來縮放更新量。

有兩個旋鈕很重要:秩 r(適配器的容量)與 alpha(縮放因子;有效縮放是 alpha/r)。訓練完成後,你可以把適配器合併回 W,只要計算一次 `W + (alpha/r)·B·A`——之後推論就有額外成本與零額外延遲,因為適配後的模型看起來與一個普通模型一模一樣。若想熱抽換任務就讓適配器保持分離;若想要單一凍結的部署產物就把它們合併。

QLoRA:在 4 位元中微調

LoRA 縮減的是梯度與優化器的記憶體,但你仍然要持有完整的基礎權重。QLoRA 攻擊的正是這最後一筆成本:它把凍結的基礎模型以 4 位元量化(quantization)(一種為常態分佈權重量身打造的 NF4 格式)儲存,並在其上以較高精度訓練 LoRA 適配器。前向傳遞會逐塊即時反量化權重;梯度只流入小小的適配器,而適配器維持 16 位元。結果是:你能在單張 48 GB 的 GPU 上微調一個 650 億參數的模型。

Y = X\,\mathrm{dequant}_{\text{NF4}}(W) \;+\; X\,\frac{\alpha}{r}\,B A

QLoRA 将冻结的基础权重以 4 位 NF4 存储并即时反量化,再加上可训练的 LoRA 项。

超越 LoRA:DoRA 與提示空間方法

DoRA(Weight-Decomposed Low-Rank Adaptation,權重分解低秩適配)注意到:一次權重更新同時改變兩件事——向量的*大小(magnitude)與它的方向(direction)。DoRA 把每個權重欄分解成一個大小純量與一個單位方向向量,然後只對方向*套用 LoRA,而把大小單獨訓練。這種解耦讓適配器的行為更接近全量微調,補上了 LoRA 殘留的大部分微小品質差距——而且一旦合併,幾乎沒有額外的推論成本。

另一個分支完全不動權重,改為學習輸入軟提示微調(soft-prompt tuning)在輸入序列前面接上少數幾個可訓練的嵌入向量——一個*軟提示(soft prompt)*;模型凍結,只學習那些連續向量。它是所有方法中最省參數的(幾千個數字),但通常需要夠大的基礎模型才能運作良好,且品質往往落後 LoRA。

前綴微調(prefix tuning)是更強大的表親:它不只在輸入層前面接,而是在每一個注意力層前面接上可訓練的*鍵/值(key/value)*向量。這讓軟提示對模型內部計算握有大得多的槓桿,在仍不碰任何原始權重的前提下,挽回大部分 LoRA 的品質。可以把軟提示想成從門口操舵,把前綴微調想成從每一個房間裡面操舵。

前缀微调在每一层的这种查询—键—值注意力查找中注入可训练的键/值向量。

图示:注意力作为带 softmax 权重的软查询、键、值查找。

實務上如何選擇方法

  1. 預設選 LoRA 或 QLoRA。 它們最為人理解、工具最成熟、也最可靠。當 GPU 記憶體是瓶頸時用 QLoRA;當你記憶體有餘裕、想多一點品質時用一般的 LoRA。
  2. 當 LoRA 的品質差距對你的任務有影響、且你負擔得起略多的訓練算力時,改用 DoRA;它近乎是一個可直接替換的升級。
  3. 調的是秩,而不只是學習率。 秩太低會欠擬合;秩太高浪費參數還可能過擬合。在 {8, 16, 32, 64} 之間掃描 r,並觀察驗證損失。
  4. 把適配器套用到所有線性層,而不只是注意力的 query/value——一併適配 MLP 與投影矩陣,通常比提高秩更有幫助。
  5. 把提示/前綴微調留給這種情況:你必須讓單一凍結基礎模型服務眾多任務、每個任務的儲存要真正極小,且你能容忍品質上的取捨。