Agent 论文与解读 · PDF

LoRA 大语言模型的低秩适配 2106.09685

Agent 论文与解读 PDF 资料:LoRA 大语言模型的低秩适配 2106.09685

来源文件:LoRA_大语言模型的低秩适配_2106.09685.pdf

PDF 资料

该资料为 PDF 文件,可直接在浏览器中打开。

打开 PDF

论文解读

解读来源:论文解读_新人深度理解版.md

#第 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:两种方式:

  1. 合并部署W = W₀ + BA,得到一个和原模型大小一样的新模型。
  2. 不合并部署:保留 LoRA 权重(几 MB)单独保存,推理时动态加载。适合多租户——一个底座模型 + 100 个不同 LoRA = 100 个定制模型,只多几百 MB。

Q:QLoRA 是什么? A:LoRA 的强化版——先把原模型量化到 4-bit(再省 4 倍显存),再加 LoRA。让 65B 模型可以在 48GB 单卡上微调,2023 年的现象级工作。


解读来源:论文解读_Transformer_LoRA_ReAct.md

#二、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)**面临三大问题:

  1. 显存爆炸:训练一个 175B 模型需要数百 GB 显存(优化器状态 + 梯度 + 激活)。
  2. 存储成本:每个下游任务都要保存一份完整模型副本。
  3. 部署复杂:多任务切换需要加载多个完整模型。

此前已有 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 年大模型微调的事实标准

返回 Agent 资料库