Skip to content

LoRA:少改參數,改的是哪個矩陣|CMU 10-423 第 10 堂

2026年10月11日1 分鐘

🌏 English version

影片狀態:錄影需登入或課程授權。 來源說明

本文依 CMU 10-423 Spring 2026 公開投影片整理;數值例子為本站教學補充。

為什麼先問「要更新哪裡」

預訓練模型已有語言能力,新的情感分類任務不一定需要重學每個權重。參數高效微調(PEFT)把問題改成:保留底座,只在受限制的更新空間找適合任務的變化。先備是矩陣乘法與梯度下降;若還分不清模型的權重與輸入,先讀Transformer 訓練與解碼。本篇讀完要能算出 LoRA 的參數量、追蹤一次前向,並解釋哪些梯度應該存在。

LoRA不是把整個權重壓成低秩。原本的權重 W 保留,只把更新寫成 ΔW=(α/r)BA,讓 y=Wx+(α/r)BAx。若 W 的形狀是 d_out×d_in,A 是 r×d_in,B 是 d_out×r。完整微調可改 d_out·d_in 個數;LoRA 只訓練 r(d_in+d_out) 個數。r 限制的是這層更新的秩,不代表整個非線性模型只能表達 r 種答案。

把低秩更新真的算一次

以下是本站自擬教學例子,不是作業答案。令 W 是 4×3 的零矩陣,r=1、α=1,A=[1,0,−1],B=[1,2,0,−1]ᵀ,輸入 x=[2,1,1]ᵀ。先算 Ax=1,再乘 B,輸出 y=[1,2,0,−1]ᵀ。BA 的四列依序是 [1,0,−1]、[2,0,−2]、[0,0,0]、[−1,0,1];不論改哪一列,它們都沿同一個方向變化。

完整 ΔW 有 12 個參數,這個 LoRA 有 7 個。若把 r 改成 2,就變成 14 個,反而比原矩陣多。因此「PEFT 一定省參數」需要尺寸與 rank 的條件;真實大矩陣才常有很大的節省。前向不必先建立 BA,可先算 Ax 再算 B(Ax)。推論時若設定允許,也可把更新合併進 W;但多個任務要切換 adapter 時,就要保留各自更新。

初始化與梯度為何重要

常見初始化是 A 隨機、B=0。這樣首次前向與底座相同,不會在訓練開始就破壞原模型。對 loss 而言,B 的梯度可能非零;A 的梯度在首次反向因 B=0 而是零。更新 B 後,A 才會收到非零訊號。因此首次檢查不能要求所有 adapter 梯度都非零,也不能因 A 首次為零就說梯度斷了。

凍結 W 是不更新它的參數,不是把整個 LoRA 區塊包進 no_grad。若較早層的 adapter 需要透過後面的凍結層接收訊號,仍要保留對輸入的微分路徑。只關掉權重 requires_grad,與關掉所有計算圖,是不同操作。

其他 PEFT 方法改了不同部位

Bottleneck adapter 在隱藏狀態上加一個降維、非線性、升維的小網路;prefix tuning 則加入可學習的 key/value 前綴。它們與 LoRA 都減少可訓練參數,但不是同一機制。前綴會改注意力的正規化分母,LoRA 會改投影矩陣;不能只用「都只訓練小部分」替代資料流解釋。凍結底座通常也不消除它的前向、activations 或全部反向成本,實際顯存仍要量測。

變式練習與答案

把上例輸入改成 [1,2,1]ᵀ,結果是什麼?Ax=0,所以 adapter 貢獻是零;這不代表模型沒有能力,而是這個方向對該輸入沒有作用。再考一個 1024×1024 的矩陣、r=8:完整更新有 1,048,576 個數,LoRA 有 16,384 個,比例為 1/64(未含 bias)。若 W 更新了,即使 loss 下降也沒有驗收「只訓練 adapter」。下一步用作業 3 的自擬測試核對參數與資料分離。

課程影片來源

Spring 2026 官方課站將錄影導向 SCS Panopto。2026-10-12 匿名讀取回傳資料夾未載入與登入提示,未取得可播放的課堂內容;這是存取限制,不能推論沒有錄影。本文依公開投影片與所列原始論文整理;自擬例子是導讀補充,不是逐字稿。官方錄影資料夾。

參考資料