
文章目錄
- 🌊 有沒有低成本的方法微調大模型?
- 🌊 LoRA 的核心思想
- 🌊 LoRA 的初始化和 r r r 的值設定
- 🌊 LoRA 實戰:LoraConfig參數詳解
論文指路:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
🌊 有沒有低成本的方法微調大模型?
- 2021年微軟提出 LORA :LOW-RANK ADAPTATION 低秩適配
- 【什么是秩?】一個矩陣的秩是指矩陣中線性獨立的行或列的最大數目;也就是說
一個矩陣的秩越大,它包含的有效信息就越多
- 【什么是秩?】一個矩陣的秩是指矩陣中線性獨立的行或列的最大數目;也就是說
🌊 LoRA 的核心思想
- LoRA通過優化在適應過程中 FC 層權重變化 ( Δ w ∈ R m × n \Delta w \in \mathbb{R}^{m\times n} Δw∈Rm×n) 的秩分解矩陣 ( A ∈ R m × r × B ∈ R r × n A \in \mathbb{R}^{m\times r} \times B\in \mathbb{R}^{r\times n} A∈Rm×r×B∈Rr×n),來間接調整神經網絡中部分層的權重 ( w w w) 。不修改預先訓練好的權重,而是通過引入一個低秩的矩陣來實現對這些層的適應調整
- r < < min ? ( m , n ) r << \min(m,n) r<<min(m,n)

- 用更小的參數空間存儲 模型參數變化量 Δ w \Delta w Δw
- Δ w \Delta w Δw: 模型參數變化量,也就是對原參數 w w w 變化 Δ w \Delta w Δw 可以適配新任務。LoRA 用 A 和 B 計算獲得模型參數變化量 Δ w \Delta w Δw,疊加到原參數 w w w 上
🌊 LoRA 的初始化和 r r r 的值設定
- 用隨機高斯分布初始化 A A A ,用 0 矩陣初始化 B B B, 保證訓練的開始此旁路矩陣依然是 0 矩陣

- 對于一般的任務, r = 1 , 2 , 4 , . . . r = 1,2,4, ... r=1,2,4,... 就足夠了。而一些領域差距比較大的任務可能需要更大的 r r r
🌊 LoRA 實戰:LoraConfig參數詳解
目前 LORA 已經被 HuggingFace 集成在了 PEFT(Parameter-Efficient Fine-Tuning) 代碼庫里
所以,使用也非常簡單
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType# preModel = ....from_pretrained(".. bert-base-uncased ..") # 加載你的預訓練模型peft_config = LoraConfig(r=4, # LoRA 維數lora_alpha=8, # ΔW 按 α / r 縮放target_modules=["", "", ...], # 對哪些模塊進行微調lora_dropout=0.1 # 默認值為 0
)
model = get_peft_model(preModel, peft_config) # 預訓練模型 -> 加好了 LoRA 之后的模型
參考資料: 【LoRA&CN全解析】, 【知乎高贊-大模型輕量級微調】