理解 RLHF 与对齐训练(二):SFT——用示范教会模型「怎么说话」
SFT:用示范教会模型「怎么说话」
预训练模型像一个读了所有书的学者。SFT 的作用,是教这个学者”请在别人问你问题时,用回答问题的方式说话”。听起来简单,但这一步改变了一切。
一个反直觉的观察
InstructGPT 的 SFT 阶段只用了大约 13,000 条标注数据。
13,000 条。
GPT-3 的预训练数据量是几千亿 token。而仅仅 13,000 条微调数据,就能让模型的行为发生质的改变——从一个随机续写文本的生成器,变成一个能正经回答问题的助手。
这怎么可能?答案揭示了一个关于大语言模型的深刻真理。
SFT 到底在做什么?
表面理解:教模型模仿好回答
SFT(Supervised Fine-Tuning,监督微调)的操作非常直观:
- 收集一批 (用户问题, 优质回答) 的配对数据
- 用标准的有监督学习(最小化交叉熵损失)微调预训练模型
- 完成
损失函数就是语言模型经典的 next-token prediction,但只计算在回答部分的 loss:
\[\mathcal{L}_{\text{SFT}} = -\sum_{t} \log P_\theta(y_t | x, y_{<t})\]其中 $x$ 是用户问题,$y$ 是标注者写的回答。
深层理解:激活已有的能力
但这只是表象。真正有趣的问题是:为什么 13,000 条数据就够了?
答案是:SFT 并没有教会模型新的知识或能力。这些能力在预训练阶段就已经学会了——模型已经知道什么是好的写作、什么是准确的信息、什么是有条理的回答。SFT 做的事情更像是”翻开正确的开关”。
类比:想象你雇了一个精通多国语言的翻译官,但他不知道自己被雇来做翻译。他可能会用这些语言能力写小说、做文字游戏、或者只是随便聊天。你需要做的不是教他语言(他已经会了),而是告诉他”当有人递给你一段英文时,请翻译成中文”。
SFT 本质上是在做行为格式化(behavioral formatting)——在模型已有的巨大能力空间中,标定一个特定的输出分布区域:”当收到问题时,用这种方式回答。”
SFT 数据的构成
数据从哪来?
InstructGPT 的 SFT 数据来自三个来源:
- 用户提交的真实问题(通过 OpenAI API 收集)——保证了分布的真实性
- 标注者自创的问题——确保覆盖多样化的指令类型
- 从少量种子任务扩展——通过变换措辞、增加约束来增加多样性
什么算”好回答”?
标注者被要求遵守几个原则:
- 有用:直接回答问题,不绕弯子
- 真实:不编造信息,不确定时说”我不确定”
- 无害:不产生歧视、暴力或危险内容
- 结构化:分点列出、有条理、易于阅读
一个关键的设计选择:标注者不需要是领域专家。他们写的不是最专业的回答,而是一个有教养的、负责任的助手会给出的回答。这个标准虽然不完美,但它足够清晰,让不同标注者之间能保持一致性。
数据多样性比数据量更重要
后来的研究(LIMA, 2023)进一步证实了一个激进的观点:SFT 可能只需要 1000 条精选数据。LIMA 用仅仅 1000 条高质量示范数据微调 LLaMA-65B,效果接近用几万条数据的 GPT-4。
这强化了我们之前的洞察:SFT 不是在”注入新知识”,而是在”激活正确的行为模式”。只要示范数据覆盖了足够多的格式类型(问答、创作、分析、编程……),数量本身并不是关键。
SFT 为什么有效?——更深的解释
从信息论角度
| 预训练后,模型的输出分布 $P_{\text{pretrain}}(y | x)$ 是一个非常宽泛的分布——给定任何输入,它对各种各样的续写都给出非零概率。 |
SFT 的本质是做 分布窄化(distribution narrowing):把模型的输出分布从”所有统计上合理的续写”收窄到”符合助手行为规范的回答”。
\[P_{\text{SFT}}(y|x) \approx P_{\text{pretrain}}(y|x, \text{context}=\text{"你是一个有用的助手"})\]某种意义上,SFT 等价于找到一个隐式的 system prompt,然后把它”烧录”到模型的权重里。
从优化景观角度
另一个理解方式:预训练已经把模型的参数带到了一个”平坦的高原”上——在这个区域内有很多不同的”好”配置。SFT 的梯度更新只需要做很小的参数移动,就能把模型推到这个平坦区域内一个特定的位置——”助手行为”对应的位置。
这解释了为什么:
- 需要的数据量很少(不需要翻越大的 loss barrier)
- 学习率要很小(2e-5 级别,避免跳出好的参数区域)
- Epoch 数通常只需 1-3(多了会过拟合到特定表达方式)
SFT 的局限性
天花板问题
SFT 的上限取决于标注者能写出的最佳回答质量。问题是:
- 写出一个好回答很难(需要专业知识、写作能力、耐心)
- 写出一个最优回答几乎不可能(总有更好的措辞、更全面的覆盖)
- 但判断两个回答哪个更好要容易得多
这个不对称性——”评判比创作容易”——正是 RLHF 第二阶段(奖励模型)存在的根本原因。
模式模仿的局限
SFT 训练出的模型学到的是标注者行为的表面模式。如果标注者倾向于写很长的回答,模型就会学到”回答要长”。如果标注者倾向于使用特定的句式开头(”好的,让我来解释……”),模型也会模仿。
但模型学到的是”形”而非”神”——它模仿了什么样的回答看起来像好回答,但没有真正理解好回答好在哪里。这种浅层模仿会导致:
- 有时候答案看起来很专业,但内容是错的(幻觉)
- 模型学会了”回答的格式”,但对内容质量的判断力仍然不够
- 面对边界情况(模糊请求、有争议话题),模型缺乏内在的”判断标准”
SFT 是必要的但不充分的
总结来说,SFT 解决了一个基础问题(让模型知道”该回答问题”),但留下了一个更深层的问题(让模型知道”什么是好回答”)。后者需要更精细的信号——这就是奖励模型的舞台。
现代 SFT 的实践要点
如果你今天要对一个开源模型做 SFT,以下是经过大量实践验证的关键参数:
| 参数 | 推荐值 | 原因 |
|---|---|---|
| 学习率 | 1e-5 ~ 2e-5 | 过大会破坏预训练知识 |
| Epoch | 1-3 | 多了过拟合表面模式 |
| 数据量 | 5K-50K | 质量 » 数量 |
| 数据多样性 | 覆盖 10+ 任务类型 | 格式多样性是关键 |
| Loss 计算 | 只算回答部分 | 问题部分不需要学习 |
| 上下文长度 | 2048-8192 | 根据目标应用调整 |
下一篇预告
SFT 教会了模型”回答问题”,但它无法教会模型”什么是好回答”。下一步,我们需要一种方法,把人类脑中那些模糊的、直觉性的偏好判断(”这个回答感觉更好”)转化为精确的数字信号。这就是奖励模型的工作——而它建立在一个 1952 年的数学模型之上:Bradley-Terry 模型。下一篇,我们深入这个巧妙的数学工具。