LoRA (Low-Rank Adaptation) 原理解析
1. 基本原理
LoRA 是一种参数高效的微调方法,主要通过以下方式工作:
核心思想
- 不直接更新预训练模型的权重矩阵 W
- 通过低秩分解矩阵 (BA) 来表示权重更新
- W' = W + BA,其中 B∈R^{d×r}, A∈R^{r×k}
2. r 值的设置
r 值含义
- r 是低秩矩阵的秩(rank)
- 决定了 LoRA 适配器的容量和压缩比
- 通常 r << min(d,k)
常见设置
- 文本生成:r = 8, 16, 32
- 图像生成:r = 4, 8, 16
- 一般任务:
- 小任务:r = 2, 4, 8
- 中等任务:r = 16, 32
- 复杂任务:r = 64, 128
选择建议
-
任务复杂度
- 简单任务:较小的 r (2-8)
- 复杂任务:较大的 r (32-128)
-
计算资源
- r 越大,训练和推理开销越大
- r 越小,模型压缩比越高
-
经验法则
- 从小的 r 值开始尝试
- 逐步增加直到性能不再显著提升
- 通常 r=16 是一个好的起点
3. 代码示例
from peft import LoraConfig
# LoRA 配置示例
lora_config = LoraConfig(
r=16, # LoRA 秩
lora_alpha=32, # LoRA alpha 缩放参数
target_modules=["q", "v"], # 需要应用 LoRA 的模块
lora_dropout=0.05, # Dropout 概率
bias="none", # 偏置项处理方式
task_type="CAUSAL_LM" # 任务类型
)