1. DPO
Rafailov et al. (2023)基于RLHF中PPO的优化式推导出最优奖励函数表达式:$r(x, y)=\beta log\frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}+\beta logZ(x)$,将该奖励函数表达式带入BT-model得到DPO的损失函数表达式:
2. Simple-DPO
Meng et al. (2024)考虑到DPO的奖励函数有以下两个缺点:1)训练DPO时需要一个额外的reference 模型,增大训练开销;2)DPO的优化式和inference阶段存在差异。具体来讲,inference阶段时需要优化最大平均对数似然:
因此Simple-DPO考虑将奖励函数表达式改为:
此外,为了进一步强化模型对winning response的拟合,弱化对losing response的拟合,作者在BT公式中引入超参数$\gamma \ (\gamma>0)$,表达式如下:
3. KTO
KTO loss (Ethayarajh et al. (2024))与DPO相比,不需要为每个prompt配对提供偏好回答和拒绝回答。它仅需要一个答案,并给出这个答案一个标签来指示该答案的质量是正面还是负面的。KTO不需要偏好回答的数量与拒绝回答的数量相同,简化数据的准备流程。
前景理论(prospect theory),Tversky & Kahneman用下面方程建模人类价值: $$ v(z,z_{ref};\alpha,\lambda) = \begin{cases} (z-z_{ref})^\alpha & \text{if } z \ge z_{ref} \\ -\lambda(z_{ref}-z)^\alpha & \text{if } z < z_{ref} \end{cases} $$ 价值函数$v:z\rightarrow R$将一个输出$z$想对一个参考值$z_{ref}$映射到其感知价值,反映人类相比起相同大小回报,对损失的敏感性更大,其中$\alpha$控制价值变化速度,$\lambda$反应对损失的敏感程度。
基于上述效用方程,作者做了一定修改使其更适合模型训练,损失函数如下:
4. Step-DPO
Step-DPO (Lai et al. (2024))主要解决大模型处理数学这类需要较长reasoning过程效果不佳的问题,作者指出用传统DPO训练数学类偏好数据存在一定缺陷,即数学类问题的reasoning过程往往是在中间的一些step开始出现错误,而前面的step推理是正确的,因此直接将整条数据归类为win或者lose都不合适。基于此,作者提出Step-DPO方法,即在initial steps之后对数据划分成win和lose,具体损失函数如下:
此外本文提出了一种偏好数据构建流水线,来获取偏好数据${x,s_{1\sim k-1},s_{win},s_{lose}}$,具体流程如下:
Step1: 收集数学问题$x$和相关答案$\hat y$的数据集$D_0={(x,\hat y)}$,用模型$\pi_{ref}$使用问题$x$进行推理(添加CoT),得到每条问题的推理过程以及最终答案,从所有数据中挑选最终答案出错的数据得到子数据集$D_1={(x,\hat y, y)}$,其中$y$为对应的错误答案的generations。
Step2: 针对数据集$D_1$,其中$y=s1,s2,\dots,s_n$,可以拆分成一系列推理步骤,通过人工或者GPT4逐条检测这些推理步骤直至发现推理出错的那一步$k$,将$s_k$作为$s_{lose}$,从而得到子数据集$D_2={(x,\hat y,s_{1\sim k-1},s_{lose})|x\in D_1}$。
Step3: 为了获取正确的推理步骤,通过$D_2$中的数据,使用$\pi_{ref}$模型基于问题$x$和前面$k-1$步正确推理作为prompt进行inference得到$y_{cont}$: $$ y_{cont}\sim\pi_{ref}(y|x;s_{1\sim k-1}) $$ 从得到正确答案的$y_{cont}$中,选择其中的第一个推理步骤作为$s_{win}$,得到最终的数据集$D_{final}={(x,s_{1\sim k-1},s_{lose},s_{win})|x\in D_2}$。
需要注意的一点是,在Step3中,可能出现最终答案正确但是中间推理步骤错误的情况,因此这里需要人工或者GPT4对$s_{win}$做筛选。
5. ORPO
Hong et al. (2024)考虑到SFT不能预防模型生成lose response,同时考虑使用偏好对齐如DPO等方法需要reference model开销较大且流程繁琐,因此本文提出了一种在SFT方法上增加一个能兼顾DPO这类偏好对齐的损失,具体做法:
对于一条训练数据${x, y}$,其对数似然概率:
6. R-DPO
Park et al. (2024)考虑DPO在长度控制上的不足:容易生成过长啰嗦的文本,考虑在DPO的损失中引入对长度的约束,具体损失函数如下:
7. CPO
Xu et al. (2024)简化DPO (Rafailov et al. (2023))损失函数,将$\pi_{ref}$用均匀分布替代,并在偏好对齐中再次引入SFT损失约束,具体损失函数如下:
8. sDPO
Kim et al. (2024)提出了一个简单有效的DPO改进方案,作者发现DPO的损失优化存在理论下界
关于偏好数据的切分上,作者提出的思路是,按照偏好数据对的偏好强弱程度划分(即训练的难易程度,类比课程学习,由易到难的学习),因此作者思路是使用一个extra reward model(文章用的应该是最开始的reference model,就是sft后的model)对所有偏好数据对打分(这里感觉是计算似然,毕竟如果是sft后的model也不是reward model),计算每个子数据集的预测准确率(即chosen的分数高于rejected的比例),文章DPO数据集是涵盖很多不同source的,所以这里直接按照不同的source进行划分。最终就是预测准确率最高的(即最容易区分的)先训练,由易到难。
我个人想法是如果不是想文章中使用多个source的偏好数据,而是只有一个source的话,划分数据的方式可以改为使用一个extra reward model对每条偏好数据对打分,按照(chosen_score - rejected_score)的值由高到低进行排序,然后再划分成不同子数据集,也是一种比较直观的想法吧。总之这篇工作给人感觉确实是简单有效。
References
[1] Rafailov et al. “Direct Preference Optimization: Your Language Model is Secretly a Reward Model” NeurIPS 2023.
[2] Meng et al. “SimPO: Simple Preference Optimization with a Reference-Free Reward” arXiv preprint arXiv:2405.14734 (2024).
[3] Ethayarajh et al. “KTO: Model Alignment as Prospect Theoretic Optimization” arXiv preprint arXiv:2402.01306 (2024).
[4] Lai et al. “STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS” arXiv preprint arXiv:2406.18629 (2024).
[5] Hong et al. “ORPO: Monolithic Preference Optimization without Reference Model” arXiv preprint arXiv:2403.07691 (2024).
[6] Park et al. “Disentangling Length from Quality in Direct Preference Optimization” arXiv preprint arXiv:2403.19159 (2024).
[7] Xu et al. “Contrastive Preference Optimization: Pushing the Boundaries of LLM Performance in Machine Translation” arXiv preprint arXiv:2401.08417 (2024).
[8] Kim et al. “sDPO: Don’t Use Your Data All at Once” arXiv preprint axXiv:2403.19270 (2024).