40 分钟
大模型内核:从经典机器学习到对齐与前沿

参数高效微调:LoRA、QLoRA 与 Adapter 家族

讲清为什么不必每次都更新全部参数,重点拆解 LoRA 的低秩分解原理与它为何用极小训练成本逼近全参效果,比较 QLoRA、Adapter、Prefix/Prompt Tuning 的适用场景与取舍

  • 理解「冻结基座、只训练少量额外参数」的核心思想
  • 看懂 LoRA 的低秩分解 W′=W+BA 与秩 r 的含义
  • 说清 LoRA 省显存、可插拔切换的工程优势
  • 区分 LoRA/QLoRA/Adapter/Prefix Tuning 的适用场景

能不能不动庞大的基座

全参微调要为每个参数保存梯度和优化器状态,成本随模型规模水涨船高,而且每适配一个任务就存一整套模型副本,极不划算。参数高效微调(PEFT)的共同思想是:冻结预训练权重,只引入并训练极少量额外参数,让这些「小补丁」承载任务差异。

LoRA:给权重加一条低秩「旁路」

LoRA(低秩适应)假设:模型适配新任务所需的权重变化是低秩的——也就是说,巨大的权重矩阵 W 只需要在一个低维方向上调整。它不直接改 W,而是并行加一条小旁路:先用一个「降维」矩阵 A 把特征压到秩 r,再用「升维」矩阵 B 还原回去,输出为 W′x = Wx + BAx。训练时 W 冻结,只训很小的 A 和 B。

LoRA:冻结主干 + 训练低秩增量

输入 x

冻结的原权重 W(不训练)

保留基座全部能力

低秩旁路 B·A

A 降到秩 r、B 升回;只训练 A、B,参数量极小

两路相加得到适配后输出

秩 r 远小于原矩阵维度,因此 A、B 参数量只是 W 的零头,训练显存和时间大幅下降,且多个任务可以共用同一个基座、各自挂不同的小 LoRA 权重,随时热插拔切换。推理时还可以把 BA 合并回 W,不增加额外计算。

ℹ️秩 r 怎么理解

r 是给「任务调整」预留的维度容量。r 太小,能学的调整有限;r 太大,参数变多、也更易过拟合。实践中从较小的秩开始试,按效果调整,是典型的容量—成本权衡。

PEFT 家族对比

常见参数高效方法

LoRA

旁路低秩矩阵,效果稳、最通用,可合并回主干,当前事实主流

QLoRA

把基座量化到 4bit 冻结,再训 LoRA,进一步压显存,单卡可微调较大模型

Adapter

在层间插入小型瓶颈模块,思路更早,会增加一点推理路径

Prefix/Prompt Tuning

只训练一小段可学习前缀向量,参数最省,适合风格/分类类轻任务

全参微调 vs LoRA
全参微调

更新全部参数,效果上限高

显存/存储成本高,每任务一份全量

适合有充足算力、追求极致

LoRA / QLoRA

冻结基座、只训少量参数

省显存、多任务可插拔、可合并

适合绝大多数领域/任务适配与个人实验

🐍工程上为什么 LoRA 赢麻了

LoRA 在「效果接近全参」和「成本极低」之间取得了最佳平衡,再叠加可插拔特性,使得「一个基座 + 一堆任务小补丁」成为标准工作流:社区分享的也往往是几十到几百 MB 的 LoRA 权重,而非整套模型。理解低秩假设,就抓住了这一整类方法的本质。

选择题

LoRA 能大幅降低微调成本的根本原因是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。