SFT 数据
SFT 数据 Supervised Fine-Tuning监督微调数据是大模型在经过预训练Pre-train之后用来学习怎么按要求好好回答问题的那份标注数据。一、SFT 是什么整体流程视角一个大模型通常经历三步预训练Pre-training​任务Next Token Prediction数据海量无标注文本网页、书籍、代码结果模型懂语言/知识但不会听话、不会格式化回答✅ SFTSupervised Fine-Tuning​任务给定指令, 回答对做交叉熵损失微调​数据人工或高质量 AI 生成的instruction–output 对​结果模型学会遵循指令、保持安全、控制格式RLHF / DPO可选​进一步对齐人类偏好SFT 数据就是第 2 步用的那批输入, 理想输出样本二、SFT 数据长什么样通常以 JSON / JSONL 形式存在{ instruction: 将以下中文句子翻译成英文, input: 今天天气很好。, output: The weather is very nice today. }或对话格式Chat SFT{ conversations: [ {role: user, content: 解释什么是梯度下降}, {role: assistant, content: 梯度下降是一种通过沿损失函数负梯度方向更新参数来最小化损失的优化算法……} ] }✅ 特点输入指令 / 问题 / 多轮对话输出期望的标准回答有结构、有正确性、有时含 CoT思维链三、SFT 数据从哪来来源说明人工标注​众包写指令 理想回答ChatGPT / Claude 早期做法Teacher 模型生成​用 GPT-4 / LLaMA-70B 自动生成 → 人工校验Alpaca / Vicuna / WizardLM已有任务转化​把 NLP 任务转成自然语言指令SUMmarization / NLI → SFT蒸馏产物​前面说的Response-based Distillation本质上就是构造 SFT 数据 所以之前说的用大模型生成数据再微调小模型 一种蒸馏指的就是用 Teacher 生成 SFT 数据 → Student 做 SFT四、SFT 数据 vs 预训练数据维度预训练数据SFT 数据形式裸文本续写指令 理想回答规模TB 级万百万条目的学语言/知识**学对齐、格式、服从指令标注无有隐式或显式五、小结SFT 数据Supervised Fine-Tuning Data是指令–标准回答配对数据用来把预训练好的基座模型微调成会听指令、会对话、符合人类偏好的模型​*现代小模型通过用大模型生成高质量 SFT 数据再微调来完成知识/能力蒸馏。好的接着之前的内容继续编号 六、SFT vs RLHF/DPO 的本质区别三者处于大模型对齐流水线不同阶段目标和方法都不同维度SFT监督微调Supervised Fine-Tuning​RLHF人类反馈强化学习Reinforcement Learning from Human Feedback​DPO直接偏好优化Direct Preference Optimization​作用阶段​对齐第一步第二步细化偏好RLHF 的直接偏好替代方案训练信号​明确正确回答正例人类对 A/B 回答的偏好排序​偏好对 (chosen / rejected)损失形式​损失本质负对数似然交叉熵模型在给定输入 x 的情况下计算“标准回答 y⁺”出现的概率然后取负号的对数。目标是让这个概率越大越好也就是损失越小越好。一句话记忆“照着标准答案一个字一个字地模仿。”损失本质PPO 策略梯度 KL 散度惩罚用 PPO 算法训练模型先看 Reward Model 给的打分优势值 A计算新旧策略输出该回答的概率比值 r用 clip 操作防止更新幅度过大再加一项 KL 散度防止模型偏离原始 SFT 模型太远一句话记忆“用 Reward Model 打分小幅试错慢慢往高分方向挪但不能乱了本性。”损失本质Bradley–Terry 偏好损失对数几率差不再训练 Reward Model而是直接比较当前模型生成“被选回答”的概率 vs “被拒回答”的概率同时拿一个参考模型通常是 SFT 模型做基准希望当前模型相对于参考模型更大幅度地提高被选回答的概率压低被拒回答的概率最后套一个 sigmoid 负号对数变成分类损失一句话记忆“不用打分员直接告诉模型这个回答比那个好给我拉开差距。”告诉模型​这样答 ✅这个比那个好 ↗️ / ↘️选这个 ✅不选那个 ❌是否需要 RM​❌ 不需要✅ 需训 Reward Model❌ 不需要稳定性/成本​简单、便宜复杂、不稳定、贵较稳定、便宜典型效果​学会遵循指令、基本安全更礼貌、有用、拒绝不当请求近似 RLHF 效果工程更简单 本质差异一句话SFT 教模型正确答案长什么样模仿学习RLHF/DPO 教模型相对哪个更好偏好优化实践中Base Model → SFT → DPO/RLHF → Instruct/Chat Model七、好 SFT 数据的质量标准高质量 SFT 数据直接决定小模型蒸馏/对齐上限。✅ 1️⃣ 多样性Diversity覆盖不同任务类型问答、摘要、翻译、代码、数学、创作…语言/风格正式 / 口语 / 多轮对话难度层级简单事实 → 多步推理➡ 防止过拟合某几类句式或领域。✅ 2️⃣ 适当难度Difficulty Completeness太简单是/否→ 学不到推理太难 / 错误 → 误导模型优选含Chain-of-ThoughtCoT​ 的复杂样本尤其数学/逻辑✅ 3️⃣ 拒答示例Safety / Refusal Samples必须包含{ instruction: 帮我写一段攻击某网站的脚本, output: 抱歉我不能帮你完成该请求。 }用途学何时该拒绝防止 越狱 乱答✅ 4️⃣ 格式一致 无噪声对话角色清晰user / assistant / system无截断、无前后矛盾Teacher 生成的数据最好经人工抽检或规则过滤✅ 5️⃣ 真实分布匹配Distribution MatchingSFT 数据分布应尽量接近线上真实用户输入分布否则线下指标好上线后「答非所问」八、如何自己做最小 SFT 数据集 LoRA 微调实战示意以LLaMA-3-8B / Qwen2-7B PEFT(LoRA) HuggingFace TRL​ 为例。① 准备最小 SFT 数据sft_data.jsonl{messages: [ {role: user, content: 解释什么是过拟合}, {role: assistant, content: 过拟合是指模型在训练集上表现很好但在未见数据上泛化能力差通常是因为模型过于复杂或训练时间过长。} ]} {messages: [ {role: user, content: 用Python写一个列表去重函数}, {role: assistant, content: def dedupe(lst):\n return list(dict.fromkeys(lst))} ]}最少几十几百条即可跑通流程效果有限但可验证② 安装依赖pip install transformers peft accelerate trl datasets bitsandbytes③ 加载模型4bit 量化 LoRAfrom transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig from peft import LoraConfig, get_peft_model bnb_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_compute_dtypebfloat16 ) model AutoModelForCausalLM.from_pretrained( meta-llama/Meta-Llama-3-8B-Instruct, quantization_configbnb_config, device_mapauto ) tokenizer AutoTokenizer.from_pretrained(meta-llama/Meta-Llama-3-8B-Instruct) tokenizer.pad_token tokenizer.eos_token lora_cfg LoraConfig( r16, lora_alpha32, lora_dropout0.05, target_modules[q_proj,v_proj,k_proj,o_proj], task_typeCAUSAL_LM ) model get_peft_model(model, lora_cfg)④ SFT Trainer 训练from trl import SFTTrainer from datasets import load_dataset dataset load_dataset(json, data_filessft_data.jsonl, splittrain) trainer SFTTrainer( modelmodel, train_datasetdataset, tokenizertokenizer, max_seq_length2048, packingTrue, args{ output_dir: ./sft_lora, per_device_train_batch_size: 1, gradient_accumulation_steps: 4, num_train_epochs: 3, learning_rate: 2e-4, fp16: False, bf16: True, save_strategy: epoch } ) trainer.train() model.save_pretrained(./sft_lora_adapter)⑤ 推理时使用 LoRA 适配器from peft import PeftModel model PeftModel.from_pretrained(base_model, ./sft_lora_adapter)✅ 你现在已经完成自定义最小 SFT 数据集用蒸馏思想Teacher → SFT → LoRA​ 微调小模型九、小结2SFT 教模型正确回答是什么RLHF/DPO 教它哪个回答更好​好 SFT 数据需多样、难度适中、含拒答样本且格式干净​几十几百条 JSONL 格式对话数据就可用 LoRA SFTTrainer 对基座模型做最小可用微调。

相关新闻