A30

微调

点击正文段落选定收藏或划线位置;未选定时使用屏幕内第一段。

课内目录

1 微调要解决什么问题

已经学会辨认日常图像的模型,遇到细粒度花卉照片时,仍可能把外形相似的品种混在一起;能理解普通句子的文本模型,遇到技术论坛里含有缩写的求助帖时,也可能抓错主题。微调就是从已有模型的参数出发,继续用目标任务的数据训练,让模型更适合明确的输入、输出和使用环境。它继承已有表示能力,也会被新增数据改变。它不是给模型补充几条说明,更不是保证所有能力同时提高的按钮。

先把问题写成可以检验的任务。以公开的 Banking77 短文本意图分类数据为例,输入是用户的英文银行业务问句,输出是 77 个意图类别之一。句子中的动作、对象和状态很关键,例如“取现”“银行卡”“待处理”这些语义特征。可以用预训练文本编码器提取表示,再训练分类头;也可以继续调整编码器,让相近意图更容易分开。这里的“基座”指微调前的模型,而不是已经针对该任务训练完成的分类器。

图像任务也有类似结构。在公开的 Oxford-IIIT Pet 数据上,输入是宠物照片,输出可以是 37 个品种类别。毛色、耳形、脸部轮廓是可能有用的特征,沙发、草地、水印却可能成为捷径。如果训练集中的某个品种总在室内出现,模型可能记住背景,而没有学会品种差异。微调能加强任务特征,也能加强这种错误关联,因此“使用了预训练模型”并不等于免除了数据检查。

表格流失预测提供另一个对照。公开电信客户流失数据常包含入网时长、合同类型、月费、付款方式等列,目标是预测客户是否流失。逻辑回归或树模型通常是值得先做的基线;这类数据不一定需要预训练模型,更不必为了使用微调而改成文本。只有当现有表示确实有可迁移价值,例如需要处理大量客服短文本,微调才成为自然候选。首先选对任务方法,再讨论更新多少参数。

判断是否值得微调,可以先区分 3 类问题:输入缺少必要信息,应该补数据;标签定义含糊,应该修规范;模型已有相关能力但不能稳定映射到目标标签,才适合尝试微调。若同一句话被标成不同意图,增加训练轮数只会迫使模型学习矛盾。若上线问句大量使用另一种语言,而训练集没有覆盖,当前验证分数也不能回答上线表现。

微调从任务定义走向验收,而不是直接从模型走向上线
微调从任务定义走向验收,而不是直接从模型走向上线

本课围绕短文本分类建立可复现的比较,并用图像分类与流失预测说明边界。核心问题始终相同:与合理基线相比,在相同数据边界和评测规则下,目标能力是否提高,代价是什么,提升能否在未见数据上保持。只报告训练损失下降,尚未回答这些问题。

2 全参、LoRA 与适配器边界

模型参数可以理解为训练过程中调整的大量数值。全参微调允许目标范围内的原有参数一起更新,因此适应空间较大,也往往需要保存更多训练状态和模型副本。它适合任务数据较充分、计算资源允许、确实需要广泛改变表示的情形,但不是天然更准。数据很少时,更大的可调整空间也可能更快记住样本中的偶然关系。

LoRA 的基本思路是冻结选定的原有权重,在若干位置训练较小的增量,并用这些增量影响模型计算。初学时先记住“保留原参数,学习受约束的修改”即可,不必展开矩阵分解的推导。训练参数变少,通常能减少相关训练状态和任务增量的存储;但完整基座仍需参与计算,输入较长或批量较大时,内存占用仍可能很高。少量可训练参数不代表训练成本按相同比例下降。

适配器通常是在网络中加入较小的可训练模块,冻结原有部分,让新模块承担任务适应。它与 LoRA 都属于参数高效微调的常见路线,但插入位置、计算方式和部署方式并不相同。某些 LoRA 增量可以在兼容条件下合并进权重;某些适配器需要推理时保留额外模块。能否合并、合并后是否保持精度,都要依据实际模型结构检查,不能把方法名称当作部署保证。

