想象你是一家大型咨询公司的老板,公司里每位顾问(Transformer 的每一层)都是经过多年培训的全能专家。现在客户要求公司开展一项全新的业务,传统做法是把全体员工拉回培训中心,重新学习全套课程——这就是“全量微调”,成本高得吓人,光培训费(GPU 显存)就能压垮你。而 Prefix Tuning 的做法是:给每位顾问发一张“任务备忘条”——一段只有他们看得懂的连续向量。顾问们本身一动不动,只是每次干活前先扫一眼备忘条,就知道该把注意力放在哪里。员工还是那批员工,但公司却轻松承接了全新业务。这篇文章,就是教你如何设计和使用这张“备忘条”。
对于 AI 从业者来说,Prefix Tuning 是你在显卡预算捉襟见肘时仍能微调大模型的“救命稻草”。掌握它,你就能用 1% 的训练参数撬动 70B 级大模型,让下游任务适配成本从“天价”降到“一杯咖啡”。
可视化演示
展示Prefix Tuning如何将可训练前缀向量注入Transformer注意力层,并以对数柱状图对比Full FT、LoRA与Prefix Tuning的参数效率
本节配有交互动效(进入视口后自动加载,约 3KB)。
Prefix Tuning: 前缀向量注入注意力层 可训练前缀 P_K, P_V 注入每层注意力机制 原始模型参数完全冻结,不参与梯度更新 h = softmax(Q[K_p; K]ᵀ)[V_p; V] 仅训练前缀向量即可适配下游任务
微调成本痛点
假设你的咨询公司已经拥有一批顶尖顾问(一个预训练好的大模型)。现在客户下了一单全新的业务——比如把法律文书翻译成白话文。最直接的想法,是把所有顾问送回培训中心,从零开始学习法律知识,这就是“全量微调”(Full Fine-tuning):模型每一层的每一个参数都要更新。这等于让公司里每个员工都重写自己的知识体系,培训场地、教材、工资成本全部拉满。一张消费级显卡根本塞不下,因为训练时不仅要存模型本身,还要存梯度、优化器状态和中间激活值,显存开销比推理时高出数倍。
这时我们自然会问:能不能不让员工全体回炉,只给他们发一张小纸条就完成任务?这正是参数高效微调(Parameter-Efficient Fine-Tuning,简称 PEFT)的核心思想——在保持预训练主干不变的前提下,只训练极少量的新参数来适配新任务。Prefix Tuning、LoRA、Prompt Tuning 都是这个家族里的明星成员,它们各自用不同的“小纸条”格式,把微调成本压缩到原来的百分之一甚至千分之一。
全量微调的过程,数学上可以写成对全部参数做梯度下降:
全量微调就是如此——每一步都要遍历所有员工,成本居高不下。于是,Prefix Tuning 换了个思路:员工一个都不动,每人发一张备忘条,问题就解决了。
- 模型全部参数 θ$\theta$ 代表模型里所有可训练参数,就如同公司里全体员工的知识储备。全量微调意味着每个员工都要参与培训。
- 损失函数 L$\mathcal{L}(\theta; \mathcal{D})$ 表示模型在当前参数下,对训练数据集 $\mathcal{D}$ 的预测和真实标签之间的差距。差距越大,说明公司的新业务完成质量越差。
- 梯度 ∇θL$\nabla_{\theta} \mathcal{L}$ 是对每个参数求偏导,告诉公司“每个员工应该往哪个方向改进、改多少”,相当于是全体员工各自专属的培训建议书。
- 学习率 η 与更新$\theta \leftarrow \theta - \eta \nabla_{\theta}$ 表示按建议书迈出一小步。η 越大步子越大,但太大容易一步跨进沟里(训练发散)。
Prefix核心原理
现在我们把“备忘条”的技术方案展开。咨询公司的做法是:给每位顾问发一张写满任务要点的提示卡,顾问读卡后就知道把注意力投向哪里。技术实现上,这张卡片不是用自然语言写的,而是一组“连续向量”——可以理解为员工之间通用的加密符号,每个数字代表备忘条上的一个特征维度。这组向量被放在输入序列的开头,跟着正常的输入一起进入模型。
关键的设计在于:Prefix Tuning 不是在输入层拼一次就完事,而是在模型每一层的注意力机制里都注入前缀向量。为什么要每一层都注入?因为 Transformer 每一层都在进行不同层次的语义加工,第一层的顾问关心词性,中间层关心句法,高层关心主题。只有每层都看到备忘条,整个团队才能在不同粒度上协同调整注意力方向。具体来说,每一层会额外准备一对“前缀 Key 和 Value 向量”,拼接在该层原有的 Key 和 Value 序列前方——相当于在每个部门的会议桌上都放了一份备忘条。
我们冻结了主干模型的所有预训练参数(θ₀),只让前缀向量 P_θ 参与训练。整个优化目标可以写为:
有了这个公式,Prefix Tuning 的全部秘密就在眼前:用极少量的可训练参数,撬动一个庞大的冻结大模型。训练结束后,每个任务只需要保存一份小小的前缀参数文件,原来的模型权重一行都不用改。
- 冻结的主干 f_{θ0}$f_{\theta_0}$ 表示使用预训练参数 $\theta_0$ 的底层模型,这些参数在训练中完全不更新。对应比喻中的咨询公司骨干员工,他们的能力保持不变。
- 前缀拼接 [P_θ; x]$[\mathbf{P}_{\theta}; \mathbf{x}]$ 表示在输入序列 $\mathbf{x}$ 前面拼接一段可训练的前缀向量 $\mathbf{P}_{\theta}$。这就是发给顾问的“备忘条”,内容和长度都可以调整。
- 优化目标 argminθ L$\arg\min_{\theta} \mathcal{L}$ 表示我们只找一个让损失最小的 $\theta$,也就是只调整备忘条,让公司的输出更符合客户要求。
- 参数规模约束 |θ| ≪ |θ0|$|\theta| \ll |\theta_0|$ 强调可训练参数数量远小于主干参数。备忘条只有几行字,员工的知识体系则有几千万条笔记。
与全量微调对比
拿着“备忘条方案”和“全员回炉方案”做对比,差距一目了然。首先是参数量:一个 7B 参数的模型,全量微调需要更新 70 亿个参数;Prefix Tuning 通常只训练几百到几万个参数,占比不足 1%。在显存占用上,全量微调需要为梯度、优化器状态(Adam 还要存一阶和二阶动量)预留数倍于模型大小的空间,往往要多张 A100/H100;Prefix Tuning 冻结主干后,显存主要用来做前向传播和少量前缀的梯度,单张消费级显卡就能跑起来。
效果上两者差距有多大?大量实验表明,在数据量充足的中大规模任务上,Prefix Tuning 可以达到全量微调 90% 以上的效果;在数据量较少的场景,Prefix Tuning 甚至能反超全量微调——因为全量微调参数多、容量大,小数据下极易过拟合,而 Prefix Tuning 只动少量参数,天然带了一层“正则化”保护。好比一个经验老到的顾问看一张备忘条就能举一反三,比硬背十遍教材更不容易被个别案例带偏。
多任务场景下的差异更加明显。全量微调,每接一个新任务就要重新训练并保存一份完整的模型副本——相当于为每个客户另开一家分公司,成本不可承受。Prefix Tuning 则只需为每个任务保存一份几 MB 到几十 MB 的前缀参数文件,底座模型只有一份——好比总公司的顾问团队共享,各业务线只换自己的备忘条,切换成本几乎为零。
与LoRA区别
在 PEFT 家族里,Prefix Tuning 和 LoRA 是最常被拿来对比的两种方案,它们的“备忘条”形态完全不同。沿用咨询公司的比喻:Prefix Tuning 是给顾问们发一张备忘条,让顾问在开会(注意力计算)时优先参考备忘条上的关键词;LoRA 则是给每位顾问配一个“随身小助手”——一个小型的低秩矩阵(Low-Rank Adaptation),在顾问做决策时,小助手会轻轻推一下顾问的思考方向,让决策结果偏转向新任务。
结构位置上的差别,决定了它们的工作方式不同。Prefix Tuning 修改的是注意力机制中的 Key 和 Value 序列——即在每一层计算注意力时,把前缀 K、V 拼到原有 K、V 的前面,让查询向量能“看到”备忘条内容;LoRA 修改的是权重矩阵本身——把原始的权重矩阵 W 改写成 W + BA,其中 B 和 A 是两个低秩小矩阵,训练时只更新 B 和 A。前者改变的是注意力输入的范围,后者改变的是线性变换的权重。
两种方式在实际使用中效果各有千秋。在一些需要“注入较复杂指令语义”的任务上,Prefix Tuning 的多层 KV 注入更接近“提示词引导”,理解性更强;在需要“记住大量事实知识”的任务上,LoRA 对权重空间的修正更直接。实践中两者也常被叠加使用——先发备忘条,再配小助手,双管齐下。因此选择哪一款,应该基于任务类型和硬件条件做小规模对比实验,而不是认死一条路。
在实现层面,LoRA 的前向计算可以用公式描述为注意力头的计算中权重矩阵的低秩修改:
看完这个公式你会发现,Prefix Tuning 并没有改变模型的计算规则,只是偷偷往“会议材料”里塞了几页备忘条。LoRA 则连会议流程都不动,直接换掉了会议主持人的决策习惯。两者殊途同归,都是为了以极低成本让大模型适配新任务。
- 原始注意力 head$\text{head} = \text{Attention}(Q, K, V)$ 的标准形式是模型内部的“工作会议”:查询 Q 逐个询问所有 Key,再用匹配程度给 Value 加权汇总。
- 前缀 Key 拼接 [P_k; K]$[\mathbf{P}_k; K]$ 表示在前缀向量 $\mathbf{P}_k$ 与原始 Key 序列拼接。$\mathbf{P}_k$ 是备忘条中“备查的关键词索引”。
- 前缀 Value 拼接 [P_v; V]$[\mathbf{P}_v; V]$ 表示备忘条中还携带“答案素材”,一旦某个查询与前缀 Key 匹配上,模型就能从前缀 Value 中提取对应信息。
前缀长度调优
备忘条写多长?这是 Prefix Tuning 最实际的调参问题。直觉上可能觉得“越长信息越全”,但真实情况远非如此。前缀长度(Prefix Length)是任务高度相关的超参数:在论文的实验中,表格转文本(Table-to-Text)任务需要较长的前缀(约 100 个 token)才能把表格结构和生成要求说清楚;而摘要任务用很短的 10 个 token 前缀就能获得不错效果。这说明不同任务对“备忘条”的信息密度要求完全不同。
前缀过短会欠拟合——备忘条太模糊,顾问不知道该把注意力放在哪里,任务语义没有被充分传达;前缀过长则会过拟合并带来额外开销——备忘条太长,顾问读了半天找不到重点,训练时记住了训练集的噪声,推理时还要多算一大段前缀的注意力,显著拖慢速度、增加显存。这就像给员工一份 100 页的作业指导书,大部分人只会翻到第 3 页就开始执行,剩下的 97 页既浪费时间又干扰判断。
实操中推荐的做法是做一组小规模网格搜索:固定其他超参数,分别尝试长度 10、20、50、100 等几个候选值,在验证集上对比效果和推理速度,画出“长度—效果”曲线,找到“甜点区”。此外,前缀长度还可以配合早停策略——如果训练中验证损失先降后升,很可能就是前缀过长导致的过拟合信号。从工程角度,前缀参数会随序列长度参与注意力矩阵的广播,长度直接影响推理时的 KV Cache 大小,因此在效果接近时优先选更短的方案。
实践与代码实现
理解了原理,我们来动手实现一家“咨询公司”的备忘条发放系统。下面的代码用 PyTorch 构建了一个极简的 Transformer 骨干(TinyModel),然后在它的注意力层注入前缀向量:冻结主干所有参数,只训练前缀 Key 和前缀 Value。为了让你直观看到 Prefix Tuning 的威力,我们还统计了可训练参数占比——通常不到主干参数的 1%。
先给出一段可以直接运行的完整代码,再逐行拆解它做了什么。这段代码会创建一个带单层注意力的小模型,用随机数据模拟“客户的新任务”,训练 200 步后验证模型能正常学习——而全程只有 2 组前缀矩阵在更新,主干参数一个都没动。
AI 应用场景
场景一:中小团队用消费级显卡微调本地客服模型
阶段:模型微调与适配(Fine-tuning)
解决的问题:传统全量微调 7B 模型需要多张 A100,显存占用超过 80GB,单张 24GB 消费级显卡根本无法运行。业务方希望用本地开源模型做客服意图识别,又不愿承担高昂的 GPU 云成本。
具体案例:某电商技术团队用 Prefix Tuning 微调一个 7B 对话模型,前缀长度设为 20,可训练参数约 300 万个(占比约 0.4%)。冻结主干后,实际显存占用从 60GB 降到 18GB,单张 RTX 4090 即可训练。4 小时训练后,客服意图分类准确率从 82% 提升到 91%,与全量微调相比仅低 1.2 个百分点,但训练成本下降了 95%。
场景二:多任务统一底座,一个模型服务十个业务
阶段:推理部署与多任务服务(Serving)
解决的问题:一个 NLP 平台同时承接摘要、分类、情感分析、信息抽取等多个任务。如果每个任务全量微调一个模型,需要保存 10 份完整权重(每份 14GB),磁盘和显存都难以承受,任务间切换还要重新加载模型。
具体案例:某智能写作 SaaS 平台用一个 13B 底座模型 + 每任务一个前缀向量(每份约 3MB)来服务 10 个任务。推理时只需要在内存中加载一份模型权重,按请求中的任务 ID 动态拼接对应前缀。任务切换零延迟,GPU 显存占用从“10 × 28GB“降为”1 × 28GB + 10 × 3MB”,成本降低一个数量级。
场景三:云端多租户的个性化风格适配
阶段:在线个性化服务(Personalization)
解决的问题:不同企业客户希望 AI 写作助手拥有不同的语气、术语习惯和风格约束。若为每个客户微调一个模型,成本不可控;若用提示词,又难以精确控制风格迁移的稳定性。
具体案例:一家云端写作助手公司为每个企业客户训练一个专属前缀向量(长约 30),客户 A 的备忘条强调“法律严谨、避免主观判断”,客户 B 的备忘条强调“口语化、带 emoji”。共享同一个底座模型,按租户 ID 切前缀,单一 GPU 集群就能服务数百个客户,训练每个前缀只需该客户几千条样例数据,单条成本低于 5 元。
Python 演示
import torchimport torch.nn as nnimport torch.nn.functional as F class TinyAttn(nn.Module): """单层注意力, 演示 Prefix Tuning 的前缀 KV 注入""" def __init__(self, d): super().__init__() self.d = d self.wq = nn.Linear(d, d, bias=False) self.wk = nn.Linear(d, d, bias=False) self.wv = nn.Linear(d, d, bias=False) def forward(self, x, pk, pv): q = self.wq(x) k = torch.cat([pk, self.wk(x)], dim=1) v = torch.cat([pv, self.wv(x)], dim=1) score = q @ k.transpose(-2, -1) / (self.d ** 0.5) attn = F.softmax(score, dim=-1) return attn @ v class TinyModel(nn.Module): """极简主干模型: embedding + 单层注意力 + 输出头""" def __init__(self, d=32, vocab=64): super().__init__() self.embed = nn.Embedding(vocab, d) self.attn = TinyAttn(d) self.head = nn.Linear(d, vocab) def forward(self, x, pk, pv): h = self.embed(x) h = h + self.attn(h, pk, pv) return self.head(h) class PrefixTuner(nn.Module): """Prefix Tuning 封装: 冻结主干, 只训练前缀 KV""" def __init__(self, base, prefix_len=4): super().__init__() self.base = base self.d = base.attn.d for p in base.parameters(): p.requires_grad = False self.prefix_k = nn.Parameter(torch.randn(1, prefix_len, self.d) * 0.02) self.prefix_v = nn.Parameter(torch.randn(1, prefix_len, self.d) * 0.02) def forward(self, x): return self.base(x, self.prefix_k, self.prefix_v) def count_trainable(model): return sum(p.numel() for p in model.parameters() if p.requires_grad) def main(): torch.manual_seed(42) base = TinyModel() tuner = PrefixTuner(base, prefix_len=6) base_n = sum(p.numel() for p in base.parameters()) train_n = count_trainable(tuner) print("主干参数:", base_n) print("可训练前缀参数:", train_n) print("占比: %.4f%%" % (train_n / base_n * 100)) opt = torch.optim.Adam(tuner.parameters(), lr=0.01) lossf = nn.CrossEntropyLoss() for i in range(200): x = torch.randint(0, 64, (8, 6)) y = torch.randint(0, 64, (8, 6)) logits = tuner(x) loss = lossf(logits.reshape(-1, 64), y.reshape(-1)) opt.zero_grad() loss.backward() opt.step() if i % 50 == 0: print("step", i, "loss", round(loss.item(), 4)) if __name__ == "__main__": main()
for p in base.parameters(): p.requires_grad = False冻结公司全体员工,任何训练都不会改动他们的能力。self.prefix_k = nn.Parameter(...)这是发给顾问的备忘条(前缀 Key),是唯一允许训练的新参数。torch.cat([pk, self.wk(x)], dim=1)把备忘条拼到原始 Key 序列前面,让注意力机制能看到它。tuner = PrefixTuner(base, prefix_len=6)创建微调器,声明备忘条长度为 6。opt = torch.optim.Adam(tuner.parameters(), lr=0.01)优化器只拿到前缀参数,主干参数因 requires_grad=False 而不会被更新。count_trainable(tuner)统计可训练参数数量,计算占比,直观展示 PEFT 的“参数高效”。
常见误区
误区以为 Prefix Tuning 就是把一句“请把下面文本翻译成英文”这样的自然语言提示拼到输入前面,然后微调这个提示的“语气词”。
正解前缀向量是连续可训练的数值矩阵,不是离散的词语 token。它更像是员工之间通用的“加密符号”,人类读不懂,但模型能从中提取丰富的高维语义引导。与需要人工设计的离散 Prompt 不同,前缀由梯度自动学习,能表达自然语言难以描述的细微指令方向。
为何常见:名字里带着“Prefix“(前缀),加上很多科普图把前缀画在输入最前面,容易让人把它和”更聪明的 Prompt”划等号。
误区以为 Prefix Tuning 和 Prompt Tuning 一样,只在 Embedding 层把前缀拼到输入向量前面,后面各层照常运行。
正解Prefix Tuning 的关键创新在于向 Transformer 的每一层注意力机制中都注入了前缀 Key 和 Value 向量。输入层拼接只是“表层提示”,而每层注入能让不同抽象层级的语义加工都接收到任务指令——第一层注重词形,中间层注重句法,高层注重主题,每层的备忘条都在各司其职。只在输入层做拼接的方法另有其名(Soft Prompt / Prompt Tuning),两者效果差异显著。
为何常见:大多数示意图只画了“输入前加前缀”的平面图,没有展示内部每层的 KV 拼接,导致理解停留在浅层。
误区觉得两者都是“只训练少量参数的 PEFT”,只是实现细节上的小差别,选哪个都行。
正解两者的作用位置和数学机制根本不同。Prefix Tuning 改写的是注意力计算的输入序列(KV 拼接),相当于改变“会议材料”;LoRA 改写的是线性层的权重矩阵(W + BA 低秩分解),相当于改变“决策习惯”。Prefix 通过多层 KV 注入传导任务语义,LoRA 通过对权重空间的隐式修正来适配任务。实践中甚至可以把两者叠加使用,说“一回事”就大错特错了。
为何常见:两者在论文中常被并列比较,参数占比都在 0.1%-1% 量级,看起来“差不多”。
误区觉得前缀就是“给模型提供的额外信息”,信息越多,模型越清楚该怎么做,所以前缀长度越大越好。
正解前缀过长会带来三重代价:一是过拟合——额外参数记住了训练集的噪声;二是显存与计算开销——注意力矩阵的体积随前缀长度线性增长,推理时 KV Cache 也会变大;三是优化困难——太长的前缀在训练初期更难收敛。大量实验表明,摘要任务用 10 个 token 就够,表格转文本任务可能需要 100 个,必须按任务做实验搜索。
为何常见:人的直觉是“多给点信息总没错”,忽略了机器学习里过拟合与容量匹配的基本规律。
误区认为可训练参数越少,模型能力越弱,Prefix Tuning 只是“没钱时的妥协方案”,效果一定打折扣。
正解预训练大模型本身已经具备极强的语言理解和生成能力,Prefix Tuning 做的不是“补课”,而是“引导”。在数据量充足的场景,Prefix Tuning 可以达到全量微调的 90% 以上效果;在数据量较小的场景,它甚至可能反超——因为全量微调在高维空间里优化 70 亿个参数极易过拟合,而 Prefix 相当于在极小参数空间里做约束优化,天然具备正则化效果。
为何常见:人们习惯用“参数越多能力越强”的直觉去理解微调,忽略了预训练权重本身就是一座巨大的知识金矿,需要的只是正确的采矿指南。
面试题
Q1. Prefix Tuning 主要训练以下哪类参数?
- A.模型所有参数
- B.前缀向量参数← 正确答案
- C.LayerNorm 参数
- D.输出层参数
答案:B。Prefix Tuning 冻结主干全部参数,只训练注入到各层注意力机制中的前缀向量(包括前缀 Key 和前缀 Value)。选项 A 是全量微调的做法,C 和 D 都不是 Prefix Tuning 默认的训练对象。
Q2. Prefix Tuning 通常在前缀注入到模型的什么位置?
- A.仅输入层
- B.仅输出层
- C.每层注意力← 正确答案
- D.仅嵌入层
答案:C。Prefix Tuning 的核心是在 Transformer 每一层的注意力计算中注入前缀 Key 和 Value 向量,让所有抽象层级都能接收任务指令。只在输入层或嵌入层做拼接的做法属于 Soft Prompt / Prompt Tuning,而非 Prefix Tuning。
Q3. 冻结主干参数的主要好处是什么?
- A.减少推理时间
- B.减少可训练参数← 正确答案
- C.提高模型精度
- D.加速模型收敛
答案:B。冻结主干后,梯度不需要回传到主干的每一层,优化器只需维护前缀参数的动量状态,因此可训练参数大幅减少,显存和算力需求骤降。模型精度不一定提升,推理时间也不受冻结影响。
Q4. 与全量微调相比,Prefix Tuning 更适用于下列哪种场景?
- A.拥有大量 GPU 集群
- B.需要模型掌握全新知识
- C.GPU 资源有限场景← 正确答案
- D.需要改变模型结构
答案:C。Prefix Tuning 的设计初衷就是让数据量不大、GPU 资源有限的团队也能微调大模型。若需要极大规模知识注入或彻底改变模型结构,Prefix 的容量可能不足,通常需要全量微调或继续预训练。
Q5. Prefix Tuning 与传统 Prompting 的本质区别是什么?
- A.前缀是连续可训练向量← 正确答案
- B.前缀是人工设计的文本
- C.前缀不需要训练
- D.前缀来自固定词表
答案:A。传统 Prompting 使用人工设计的离散文本,不经过训练;而 Prefix Tuning 的前缀是连续的高维向量,通过梯度下降自动学习。它不来自词表,人类也无法直接阅读,但能表达比自然语言更丰富的任务语义。
Q6. 关于前缀长度的选择,下列说法正确的是?
- A.所有任务最优长度相同
- B.前缀越长效果必然越好
- C.长度需按任务实验搜索← 正确答案
- D.前缀不能超过序列长度
答案:C。不同任务对前缀长度的敏感度差异巨大,表格转文本任务可能需要 100 个 token,摘要任务 10 个就够。必须通过网格搜索或验证集对比,找到效果与开销的平衡点。前缀过长反而过拟合。
Q7. Prefix Tuning 在每一层注入的通常是哪一对向量?
- A.查询向量 Q
- B.键值向量 KV← 正确答案
- C.位置编码 E
- D.权重矩阵 W
答案:B。Prefix Tuning 在每层注意力计算中拼接的是前缀 Key 和前缀 Value。查询 Q 保持不变,前缀 KV 提供额外的“线索-内容”对,让注意力机制能从中提取任务相关的引导信息。
Q8. 以下哪些方法属于参数高效微调(PEFT)?
- A.前缀微调方法← 正确答案
- B.低秩适配方法← 正确答案
- C.全量参数微调
- D.提示词微调方法← 正确答案
答案:ABD。PEFT 家族的共同点是冻结预训练主干、只训练少量新参数。前缀微调(Prefix Tuning)、低秩适配(LoRA)、提示词微调(Prompt Tuning)都属于 PEFT。全量微调更新所有参数,不属于 PEFT。
Q9. 关于 Prefix Tuning 和 LoRA,下列说法正确的有?
- A.两者都属于 PEFT← 正确答案
- B.Prefix 注入注意力 KV← 正确答案
- C.LoRA 分解权重矩阵← 正确答案
- D.两者不能同时使用
答案:ABC。两者都是参数高效微调方法,但作用位置不同:Prefix Tuning 在注意力输入序列中拼接 KV 前缀,LoRA 对权重矩阵做低秩分解(W + BA)。它们互不冲突,可以叠加使用,因此 D 错误。
Q10. 前缀长度设置过长,会带来哪些潜在问题?
- A.过拟合训练集← 正确答案
- B.显存占用增加← 正确答案
- C.推理计算量增大← 正确答案
- D.可训练参数减少
答案:ABC。前缀过长时,额外的参数容易记住训练集噪声导致过拟合;注意力矩阵体积随前缀长度线性增长,训练时显存和推理时的 KV Cache 都会增大;可训练参数反而会增加而非减少,因此 D 错误。实际调参应按任务验证,选择效果与开销均衡的长度。