一、LoRA 是什麼?
LoRA(Low-Rank Adaptation,低秩適應)是一種大模型微調技術。
問題的起點
大模型(例如 Qwen、Llama)動輒 7B、70B 參數。如果每次想讓它學點新東西,都要重新訓練所有參數,那需要幾十張 A100 顯示卡跑好幾天——一般人根本沒這個條件。
LoRA 的思路
不動原模型,只在旁邊掛一個「小插件」。
打個比方:
| 做法 | 類比 |
|---|---|
| 全量微調 | 把整本教科書改寫成你想要的版本 |
| LoRA | 在教科書頁邊貼幾張便利貼,寫上你的補充說明 |
原始模型的權重完全不改。LoRA 只在某些關鍵層旁邊插入一個極小的矩陣(低秩矩陣),訓練時只更新這個矩陣的參數。
為什麼叫「低秩適應」?
數學上,一個大矩陣可以用兩個小矩陣的乘積來近似。LoRA 利用這個原理:原始權重矩陣 $W$ 不動,額外訓練兩個小矩陣 $A$ 和 $B$,模型的最終輸出變成 $W + A \cdot B$。$A$ 和 $B$ 加起來可能只有原權重的 千分之一 大小。
二、LoRA 有什麼用?
它的核心能力只有一個:以極低的成本,改變大模型的「行為方式」。
LoRA 改變的是風格/格式/行為,不是知識
- 想讓模型學會新知識 → 用 RAG(檢索增強生成)
- 想讓模型換一種方式說話、做事 → 用 LoRA
典型應用場景
| 場景 | 例子 |
|---|---|
| 風格遷移 | 讓通用模型用魯迅的文風寫作 |
| 格式約束 | 強制模型輸出嚴格 JSON,不多一個標點 |
| 角色扮演 | 把 Qwen 變成《原神》裡的鍾離 |
| 領域口吻 | 醫療問診語氣、法律文書的嚴謹措辭 |
| 指令遵循 | 讓模型更好地遵守 system prompt,不亂發散 |
LoRA 的優勢
- 顯示記憶體極低:7B 模型一張 RTX 3090(24G)就能訓練,甚至 8G 顯示卡也勉強能跑
- 檔案極小:訓練產物只有幾 MB,一個模型可以掛幾十個不同的 LoRA,即插即用
- 訓練極快:幾百條資料,半小時出結果
- 不破壞基座:LoRA 卸載後,模型恢復原樣,零風險
三、怎麼使用 LoRA?
大體分四步:
第一步:準備資料
把你想要模型學會的「行為」寫成範例對話。
假設你想讓模型變成毒舌客服,你就寫 50-200 條這樣的對話:
|
|
資料量不用多,50-200 條高品質範例就能看到明顯效果。品質遠比數量重要。
第二步:選擇工具
市面上一堆工具,但本質上都在做同一件事。推薦兩個:
| 工具 | 特點 | 適合誰 |
|---|---|---|
| LLaMA-Factory | 有 Web UI,全程點滑鼠 | 完全不想寫程式的新手 |
| Unsloth | 快 2-5 倍,省一半顯示記憶體 | 會寫點 Python,追求效率 |
Unsloth 的核心程式碼不到 30 行,本質就是:載入模型 → 掛 LoRA → 餵資料 → 訓練 → 儲存。
第三步:訓練
設定幾個關鍵參數,然後等:
| 參數 | 作用 | 一般設多少 |
|---|---|---|
| LoRA rank(秩) | 決定「插件」的容量。越大越細膩,但也越佔顯示記憶體 | 8 或 16 夠用 |
| 學習率 | 每次學多少 | 5e-5,別亂調 |
| 訓練輪數 | 資料反覆學幾遍 | 3-5 輪 |
第四步:使用
訓練完後你得到一個幾 MB 的 LoRA 檔案。使用時同時載入原模型和這個 LoRA 檔案,模型就變成了你訓練的樣子。
想切換回原模型?卸載 LoRA 就行,一秒恢復。
一個模型可以同時掛多個 LoRA——比如掛一個「毒舌風格」和一個「輸出 JSON」,模型就變成一個會輸出 JSON 的毒舌助手。
四、與相關概念的關係
| 概念 | 做什麼 | 和 LoRA 的關係 |
|---|---|---|
| 全量微調 | 改全部參數 | LoRA 的替代方案,效果更好但成本高幾百倍 |
| RAG | 外掛知識庫檢索 | 互補關係:RAG 管知識,LoRA 管風格 |
| Prompt Engineering | 寫提示詞 | 最輕量方案,但效果有限。調不動了再上 LoRA |
| QLoRA | LoRA + 4bit 量化 | LoRA 的省顯示記憶體版本,8G 顯示卡也能跑 7B 模型 |
| PEFT | 參數高效微調的大類 | LoRA 是 PEFT 家族裡最流行的一個成員 |
五、一句話總結
LoRA = 給大模型外掛一個小插件,只改行為不改知識,訓練成本極低,幾 MB 檔案即插即用。