还有更简单的起点:冻结编码器,只训练分类头。分类头负责把文本表示映射为 77 个类别,训练快,也能帮助判断预训练表示是否已经够用。如果这一方案与复杂微调结果接近,选择它可能更容易复现和维护。本课把这个经过训练的分类头方案作为可用基线,避免拿“从未训练过的随机分类头”制造夸大的提升。随机头可以做流程检查,不能作为主要业务对照。

选择方法时应在相同数据划分和指标下比较,并分别记录可训练参数、训练时长、峰值内存、推理延迟和产物大小。若只给 LoRA 更多轮数,却让全参微调提前停止,分数差异就混入了训练预算。公平比较不要求所有超参数完全相同,而要求调参预算事先规定、各方案都有合理机会,并公开最终选取规则。

这些方法的共同边界是:它们改变模型怎样利用训练信号,不负责判断标签是否正确,也不会自动隔离测试集。冻结基座还能保留原权重文件,便于切回旧版本,但带着适配器运行时仍可能损害原有能力。能卸载某个模块,与当前组合没有遗忘,是不同的事实。

3 数据配比与过拟合风险

微调开始前要先确定数据单位。短文本分类以问句为样本,但同一用户的改写、同一模板生成的近似句子可能高度相关;图像分类要留意同一宠物的连拍;流失预测则要区分客户与客户在不同月份的记录。如果相关记录跨越训练集和测试集,模型可能靠熟悉对象得分,评测却被误读成面对新对象的能力。

对于没有独立官方测试集的练习,可以先提出 70% 训练、15% 验证、15% 测试的候选划分,再检查分组和时间要求是否允许。训练集用于更新参数,验证集用于选学习率、训练轮数和分类阈值,测试集用于最终验收。已有官方划分时优先保留其评测口径。Banking77 练习保留官方测试集,再从官方训练部分按类别划出验证集;比例和随机种子写进记录,后续模型共用该划分。

配比不只是集合之间的比例,还包括训练内部各类样本出现的频率。流失客户可能远少于留存客户,始终预测“不流失”也能得到较高准确率。因此要看 precision、recall、F1 和排序指标 AUC。precision 表示预测为正的样本中有多少真的为正,recall 表示真实正例中找回了多少,F1 综合前 2 者。ROC-AUC 衡量跨阈值的排序表现;正例稀少时也可补充 PR-AUC,且必须写清 AUC 的具体含义。

多类意图分类中,宏平均 F1 对各类别等权计算,可以暴露小类别被忽视的问题;按样本数量加权的平均值则更受大类影响。若某类只有很少样本,单独报一个 F1 还不够,应同时列出支持样本数。一个小类多判对 2 条就可能大幅改变分数,这时更需要查看错误类型,而不是马上宣布方法优越。

为了照顾稀少类别,可以在训练集内调整采样或使用类别权重,但验证和测试应保留希望评估的真实分布。把测试集也改成各类一样多,会改变问题本身。重复采样必须在划分之后进行,否则同一条被复制的记录可能落入不同集合。文本改写、图像增强也应只作用于训练侧,并记录规则,避免把增强后的近似样本当作独立证据。

过拟合常表现为训练损失继续下降,验证损失上升,或验证宏平均 F1 停滞。早停可以按事先规定的验证指标选择检查点,但不能反复用测试结果决定何时停。数据越少,越应该控制训练轮数、检查重复样本,并从冻结编码器等简单方案开始。没有任何固定的训练与验证差距能自动证明过拟合;还要看标签噪声、样本量和训练验证分布是否一致。

交互把训练中领域样本比例作为可调变量,显示目标任务与通用保留集分数的可能变化。图中的曲线是教学假设,不是通用规律。领域数据占比提高,可能强化目标特征,也可能挤压其他分布的学习信号;混入通用数据有时缓解遗忘,却不能保证成功。实际比例必须用验证实验选择,并检查数据使用权限和任务兼容性。

4 动手:对比一次基座与微调效果

