Agent 论文与解读 · PDF
LoRA 大语言模型的低秩适配 2106.09685
Agent 论文与解读 PDF 资料:LoRA 大语言模型的低秩适配 2106.09685
PDF 资料
该资料为 PDF 文件,可直接在浏览器中打开。
论文解读
#第 2 章 LoRA:低成本微调大模型
#2.1 时代背景:2021 年,大家在烦什么?
GPT-3 出来后大家发现:模型越大效果越好,但也越用不起。
举个具体的账(GPT-3 175B 全量微调):
| 项目 | 数字 |
|---|---|
| 模型参数本身 | 350 GB(fp16) |
| 训练时优化器状态(Adam) | ~1400 GB |
| 梯度 | 350 GB |
| 激活值 | 几百 GB |
| 总显存需求 | ~2 TB |
而一张 A100 只有 80 GB,意味着你得用 几十张 A100 才能微调一次。更难受的是:
- 每个下游任务(客服、写代码、翻译……)都要保存一份完整的 350GB 模型。
- 100 个任务 = 35 TB 存储。
- 切换任务时加载模型又要几分钟。
有没有办法让微调"轻"一点?
#2.2 关键观察:微调时权重变化是"低秩"的
先解释"秩(rank)":
一个矩阵的秩 = 它包含的"独立信息维度"数。
A = [[1, 2, 3], ← 第 2 行 = 第 1 行 × 2,第 3 行 = 第 1 行 × 3
[2, 4, 6], 这 3 行本质上只是同一个向量的放大缩小
[3, 6, 9]]
→ 秩 = 1,虽然有 9 个数字,但只携带 1 个方向的信息
B = [[1, 0, 0],
[0, 1, 0], ← 3 行互相独立
[0, 0, 1]]
→ 秩 = 3,3 个方向都有
论文的洞察(基于早前 Aghajanyan 等人的发现):
大模型已经预训练得非常好,微调时真正需要改变的方向很少。也就是说,微调带来的权重变化矩阵 ΔW,秩很低——可能秩 4、秩 8 就够了。
类比:你已经是一个会说英语的人(预训练完成)。让你学医学英语(微调),你不需要重新学语法,只需要补几千个医学词汇——改变量是低维的。
#2.3 LoRA 的核心技巧:低秩分解
如果 ΔW 是低秩的,那它可以分解成两个小矩阵的乘积:
原始权重矩阵 W₀ (d × k 大,比如 4096 × 4096 = 1600 万参数)
↓ 微调时不动它
ΔW (也是 d × k 这么大) = B (d × r) × A (r × k)
其中 r 很小,比如 r = 8
B 的大小 = 4096 × 8 = 32768
A 的大小 = 8 × 4096 = 32768
两个加起来 = 65536,参数量少了 250 倍!
视觉化:
W₀ (冻结) ΔW = B × A (可训练)
┌─────────┐ ┌──┐ ┌─────────┐
│ │ │ │ │ 小高瘦 │
│ 巨大 │ + │瘦│ × │ 矩阵 A │
│ 矩阵 │ │长│ └─────────┘
│ │ │矩│
│ │ │阵│
└─────────┘ │B│
└──┘
不训练 只训练这两个小矩阵
#2.4 训练时怎么走?
前向传播:
y = W₀·x + ΔW·x = W₀·x + B·A·x
反向传播只更新 A 和 B,W₀ 完全不动、不需要存梯度、不需要存优化器状态——显存暴跌。
初始化技巧:
- A 用随机高斯初始化
- B 初始化为 0
这样训练第一步 ΔW = B·A = 0,模型行为完全等于原始预训练模型,不会一开始就破坏预训练效果,训练非常稳定。
#2.5 推理时怎么走?零延迟
这是 LoRA 最优雅的地方:
推理前先合并:W = W₀ + B·A ← 一次性算好
之后: y = W·x ← 和原模型完全一样的计算
对比 Adapter(另一种 PEFT 方法):Adapter 是在模型里塞额外的小层,推理时每次都要多算一遍,延迟增加 20%~30%。
LoRA 推理时一行代码合并,零延迟、零额外参数。
#2.6 实际效果
GPT-3 175B 上的对比:
| 方法 | 可训练参数 | 显存 | 效果 |
|---|---|---|---|
| 全量微调 | 175 B | 1.2 TB | 100%(基准) |
| Adapter | 40 M | 较低 | 略差 |
| Prefix Tuning | 0.1 M | 低 | 不稳定 |
| LoRA (r=4) | 4.7 M | 350 GB | 持平或更好 |
参数量减少 3.7 万倍,效果不降。
#2.7 最小代码示例
用 HuggingFace peft 库给一个模型加 LoRA:
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model
# 加载原模型(冻结)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
# 配置 LoRA
lora_config = LoraConfig(
r=8, # 低秩矩阵的 r
lora_alpha=16, # 缩放因子
target_modules=["q_proj", "v_proj"], # 给 Q 和 V 投影加 LoRA
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
# 一行话把模型变成 LoRA 版
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 7,615,616,512 || trainable%: 0.055%
7B 模型,只训练 0.055% 的参数。消费级 24GB 显卡(4090)就能微调。
#2.8 新人 FAQ
Q:r 该选多少? A:经验值 4~64。任务越复杂越大。多数 NLP 任务 r=8 够用,复杂的生成任务可以试 32/64。
Q:为什么加在 Q 和 V 投影上?不是其他位置? A:论文做了消融实验,发现加在 Q/V 性价比最高。后来社区也常加在 K、O、MLP 上,效果更好但参数更多。
Q:LoRA 训出来的模型怎么部署? A:两种方式:
- 合并部署:
W = W₀ + BA,得到一个和原模型大小一样的新模型。 - 不合并部署:保留 LoRA 权重(几 MB)单独保存,推理时动态加载。适合多租户——一个底座模型 + 100 个不同 LoRA = 100 个定制模型,只多几百 MB。
Q:QLoRA 是什么? A:LoRA 的强化版——先把原模型量化到 4-bit(再省 4 倍显存),再加 LoRA。让 65B 模型可以在 48GB 单卡上微调,2023 年的现象级工作。
#二、LoRA: Low-Rank Adaptation of Large Language Models(2021)
- 作者:Edward Hu et al.(Microsoft)
- arXiv:2106.09685
- 领域:参数高效微调(PEFT)
#1. 提出背景
GPT-3 等大模型规模达到 175B 参数,**全量微调(Full Fine-tuning)**面临三大问题:
- 显存爆炸:训练一个 175B 模型需要数百 GB 显存(优化器状态 + 梯度 + 激活)。
- 存储成本:每个下游任务都要保存一份完整模型副本。
- 部署复杂:多任务切换需要加载多个完整模型。
此前已有 Adapter、Prefix Tuning 等方法,但要么推理增加额外延迟,要么效果不稳定。
#2. 核心思想
冻结预训练权重 W₀,只训练一个低秩"增量"ΔW = BA。
基于一个观察:模型在适配下游任务时,权重更新 ΔW 具有低秩特性(intrinsic rank 很低)。
#3. 方法细节
#3.1 数学形式
对预训练权重矩阵 $W_0 \in \mathbb{R}^{d \times k}$,引入低秩分解:
$$ W = W_0 + \Delta W = W_0 + BA, \quad B \in \mathbb{R}^{d \times r}, ; A \in \mathbb{R}^{r \times k}, ; r \ll \min(d, k) $$
- 训练时:冻结 $W_0$,只更新 A、B。
- 初始化:A 用高斯初始化,B 初始化为 0,保证训练开始时 ΔW = 0,不破坏预训练效果。
- 缩放因子:$\Delta W x = \frac{\alpha}{r} BAx$,α 是超参,方便切换不同 r 时不需要重调学习率。
#3.2 应用位置
实验表明,对 Transformer 的 W_q 和 W_v(Query/Value 投影矩阵) 应用 LoRA 效果最好,性价比最高。
#3.3 关键优势
| 维度 | 全量微调 | LoRA |
|---|---|---|
| 可训练参数 | 100% | 0.01% ~ 1% |
| 显存占用 | 极高 | 大幅降低 |
| 推理延迟 | 0 | 0(推理时可合并 W = W₀ + BA) |
| 任务切换 | 加载完整模型 | 只切换小 LoRA 权重(几 MB) |
#4. 关键结论
- 在 GPT-3 175B 上,LoRA 用 可训练参数减少 10000 倍、GPU 显存减少 3 倍,效果持平或超过全量微调。
- 在 RoBERTa、DeBERTa、GPT-2 等多个基线上均验证有效。
- r=1 或 r=2 就能在多数任务上取得不错效果,证明权重更新确实低秩。
#5. 影响与延伸
- QLoRA:4-bit 量化 + LoRA,让消费级 GPU(24GB)可微调 65B 模型。
- LoRA Hub / LoRA Merge:多个 LoRA 模块组合,实现技能拼装。
- 生态影响:HuggingFace PEFT 库、Stable Diffusion 社区的"画风 LoRA"、商业模型的多租户定制。
- LoRA 已成为 2026 年大模型微调的事实标准。