LoRA:冻结原权重,只训练一小块

2026 / 10 / 14#lora#微调#论文

要解决的问题

全参数微调一个几十亿参数的模型,除了显存吃紧,还有个更麻烦的点:每个下游任务都要存一份完整权重。十个任务就是十份,没法接受。

做法

不直接改原权重 W,而是把更新量近似成低秩分解:

W' = W + ΔW,   ΔW = B · A

其中 A 是 r × d、B 是 d × r,秩 r 远小于原始维度(常见 8、16、64)。

训练时冻结 W,只学 A 和 B。推理时可以把 B·A 加回 W,得到一个和原模型结构完全一致的权重 —— 所以不增加推理延迟。

为什么这样可行

论文的假设是:微调时权重的实际变化具有很低的"内在秩"。换句话说,适应一个新任务并不需要动用整个参数空间的自由度。这个假设在大量实验里成立得还不错,也解释了为什么 r 取很小仍然有效。

实际收益

维度 变化
可训练参数 降到千分之几量级
显存(优化器状态) 大幅下降,因为不存全量梯度/动量
多任务切换 每个任务只存一个很小的 adapter
推理延迟 合并后为零

局限

  • 秩 r 太小会容量不足,任务差异大时效果明显不如全参微调
  • 合并之后就不能再"拆开"了,需要保留 adapter 副本
  • 对某些需要改变模型行为的任务(比如新语言、新模态),低秩假设可能不够

一句话记住

LoRA 不是让训练变快,而是让"每个任务一份权重"这件事变得便宜。

本文为个人学习记录,可能存在错误或已过时,仅供参考。
← 返回笔记列表