这次练习使用 Banking77 的公开划分。先固定数据版本、类别映射和文本预处理规则,保存训练与验证样本索引。官方训练部分按类别划出 10% 作验证,其余用于训练,官方测试集保持封存。清理时检查完全重复、规范化后的近似重复与标签冲突;如果发现跨集合重复,记录处理规则和数量,保留官方原口径与清理口径的差异说明,不能静默删掉难例。

选择一个许可允许练习、支持英文的预训练文本编码器,记录模型标识和具体修订。固定相同分词器和最大输入长度,例如 64 个 token,同时统计实际截断比例。长度限制不是句子数量;被截断的关键词可能直接影响意图判断。查看输入长度和标签分布属于训练前检查,不应通过观察测试错误去决定哪种截断规则最有利。

方案 A 冻结编码器,只训练分类头;方案 B 从同一个原始编码器出发,对选定层使用 LoRA,并训练同结构分类头。2 个方案使用相同的训练与验证索引、标签映射和最终评测脚本。比较时固定分类头初始化种子,记录数据打乱种子。不要让 B 从 A 的最佳结果继续训练却又把差异全部归因于 LoRA;如果选择继续训练,就必须把这段额外训练明确算入方法。

可以把最大训练轮数设为 5,每个 epoch 后计算验证宏平均 F1,并按该指标保存最佳检查点。学习率候选和训练预算应在实验前列出,例如每种方法各尝试 2 个合理学习率。这里不提供脱离具体编码器的“通用最优值”;训练头与更新编码器需要的学习率范围可能不同。若验证分数相同,可以预先规定选择更早的检查点,减少事后挑选空间。

固定数据边界后,基线与微调共享评测规则
固定数据边界后,基线与微调共享评测规则

训练日志至少包含每轮训练损失、验证损失、宏平均 F1 和运行时间。选好方案和检查点后,再运行测试评测。下表是用于练习阅读结果的假设值,不是本课运行得到的实测结果。宏平均 precision、recall 和 F1 分别按类别计算后再平均,因此表中的宏平均 F1 不需要等于前 2 列平均值的调和平均。

方案宏平均 precision宏平均 recall宏平均 F1
A:冻结编码器与分类头训练0.840.820.82
B:LoRA 与分类头训练0.880.860.86

正确解读是:在这组假设条件下,B 的测试宏平均 F1 比 A 高 0.04,即 4 个百分点。还不能说所有意图都改善,更不能据此预测另一种语言的效果。需要查看混淆矩阵,区分“卡支付被拒绝”和“转账被拒绝”等相似类别,列出改善与退步的具体样本。错误审阅最好在验证集上进行;测试错误用于最终报告后,该测试集就不能继续扮演完全未见的验收集。

如果资源允许,可事先约定使用 3 个随机种子,并报告均值、范围以及检查点选择方法。不能在看到结果后只挑最高的种子,也不应把很小的分差自动解释为稳定收益。最后连同依赖版本、配置、数据索引和权重修订保存实验记录,使另一个人能够重新得到同一比较流程。复现的目标包括数据边界和决策过程,而不仅是抄出一个分数。

5 效果提升与遗忘取舍

微调的目标能力可以提高,原有能力却可能退步,这通常称为灾难性遗忘。直观上,训练不断奖励当前数据需要的行为,却不再奖励其他行为,模型就可能改变原先有用的表示。它也可能只是在新的分类头上输出不同结果,因此判断遗忘之前,要明确比较对象与评测接口。输入输出任务变了,不能直接拿 2 个不兼容的分数相减。

例如短文本编码器完成领域微调后,若想检查其通用句子表示是否保持,可以提前选定合法可用的通用语义相似度验证材料,并固定表示提取与评分方法。基座与微调版本都按同一方法计算,才有可比性。若使用通用分类任务作为保留集,应明确分类头是否固定、是否另行训练。重新训练一个更强的头可能掩盖编码器退步,也可能引入新的训练差异。

评估应同时包含领域指标和保留指标。假设领域宏平均 F1 从 0.82 提高到 0.86,而固定通用任务准确率从 0.89 降到 0.80,这就是需要讨论的取舍。对于只运行独立意图分类服务的系统,这种通用退步未必直接影响用户;对于共享编码器服务,它可能使其他功能同时恶化。影响取决于部署方式,不能只根据“冻结过基座”或“用了适配器”下结论。

