通俗理解Lora微调

假设模型某一层有个权重矩阵 W∈R^d×k 
传统微调:更新 (超多参数)
LoRA 做两件事:

  1. 冻结 W(保持原样,不动)
  2. 只加一个低秩修正项 ΔW=AB,其中:
    • A∈R^d×r 
    • B∈R^r×k 
    • r 很小(比如 4 或 8)

这样更新的参数总量只有原来的不到 1%,却能让模型在特定任务(比如粤语医学翻译)上显著提升。

就像:

你原本会开手动挡汽车,LoRA 就像装上一个“小模块”,让你能轻松开自动挡,而无需重新造一辆车。

LoRA 的核心机制:在冻结的基础权重矩阵 W 上,额外添加一个低秩更新部分 A×B 作为“适配器”。这样模型既保持了原有能力,又能快速适应新任务。


⚖️ 效果总结

表格
 
特点LoRA
训练参数 < 1%
显存/算力 大幅降低
可复用性 多个 task LoRA 可快速切换
缺点 对极端任务(分布差异大)效果不如全微调

⚙️ 参数量对比

表格
 
项目参数量
全量更新 W d×k 
LoRA 更新 A,B d×r+r×k

假设 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 是可训练参数。
这相当于在原始高维空间中选择了一个受约束的搜索子空间。

效果:

  1. 大幅减少自由度 → 防止过拟合。
  2. 优化更平滑 → 梯度方向更稳定,收敛更快。
  3. 与原模型兼容 → 冻结主干参数,不破坏原分布。

在训练维度上,LoRA 的更新方向被限制在:

Span(A,B)={AxB ∣ x∈Rr×r}

也就是说,我们不是在高维平面乱找,而是在一条低维“捷径”上微调。


🚀 效果直观理解

假设模型原本在一个 4096 维的权重空间里学习语言语义。
LoRA 相当于说:

“你别在4096维乱动,我只给你挑8个关键方向(r=8),
你就在这8个方向上微调权重,学会这个新任务。”

这让参数更少、训练更快,还保留原模型语义结构。

 

posted @ 2025-10-20 17:08  bonelee  阅读(11)  评论(0)    收藏  举报