核心想法:適配,而非覆寫
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 萬——縮減百倍。
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
有兩個旋鈕很重要:秩 r(適配器的容量)與 alpha(縮放因子;有效縮放是 alpha/r)。訓練完成後,你可以把適配器合併回 W,只要計算一次 `W + (alpha/r)·B·A`——之後推論就有零額外成本與零額外延遲,因為適配後的模型看起來與一個普通模型一模一樣。若想熱抽換任務就讓適配器保持分離;若想要單一凍結的部署產物就把它們合併。
QLoRA:在 4 位元中微調
LoRA 縮減的是梯度與優化器的記憶體,但你仍然要持有完整的基礎權重。QLoRA 攻擊的正是這最後一筆成本:它把凍結的基礎模型以 4 位元量化(quantization)(一種為常態分佈權重量身打造的 NF4 格式)儲存,並在其上以較高精度訓練 LoRA 適配器。前向傳遞會逐塊即時反量化權重;梯度只流入小小的適配器,而適配器維持 16 位元。結果是:你能在單張 48 GB 的 GPU 上微調一個 650 億參數的模型。
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 权重的软查询、键、值查找。
實務上如何選擇方法
- 預設選 LoRA 或 QLoRA。 它們最為人理解、工具最成熟、也最可靠。當 GPU 記憶體是瓶頸時用 QLoRA;當你記憶體有餘裕、想多一點品質時用一般的 LoRA。
- 當 LoRA 的品質差距對你的任務有影響、且你負擔得起略多的訓練算力時,改用 DoRA;它近乎是一個可直接替換的升級。
- 調的是秩,而不只是學習率。 秩太低會欠擬合;秩太高浪費參數還可能過擬合。在 {8, 16, 32, 64} 之間掃描 r,並觀察驗證損失。
- 把適配器套用到所有線性層,而不只是注意力的 query/value——一併適配 MLP 與投影矩陣,通常比提高秩更有幫助。
- 把提示/前綴微調留給這種情況:你必須讓單一凍結基礎模型服務眾多任務、每個任務的儲存要真正極小,且你能容忍品質上的取捨。