目标收益需要与保留能力、成本和分组结果一起观察
目标收益需要与保留能力、成本和分组结果一起观察

可尝试的缓解方法包括减少更新范围、降低学习率、提前停止,以及在许可和任务允许时混合代表性的通用训练样本。每次只改变少量因素,并同时观察目标验证集和通用保留验证集。如果给通用测试集挑选出的错误样本补训练,下一次的通用分数也会失去独立性。保留集同样需要训练、调参与最终验收的边界。

还要区分遗忘与分布变化。模型在新采集的模糊照片上变差,可能是图像质量变化;模型在完全相同的旧任务评测集上因更新而退步,才更直接支持遗忘判断。实际情况也可能叠加。保留基座、记录输入分布、在相同样本上对比输出,能帮助把原因拆开。不能把所有退步都归结为训练轮数太多。

验收时可以先定底线,再比较收益。例如领域 F1 至少提高 0.02,通用指标下降不超过 0.01,并要求关键类别 recall 不低于业务约定值。这些数值是方案示例,正式门槛应依据误判代价与样本不确定性制定。门槛在看测试结果前确定,才真正约束选择;事后移动门槛只是给结果换一种说法。

6 常见坑:评测集泄漏当作成就

泄漏是本来不该用于当前学习或选择的信息进入了流程。最直观的是把测试文本加入训练,但更常见的路径隐藏在处理步骤中:先对全部数据做重复采样再划分,近似改写分散在不同集合,用包含测试标签的信息选特征,或者反复查看测试错误后调整训练数据。模型没有直接见到测试标签,也可能因开发过程间接适应该测试集。

流失预测中的时间泄漏尤其容易理解。假设要在月底预测下个月是否流失,特征应来自预测时刻之前。客户完成退订后才生成的“销户原因”,即使和标签相关,也不能作为预测输入。若用未来账单汇总或退订后的客服记录,离线 AUC 可能异常高,上线却拿不到这些信息。每个特征都应标注可获得时间,再与预测时刻比较。

图像数据也会泄漏身份。把同一只宠物的相邻照片随机分到训练和测试,模型可能借助固定项圈与室内背景识别个体。此时较高品种准确率未必能迁移到新的宠物。若任务目标是泛化到未见个体,应按个体分组划分;若没有可靠个体标识,就应说明局限,并尽量结合相似图像检查,不能宣称已经排除该风险。

分数突然大幅提高时,先检查数据版本、样本重叠、标签映射、特征时间和评测代码,再讨论模型创新。也要检查预处理是否只在训练侧拟合:例如表格缺失值填补、标准化和特征选择,应从训练数据计算规则,再应用于验证和测试。不能先利用全部标签挑选最相关列,再声称测试数据从未参与训练。

高分出现后,沿数据、时间与选择过程定位泄漏
高分出现后,沿数据、时间与选择过程定位泄漏

若发现测试集被反复用于调参,应停止把它当作独立验收证据。保存已有结果并注明污染方式,修正流程后使用此前未参与选择的新数据,或准备后续时间窗口重新验收。新测试集不是把旧测试文件换个名字,也不是重新随机划分已被充分查看的样本。若暂时没有新数据,应如实报告验证结果和证据限制,而不是补出一个“干净”分数。

预训练模型是否见过公开评测数据,有时也无法完全确认。应记录模型与数据来源及已知重叠信息,把基座和微调的比较限定在可支持的范围。没有发现重叠,不等于证明没有重叠。可以通过独立采集、晚于训练截止时间的数据补充外部评估,但仍要审查授权、标签质量和分布覆盖。泄漏排查依赖证据链,不能靠高分或低分本身判断。

7 案例:领域微调破坏通用能力

考虑一个教学案例:团队用公开花卉图像数据微调通用图像编码器,用于区分外观接近的花卉类别。目标是提高花卉分类,同时保留编码器支持其他图像任务的能力。为避免任务接口混乱,团队先固定一个通用图像分类探针:相同预处理、相同输出头、相同保留集,在微调前后直接评测。以下数字用于解释决策,不代表某个公开模型的真实成绩。

