LoRA

是什么?

LoRA(Low-Rank Adaptation)是一种用于微调大模型(LLM / Diffusion / Transformer)的技术。

冻结原始模型参数,只训练一个低秩矩阵来表示权重更新。

这样可以让权重变化 ΔW 不需要完整矩阵,在极少训练参数的情况下,让模型学到新任务能力。

image-20260314122518326

image-20260314225552483

为什么需要?

lora的设计亮点

参数少,速度快,模块化

模块化的本质:

LoRA 将“任务能力”封装成一个 独立的参数模块,可以在 不改变原模型 的情况下加载或卸载。

在代码层面 LoRA 是一个 外挂模块

1
2
3
4
5
6
7
Base Model

├── W (冻结权重)

└── LoRA Module
├── A
└── B

训练时:

1
只训练 LoRA Module

推理时:

1
Base Model + LoRA

image-20260314195532468

可以随时加载/卸载能力

例如一个基础模型:

1
LLaMA

不同能力可以变成不同 LoRA:

1
2
3
4
5
6
base_model

├── finance_lora
├── medical_lora
├── code_lora
└── chinese_lora

使用时只需要:

1
load_lora("finance")

模型就具备 金融知识能力

不需要重新训练模型。


LoRA解决的核心问题

大模型微调成本太高:

方法 训练参数
Full Fine-tuning 100%
Adapter 3%
LoRA 0.1% ~ 1%

因此 LoRA 成为 当前最主流的 LLM 微调方法之一

为什么权重变化可以用低秩矩阵表示

LoRA: Low-Rank Adaptation of Large Language Models

因为只需要调整一小部分行为。

在大模型微调过程中,任务带来的权重变化通常只发生在少数方向上,因此权重更新矩阵 ΔW\Delta WΔW 往往具有 低秩结构(Low-Rank Structure)

换句话说:

任务变化 ≈ 高维空间中的低维子空间变换


为什么增量权重 ΔW 可以进行低秩分解

image-20260314225806446

image-20260314230719254

为什么 LoRA 插入在线性层而不是别的位置

LoRA 插入在线性层,是因为 Transformer 的主要参数和计算都集中在矩阵乘法结构中,而低秩更新正好可以直接作用在权重矩阵上。

结论

LoRA 主要插入在 Transformer 的线性变换层(Linear Layer),例如:

  • Attention 的 Q、K、V、O projection
  • MLP 的 Linear 层

原因:

Transformer 中绝大多数参数都集中在线性层,而这些层的计算形式正好适合低秩矩阵分解。

image-20260314215126566

因此:

1
Transformer ≈ Linear Layer + Nonlinear Activation

为什么可以拆解为A和B

image-20260314225031634

为什么 LoRA 初始化时 B = 0 而不是随机?

B=0的目的:训练开始时模型完全等同于原始模型

image-20260314225247280

alpha scaling 的作用是什么

在 LoRA 中,alpha(α\alphaα)用于控制 LoRA 更新对原模型权重的影响强度

换句话说:

alpha scaling 用于调节低秩更新 ΔW\Delta WΔW 的尺度,防止更新过大或过小。

alpha 控制 LoRA 的影响力度


LoRA如何更新参数

image-20260314230934441

LoRA可以用在Transformer的哪些层面

  1. 注意力层(self-Attention)
  2. 前馈层(FFN)

通常插入到 Transformer 的线性层

LoRA常见超参数

参数 含义
rank (r) 低秩维度
alpha scaling 系数
dropout 防止过拟合
target modules 插入层

常见配置:

1
2
r = 8
alpha = 16

LoRA 改进版本

:(加速训练)

DoRA : (提升表达力)

rsLoRA:(动态秩调整)

PiSSA :(优化初始化)

如何选择

训练资源有限:

  1. LoRA+
  2. rsLoRA

追求高性能:

  1. DoRA
  2. PiSSA