【LoRA微调】采用Lora微调时,假设设置的rank值为8,那么在微调时只会调整秩在8以下的矩阵还是只会调整秩等于8的矩阵
在采用 LoRA(Low-Rank Adaptation) 微调时,当设置 rank = r
(例如 r=8
),实际调整的是两个新引入的小矩阵(维度由 r
决定),而不是直接调整原始权重矩阵中“秩≤8”或“秩=8”的子集。具体原理如下:
LoRA 的核心机制
-
冻结原始大模型权重
设原始大模型的某一层权重矩阵为W ∈ R^{d×k}
(例如d=4096, k=4096
)。
在微调过程中,W
被冻结(不更新)。 -
引入低秩分解矩阵
LoRA 会添加两个可训练的小矩阵:A ∈ R^{d×r}
(例如d=4096, r=8
)B ∈ R^{r×k}
(例如r=8, k=4096
)
这两个矩阵的乘积BA
是一个低秩矩阵(秩≤r),用于近似权重更新量ΔW
。
-
前向传播公式
修改后的前向计算变为:h = Wx + (BA)x
其中:
Wx
:原始冻结权重的输出(固定不变)(BA)x
:LoRA 引入的增量(可训练部分)
关于 rank=r
的调整范围
- 调整的矩阵:
只优化新增的A
和B
矩阵(维度由r
决定),与原始权重W
的秩无关。 - 秩的意义:
r
是 LoRA 的 超参数,控制增量矩阵ΔW = BA
的 最大秩(即BA
的秩不超过r
)。
例如r=8
时,ΔW
的秩 ≤8,但实际秩可能更低(取决于训练结果)。
参数更新对比
方法 | 可训练参数数量(示例 d=k=4096 ) | 调整对象 |
---|---|---|
全参数微调 | 4096×4096 ≈ 16.78M | 整个 W 矩阵 |
LoRA (r=8) | (4096×8) + (8×4096) = 65,536 | 仅 A 和 B 矩阵 |
更新量仅为全参数微调的 0.39%(65,536 / 16,780,000),大幅节省显存和计算量。
常见误区澄清
-
❌ 错误理解:
“LoRA 只调整原始权重W
中秩≤8的子空间。”
✅ 正确解释:
LoRA 完全不调整W
,而是通过低秩矩阵A
和B
间接构造增量ΔW
。 -
❌ 错误理解:
“r=8
表示强制ΔW
的秩等于8。”
✅ 正确解释:
r=8
是ΔW
的 最大可能秩(实际秩可能≤8,取决于训练收敛情况)。
为什么低秩更新有效?
根据 内在维度(Intrinsic Dimension) 理论:
大模型在适应下游任务时,权重更新量
ΔW
往往存在于一个低秩子空间中。
即使r
很小(如8、16),也能有效捕捉任务相关的核心特征。
总结
- 调整对象:仅新增的
A
和B
矩阵(维度由r
和原始权重决定)。 - 秩的作用:
r
控制增量矩阵ΔW = BA
的最大秩,而非筛选原始权重的子集。 - 优势:显著降低训练开销,同时保持微调效果接近全参数微调。
通过 LoRA,大模型微调从“调整数十亿参数”简化为“优化几万个小矩阵”,是资源敏感场景的首选方案。