DPO β=0.03 是甜蜜点:simedw 的偏好学习
simedw 的 DPO 实验跑出一个干净的曲线:β 不是越大越好,太大反而破坏模型。
实验
跑 4 档 β:
- base:24.55%
- β=0.01:61.08%
- β=0.03:57.14%
- β=0.10:38.10%
- 共识样本(多个评估者一致)下 β=0.03:69.05%
「偏好率」= 模型 rollout vs 基准 rollout 被评估者选中的概率。
甜蜜点
- β=0.01 偏好率 61.08%,已经远超 base 的 24.55%。
- β=0.03 偏好率 57.14%,比 β=0.01 略低但稳健。
- β=0.10 偏好率暴跌到 38.10%,比 base 还差。
- 共识样本(去掉评估者分歧大的 pair)后 β=0.03 跳到 69.05%。
直觉:β 控制「模型偏离参考模型多远」。β 小 → 偏离小但偏好的梯度信号弱;β 大 → 偏离大但模型被推出舒适区。β=0.03 是「既敢改、又不过度改」的甜蜜点。
共识样本
DPO 数据来源:评估者对同一对 chosen/rejected 评分。评分一致性差的对去掉,剩下的就是「大家都觉得 A 比 B 好」的硬偏好对。
共识样本下 β=0.03 从 57.14% 升到 69.05%。这是「去噪」的力量——评估者不一致的 pair 里很多是标注噪声,硬偏好更纯净。
一人工程的角度
OpenAI 标几万对偏好 + 训 reward model + PPO。simedw 标几千对 + DPO + β=0.03 + 共识去噪。
规模差 10-100 倍,结果方向一致。
OpenAI 的方法是「人多 → 偏好稳 → 训大模型」。simedw 的方法是「人少 → 去噪 → 训小模型」。simedw 用去噪补偿了规模。
为什么 β 不能太大
DPO 的目标函数:max log σ(β · (log π(chosen)/π_ref(chosen) - log π(rejected)/π_ref(rejected)))。
β 大 → 优化器把 chosen 的概率无限推高、rejected 的概率无限压低。模型概率分布的「尾部」被破坏,rollout 时容易生成奇怪的 outlier。
β 小 → 优化温和,但偏好的梯度信号弱,学不动。
β=0.03 是「温和」的下限附近——再小就学不动,再大就开始破坏分布。
一人工程的方法学
simedw 14 次实验,DPO 那一次不是第一次跑出来的:
- 第一版 DPO:偏好率掉到 38%。β=0.10。模型崩坏。
- 第二版:β=0.01,偏好率 61%。但评估者分歧大,有些 pair 是评估者自己也没把握的。
- 第三版:共识去噪,β=0.03,69.05%。稳定。
每一次失败都写下原因——「为什么这个 β 没用」。14 次实验公开记里第 4 次就是这么写下来的。
一人工程与 OpenAI 的对照
OpenAI 走「人海 + 大模型」:100+ 标注员,几万对偏好,PPO 训 175B 模型。simedw 走「人少 + 去噪 + 小模型」:几个评估者,几千对共识偏好,DPO 训 125M 模型。
方法不同,但都收敛到「偏好比绝对分好 + 共识比单标好 + β 不能太大」三条结论。
14 次实验里 DPO 的位置
- 1-3:MIDI 表征(note-on/note-off 飘音 → grammar-masked 慢 → compound 落地)
- 4:DPO β=0.10 崩坏
- 5:β=0.01 偏好 61%
- 6:β=0.03 偏好 57%
- 7:共识去噪 β=0.03 偏好 69%
- 8-14:scheduled sampling / 长会话截断 / 部署到 Core ML / 量化 / Apple 审核
β=0.03 是第 7 次实验的产物。第 4 次失败 + 第 5/6 次微调 + 第 7 次共识去噪。三个版本迭代出 14 次实验里最有价值的一条曲线。
签名
solus opus。