Q1050训练与微调真题解析LLM 训练AgentAlpha 社区真题库约 8 分钟更新 2026-09-29

SFT+DPO训练怎么组织这部分数据的?是自己构造还是用公开数据

SFT+DPO训练怎么组织这部分数据的?是自己构造还是用公开数据

P1 · llm_training

📊 考点:sft · dpo · training

🏷 标签:preference-data

1️⃣ 考察意图

面试官想看你是否真正理解SFT和DPO两阶段训练的数据本质差异,而不仅仅是背流程。核心考察点:SFT数据是“模仿正确答案”,DPO数据是“区分偏好对”,两者组织逻辑完全不同。刁钻点在于:你是否知道DPO数据必须来自SFT模型自身生成(on-policy),否则训练会崩?答好了能展示你对RLHF整条链路的数据工程理解,包括数据污染、分布偏移、成本权衡等硬核实战经验。

2️⃣ 标准答

SFT数据组织:指令-回答对的“质量优先”

  • 数据来源:公开数据集(如Alpaca 52K、ShareGPT 90K、OpenAssistant)适合冷启动,但需清洗噪声(如Alpaca中约20%回答格式错误)。自建数据需人工标注,成本约$0.5-2/条,但能控制领域分布(如代码、医疗)。
  • 构造策略:混合公开+自建,比例建议7:3。关键坑:公开数据中“幻觉”回答(如Alpaca里数学题乱编公式)会污染SFT模型,必须用规则过滤(如长度<10字符或含“I don't know”的丢弃)。
  • 工程取舍:SFT数据量不是越多越好。实验表明【通用知识】100K高质量指令对即可达到收益上限,超过500K会导致过拟合于模板化回答。优先保证多样性(覆盖20+任务类型)而非数量。

DPO数据组织:偏好对的“on-policy”铁律

  • 核心原则:DPO数据必须由当前SFT模型生成(on-policy),否则偏好分布与模型能力不匹配,训练会震荡。例如用GPT-4生成偏好对去训练Llama,DPO后模型反而变差。
  • 构造流程:用SFT模型对每条指令生成N个回答(N=4-8,温度0.7-1.0)。
  • 人工或自动排序(如GPT-4作为裁判),提取chosen(最佳)和rejected(最差)对。
  • 关键坑:rejected不能是随机低分回答,必须是与chosen语义相近但质量差一档的(如逻辑错误vs正确),否则DPO梯度无效。
  • 数据量:偏好对通常需要10K-50K条。少于5K时DPO提升不明显,多于100K时边际效益递减,且人工标注成本陡增(约$3-5/对)。

公开 vs 自建:场景决定策略

  • 公开数据:Anthropic HH-RLHF(170K偏好对)、OpenAI Summarize(93K)适合通用场景,但领域覆盖窄(如HH-RLHF偏对话安全)。使用前需检查数据污染:若SFT模型已见过这些数据,DPO会过拟合。
  • 自建数据:成本高但可控。推荐迭代策略:先用公开数据训SFT,再自建1K种子偏好对做DPO,评估后补数据。工具链可用Argilla或Label Studio做标注,配合GPT-4做初筛(一致性>80%才保留)。
  • 混合策略:公开数据做预训练(SFT阶段),自建数据做微调(DPO阶段)。例如SFT用Alpaca+ShareGPT,DPO用自建代码偏好对(10K),最终模型在HumanEval上提升15%。

实际落地的坑与解法

  • 坑1:SFT数据中长回答过多,导致DPO模型偏好冗长输出。解法:SFT阶段加入长度惩罚(如回答>512 token的降权)。
  • 坑2:DPO数据中chosen和rejected差异过大(如chosen是正确代码,rejected是空回答),模型学不到细粒度偏好。解法:只保留pair间BLEU>0.3且语义相似度>0.7的对。
  • 坑3:迭代训练时,旧DPO数据与新SFT模型分布偏移。解法:每轮DPO后重新生成偏好对(on-policy更新),保留20%旧数据防遗忘。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从数据来源、组织策略、工程取舍三个层面回答。SFT数据用公开指令对冷启动,自建数据控制领域质量,比例7:3,量控制在100K内。DPO数据必须由SFT模型on-policy生成,偏好对要语义相近但质量差一档,量在10K-50K。公开数据便宜但可能污染,自建成本高但可控,推荐混合迭代。总结一句:SFT重质量,DPO重on-policy,数据量不是越多越好,分布匹配才是关键。”

4️⃣ 高频追问 & 应对

追问 1:你提到DPO数据必须on-policy,那如果我用GPT-4生成偏好对,然后训练自己的小模型,会怎样?

会崩。因为GPT-4的偏好分布(如喜欢长回答、复杂句式)与小模型能力不匹配。小模型生成不了GPT-4水平的回答,DPO梯度会引导它去学无法达到的目标,导致loss不降或生成退化。正确做法:先用小模型SFT版本生成N个回答,再让GPT-4排序(作为裁判),这样偏好对来自小模型自身分布,排序标准是GPT-4的偏好。这叫off-policy排序+on-policy生成,是工业界常见妥协。

追问 2:SFT和DPO的数据量怎么配比?比如我只有10万条SFT数据,DPO需要多少?

经验法则:DPO数据量是SFT的10%-30%。10万条SFT对应1-3万条偏好对。少于1万条,DPO提升微弱;多于5万条,边际效益下降且标注成本陡增。配比还要看任务复杂度:简单问答(如翻译)DPO可少至5K,复杂推理(如代码生成)需要20K+。关键指标:DPO训练后,模型在偏好评估(如Chatbot Arena)上的胜率提升应>5%,否则说明数据量或质量不够。

追问 3:你怎么保证自建偏好对的质量?人工标注一致性怎么控制?

三步:1)标注指南明确chosen和rejected的定义(如“chosen必须逻辑正确且简洁,rejected有逻辑错误或冗余”)。2)每批数据抽10%做双盲标注,计算Cohen's Kappa系数,要求>0.6,否则退回重标。3)用GPT-4做自动校验:对每条pair,让GPT-4判断“哪个更好”,若与人工标注一致率<80%,则丢弃。成本上,自动校验可过滤掉约15%的低质量pair,减少人工返工。

