引言
拿到一个已经很强的通用大模型,想让它更适合自己的场景,常见做法不是从头训练,而是微调。微调听起来只是一个词,实际却是几条差别很大的路线:全量微调、低秩适配、以及只调提示或少量前缀的做法。选错路线,轻则浪费算力和时间,重则把通用能力调坏,或者得到一个看似贴合、换个问法就失灵的模型。理解它们的取舍,比记住某个超参数更重要。
一、全量微调:改动最大,也最贵
全量微调会更新模型的全部参数。它能让模型在目标任务上学得最彻底,适合数据量足够、任务与通用能力差别较大、且有算力与工程能力兜底的场景。但它的代价也很直观:训练成本高,需要保存完整的优化器状态与检查点,部署时每个任务往往要维护一个完整模型副本。更隐蔽的风险是灾难性遗忘,模型在新任务上越学越专,原来擅长的通用问答、推理或多语言能力可能悄悄退化。缓解办法包括降低学习率、混入一部分通用数据、以及在验证集上同时盯住新任务与旧能力,而不是只看新任务的分数涨了多少。
二、LoRA:只动一小部分,却能改很多行为
低秩适配的思路是冻结原始模型,只训练插入到某些层里的小矩阵。这些小矩阵的秩很低,参数量远小于原模型,因此训练更快、显存占用更低,一个任务一个适配器也更容易管理与切换。实践中,LoRA 常常能在风格、格式、领域术语、任务流程上取得接近全量微调的效果,尤其适合数据量中等、目标是让模型“按我们的规矩办事”的场景。但它也有边界:如果任务要求模型掌握大量全新的事实知识,或者行为变化涉及很深的推理习惯,只动低秩部分可能不够;秩太小会欠拟合,秩太大又会失去轻量的优势。更重要的是,适配器不是万能补丁,数据质量差、标注不一致时,LoRA 同样会把错误学得很稳定。
三、提示微调与前缀方法:不动模型,只教它怎么进入角色
还有一类做法几乎不改模型权重,而是学习一段连续的提示向量,或者精心设计固定提示,让模型在不更新参数的情况下进入目标任务状态。它的成本最低、切换最快,适合快速验证想法、任务之间差异主要在格式与口径、或者根本没有权限改动模型权重的场景。缺点同样明显:表达能力有限,复杂任务、多步流程、需要稳定输出结构的场景容易不稳定;而且提示层面的调整对输入变化更敏感,换个措辞、加一段背景,结果就可能漂移。把它当成正式方案之前,先问一句:这个任务的难点到底是“不知道格式”,还是“不会做事”?前者适合提示方法,后者往往需要真正的参数更新。
四、怎么选:先看任务类型,再看数据与预算
一个实用的判断顺序是:先定义成功标准。成功是格式稳定、术语准确、流程合规,还是知识准确、推理可靠?再看数据:有没有足够多、标注一致、覆盖边界情况的样本?数据少而杂时,全量微调的风险更大,轻量路线反而更稳。接着看预算与运维:能不能接受每个任务一个大模型?切换频率高不高?需不需要同时在线服务多个任务?最后看评估:不要只在训练分布内测试,要准备换问法、换顺序、加干扰信息的测试,检查模型有没有只是背住了答案的表面形式。很多微调失败不是训练没跑完,而是评估太窄。
五、微调不是一次性的事
模型上线后,数据会变、口径会变、用户问法也会变。微调因此更像持续维护:定期收集真实失败案例,区分是知识缺失、格式问题、还是推理错误,再决定是补数据、换适配器、还是调整提示。把每次微调的版本、数据、评估结果记录下来,比反复凭感觉调参更能积累经验。通用模型给了起点,微调决定它在你的场景里到底好不好用,而好的取舍往往不是选最强的那条路线,而是选最适合约束的那一条。