大型語言模型工程

LoRA(低秩適應,low-rank adaptation)

當你把預訓練模型適配到新任務時,你真正需要的改動通常很小且有結構——你是在輕推一個已經能幹的模型,而不是重蓋它。LoRA 賭的是:這一推(也就是某層的權重更新)落在一個低維子空間裡。於是它不去訓練完整的更新矩陣,而是凍結原始權重,把更新學成兩個瘦長矩陣的乘積——一個降維投影、一個升維投影——其秩你刻意挑得遠小於該層的寬度。

具體而言,對凍結權重 W0,適配後的層計算 W0·x 再加上一個帶縮放的修正項(alpha 除以 r)乘以 B·A·x,其中 A 把輸入降到秩 r、B 再把它升回去。只有 A 與 B 會訓練;A 通常取隨機高斯、B 從零起步,使模型一開始與基礎完全相同。可訓練參數量降低好幾個數量級,最佳化器記憶體也隨之縮小,而推論時你可以把 B·A 併回 W0,於是完全不增加延遲。

由於適配器極小且基礎原封不動,一個凍結的模型可以掛載許多可熱插拔的 LoRA——每個任務、每個租戶、每種風格各一個——伺服器還能跨它們批次處理請求。代價是表達力:秩取得太低,就抓不住那些真的需要滿秩的更新,而合適的秩、縮放與目標模組仍是經驗性的選擇。

W' = W_0 + \tfrac{\alpha}{r} B A,\qquad r \ll \min(d,k)

更新被約束在秩 r;推論時可併入 W0,毫無額外成本。

縮放係數 alpha/r 不是裝飾——它把有效學習率與所選的秩解耦,這也是為什麼大家掃 r 時常把 alpha/r 固定住。

又称
LoRA低秩適應