一人工程 · solus opus

← 全部作品

simedw一人工程DPORLHF评估β共识样本

DPO β=0.03 是甜蜜点:simedw 的偏好学习

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。