通俗理解Lora微调
假设模型某一层有个权重矩阵 W∈R^d×k
传统微调:更新 W (超多参数)
LoRA 做两件事:
- 冻结 W(保持原样,不动)
- 只加一个低秩修正项 ΔW=AB,其中:
- A∈R^d×r
- B∈R^r×k
- r 很小(比如 4 或 8)
这样更新的参数总量只有原来的不到 1%,却能让模型在特定任务(比如粤语医学翻译)上显著提升。
就像:
你原本会开手动挡汽车,LoRA 就像装上一个“小模块”,让你能轻松开自动挡,而无需重新造一辆车。
LoRA 的核心机制:在冻结的基础权重矩阵 W 上,额外添加一个低秩更新部分 A×B 作为“适配器”。这样模型既保持了原有能力,又能快速适应新任务。
⚖️ 效果总结
表格
⚙️ 参数量对比
表格
假设 d=k=4096 ,r=8 :
- 全量微调参数:≈ 16,777,216
- LoRA 参数:≈ 65,536(减少 >99.6%)
但这两者产生的更新方向仍能覆盖大多数有效空间(因为表示学习往往局部低秩)。
为什么低秩近似可行?
经过大量预训练后的 Transformer 权重具有很强的冗余性,
模型在不同任务中的梯度变化往往落在一个低维流形上。
因此,用低秩矩阵 AB 拟合 ΔW 并不会损失太多表达能力。
可以理解为:
LoRA 把模型所有权重变化“压缩成几条主要方向”,类似 PCA 对数据的低维重建。
从优化角度:降低训练空间维度,提升效率与稳定性
全量训练时,我们在高维参数空间优化:
Wnew=Wbase+ΔW但 LoRA 把这个优化限制到一个低维子空间:
Wnew=Wbase+AB其中只有 A,B 是可训练参数。
这相当于在原始高维空间中选择了一个受约束的搜索子空间。效果:
- 大幅减少自由度 → 防止过拟合。
- 优化更平滑 → 梯度方向更稳定,收敛更快。
- 与原模型兼容 → 冻结主干参数,不破坏原分布。
在训练维度上,LoRA 的更新方向被限制在:
Span(A,B)={AxB ∣ x∈Rr×r}也就是说,我们不是在高维平面乱找,而是在一条低维“捷径”上微调。
🚀 效果直观理解
假设模型原本在一个 4096 维的权重空间里学习语言语义。
LoRA 相当于说:“你别在4096维乱动,我只给你挑8个关键方向(r=8),
你就在这8个方向上微调权重,学会这个新任务。”这让参数更少、训练更快,还保留原模型语义结构。