图 1:本文封面,四条主流路线的机制速览。
上一篇真题解析讲了 LoRA 内部「B 矩阵为什么初始化为全零」这一个机制细节,本篇换个视角:把镜头拉远到整个参数高效微调(PEFT)家族。面试里被问「你知道哪些 PEFT 方法、怎么选」时,零散背名字没用,面试官想听的是一张选型坐标系:每条路线往模型里插了什么、代价是什么、什么场景该选它。先说明,本文为知识延伸文章,机制描述以各方法原论文为准。
四条路线,四种「动手术」的位置。
Adapter(适配器)路线源自 2019 年的 Adapter 论文:在 Transformer 每层的前馈子层旁插入一个「先降维再升维」的小模块,原模型全部冻结,只训练这些新插入的模块。思路直白、模块化干净,代价是推理时前向通路变长,每一层都多一跳,延迟实打实增加。
Prefix-tuning 来自 2021 年的论文:不动任何层结构,而是在每一层的注意力里,给 Key 和 Value 序列前面拼一段可学习的连续向量(前缀),让后续 token 注意到这些「虚拟 token」上。原模型参数一个不动,任务知识全压在前缀里。
Prompt-tuning 同样发表于 2021 年,可以看作 Prefix 的极简版:只在输入嵌入层前面拼几个可学习的「软提示」向量,更深的层一概不碰。论文用 T5 系列实验给出过一个重要结论——模型规模越大,Prompt-tuning 与全量微调的差距越小,参数量超过百亿量级后基本打平。
LoRA 也是 2021 年发表:不改结构、不加序列,而是给权重矩阵学一个低秩增量 BA,训练完可以合并回原权重。它最大的工程卖点是推理零开销——合并之后模型和全量微调产物在结构上毫无区别。
一张二维坐标系把它们分开。
把所有方法放进「可训练参数量 × 对模型结构的侵入度」坐标系,落点立刻清晰。Prompt-tuning 在左下角:参数量最小(通常只有几千到几万个向量元素),只碰输入层。Prefix-tuning 往右上挪一点:每层都要注入前缀,参数量比 Prompt 大一个量级,但仍远小于全量。LoRA 在中右偏下:参数量取决于秩 r,但它不改前向结构,侵入度低。Adapter 在右上区:插入全新模块,参数量中等,且永久改变了前向通路。
选型时先问自己两个硬约束。第一,推理预算容不容得下额外开销:线上服务对延迟敏感,Adapter 的层间多跳难以隐藏,LoRA 合并后零开销、Prefix 和 Prompt 只加长序列,代价小得多。第二,能不能动模型结构:用的是闭源托管模型、只能拿到输入侧的控制权,那 Prompt 类方法是唯一入口;能改权重但不能动结构,LoRA 是默认项。
按场景对号入座。
生成类任务且显存极紧:Prefix-tuning 值得一试,它的前缀直接参与每层注意力,对生成风格的控制力强。一个底座服务几十上百个下游任务、要求切换成本极低:Prompt-tuning 或 LoRA 都合适——前者换任务只换几个软提示向量,后者换任务只换一套几十 MB 的低秩权重,都是「一个底座加 N 个插件」的形态。老架构改造、对推理延迟不敏感的离线任务:Adapter 的模块化最规整,训练稳定性和可解释性都不错。默认通用项、尤其是要上线做推理的:LoRA,这几乎是当前工程界的共识答案。
两个容易忽略的认知。
一是「参数高效」的口径陷阱:有的方法可训练参数少但反向传播仍要穿过整个主网络,显存未必省;比较方法时要分清「可训练参数量」「改变参数量」「训练显存」是三本不同的账。二是这些方法彼此正交,可以组合:Prefix 加 LoRA、Adapter 加 LoRA 都有实践,选型不是单选题而是搭积木。
图 2:二维选型坐标系与四行速查表。
把坐标系背下来,而不是背名词。
面试里这道题的高分答法:先按「插入位置」把四条路线各一句话讲清(层间插模块、每层拼前缀、输入层加软提示、权重挂低秩增量),再亮出两个选型硬约束(推理预算、能否动结构),最后按场景给结论并点一句「方法间可组合」。如果面试官追问某个方法的内部细节——比如 LoRA 的初始化——那就回到真题解析的主场了。你在项目里用的是哪条路线?选型时最看重的约束是什么?欢迎分享你的取舍。