AACP / 大模型练习
系统讲义 / 4. 微调与蒸馏

4. 微调与蒸馏

模型部署前先问清楚:要补的是变化中的事实,还是稳定的处理能力?员工制度和联系人会变化,适合从受控知识库检索;重复出现的意图分类、字段抽取、固定 JSON 输出,是可考虑微调的行为。蒸馏则以强模型为教师,让较小的学生模型学习一项明确任务。官方现行课程第 4.1 节用“新人问题理解与路由”贯穿教师标注、数据过滤、LoRA 训练和评测,而不是把小模型当成能回答所有问题的通用替代品。

先认术语:“参数”或“权重”是模型内部可调的数值,影响输入如何变成输出;“训练样本”由输入和期望输出组成;“损失”把预测与期望之间的差距变成可优化的数;“梯度”指出参数小幅变化会怎样影响损失;“超参数”是训练前选定的设置,例如学习率和批量大小。基座模型是微调前的起点;适配器是 LoRA 附加的小矩阵。理解这些词的关系,比背模型名称更有用。

4.1 先定义可判定的任务

假设员工说:“我下周三去杭州出差,顺便催一下上个月报销。”直接要求学生“理解用户意图”过于模糊;可操作的目标是输出两个意图,分别为“差旅申请”和“报销进度”,并抽取时间、地点等已出现的实体,再路由到对应流程。先定义字段、合法取值、是否允许多个意图及未知值如何表示。评测时看 JSON 能否解析、两个意图有没有漏、路由是否正确。不要把“看起来说得通”当作结构化任务已成功。

训练、验证、测试数据须按用途隔离:训练集用于更新参数;验证集用于选轮次和超参数;测试集留到最终比较。若“下周去杭州出差”进入训练集、“下周三去杭州出差”进入测试集,虽然两条文字不同,却可能是同一模板的微改写,测试分数会虚高。可按原始工单、用户或时间段分组,避免近似样本跨集合。还应覆盖含糊、口语、多意图、少见部门和缺少实体等边界情形,而非只收集标准句式。

输入输出规范也是训练目标的一部分。例如“明天帮我请假”缺少假别时,目标输出应明确标记“假别未知”,不能训练模型默认填“病假”。如果人工标注规则前后不一致,模型面对相同输入就会收到相互冲突的监督信号。应先写标注说明,对争议样本做裁决,再训练;数据质量通常比盲目扩大样本量更先影响结果。

4.2 损失、梯度和学习率的因果关系

监督微调时,输入是提问及任务说明,目标是标准输出。模型在每个生成位置给多个候选 token 一个概率;目标 token 概率越低,负对数损失越大。一个简化的单位置例子:正确 token 的预测概率从 0.2 提升到 0.8,损失从 -ln(0.2)≈1.609 降到 -ln(0.8)≈0.223。真实训练会在多个位置和样本上汇总损失;损失下降意味着更接近训练标注,不自动意味着业务正确。

梯度描述参数微小变化对损失的影响。最简单的更新写作 θ_new = θ_old − η∇L(θ_old):θ 是可训练参数,η 是学习率,负梯度方向通常能降低局部损失。学习率过大,更新一步可能跨过低谷并来回震荡;太小则可能学得慢或在有限训练预算内尚未收敛。这个“沿斜坡走”的比喻只说明方向;大模型优化器还会使用动量、缩放等机制,但诊断时仍可先从学习率和损失曲线看起。

Epoch、Batch、Iteration:一个 Epoch 表示训练集被完整使用一遍;Batch 是一次计算的一组样本;Iteration 在常见训练日志中指一次参数更新。若有 1,000 条样本,batch size 为 100,且没有梯度累积,一轮为 10 次更新,训练 3 轮为 30 次。若每 2 个 batch 才累积并更新一次,一轮则约 5 次参数更新。末尾不满一批是否保留也会影响计数,因此考试和实践都要看题干设定,不能机械套公式。

4.3 LoRA 如何减少可训练参数

