【第四章:大模型(LLM)】10.微调方法与实战-(5)LoRA
LoRA(低秩适配)是一种高效的大模型微调方法,通过低秩分解矩阵实现参数高效更新。其核心思想是冻结原始权重,仅训练低秩分解矩阵A和B,显著降低显存占用(仅需更新0.1%-1%参数)。相比其他方法,LoRA具有推理开销小、兼容性好、部署方便等优势,特别适合大语言模型的指令微调、领域适配等场景。通过PyTorch实现时,只需在目标层添加可训练的低秩矩阵,保持原始模型结构不变。LoRA现已成为最流行的参
第四章:大模型(LLM)
第十部分:微调方法与实战
第五节:LoRA
1️⃣ 背景与动机
-
大规模语言模型(LLM)的参数量达到数十亿甚至上千亿,全参数微调成本极高。
-
前面的方法(Prompt Tuning、Prefix Tuning、Adapter Tuning)虽然高效,但:
-
Prompt 类方法主要依赖输入提示,难以深层调控。
-
Adapter 需要插入新模块,推理时增加额外计算。
-
LoRA(Low-Rank Adaptation,低秩适配)由微软在 2021 年提出,核心思路是:
-
不修改模型结构,只在 权重矩阵更新时引入低秩分解。
-
在推理时,额外开销极小。
2️⃣ 核心思想
对于 Transformer 中的权重矩阵 ,若直接微调,需更新
个参数。
LoRA 的做法:
-
冻结原始权重 W。
-
仅训练一个 低秩分解矩阵:
-
-
-
(通常 r=4~64)
-
-
推理时使用:
这样就能用极少的参数更新完成大模型微调。
3️⃣ 方法流程
-
冻结模型原始权重 W。
-
插入 LoRA 模块:为目标层(如 Attention 的 Query/Value 投影矩阵)添加低秩分解。
-
训练 LoRA 参数 A, B,通常仅占原始参数的 0.1%~1%。
-
推理部署:与原始模型结构完全一致,额外开销可忽略。
4️⃣ 数学公式
输入向量 :
其中:
-
BAx 是 LoRA 学到的“增量”。
-
W 保持冻结,避免灾难性遗忘。
5️⃣ 特点与优势
极高参数效率:只需训练低秩矩阵,显著减少显存占用。
推理开销小:无需改变模型结构,部署方便。
可组合性:不同任务的 LoRA 模块可叠加或切换。
兼容性好:可与 Adapter、Prefix-Tuning 等结合。
6️⃣ 与其他方法对比
方法 | 参数规模 | 插入位置 | 推理开销 | 适用场景 |
---|---|---|---|---|
Prompt Tuning | 极小 | 输入层 | 无 | 简单分类、指令学习 |
Prefix-Tuning | 小 | KV Cache | 有少量额外计算 | 生成任务 |
Adapter Tuning | 中等 | Transformer 层内部 | 增加计算 | 多任务学习 |
LoRA | 极小 | 线性层(W) | 几乎无 | 通用,尤其是大模型微调 |
7️⃣ PyTorch 伪代码
import torch
import torch.nn as nn
class LoRALinear(nn.Module):
def __init__(self, in_dim, out_dim, r=8, alpha=16):
super().__init__()
self.r = r
self.alpha = alpha
self.scale = alpha / r
# 冻结的原始权重
self.weight = nn.Parameter(torch.randn(out_dim, in_dim), requires_grad=False)
# 可训练的低秩矩阵
self.A = nn.Parameter(torch.randn(r, in_dim) * 0.01)
self.B = nn.Parameter(torch.randn(out_dim, r) * 0.01)
def forward(self, x):
return x @ self.weight.T + self.scale * (x @ self.A.T @ self.B.T)
8️⃣ 总结
-
LoRA 是目前最流行的 参数高效微调(PEFT)方法,尤其适合大语言模型。
-
通过 低秩分解 + 增量更新,在保持推理高效的同时实现与全参数微调相近的效果。
-
广泛应用于 LLM 指令微调、领域适配、个性化定制 等场景。
更多推荐
所有评论(0)