第 1 次实验只使用花卉训练图像,全参训练较多轮。花卉验证宏平均 F1 从 0.78 上升到 0.88,团队很容易把它理解成“编码器全面升级”。但固定通用探针准确率从 0.86 降到 0.73,常见交通工具和家具的混淆增加。保留集图片、预处理和评分方法没有变化,这使得参数更新造成能力退步成为需要优先检查的解释。

团队回看每轮曲线,发现目标分数在较早阶段已接近平台,通用分数却继续下降。训练样本审阅还发现,某些花卉类别常伴随固定拍摄背景。领域指标的提高可能同时包含有用的花瓣特征和对背景的依赖。于是补做分组观察:对主体较小、背景变化大和拍摄条件不同的验证图片分别计算 recall,并人工核对容易混淆的类别。

第 2 次实验从原始基座重新开始,减少可更新层,按领域与通用验证底线选择更早的检查点,并对训练图像使用合理裁剪。假设花卉宏平均 F1 达到 0.86,通用探针准确率为 0.85。目标分数比第 1 次少 0.02,但通用退步明显缩小。若共享服务的发布要求通用准确率至少为 0.84,那么第 2 次方案满足门槛,第 1 次不满足。

这并不证明减少更新层永远有效。变化同时涉及检查点和增强策略,若要归因,还需在验证阶段逐项比较。最终报告应清楚区分“找到了可接受的组合”与“证明某个单独因素导致改善”。入门实验可以先完成可靠选择,不必把每次调参都包装成研究结论。

若最终决定把花卉模型部署为独立服务,也要保留目标任务的失败分析。通用退步可以因隔离部署而减少影响,但背景捷径仍可能伤害真实花卉图片。上线后出现手机拍摄角度、季节光照或类别频率变化,都可能造成分布偏移。把部署拆开解决的是影响范围,并没有自动解决目标模型的泛化问题。

8 把微调验收写进发布方案

一个可执行的发布方案,需要先声明模型承担的具体任务,以及不确定时如何处理。短文本分类可以输出预测标签和置信分数,但最高分不等于可靠概率。可在验证集选择拒识阈值,把低置信输入送往人工或已有规则流程;同时报告覆盖率,即有多少输入被模型自动处理。只在容易样本上获得较高 precision,却不交代被拒绝的比例,会误导使用者。

验收表应包含基线与候选的目标指标、关键类别指标、通用保留指标、延迟和资源消耗。对于不平衡流失任务,要明确正类为“流失”,写出阈值选择依据,并同时报告 precision 与 recall。对多类文本任务,要保留宏平均 F1、各类别支持数和主要混淆对。所有分数都要关联数据版本与评测脚本,否则无法判断差异来自模型还是口径。

上线前冻结模型权重、分词器或图像预处理、标签映射和阈值,作为同一个版本发布。只更换模型文件而遗漏标签顺序,可能让每个输出都指向错误名称。发布记录还应包含训练配置、基座修订、适配器依赖关系和数据处理摘要。需要基座配合的增量文件不能独立解释,回滚时也必须恢复完整组合。

发布可以从小范围流量开始,观察输入长度、类别占比、拒识率、延迟和错误反馈。输入统计变化只说明分布可能改变,不能直接证明 F1 下降;真正的质量指标需要有代表性的已标注样本。反馈标签常有延迟,还可能只覆盖投诉用户,因此监控报告应注明时间窗口、采样方式和标签覆盖率,避免把局部反馈当作总体表现。

回滚条件要提前写清,例如关键类别 recall 在足够标注样本上低于门槛,或推理延迟超过服务预算。应保留旧模型与旧预处理,验证切回路径能工作,并明确谁负责判断、谁执行恢复。发现标签定义改变时,不要只把新样本塞进下一轮训练;先确认评测与产品规则也同步更新,否则模型会在互相冲突的目标之间摇摆。

9 从微调走向对齐(A31)

