先这样答
LoRA 的低秩分解有效的前提是一个经验观察。研究人员发现模型在特定任务上微调时,权重的更新量本身就是低秩的。这说明下游任务的本征维度很低。模型适应一个新任务,并不需要改变全量参数的每一个维度。
LoRA 顺应这个规律去设计网络结构。它用低秩分解来近似微调过程中的权重更新量。原权重矩阵的维度非常大。微调时产生的更新量记作 ΔW。LoRA 引入了两个全新且规模很小的矩阵 B 和 A。它用 B 乘 A 的计算结果来代替庞大的 ΔW。算法在这里会设定一个核心参数秩 r。r 的取值远小于原矩阵的维度。算法用两个小矩阵相乘替代大矩阵更新。这让模型微调时的可训练参数骤降。
LoRA 对这两个小矩阵做了特殊的初始化处理。矩阵 A 会采用随机初始化的方式。矩阵 B 则采用全零初始化。根据矩阵乘法规则,B 乘 A 的初始计算结果是一个零矩阵。这个零矩阵会加到原模型权重上。相加结果等于原模型权重本身。模型在微调训练起点的状态完全等价于原模型。这种设计确保了模型保留预训练的能力。
面试官会怎么追问
-
「实际业务里秩 r 一般怎么选?」 通常在 8 到 64 之间进行选择。你需要按照具体的下游任务去不断尝试。不同任务的本征维度存在差异。
-
「r 选得越大模型效果就越好吗?」 并不是越大越好。r 设置过大非常容易导致模型发生过拟合。这违背了微调时权重更新量是低秩的这个核心前提。
-
「初始化时能不能把 A 和 B 都设为随机初始化?」 不能这么做。两个矩阵如果都采用随机初始化。B 乘 A 的初始结果就不是零矩阵。模型在微调的第一步就会叠加随机噪声。这破坏了起点状态等价原模型的设计初衷。
回答的坑
回答偏离了有效性的根本原因。没有点出更新量是低秩的这个经验观察。 把矩阵 A 和矩阵 B 的初始化方式记反。这会导致无法推导出初始状态等价原模型的结论。
同系列的题