← 返回资讯
林远舟
技术编辑
已审核

一文辨析清楚LORA、Prompt Tuning、P

说起这事儿,我得先跟你讲讲我去年闹的笑话。

一文辨析清楚LORA、Prompt Tuning、P

一文辨析清楚LORA、Prompt Tuning、P


说起这事儿,我得先跟你讲讲我去年闹的笑话。

当时我手头有个任务:让一个7B的基座模型学会按特定格式输出医疗问答。我一口气翻了好几篇教程,好家伙,什么Prompt Tuning、Prefix Tuning、Adapter、LoRA……一堆英文跟咒语似的砸过来,每篇文章都说自己效果好,就是没人告诉我到底该选哪个。

我像个憨憨一样,选了Prompt Tuning。

为什么选它?因为它看起来最简单——就改输入层,加几个训练向量,多轻松?我心想这不是捡了个大便宜吗?

结果训练完一测试,我的表情瞬间凝固了:模型连“阿莫西林”都记不住,输出格式更是跑偏到没法看。你能想象吗?一个医疗问答模型,输出的药名都是错别字!

后来换了LoRA,同样数据,两小时训练,效果直接翻身。药名正确率从60%飙到85%,输出格式也整整齐齐。

当时我蹲在电脑前,又开心又懊恼:开心的是任务终于成功了,懊恼的是为什么一开始不搞清楚就瞎选?

后来我明白了——微调方法根本不存在“最好的”,只有“最合适你这摊事”的。

今天,我就把自己踩坑的经验全倒出来,把这几兄弟挨个给你盘清楚。


第一节:那些“软提示”兄弟们,到底差在哪?

先聊聊Prompt Tuning。

这东西听起来挺高端,但其实干的事儿特别朴素:整个大模型冻住不动,只在输入最前面加一串可训练的虚拟token。就像你给一个人戴副眼镜,不换他的脑子,只让他看东西的方式变一丁点。

参数少得可怜——不到原模型的0.01%,资源消耗低得离谱。听起来很香对吧?

但你猜怎么着?它有致命短板。

模型越大,效果越好。 当你在200B以上的巨型模型上用Prompt Tuning,它随便点拨一下,模型自己就能悟。但如果你用的是10B以下的中小模型,它就像一个对着半聋的人小声说话——根本听不清楚。

为什么?因为小模型的语义容量有限,光改输入层这点扰动,带不动整个模型。用个比喻来说:大模型像一个已经学通所有知识的教授,你只需要在黑板上写个“请检查”它就明白了;小模型就像一个半懂不懂的学生,你就算写了“请仔细检查”,它还是可能犯低级错误。

P-Tuning呢?

这家伙不满足于只在输入层放软提示,它把可训练的向量插入到每一层的输入里。v1版本只在embedding层做文章,v2版本干脆给每个Transformer层都加上。效果比Prompt Tuning强了一大截,尤其在NLU任务(分类、阅读理解)上,甚至能接近全量微调。

我试过用P-Tuning v2做医疗问答,模型确实比Prompt Tuning记得多一些了,但关键药名还是经常掉链子。后来我统计了一下,药名正确率才60%出头。那种感觉就像:花了力气,但总差那么一口气。

再说Prefix Tuning。

它和P-Tuning思路有点像,但做法完全不一样。它不在输入层改,而是在每一层Transformer的Key和Value矩阵前面拼接可训练向量。相当于给模型每层都加了一个“隐式前缀”,让模型顺着这个路标走。

它在生成任务(NLG)上表现不错,比如对话、摘要、翻译。但说实话,也没成为主流。

说到这儿,你可能会问:这三兄弟后来怎么都没成主流呢?

原因挺直接的。首先,它们都需要侵入式修改模型结构——要改forward过程,部署起来特别麻烦。其次,效果受任务类型影响太大,不够通用。更关键的是,参数占比少虽然是优点,但也是致命局限——改动太小,对复杂领域知识的迁移力不足。

说白了,当你要记住一大串专业名词的时候,这点扰动就像给大象挠痒痒,人家根本没感觉。


第二节:LoRA凭什么成了默认选项?

好了,说到重点了。

LoRA,这是我这一年用得最多的方法,也是现在圈子里当之无愧的“默认选项”。

为什么它能火?不是凭空冒出来的技术,而是它真的摸透了模型的“偷懒”天性。

LoRA的核心假设特别有意思:预训练已经让模型学会了语言和知识,微调只是给它套个“行为约束”。而这个约束,天然就是低秩的。说白了,模型需要做的修正,其实特别小——就像一个巨大的棋盘上,你只需要动几颗关键的棋子就行了。

具体怎么做?

找到Transformer里的Self-Attention模块,挑出WQ和WV两个参数矩阵,给每个矩阵加上一个低秩分解A×B。A是随机初始化的r×d矩阵,B是d×r矩阵,r远小于d。训练时只更新A和B,原模型权重不动。

你可以想象一下:一个已经把所有武功都练好的高手,你只需要改变他握剑的姿势,而不是让他重新练一遍。