本课的分类任务有相对清晰的标签,微调希望模型把输入映射到正确类别。生成式模型面对的输出空间更大:同一个问题可能有多种正确回答,准确之外还涉及是否遵循要求、是否表达不确定性、是否符合使用场景。这使“训练损失下降”与“用户更满意”之间的距离更明显,也为下一课的对齐问题提供入口。

监督微调可以用示范回答教模型按照某种格式或风格完成任务,但示范数据覆盖有限。若训练样本总是给出确定答案,模型可能连证据不足时也继续猜测;若只奖励简短,必要解释可能被压缩。因此评价生成模型需要清楚的标准和代表性的输入,不能只用回答长度、关键词命中或少量顺眼的例子宣布成功。

对齐会进一步讨论如何利用偏好或其他反馈,让模型行为更符合明确目标。本课先不展开具体优化算法,只保留一个连续性:目标必须可说明,数据边界必须清楚,评估必须独立,并持续观察能力取舍。偏好数据也可能偏、可能泄漏,还可能让模型迎合评分方式。这些问题不会因为训练信号换了名称就消失。

进入 A31 前,可以把自己的实验记录压缩成 4 个问题:希望改变哪种行为,哪些能力必须保留,用什么未见证据判断改变,以及失败后怎样恢复。若这些问题还没有答案,应先完善微调实验,而不是急着换更复杂的方法。可靠的起点,是知道分数说明了什么,也知道它尚未说明什么。

放进方案里

本次方案以 Banking77 短文本意图分类为目标,输入为英文业务问句,输出为 77 个意图标签。保留官方测试集,从官方训练部分按类别划出 10% 验证数据,并固定索引、随机种子和去重规则。跨集合重复与标签冲突需要单独记录,测试集不得参与样本改写、学习率选择或错误驱动补数。

基线为冻结编码器后训练分类头,候选为同基座、同分类头结构的 LoRA 微调。预先确定各方案的调参预算,按验证宏平均 F1 选检查点,最终报告测试宏平均 precision、recall、F1、各类支持数及关键混淆对。至少保留 1 组固定接口的通用能力评测,区分目标收益与能力遗忘;表中的教学示例分数不得作为本项目实测证据。

发布门槛在测试前确定。示例要求目标宏平均 F1 比基线提高至少 0.02,通用指标下降不超过 0.01,关键类别 recall 达到业务约定,同时满足延迟预算。门槛须结合标注量和误判代价复核;若差异落在重复实验波动范围内,报告不确定性。拒识阈值只在验证集选择,验收时同时报告自动处理覆盖率。

交付物绑定基座修订、增量权重、分类头、分词器、标签映射、阈值及评测配置。小范围发布后监控输入分布、拒识率和延迟,并从有代表性的流量抽样标注质量。若关键指标触发回滚条件,恢复完整旧版本组合。发现测试污染时暂停独立验收结论,修复流程并准备未参与选择的数据;发现分布偏移时先定位新输入与旧训练数据的差别,再决定补数或重训。

交付前用固定验证样本核对训练检查点与实际加载的 LoRA 组合,保存预测标签和分数差异。若合并增量权重,另验合并前后的输出是否在预定容差内;超出容差时不得沿用原验收结论,应排查精度转换、目标层配置和分类头加载是否一致。

10 小结:下一步对齐(A31)

微调让已有模型适应明确任务,是否成功取决于独立证据,而非更新参数的数量。先建立合理基线,守住训练、验证和测试边界,再同时衡量目标收益、遗忘与部署成本。全参、LoRA 和适配器提供不同的调整方式,无法替代数据治理与验收规则。

自测:如果验证 F1 上升而通用保留指标下降,你会怎样选检查点?如果测试错误已经被用于补训练数据,为什么不能继续把该测试分数作为独立验收?如果流失预测 AUC 很高,但输入包含退订后才出现的字段,应先修模型还是修特征时间边界?这些判断将延续到 A31:当训练目标从标签走向偏好,可靠评估仍然是基础。

同阶段相关课

AI 答疑

默认关闭。启用后,只发送本课标题、最近阅读的屏幕内正文摘录(最多 6000 字)与本次问题。

配置自己的服务