SFT (Supervised Fine-Tuning) 监督微调
什么是SFT?
SFT(Supervised Fine-Tuning) 是将预训练模型转化为实用AI助手的关键步骤。
通过有监督微调,教会模型如何使用知识,获得理解并回复用户指令的能力。
从预训练到SFT的转换
预训练阶段
模型像博览群书但不求甚解的书生,只会死板背书。- 预测下一个token
- 海量知识但无法与用户指令适配
SFT转换
通过有监督微调,教会模型如何使用知识。- 指令微调训练模型的通用指令遵循能力
指令理解
模型获得理解并回复用户指令的能力。- 能够根据用户意图提供准确、有用的回复
目标达成
成为真正实用的AI助手。- 在多种任务上表现优秀的智能助手
SFT 微调类型
1. 指令微调
训练模型理解和遵循各种用户指令示例:
- 指令:将下列文本翻译成英文:
- 输入:今天天气真好
- 输出:Today is a nice day!
2. 对话微调
通过多轮对话数据训练模型生成连贯回复示例:
用户:今天天气怎么样?
助手:北京今日多云转晴,气温 22℃
用户:那适合去长城吗?
助手:适合,建议携带外套注意防晒
应用场景:智能客服、聊天机器人、语音助手
3. 领域适配
让模型适应特定领域的专业任务示例:
- 指令:分析患者症状
- 输入:55岁男性,胸骨后疼痛3小时
- 输出:可能诊断:急性心肌梗死,建议立即检查
4. 文本分类
训练模型对文本进行准确的类别预测示例:
- 文本:这款手机续航48小时,拍照惊艳
- 标签:positive
SFT 核心原理
从CLM到指令理解的转换
SFT本质上仍是CLM任务,但通过特定格式让模型学会指令理解。- 预训练阶段:模型学会预测下一个token,具备语言理解基础
- SFT阶段:通过instruction+input+output格式,引导模型理解任务意图
- Loss计算:只对output部分计算损失,input部分用于上下文理解
多轮对话的技术实现
通过巧妙的数据构造让模型具备上下文记忆能力。- 数据格式:
... - Mask策略:只对assistant回复部分计算loss,保留对话历史
- 注意力机制:单向注意力确保不会泄露未来信息
SFT vs 传统微调
从任务特定微调到通用指令遵循能力的转变。- 传统微调:每个任务单独训练,如BERT分类、NER等
- SFT:训练通用指令遵循能力,一个模型处理多种任务
- 泛化能力:SFT模型能处理训练时未见过的新指令类型
数据质量与配比
高质量数据的特征
- 指令清晰明确:避免歧义,确保任务目标清楚
- 回复质量高:准确、有用、符合人类偏好
- 格式规范:统一的数据格式和特殊token使用
- 多样性丰富:覆盖不同领域、难度、风格的任务
数据规模与效果关系
- 单任务:500-1000样本可获得不错效果
- 通用能力:需要数B token规模的多任务数据
- 边际效应:数据量达到一定规模后收益递减
- 质量优于数量:高质量小数据集 > 低质量大数据集
最佳实践
训练策略优化
- 学习率调整:通常比预训练更小的学习率(1e-5到5e-5)
- 训练轮次:避免过拟合,通常1-3个epoch
- 梯度裁剪:防止训练不稳定,限制梯度范数
- 权重衰减:适当的正则化防止过拟合
数据构造技巧
- Prompt工程:使用清晰的指令模板
- 负样本构造:包含一些错误示例帮助模型学习边界
- 难度递进:从简单到复杂的训练样本排列
- 格式统一:保持一致的输入输出格式
评估方法
自动化评估指标
- BLEU/ROUGE:评估生成文本与参考答案的相似度
- Perplexity:衡量模型对测试数据的预测能力
- 任务特定指标:准确率、F1分数等
- BERTScore:基于语义的文本质量评估
人工评估维度
- 有用性:回答是否解决了用户问题
- 准确性:信息是否正确无误
- 相关性:回复是否切题
- 流畅性:语言表达是否自然
- 安全性:是否包含有害内容