5️⃣ 避坑 · 常见错误答法

  • ❌ “SFT和DPO都用公开数据,比如Alpaca和HH-RLHF,直接训练就行。”→ ✅ “公开数据只能冷启动,DPO数据必须由SFT模型on-policy生成,否则分布不匹配。正确做法:先用公开数据训SFT,再用SFT模型生成偏好对,最后做DPO。”
  • ❌ “DPO数据越多越好,我准备了100万条偏好对。”→ ✅ “DPO数据量不是越多越好,10K-50K即可,超过100K边际效益递减,且标注成本爆炸。关键是质量:偏好对要语义相近但质量差一档,差异过大或过小都无效。”
  • ❌ “自建数据成本高,直接用GPT-4生成偏好对就行。”→ ✅ “GPT-4生成的偏好对只能做排序裁判,不能直接当训练数据。必须用小模型自身生成回答,再让GPT-4排序,否则on-policy原则被破坏。”

6️⃣ 简历呼应

  • 如果你有RAG项目:从数据分布匹配切入,强调SFT数据需覆盖RAG检索到的文档类型(如长文档、表格),DPO数据需针对检索增强后的回答质量(如引用准确性)。可举例:在RAG场景中,SFT用10K问答对,DPO用2K偏好对(chosen是正确引用,rejected是幻觉引用),最终F1提升12%。
  • 如果你只做过传统NLP:用分类任务类比,SFT数据像标注好的训练集(标签是正确答案),DPO数据像排序任务(需要正负样本对)。强调数据构造的工程细节:如何从SFT模型生成候选、如何用规则过滤噪声。可迁移经验:传统NLP中数据增强(如回译)可用于SFT数据扩充,但DPO数据必须保持原始分布。
  • 如果你是校招无项目:聚焦论文复现,比如复现Alpaca(SFT)和DPO论文。强调你理解on-policy原则:用Alpaca的SFT模型生成偏好对,再跑DPO训练,对比loss曲线。可展示你用过Hugging Face TRL库,知道如何设置beta参数(默认0.1)和max_length(512 token)。

7️⃣ 延伸阅读

  • 《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》(DPO原论文,理解on-policy原理)
  • 《Training Language Models with Deep Reinforcement Learning》(RLHF综述,对比DPO与PPO)
  • 《Alpaca: A Strong, Replicable Instruction-Following Model》(SFT数据构造案例)
  • 《Anthropic HH-RLHF Dataset》(公开偏好数据集分析)
  • Hugging Face TRL库文档(SFTTrainer和DPOTrainer实战)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。