一句话定义:ORPO(Odds Ratio Preference Optimization,赔率比偏好优化)是一种把监督微调(SFT,Supervised Fine-Tuning)和偏好对齐合并成一次训练的微调方法,它最大的特点是——不需要参考模型(reference model)。
它在解决什么问题
传统路线是两段式:先用高质量示范数据做 SFT,让模型学会"好好说话";再单独做一轮偏好对齐,让它学会"哪种回答更好"。后一段的经典做法是 DPO(Direct Preference Optimization),而 DPO 需要一个冻结的参考模型,用来当"对照组",防止模型跑偏。
这就好比教实习生写周报。SFT 是发一批范文让他照着学;DPO 是等他学完,再拿"新版的他和学完范文时的旧版他"作对比,看新版是否更偏向好答案——所以旧版模型得一直冻在显存里陪跑。RLHF(基于人类反馈的强化学习)更重,还要额外养一个奖励模型。
ORPO 换了个思路:直接给成对的周报标注——"这篇好、那篇差"。好答案本身就是范本,于是 SFT 和偏好对齐被压进同一个损失函数:一边提高好答案的似然,一边用"赔率比"(odds ratio)压低差答案的相对胜算。
赔率是概率的另一种说法:好答案的胜算除以差答案的胜算,比值越大,说明模型越偏爱对的答案。ORPO 就是把这个比值往大的方向推。参照物不在模型外部,而藏在"好答案 vs 差答案"的对比里。
和邻居们的区别
| 方法 | 需要几个模型 | 训练阶段 | 数据形态 |
|---|---|---|---|
| SFT | 策略模型 1 个 | 1 段 | 示范答案 |
| RLHF / PPO | 策略 + 奖励 + 参考 | 多段 | 示范 + 偏好排序 |
| DPO | 策略 + 参考 | 2 段(SFT→偏好) | 偏好对 |
| ORPO | 只有策略模型 | 1 段 | 偏好对即可 |
差别最实在的地方在"需要几个模型"。参考模型不是白占地方的:它要占显存,每次前向还要多算一遍。
为什么小团队更爱它
一是省资源。少一个模型常驻显存,同样的卡能跑更大的模型或更长的序列。二是省流程。不用先跑完 SFT、再改配置切偏好训练,两套超参、两次调参的麻烦没了。三是省数据。偏好数据集里天然带 chosen / rejected 两栏,很多开源偏好数据拿来就能开训,不必再额外凑一大批纯示范语料。四是试错快。单机几卡、甚至量化后单卡,就能把一轮偏好对齐跑通,这对没有大规模集群的团队是决定性的。
需要留意的地方
ORPO 不是万能药。偏好数据的质量直接决定上限,标注里混进噪声,模型会连噪声一起学。平衡两项损失的那个权重系数也需要调,调不好容易偏向"只学格式"或"只压差答案"。它和 DPO、SimPO、KTO 属于同一族"简化偏好对齐"的思路,选哪个主要看手里的数据长什么样、卡有多少。具体实现细节和最新变体,以官方页面和自己在小数据上的实测为准。
