SFT 只给模型看了「好的回答长什么样」。但这不够。
只看正例的问题
想象你在教一个孩子画画。你给他看了一百幅好画作为示范。他学会了画画——但他不知道什么样的画是「不好的」。他可能画出来的画某些方面很好(模仿了好画的某些特征),但另一些方面很糟(因为他不知道要避免什么)。
SFT 也是这样。模型从教师的回答中学到了「好回答的平均样子」,但它不知道:
- 什么样的回答是啰嗦的(应该更简洁)
- 什么样的回答是不准确的(应该更谨慎)
- 两个都不错的回答中,哪个更好
偏好数据
偏好优化使用的训练数据不是单个回答,而是成对的回答——对于同一个问题,给出两个回答,标注哪个更好:
用户问题:Python 中怎么反转一个列表?
回答 A(更好):
用 list.reverse() 或 list[::-1]。前者就地修改,后者返回新列表。
回答 B(更差):
你可以使用 Python 内置的 reverse 方法来反转列表哦!这是一个非常常用的操作呢!
具体来说,你可以这样做:my_list.reverse(),这样就可以反转列表啦!
另外还有一种方法是……(冗长地继续了三段)
两个回答都是「对的」——信息没有错误。但 A 更简洁、更有效。模型需要学会区分这种差异。
偏好数据的来源
Sophia 使用了 1,953 对偏好数据。这些数据可以来自:
- 人工标注:让标注员比较两个回答,选出更好的那个
- 模型生成 + 人工排序:让模型生成多个回答,人工排出好坏
- 基于规则的自动标注:用长度、格式、准确性等指标自动判断
1,953 对看起来不多——但偏好优化的效率很高,少量精心挑选的对比数据就能显著改善模型的行为。
下一章节来看偏好优化的主要算法——DPO。