全参数微调直接改动模型的大量原权重,训练和保存新版本都较贵。LoRA 的做法是冻结原矩阵 W,另训两个较小矩阵,使推理时的有效权重近似为 W + ΔW,其中 ΔW = BA。设 W 为 1000×1000,直接训练它要 100 万个元素;若低秩 r=8,可取 B 为 1000×8、A 为 8×1000,共 1.6 万个元素,约为原矩阵的 1.6%。这只是单层形状的可手算示意,不等于整模型总参数或实际显存比例。

“低秩”意味着用少数方向表达任务所需的权重变化。秩更大,表达空间可能更宽,也增加可训练参数与过拟合机会;秩过小可能表达不了任务。LoRA 仍然属于训练:它改变模型执行任务的行为,只是只更新附加参数。课程实验中用 ms-swift 做 LoRA 微调,但学习重点是识别这种参数高效方法如何运作、怎么根据验证结果选配置,而非死记某一个命令或数值。

输入 x 原权重 W冻结,不更新 低秩 A → B训练这两个矩阵 + 输出 y y = Wx + BAx
原权重保留原有能力;低秩分支学习任务改变量。图中只更新 A、B,公式省略了可能使用的缩放系数。

4.4 蒸馏:教师输出怎样变成学生能力

本课程的实操是数据合成蒸馏:准备多样化员工提问 → 调用教师模型给出结构化标注 → 校验和抽查 → 把合格的输入输出样本用于学生监督微调 → 在独立测试集比较学生、原始基座和教师。因为只读到教师 API 的最终输出、看不到它内部概率分布,这条路线常称“黑盒蒸馏”。若能取得教师每个 token 的分布,还可以做分布匹配的“白盒”知识蒸馏;多步任务也可能学习教师推理过程。但从 API 得到一句答案,不等于已经获得教师全部能力。

教师数据质量决定学生学到什么。规则层应检查 JSON 能解析、字段齐全、值在允许范围内、日期地点与原句不矛盾;统计层应看各意图、部门、口语形式与多意图样本覆盖;人工层抽查含糊、异常和高风险样本。一个教师把“报销催办”错标为“新报销申请”,若这类错标反复出现,学生会稳定复制错误。只过滤语法错误不能解决语义错标。还应确认教师服务条款允许把其输出用于训练目标模型,不能默认任何 API 都可如此使用。

微调与蒸馏的关系:微调描述参数如何适配任务;蒸馏描述训练信号从教师传给学生。二者可以同时发生:使用教师标注数据对小模型做 LoRA 微调。官方课程为便于对比,把人工标注微调和教师数据蒸馏按数据来源区分;实际项目中也可以混合人工修正与教师候选,关键是记录来源并验证标签。小模型学习的是任务范围内的模式,并不会自动获得教师未在训练样本中体现的复杂推理能力。

蒸馏的收益要把一次性训练成本与长期推理成本一起算。若每天只处理几十条复杂请求,为少量调用训练、部署和维护小模型未必划算;若每天处理大量格式固定、风险可控的路由请求,小模型可能节省长期成本。还要算入教师标注、人工复核、硬件、监控和模型重新训练的费用。课程给出的具体价格只是其案例条件,实际价格会变化,因此这里以决策方法为主,不把价格写成固定考试事实。

4.5 看训练曲线,也看业务指标

训练损失和验证损失一起下降,通常说明模型在学习可迁移模式;两者都长期不降,先查数据格式、学习率、梯度和可训练参数;训练损失持续下降而验证损失先降后升,是典型过拟合信号,模型可能记住训练表达却难以处理新表达。可以回到验证损失最低的检查点、减少轮次、增加多样样本或检查标注噪声。验证损失单次波动不应被当成定论,要看持续趋势及任务指标。