这里有个关键参数r。r选多少?我的经验是:7B模型配个中等难度的任务,r=8或16就够了。如果任务特别复杂,比如多轮对话格式模仿,可以上32。但r超过64以后,收益递减明显,显存占用涨得飞快。还有系数α/r的缩放问题。α越大微调力度越猛,但太大了模型容易学跑偏。我一般设α=2r,基本不会出事。

为什么LoRA要选WQ和WV这两个矩阵,不选别的?我猜是实验出来的结果:FFN层负责知识记忆,就像图书馆的藏书;Self-Attention层负责注意力检索,就像图书目录。微调更关注调整检索方式,而不是塞新书进去,所以调Self-Attention效益最高。

说到QLoRA,这玩意儿对个人开发者太友好了。

先把基座模型量化成4-bit,微调时保持量化权重不动,只训练高精度的AB矩阵。前向计算需要反量化,但反向传播只走AB,显存占用骤降。我拿单张A100 80G试过微调65B的模型——以前想都不敢想,现在竟然能跑下来,效果和全量微调差距在5%以内。

你说这香不香?

更绝的是它的“热插拔”能力。增量权重就几十MB,可以针对不同任务训练不同的LoRA适配器,推理时动态切换。就像给手机换皮肤一样,随时换一个,原系统完全不变。这在部署层面简直是完胜。

不过,LoRA也不是万能的。我踩过的坑,不吐不快:

r值选不对,训练收敛慢得像蜗牛。另外,如果基座模型本身很烂,LoRA也救不了它——我试过在一个表现很差的模型上硬上LoRA,就像给一辆快散架的车换个方向盘,怎么调都白费。还有就是训练数据质量要求高,差数据喂进去,模型该学的还是学不会。

说到这,你是不是觉得:呀,原来LoRA也有这么多讲究?

没错,没有银弹。


第三节:现实中到底怎么选?我告诉你三个场景和一个血泪教训

折腾了十来个项目后,我摸索出一套选择逻辑,不复杂,就看你的情况。

如果任务简单,模型大,资源紧。 比如你在10B+模型上分类几句文本,用Prompt Tuning就够了。参数极少,训练快得像闪电,过拟合风险低。我有个朋友试过在50B模型上做情绪分类,只训了1小时,准确率就到95%。但这种好事不常有,且行且珍惜。

如果需要内化领域知识或格式约束,模型规模中等(6B~30B)。 LoRA是首选。r设8~16,数据量1000~5000条高质量对话就见效。如果你只有单卡,比如RTX 3090 24G想训13B模型,就上QLoRA,量化到4-bit,基本能跑。我接一个医疗问答项目的时候,就是用QLoRA在单卡上训的13B模型,效果出乎意料的好。

生产环境,需要频繁切换任务或多任务部署。 老老实实LoRA,多个适配器热插拔。千万别用全量微调——不是技术问题,是维护成本受不了。你想想,每换一个领域就得存一个大模型,几十GB的占用,十个业务线就是十份,硬盘炸了都不知道怎么炸的。我见过一个团队给十个业务线做微调,全量模型存了十份,最后硬盘爆了,所有模型同时崩。那场面,想想就头大。

更重要的一条原则:不要神化任何方法。 我见过有人吹“LoRA永远比Adapter好”,说得铁板钉钉。结果呢?在某些序列标注任务上,Adapter的效果反而高两个点。现实就是这样,专治各种吹牛。

还有一条血泪教训:数据质量比方法重要100倍。 我用Prompt Tuning喂了3000条精心整理的数据,效果超过LoRA喂1万条脏数据。这不是耸人听闻,是我拿时间和算力买来的教训。所以,别一上来就想骚操作。先把数据梳理干净,再去纠结用什么方法。你会发现,数据清了,很多问题自然就解决了。


结尾:我的判断和两个预测

说几句大实话吧。

现在微调圈有个风气挺要命的:很多人把LoRA当万能药,开口闭口“dare”“lora scaling”,但连α和r的关系都说不清。这让我想起一句话:手里有锤子,看什么都像钉子。工具永远是工具,重点是你想解决什么问题。别学了一堆术语,却连自己的需求都拎不清。

我的第一个预测: 未来两年,以LoRA和QLoRA为代表的低秩分解方法,仍会是微调主流。不是因为它们最牛,而是因为生态成熟、部署友好。厂商和社区都在往这个方向堆工具,新模型一发布,LoRA兼容基本是默认配置。就像当年智能手机的充电口,不是Type-C最有技术含量,是大家都用,就成了标准。

第二个预测: RAG会大大降低微调门槛。很多私域知识场景,靠检索增强就能解决,根本用不着微调。微调真正不可替代的是“行为约束”和“交互格式”——比如让模型学会“回答问题前先一步步思考(CoT)”,或者“每次回复都带引用来源”。这才是微调的真正战场。至于知识更新?让RAG去做,更轻更快。

最后,给新手一句话:

别纠结字母。别浪费时间把Prompt Tuning、Prefix Tuning、P-Tuning、Adapter都跑一遍。找到你那个场景最无脑的选择——大多数情况下就是LoRA——先跑通一个完整的“数据-训练-评估”循环,后面再慢慢调。

做比想重要。

模型不等人,但最好的开始,就是现在。

426
8533 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月21日 12:39

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

产品经理阿杰 6天前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 1周前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 1周前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)