章节导航 第 11 章 / 共 23 章
SFT 数据的本质——表面对齐假说
LIMA 启示、SFT 数据角色定位与分类学
“Almost all knowledge in large language models is learned during pretraining, and only limited instruction tuning data is necessary to teach models to produce high quality output.” ——LIMA (Zhou et al., 2023)
这句话深刻地改变了我们对 SFT 的认知。
11.1 LIMA 的启示:Less is More
表面对齐假说的深层含义
2023 年,Meta 的研究者用 LIMA 模型向世界展示了一个惊人的结果:仅用 1000 条精心挑选的指令-回复对,在 65B 参数的 LLaMA 上做 SFT,就能得到接近 GPT-4 水平的对话质量。
这个结果背后的理论解释被称为”表面对齐假说”(Superficial Alignment Hypothesis):
模型的知识和能力几乎全部在预训练阶段学习。SFT 的作用只是教模型以正确的格式和风格来”展示”这些已有的知识。
用一个类比:
- 预训练 = 一个人读了十年书,知识渊博但不善表达
- SFT = 教这个人”如何在面试中展示自己”——回答要结构清晰、有条理、有礼貌
- 关键洞察:SFT 不是在教新知识,而是在教”包装”已有的知识
表面对齐假说的量化与边界
LIMA 的结论在简单任务上经受住了检验,但后续研究揭示了它的边界条件。
2024 年,Scale AI 的研究团队对 Llama-3、Mistral、Llama-2 多个模型家族进行了系统实验(Revisiting the Superficial Alignment Hypothesis),发现了两个重要现象:
- 后训练性能与数据量呈幂律缩放——在数学推理和多跳推理任务上,少量 SFT 样本只能实现风格对齐,远未达到性能饱和。
- 模型可通过后训练整合新知识——在多跳问答场景中,SFT 不仅调整了输出格式,还帮助模型组合了预训练中零散存储的事实。
2026 年初,Operationalising the Superficial Alignment Hypothesis via Task Complexity 提出了信息论视角的量化框架:用”达成目标性能所需最短程序长度”来度量任务复杂度。预训练将这个复杂度从 GB 级降到了 KB 级——SFT 的本质是信息论意义上的高效压缩,而非简单的格式教学。在数学推理(MATH/AMC)、机器翻译(WMT’22)、指令遵循(AlpacaEval)三大任务上,这个 GB→KB 框架都得到了验证。
修正后的认知是:表面对齐假说在简单指令遵循和格式对齐上成立,但在复杂推理和知识密集型任务上是过度简化。 把 LIMA 的结论当作绝对真理来指导工程实践会导致对 SFT 数据投入的系统性低估。
1000 条精选数据 vs 100 万条噪声数据
LIMA 的实验对比了多种方案:
| 方案 | SFT 数据量 | 数据质量 | 效果 |
|---|---|---|---|
| LIMA | 1,000 条 | 极高(人工精选) | 接近 GPT-4 |
| Alpaca | 52,000 条 | 中等(GPT-3.5 合成) | 明显不如 LIMA |
| 无 SFT | 0 条 | - | 基座模型,无法正常对话 |
这个对比揭示了一个核心原则:在 SFT 阶段,数据的质量比数量重要得多。 一条高质量的样本胜过一千条平庸的样本。
认知变化链
SFT 数据的认知演变
- 2022:InstructGPT 时代——“人工标注是金标准,13K 条人工数据 + RLHF”
- 2023.3:Self-Instruct / Alpaca——“原来可以用 GPT 来合成 SFT 数据!52K 条就行”
- 2023.5:LIMA——“等等,1000 条精选数据就够了?质量>>数量”
- 2023-2024:Phi 系列——“精心构造的合成数据可以非常强大”
- 2024:Llama 3 / Qwen 2.5——“工业实践中用数万到数十万条 SFT 数据”
- 2024.10:Scale AI Revisiting SAH——“后训练有幂律缩放,表面对齐假说是过度简化”
- 2025.01:ICML SFT Memorizes, RL Generalizes——“SFT 重定位为 RL 的格式稳定前置”
- 2025-2026:多阶段 SFT 成为主流——“不同阶段需要不同类型和难度的数据”
- 2026.02:任务复杂度框架——“SAH 量化为 GB→KB 信息压缩”
- 2026.04:推理 SFT 泛化三条件——“不是不能泛化,是条件苛刻”
11.2 SFT 数据的角色定位
SFT 不是教知识,是教格式和风格
这是理解 SFT 的最关键认知。
基座模型(预训练后)的行为:
User: "什么是光合作用?"
Model: "光合作用是植物利用光能将二氧化碳和水"
"转化为有机物和氧气的过程光合作用的化学"
"方程式为6CO2+6H2O→C6H12O6+6O2光合作用"
"在叶绿体中进行主要分为光反应和暗反应..."
→ 模型知道答案,但输出是一团糟——没有分段、没有标点、
没有结构化的解释,像是在"背诵"而不是"回答"。
SFT 后的行为:
User: "什么是光合作用?"
Model: "光合作用是植物利用光能将无机物转化为有机物的过程。
## 基本原理
植物通过叶绿体中的叶绿素吸收光能...
## 化学方程式
6CO₂ + 6H₂O → C₆H₁₂O₆ + 6O₂
## 两个阶段
1. **光反应**:在类囊体膜上进行...
2. **暗反应(Calvin 循环)**:在基质中进行..."
→ 同样的知识,但以清晰、结构化、用户友好的方式呈现。
SFT 激活预训练知识的机制
SFT 的作用可以理解为在模型的”知识空间”和”输出空间”之间建立了一个映射:
- 格式映射:学习”用户提问 → 结构化回答”的模式
- 风格校准:学习”用什么语气、什么详细度来回答”
- 安全边界:学习”哪些问题应该拒绝、如何拒绝”
- 角色设定:学习”我是一个助手,我应该如何行为”
其中安全边界的机制值得深入理解。ICLR 2026 的研究 Superficial Safety Alignment Hypothesis (SSAH) 将表面对齐假说扩展到安全维度,揭示了一个精巧的机制:安全对齐本质上教的是模型在”执行请求”和”拒绝请求”两个推理方向之间做选择。研究发现安全的最小功能单元在神经元级别——少量关键神经元即可控制模型的安全行为。这意味着安全对齐不需要海量数据,但需要精准覆盖。同时,这也解释了安全对齐的脆弱性:既然只有少量神经元在控制,几步恶意微调就可能绕过它。
SFT 数据对模型行为的影响边界
SFT 有其能力边界——有些事情它能做到,有些做不到,还有些取决于条件:
| 维度 | SFT 的影响 | 条件/注释 |
|---|---|---|
| 回答格式(markdown、代码块) | ✅ 能做到 | 少量高质量数据即可 |
| 回答风格(正式/幽默/简洁) | ✅ 能做到 | 几百条样本通常足够 |
| 对话轮次意识 | ✅ 能做到 | 需要多轮对话样本 |
| 安全边界和拒答规则 | ✅ 能做到 | 关键神经元的方向选择(见下文) |
| 工具使用格式 | ✅ 能做到 | 需覆盖各工具类型的调用样本 |
| 数学推理能力提升 | ⚠️ 有条件 | 需要验证过的长 CoT 数据 + 强基座 + 充分训练(2026.04 最新结论) |
| 整合新知识领域 | ⚠️ 有条件 | 少量 SFT 效果有限,大规模高质量后训练可整合(Scale AI, 2024) |
| 缓解通用能力损失 | ⚠️ 可管理 | 通过学习率调整和 Token-Adaptive Loss Reweighting 可实现领域收益与通用能力的平衡(TALR, ICLR 2026) |
| 基础语言理解能力 | ❌ 做不到 | 需预训练阶段解决 |
| 修复预训练知识错误 | ❌ 做不到 | 需回到中训练/预训练 |
| 从根本上消除幻觉 | ❌ 做不到 | 结构性问题,非 SFT 能解决 |
SFT 在后训练管线中的角色演变
在 2023-2024 年的认知中,SFT 是后训练的”最终步骤”——做完 SFT 就上线。但 2025 年以来,随着 RL(强化学习)在推理能力上的突破,SFT 的角色发生了根本性转变。
ICML 2025 的研究 SFT Memorizes, RL Generalizes 通过系统实验揭示了一个清晰的分工:
- SFT 倾向记忆训练数据——在训练分布内表现良好,但在分布外(未见过的变体)泛化困难
- RL(尤其是基于结果的 RL)擅长泛化——可以有效迁移到训练中未出现的问题变体
- 但 SFT 对 RL 不可或缺——SFT 稳定了输出格式和推理模板,使后续 RL 的探索有了正确的起点
为什么 SFT 倾向记忆而非泛化?DFT(Distribution-Forcing Training)从数学根因上给出了精确解释。标准 SFT 的交叉熵损失梯度隐式编码了一个逆概率加权的奖励结构——梯度与 1/π_θ(y_t*) 成正比:
这意味着:模型当前概率越低的 token,梯度信号越强。 在推理任务中,那些”不太确定但偶然正确”的低概率 token 会获得巨大的梯度惩罚,迫使模型死记硬背而非灵活迁移。这正是 SFT 泛化受限的数学根源。
DFT 的解法极为优雅——只需对标准 SFT 损失做一行代码的修改,用 token 概率对梯度加权(stop-gradient 阻断梯度回传),消除逆概率加权:
其中 sg(·) 表示 stop-gradient 操作。效果是:低概率 token 的梯度被自动抑制,模型不再被强迫记忆”难样本”,转而关注已具备基础能力的模式,从而释放泛化潜力。
这里有一个精彩的哲学反转:在欠拟合时代,Focal Loss 的核心思想是”强调难样本”——模型还没学好,需要更多关注困难案例;而在 LLM 过拟合时代,DFT 的智慧恰恰相反——“弱化难样本”——模型已经足够强,过度关注低概率 token 反而造成记忆锁定。从 Focal Loss 到 DFT,是对”难样本”态度的根本性翻转,映射了从欠拟合到过拟合的时代变迁。
DFT 严格数学形式(深化版):
Wu/Zhou et al. (ICLR 2026) 给出了 SFT 梯度变身后的完整形式——通过重要性采样的精确推导:
其中两个关键量:
-
隐式奖励 = 指示函数 :
- 只有当生成与标准答案一字不差时奖励为 1
- 否则为 0
- 隐式奖励极其稀疏——这是 SFT 缺陷的根源之一
-
重要性权重 :
- 当 极低时(模型认为”困难”),倒数变得极大
- 导致梯度爆炸——这是 SFT 的第二个根本缺陷
病态重要性权重的具体数值示例:
当模型对正确专家答案的概率变化时,重要性权重的数值表现:
π_θ(y*|x) = 0.99 → w = 1/0.99 = 1.01 (梯度信号正常)
π_θ(y*|x) = 0.5 → w = 1/0.5 = 2.00 (梯度信号加倍)
π_θ(y*|x) = 0.1 → w = 1/0.1 = 10.0 (梯度信号放大 10 倍)
π_θ(y*|x) = 0.01 → w = 1/0.01 = 100.0 (梯度爆炸!单样本主导整批)
π_θ(y*|x) = 0.001 → w = 1/0.001 = 1000.0 (数值不稳定,训练崩溃)
这意味着:在常规 SFT 中,少数模型认为”困难”的样本会主导整个 batch 的梯度方向。这些困难样本可能仅占 1% 的数据量,但其梯度信号可能占整批的 90% 以上——导致模型被少数”难样本”拽偏,死记硬背这些样本而非学到通用模式。
DFT 一行代码的物理意义:
- 标准 SFT 损失对 的梯度贡献:(病态放大)
- DFT 通过 (stop-gradient)反向抵消这个
- 效果:每个 token 的梯度贡献与 解耦——不再有”低概率 token 梯度爆炸”现象
- 数学等价:低概率 token 的损失被下加权(down-weight),高概率 token 的损失被保持
DFT 与 Focal Loss 的精确对比:
| 维度 | Focal Loss | DFT |
|---|---|---|
| 时代背景 | 欠拟合(CV 时代) | 过拟合(LLM 时代) |
| 难样本处理 | 上加权难例 | 下加权难例 |
| 权重公式 | ||
| 目标 | 让模型更关注没学好的样本 | 防止模型死记硬背已学好的样本 |
| 应用领域 | 目标检测、医学影像 | LLM SFT / 推理训练 |
| 梯度稳定性 | 中等(γ 控制) | 高(直接消除病态权重) |
DFT 在 offline RL 设定下的优势:
Wu et al. 的实验还表明,在数学推理任务上 DFT outperforms DPO 且接近 online RL methods:
- 不需要偏好对(vs DPO)
- 不需要奖励模型(vs PPO)
- 不需要参考模型正则化(vs DPO)
- 提供”resource-efficient”的更简化 offline RL 替代方案
对章节 SFT 缺陷理论的补充:
SFT 的两个根缺陷(深化版):
缺陷 1:隐式奖励极其稀疏
└── 只有生成与标准答案一字不差时才"有奖励"
└── 实际中:模型生成的合理但不同的回答 → 零奖励
└── 后果:模型无法区分"接近正确答案"和"完全错误"
└── DFT 部分缓解:通过 token 概率加权让部分正确回答有梯度
缺陷 2:病态重要性权重
└── 1/π_θ(y*|x) 在低概率时爆炸
└── 实际中:少数"难样本"主导整批梯度
└── 后果:模型死记硬背难样本而非学通用模式
└── DFT 完全消除:token 概率解耦,梯度贡献均匀化
2026 年 4 月的最新研究 Rethinking Generalization in Reasoning SFT(上海 AI Lab)对”SFT 只记忆不泛化”的简单叙事做了重要修正。推理 SFT 的泛化是有条件的,需要同时满足三个条件:
- 充分的训练时间——存在”先抑后扬”模式,早期检查点会低估泛化能力
- 高质量、经过验证的长 CoT 数据——短回答或未经验证的 CoT 反而有害
- 强基座模型——弱模型只会模仿冗长的推理形式,强模型才能内化回溯、验证等可迁移的推理模式
这项研究进一步揭示了泛化背后的深层机制,提供了比”三个条件”更精细的分析框架:
Dip-and-Recovery 动力学。推理 SFT 的训练过程中存在一个关键的性能下降-恢复(Dip-and-Recovery)模式:在训练早期,模型在训练分布上的性能快速提升,但在分布外会出现显著的性能下降(Dip);随着训练继续,分布外性能逐渐恢复并超越基线(Recovery)。这意味着——如果只看早期检查点就得出”SFT 不泛化”的结论,是对训练动力学的误读。 研究者还发现,回复长度的变化是这一动力学的有效诊断指标:Dip 阶段回复异常缩短,Recovery 阶段回复长度趋于稳定。
程序化泛化(Procedural Patterns)而非领域知识驱动。跨域迁移的真正载体不是领域特定的知识,而是可复用的推理程序——如分步分解、自我验证、假设-反驳循环。实验证据:在数学推理上训练的模型可以泛化到逻辑推理和代码调试,但不能泛化到与其推理程序无关的领域。这为数据选择提供了明确指导:应该优先选择能训练出强推理程序的数据,而非覆盖更多领域知识的数据。
重复曝光优于单次遍历。在同等数据量下,对高质量 CoT 数据进行多次重复训练(repeat exposure),其泛化效果显著优于单次遍历更多不同数据。这与”数据去重”的常见实践形成张力——对于推理 SFT,关键数据的重复曝光比数据多样性更重要。实操建议:对核心推理模式数据,3-5 次重复曝光是合理的。
非对称泛化警告:推理提升伴随安全退化。研究发现推理能力的泛化和安全对齐的保持之间存在系统性张力——推理 SFT 提升跨域推理的同时,模型的安全拒答率会不可忽略地下降。这种非对称泛化意味着:推理 SFT 的评估不能只看推理指标,必须同时监控安全退化。 在工程实践中,推理 SFT 后通常需要一轮安全修复 SFT 来恢复安全边界。
A Primer in Post-Training Reasoning Data 综述(arXiv:2606.02113,2026-06-01)系统综述了 150+ 篇关于后训练推理数据的研究,提供了”推理数据”作为 SFT 数据子类的分类框架。
四维分类:
推理 SFT 数据构建的四维框架:
1. 数据对象(Data Objects)
├── 问题-答案对(带详细推理过程)
├── 思维链(中间步骤 + 注释 + 验证节点)
└── 多种推理路径(正确 / 错误 / 替代路径)
2. 质量因素(Quality Factors)
├── 正确性(答案准、推理逻辑严密)
├── 多样性(问题/解法多样)
├── 难度适配(与模型能力匹配)
└── 格式清晰(标注一致、可读)
3. 构建方法(Construction Methods)
├── 人工(专家 / 众包)
├── 自动(自举法 / 迭代精炼 / 形式化系统转换)
└── 混合(人机协作 / 对抗生成)
4. 规模效应(Scale Effects)
└── 数据规模 vs 训练效率的相互作用
章节影响:
- 章节当前按”手动标注 / 合成生成 / 拒绝采样”组织推理 SFT 数据
- 该综述提供”按四维分类”的方法学骨架,更系统地覆盖”质量因素”的四个一级指标
- 与章节 12.2 自动合成、13.x 数据选择形成方法学闭环
新的定位是:SFT 不是终点,而是从预训练到 RL 的关键桥梁。 它提供格式稳定性和初始推理模板,为后续 RL 阶段的能力放大创造必要条件。
💡 反直觉发现
很多团队在模型”不知道某个知识”时,会尝试通过在 SFT 数据中加入相关知识来”补救”。这通常效果很差——因为几百条 SFT 样本无法与万亿 token 的预训练竞争。如果模型缺知识,应该回到中训练或预训练去补。SFT 只负责”展示”。 但需要注意:这个”展示”比早期想象的更复杂——在满足高质量 CoT 数据 + 强基座 + 充分训练的条件下,SFT 可以激发超出简单格式对齐的推理泛化能力。
11.3 SFT 数据的分类学
按任务类型
SFT 数据的任务分类
├── 对话与问答
│ ├── 开放域问答(世界知识)
│ ├── 闲聊对话
│ └── 多轮对话
│
├── 创作与生成
│ ├── 文章写作(报告、邮件、文案)
│ ├── 创意写作(故事、诗歌)
│ ├── 翻译
│ └── 摘要
│
├── 推理与分析
│ ├── 数学推理
│ ├── 逻辑推理
│ ├── 代码生成与调试
│ └── 数据分析
│
├── 指令遵循
│ ├── 格式约束("用 JSON 格式回答")
│ ├── 长度约束("用三句话总结")
│ ├── 角色扮演
│ └── 多步骤任务
│
└── 工具使用
├── 函数调用
├── API 交互
└── 搜索增强
按难度分层
难度级别设计
Level 1: 简单指令遵循
- "把这段话翻译成英文"
- "给这篇文章写一个标题"
- "解释什么是 HTTP 协议"
Level 2: 中等复杂度
- "对比 REST 和 GraphQL 的优缺点,给出建议"
- "帮我重构这段 Python 代码,提高可读性"
- "分析这份销售数据的趋势"
Level 3: 高复杂度
- "设计一个分布式缓存系统,需要考虑一致性和可用性的权衡"
- "阅读这三篇论文的摘要,找出它们的共同点和分歧"
- "帮我写一个完整的 REST API,包括错误处理和测试"
Level 4: 专家级
- "证明 P≠NP 的一个充分条件(如果存在的话)"
- "分析这个分布式系统中的死锁条件,给出避免方案"
- 需要多步骤推理、跨领域知识整合
按来源分类
| 来源 | 优点 | 缺点 | 适用阶段 |
|---|---|---|---|
| 人工标注 | 质量最高、可控 | 贵、慢、规模有限 | 种子数据、关键任务 |
| 强模型合成 | 规模大、成本低 | 多样性可能不足、有偏 | 主体数据 |
| 拒绝采样 | 质量有保证 | 依赖好的评分函数 | 质量提升 |
| 人机协作 | 平衡质量和效率 | 流程复杂 | 最佳实践 |
| 智能筛选(NAIT/MIG/DEITA) | 质量高、效率高 | 需要目标能力的 seed 数据 | 全流程数据优化 |
2025-2026 年的趋势是”先大规模合成,再智能筛选”——合成提供任务覆盖度,智能筛选保证质量和效率。这已经从实验室走向了工程实践(详见 11.4 节)。
11.4 SFT 数据量的决策
你到底需要多少 SFT 数据?
这取决于你的目标和基座模型的质量。
经验性指导:
极简方案(LIMA 风格):
- 数据量:1K-5K 条
- 适用:强基座模型 + 简单对话场景
- 特点:每条数据都经过人工精选
标准方案:
- 数据量:10K-100K 条
- 适用:通用助手模型
- 特点:人工精选 + 合成数据混合
工业方案(Llama 3 风格):
- 数据量:100K-1M+ 条
- 适用:全能力覆盖的商业模型
- 特点:多阶段 SFT,覆盖数十种任务类型
关键原则:
不是"越多越好",而是"覆盖越全面越好"。
重复加入同类型的简单数据,边际效用快速递减。
从经验法则到科学选择
上述三档是直觉指导,但 2025-2026 年的数据选择方法已经从经验法则演进到模型驱动的科学方法。
NAIT:神经元感知的数据选择(Neuron-Aware Data Selection in Instruction Tuning, ICLR 2026)提出了一个优雅的框架:通过分析训练样本引起的神经元激活模式与目标能力的相似性来选择数据。核心发现:
- 仅用 10% 的 Alpaca-GPT4 数据,即可持续优于依赖外部模型评分的方法
- 逻辑推理和程序化特征的 SFT 数据具有强跨能力迁移性——选对类型比增加数量更有效
更广泛的趋势在 JAIR 2025 综述 A Survey on Data Selection for LLM Instruction Tuning 中得到系统梳理:从高质量子集中选择优于全量训练已成为共识,但选择标准仍在快速演进。
数据选择范式的变化可以概括为三个阶段:
第一阶段:人工精选
依据:标注员经验 + 任务覆盖直觉
代表:LIMA(1K 精选)
第二阶段:模型评分筛选
依据:用强模型(GPT-4等)对样本打分
代表:Alpagasus、DEITA
第三阶段:模型内部机制驱动
依据:目标模型自身的神经元激活 / 信息增益
代表:NAIT、MIG
优势:不依赖外部模型,10% 数据可达全量效果
工程启示:如果你的 SFT 数据预算有限,与其在”人工精选 vs 合成”之间纠结,不如投入精力建立智能选择管线——先合成大池子,再用 NAIT 等方法筛选出最高价值的子集。
Frozen-Prompt Artifacts 与 Prompt Diversity。NAIT 等方法关注的是”选哪些数据”,但另一个常被忽视的维度是”prompt 的多样性”。当 SFT 数据的 prompt 高度相似或模板化时,模型会形成 frozen-prompt artifacts——对特定 prompt 模式产生过度依赖,导致换一种问法就”不会了”。这种现象的本质是:模型将推理能力绑定在了 prompt 表面特征上,而非内化为可迁移的推理程序。
Prompt diversity 的解法并非简单地”多加不同 prompt”,而是需要关注两个层面:
-
语义多样性:同一推理任务,用不同风格、不同详细度、不同角色设定的 prompt 来表达。例如,“解这道数学题”、“请帮我算一下”、“作为一个数学老师,解释如何求解”——三种 prompt 触发的是同一推理程序,但训练模型不依赖单一触发模式。
-
结构多样性:prompt 中信息组织的不同模式——直接提问、上下文+提问、多轮渐进式提问等。结构多样性帮助模型学会从不同信息布局中提取关键指令。
💡 工程提示
Frozen-prompt artifacts 有一个简单的诊断方法:将验证集的 prompt 做同义改写后测试,如果性能显著下降(>5%),说明模型存在 prompt 过拟合。修复方法是增加 prompt 多样性训练数据,而非增加更多相同 prompt 的样本。
11.5 SFT 理论的统一视角:从目标分布到方差控制
Qian Liu 等人在 A Primer in Post-Training Reasoning Data 综述中提出的四维度框架(可验证/可解释/可监督/可扩展)为后训练数据建立了系统分类。在此基础上,2026 年 6 月两篇论文将 SFT 理论分别从”损失函数选择”和”token 级修正”推向了更基础的理论层面。
QQQ-target:SFT 的目标分布统一框架
UCLA 的 Xie et al. 在 QQQ-target(arXiv:2606.11189, 2026-06-09)中提出了一个根本性的视角转换:SFT 的本质不是损失函数选择,而是目标分布设计。
其核心是一个看似简单的分解——将 SFT 的目标分布 分解为两个正交维度:
其中:
- :在多大程度上信任观测 token(由模型自身不确定度决定)——控制”教什么”
- :剩余概率质量如何分配给备选 token——控制”怎么分配剩余信任”
理论威力:该框架统一了大量已有的 SFT 变体——DFT、label smoothing、token 级重加权、正则化方法——都可以解释为 目标分布的不同隐式选择。DFT 可理解为 的特例,即”信任程度 = 模型对观测 token 的当前概率”。
关键实验结论:Target-SFT(显式构建 目标分布)在 10 个推理基准上一致性优于 DFT 和标准 SFT。这验证了”损失只是优化的代理,目标分布才是 SFT 的一等公民”这一核心洞察。
从 Token 到 Sample:CADFT 的样本级方差控制
DFT 解决的是 token 级梯度偏差问题——同一序列中,模型对某些 token 的过强自信导致不合理的梯度加权。但澳门大学 Zhou et al. 的 CADFT(arXiv:2606.11206)指出 DFT 的一个隐含假设缺陷:假设所有演示都是同等合适的学习目标——这与大规模指令数据的强异质性矛盾。
CADFT 的两项核心贡献:
- 样本级兼容性信号:使用模型自身似然度计算每条 SFT 样本的动态兼容性评分——对”适合当前模型学习”的样本赋高权重,反之赋低权重。这是方差控制估计器的思想:降低不兼容样本的梯度方差贡献。
- 延迟兼容性引导重写:对持续不兼容的演示,用 nucleus sampling 重新生成可学习目标——不是丢弃数据,而是改写为模型当前可吸收的形式。类似人类学习中”换个说法再讲一遍”。
实验表明 CADFT 在数学推理、代码生成、多模态推理上超越 DFT,且提供更强的 RL 冷启动初始化——因为 RL 阶段的初始策略已经过样本级方差控制,降低早期训练不稳定性。
理论脉络:从 LIMA 到 CADFT 的演进
LIMA (2023):SFT 是表面对齐——"教格式"而非"教知识"
↓
DFT (ICLR 2026):token 级梯度修正——消除 SFT 隐式重要性权重
↓
QQQ-target (2026-06):目标分布统一——DFT 只是 Q 的一种特例
↓
CADFT(arXiv:2606.11206):样本级方差控制——从 token 到 sample 的梯度校正
这条演进脉络展示了一个清晰的认知深化:SFT 理论正在从”做什么”(LIMA)→ “怎么做”(DFT)→ “为什么这样做”(QQQ-target)→ “如何做得更好”(CADFT)逐层推进。核心洞察从”少即是多”收敛到”目标分布 > 损失函数 > 数据数量”。
动手环节:理解 SFT 的”表面对齐”本质
目标:通过对比实验,直观感受 SFT 不是教知识而是教格式。
练习 1:模拟”基座模型”vs”SFT 模型”的输出差异
"""
模拟展示 SFT 前后的输出差异
用规则来模拟:基座模型有知识但不会格式化,SFT 模型会"包装"输出
"""
# 知识库(模拟预训练学到的知识)
KNOWLEDGE_BASE = {
"光合作用": {
"定义": "植物利用光能将二氧化碳和水转化为有机物和氧气的过程",
"场所": "叶绿体",
"阶段": ["光反应:在类囊体膜上进行,光能转化为化学能",
"暗反应(Calvin循环):在基质中进行,CO₂固定为有机物"],
"方程式": "6CO₂ + 6H₂O → C₆H₁₂O₆ + 6O₂",
},
"TCP协议": {
"定义": "传输控制协议,提供可靠的面向连接的字节流传输服务",
"特点": ["面向连接", "可靠传输", "流量控制", "拥塞控制"],
"三次握手": "SYN → SYN-ACK → ACK",
},
}
def base_model_response(query: str) -> str:
"""模拟基座模型:有知识但输出混乱"""
for topic, info in KNOWLEDGE_BASE.items():
if topic in query:
# 基座模型:把知识点堆在一起,没有格式
parts = []
for key, value in info.items():
if isinstance(value, list):
parts.append("".join(value))
else:
parts.append(str(value))
return "".join(parts) + "以上就是关于" + topic + "的内容"
return query + "是一个重要的概念在很多领域都有应用"
def sft_model_response(query: str) -> str:
"""模拟 SFT 后的模型:同样的知识,结构化输出"""
for topic, info in KNOWLEDGE_BASE.items():
if topic in query:
lines = [f"## {topic}\n"]
lines.append(f"**定义**:{info.get('定义', '')}\n")
for key, value in info.items():
if key == "定义":
continue
if isinstance(value, list):
lines.append(f"\n### {key}")
for i, item in enumerate(value, 1):
lines.append(f"{i}. {item}")
else:
lines.append(f"\n**{key}**:{value}")
return "\n".join(lines)
return f"关于「{query}」,我需要更多上下文才能给出准确回答。您能具体描述一下想了解哪方面的内容吗?"
# 对比
queries = ["什么是光合作用", "解释TCP协议", "量子力学是什么"]
for q in queries:
print(f"\n{'='*50}")
print(f"问题: {q}")
print(f"\n--- 基座模型(预训练后、SFT 前)---")
print(base_model_response(q))
print(f"\n--- SFT 模型 ---")
print(sft_model_response(q))
练习 2:SFT 数据需求估算
"""
根据本章的经验指导,为不同场景估算 SFT 数据需求
"""
def estimate_sft_data(
scenario: str,
base_model_quality: str, # "strong", "medium", "weak"
task_types: int, # 需要覆盖的任务类型数
target_quality: str, # "demo", "production", "commercial"
) -> dict:
"""估算 SFT 数据需求"""
# 基础数据量(根据场景)
base_amounts = {
"demo": 1000,
"production": 50000,
"commercial": 200000,
}
base = base_amounts.get(target_quality, 50000)
# 基座模型质量调整
quality_multiplier = {"strong": 0.5, "medium": 1.0, "weak": 2.0}
base *= quality_multiplier.get(base_model_quality, 1.0)
# 任务类型调整
base *= (1 + 0.15 * (task_types - 5))
# 各类数据的建议比例
breakdown = {
"人工精选种子": int(min(500, base * 0.05)),
"强模型合成": int(base * 0.50),
"拒绝采样精选": int(base * 0.25),
"人工标注补充": int(base * 0.20),
}
return {
"场景": scenario,
"总量估算": int(base),
"数据构成": breakdown,
"预估成本": f"${int(base * 0.1)}-${int(base * 0.5)}",
"预估时间": f"{max(1, int(base/10000))} 周",
}
# 评估不同场景
scenarios = [
("个人项目Demo", "strong", 3, "demo"),
("企业内部助手", "medium", 8, "production"),
("商业对话产品", "medium", 15, "commercial"),
]
for scenario, quality, tasks, target in scenarios:
result = estimate_sft_data(scenario, quality, tasks, target)
print(f"\n=== {result['场景']} ===")
print(f" 总量: {result['总量估算']:,} 条")
print(f" 构成:")
for source, count in result['数据构成'].items():
print(f" {source}: {count:,} 条")
print(f" 预估成本: {result['预估成本']}")
练习 3:设计 SFT 数据的任务分布
参考本章 11.3 节的任务分类学,为一个中文编程助手设计 SFT 数据的任务分布。需要:
- 覆盖至少 8 种任务类型
- 每种类型设定数量和难度分布
- 说明为什么这样分配(重点放在”覆盖度”而非”总量”)
关键思考:如果你只有 5000 条的预算,你会优先覆盖哪些任务类型?为什么?
本章要点回顾
- 表面对齐假说有边界:在简单指令遵循上成立,但在复杂推理和知识密集型任务上是过度简化——后训练性能与数据量呈幂律缩放
- SFT 的本质是信息压缩:将访问预训练能力的复杂度从 GB 级压缩到 KB 级,不只是”教包装”
- 质量远大于数量:1000 条精选 > 100K 条噪声,但复杂任务需要更多高质量数据
- SFT 是 RL 的关键桥梁:SFT 记忆、RL 泛化,两者互补而非替代
- 推理 SFT 泛化有三个条件:充分训练时间 + 高质量 CoT + 强基座模型
- 安全对齐是神经元级的方向选择:少量关键神经元控制执行/拒绝,精巧但脆弱
- SFT 能力边界不是二元的:很多”做不到”在新条件下变成了”有条件地做到”
- 数据选择已科学化:从人工精选到神经元驱动的智能选择,10% 数据可达全量效果
- SFT 理论正经历”从经验配方到数学统一”的范式转换:QQQ-target 将 DFT/token 重加权/正则化等统一为目标分布的不同选择;CADFT 将 DFT 的 token 级修正推广至样本级方差控制——SFT 理论脉络从 LIMA(教格式)→ DFT(token 级修正)→ QQQ-target(目标分布统一)→ CADFT(样本级控制),逐层深化对”SFT 到底是什么”的理解