结构化路由任务至少有三层评测:格式看输出是否为合法 JSON 且字段齐全;内容看意图和实体是否正确,可按标签计算精确率、召回率与 F1;业务看请求是否分发到正确处理流程。一个模型 JSON 合规率很高,却把“请假”路由到 IT,仍不能上线。多意图识别还要同时看漏报和误报:若真实有“差旅申请、报销进度”两个意图,预测只给“差旅申请”,精确率可为 1、召回率为 1/2,F1 为 2×1×0.5/(1+0.5)=2/3。这个手算展示为何不能只看格式或单一准确率。

过拟合并不是“训练损失数值低”本身。若训练与验证来自相同模板,两个损失都低也可能是数据泄漏;若验证数据有故意加入的陌生流程,验证损失高也可能反映分布变化而非训练失败。要配合错误样本逐条检查:是漏了第二个意图、把实体值猜错、还是 JSON 缺字段?错误类型不同,处理方向分别可能是补多意图样本、强化不猜测规则、改善格式约束。把单一总分拆成可解释的故障类别,才能决定下一轮训练是否值得。

4.6 一个完整的选型与交付例子

目标:新人答疑入口既要判断员工问题走“直接回答、知识库查询、人工处理”哪条路,也要回答最新制度。先记录真实提问及人工确认的路由结果,形成独立测试集;运行未经训练的小模型和教师模型,测 JSON 合规率、意图 F1、路由正确率与延迟成本,得到基线。

训练:针对频繁且稳定的“识别意图与抽取实体”任务,教师生成候选标注,按 JSON schema 过滤并抽查语义,再以 LoRA 训练学生。每轮记录训练和验证损失,选验证与任务指标兼顾的检查点。对“公司病假政策是什么”这类事实问题,路由到有权限和版本控制的 RAG;学生只负责识别与转交,不把制度细节背进参数。

上线判断:用未参与训练的真实问题比较教师、学生与基座,特别检查多意图、含糊表述和拒答路线。若学生的路由错误造成业务风险,继续使用教师或人工兜底;若任务质量达标,再结合请求量、推理资源、监控与更新成本决定是否部署。不能只凭训练 loss 下降宣布成功。

4.7 诊断表与单选、多选判断

现象可能原因优先处理
训练和验证损失都剧烈震荡学习率偏高、数据或梯度异常核对样本并降低学习率,观察趋势
训练损失降,验证损失持续升过拟合或训练集与验证集分布差异选早期检查点,检查切分与数据覆盖
JSON 正确但意图经常错标注错误、类别混淆、边界样本不足审查混淆类别和教师标签,补样本
最新政策答错知识更新未进入检索链路检查知识库、权限与版本;勿只加训练轮次
学生在复杂新任务上明显差于教师任务超出学生容量或训练覆盖限定适用范围,保留教师或人工兜底

单选题:先分清“事实更新”与“行为学习”。频繁变化且要引用依据,优先检索;固定结构抽取且高频重复,才比较提示约束、微调和蒸馏。出现“只有教师 API”,选可用输出数据的黑盒路线;出现“训练损失下降、验证损失上升”,优先考虑过拟合。多选题:逐项核对选项作用的条件。数据过滤、独立测试和任务指标都可提高蒸馏可靠性;“蒸馏无需训练”“LoRA 更新全部原始权重”“学生必然达到教师所有能力”均与机制不符。若题目给出训练样本数和 batch,还要留意梯度累积与末批处理条件。

迁移到新任务:若题目把“员工意图路由”换成“发票字段提取”或“客服邮件分类”,依次问:① 目标输出能否定义并验收;② 合格训练标签从哪里来、是否覆盖真实表达;③ 现有提示词和规则能否已解决;④ 若训练,更新哪些参数、用什么独立数据判断泛化;⑤ 若用教师,能否取得合法且准确的监督数据。发票上的新税率属于需更新的外部事实,字段抽取格式属于可训练的稳定行为;同一业务系统可同时使用检索和微调,关键是让各方法解决它能影响的环节。

官方依据:现行课程目录和考纲;4.1 蒸馏、数据过滤、LoRA 与评测。