LoRA原理

低秩适配(Low-Rank Adaptation)微调原理

核心思想

LoRA(Low-Rank Adaptation)是一种参数高效的微调方法。其核心假设是:模型适配过程中的权重变化具有低秩特性, 因此可以用两个低秩矩阵的乘积来近似表示权重更新,大幅减少可训练参数量。

# 原始权重更新
W = W₀ + ΔW
# LoRA分解
ΔW = B × A
# 其中 B ∈ R^(d×r), A ∈ R^(r×k), r ≪ min(d,k)

工作原理

1. 冻结预训练权重

保持原始预训练权重W₀不变,只训练低秩矩阵A和B。

# 前向传播
h = W₀x + ΔWx = W₀x + BAx
# W₀冻结,A和B可训练

2. 低秩分解

将权重更新ΔW分解为两个小矩阵的乘积,秩r通常取4-64。

参数量对比:
原始:d × k 参数
LoRA:(d + k) × r 参数
压缩比:r(d + k) / dk ≈ r/min(d,k)

3. 缩放因子

使用缩放因子α来控制低秩更新的贡献。

h = W₀x + (α/r) × BAx
# α通常设为r或2r

4. 初始化策略

使用特定初始化确保训练开始时LoRA不改变模型输出。

A ← 随机高斯初始化
B ← 零初始化
# 因此初始时 BA = 0,ΔW = 0

参数量对比

模型全参数量LoRA (r=8)压缩比
LLaMA-7B7B~4M~0.06%
LLaMA-13B13B~8M~0.06%
LLaMA-70B70B~40M~0.06%

应用位置

LoRA通常应用于注意力层的Query和Value投影矩阵:

# 常见应用位置
Wq, Wv(推荐,效果最好)
Wq, Wk, Wv, Wo
全部线性层(包括FFN)

优势

参数高效

可训练参数减少1000倍以上

显存友好

大幅降低训练显存需求

无推理延迟

部署时可合并到原权重

易于切换

一个基础模型可适配多个任务

----