本文说的微调是指在通用大模型的基础上进行模型调优的过程。
核心目标:让大模型更好地适应某个具体任务或领域,提升其在该场景下的性能、准确性和可靠性。
-
通用大模型的训练过程:初始模型→预训练→预训练模型(学会了词和词之间的关系)→微调→微调模型(学会了怎么组织语言回答用户)→人类偏好调优RLHF→通用模型(学会了回答用户喜欢的答案)。
-
通用模型的3种微调方式:
-
CPT继续预训练:扩充模型的知识面,补充通用模型在特定领域的知识缺陷。
-
SFT微调训练:让模型学会如何回答用户问题,如何执行定向的任务。
-
DPO偏好调优训练:通过学习什么是好的回答&不好的回答,让模型理解人类偏好。
-
大模型微调方式
CPT继续预训练:让模型更懂某个领域
可以扩充模型的知识面,补充通用模型在特定领域的知识缺陷,比如医疗、法律、生物等。
训练数据:
-
数量要求:至少1000万token训练集
-
数据集信息:详细完整的知识点信息(无标注文本)
-
单条文字长度不能超过微调模型的上下文长度。
注意:
完成CPT后,还需要继续进行微调和人类偏好调优,才能获得可用的微调模型。
完整的流程应该是:通用大模型→CPT→SFT→(可选但推荐)人类偏好调优。
原因是CPT本身通常是无监督的,它并没有直接教导模型如何执行具体的任务或遵循特点的指令格式。
SFT微调训练:让模型完成特定任务。
让模型学会如何回答用户问题,如何执行定向的任务。
训练数据:
-
数据要求:至少1000+条数据
-
数据集信息:QA对,支持多轮对话。
微调方式:
-
全参数微调:训练后更新全部参数,需要大量的训练数据和算力消耗,成本高,有通识能力遗忘风险。
-
LoRA微调:参数高效微调中最常用的方式。不更新原始模型参数,仅外挂了个低秩矩阵(参数占比极小0.1%-1%),成本低,训练效率高。
注意:训练时增加通用的对话语料进行训练,避免基础模型能力的遗失,导致模型只会回答领域的问题(过拟合风险)。
DPO偏好训练:让模型高质量回答
通过学习什么是好的回答&不好的回答,让模型理解人类偏好。
训练数据:
-
数量要求:至少100+条人类偏好数据
-
数据集信息:问题+好的回答+不好的回答(QAA对)
DPO的训练方式比在提示词中给出负面案例的效果更好。
因为大模型在处理负面指令时,模型的注意力机制可能会导致「越不让它怎么样,反而会越怎么样」。
而DPO通过学习人类偏好,从根本上调整模型行为,使其学会生成符合要求的输出,而非仅仅规避负面案例。
微调方式对比总结
| 对比维度 | CPT继续预训练 | SFT微调训练 | DPO偏好训练 |
|---|---|---|---|
| 训练目标 | 补充领域知识 | 制定特定任务/指令 | 对齐人类偏好 |
| 监督方式 | 无监督 | 有监督(标注数据) | 有监督(偏好排序) |
| 数据形式 | 纯文本 | 指令-回答对 | 问题+正/负面回答对 |
| 典型应用 | 医疗/法律等垂直领域的知识增强 | 客服/任务型对话 | 内容安全性/回答质量优化 |
微调效果的验证指标
训练损失(Training Loss):
-
指标含义:模型在训练集上的表现。
-
指标目的:考察原题,每学习一轮数据,对比模型答案和标准答案间的差距(评估大模型的依从能力)。
-
期望效果:应该越来越小,表明模型对学过的知识掌握得越来越好。
验证损失(Validation Loss):
-
指标含义:模型在验证集上的表现。
-
指标目的:考察非原题,每学习一轮数据,对比模型答案和标准答案间的差距(评估大模型的泛化能力)。
-
期望效果:应该越来越小,表明模型理解了知识本身,对没学过的知识也能很好回答。如果训练损失持续下降而验证损失开始上升,说明出现过拟合了,需要增加训练语料的丰富程度。
验证准确率(Validation Accuracy)/其他:
-
指标含义:模型在验证集上,针对特定任务的性能指标。
-
对于分类任务,直接用准确率很直观。
-
对于生成任务(如摘要、翻译),则会使用ROUGE、BLEU等指标,
-
对于问答任务,会使用EM、F1等。
-
-
指标目的:直接反映模型是否达到你的微调目标,模型在实际任务上的表现如何。
什么时候需要微调?
在考虑微调前,需要想清楚微调的目的是什么?微调的话是否有数量足够多的、质量足够高的训练数据集?
非必要情况,建议不要做微调!
因为微调对数据集数量质量要求比较高,且微调模型会可能出现过拟合、灾难性遗忘等风险。
所以有限考虑是否有替代方案,如下:
-
提示词调优:给出约束条件和输出示例。
-
RAG:补充特定的知识(RAG所需数据集质量远不及微调)。
-
工具调用:调用成熟的工具补充模型缺失的能力,如计算能力。
哪些任务适合用微调:
-
定向任务:需要严格按照要求进行输出
要求模型无提示词约束下完成一个定向任务,比如关键词提取、问题分类等。
-
效率任务:需要快速输出结果
取代传统的NLP任务,让低参模型快速执行定向任务,加速响应,比如OCR文本格式化、高并发的意图识别、查询等。