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的损失函数表达式:

$$ \mathcal L_{DPO}(\pi_\theta;\pi_{ref})=-\mathbb E_{(x, y_w, y_l)\sim\mathcal D}[log\ \sigma(\beta log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)}-\beta log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)})] $$

2. Simple-DPO

Meng et al. (2024)考虑到DPO的奖励函数有以下两个缺点:1)训练DPO时需要一个额外的reference 模型,增大训练开销;2)DPO的优化式和inference阶段存在差异。具体来讲,inference阶段时需要优化最大平均对数似然:

$$ p_\theta(y|x)=\frac{1}{|y|}log\ \pi_\theta(y|x)=\frac{1}{|y|}\sum_{i=1}^{|y|}log\ \pi_\theta(y_i|x,y_{< i}) $$

因此Simple-DPO考虑将奖励函数表达式改为:

$$ r_{SimPO}(x, y)=\frac{\beta}{|y|}log\ \pi_\theta(y|x)=\frac{\beta}{|y|}\sum_{i=1}^{|y|}log\ \pi_\theta(y_i|x,y_{< i}) $$

此外,为了进一步强化模型对winning response的拟合,弱化对losing response的拟合,作者在BT公式中引入超参数$\gamma \ (\gamma>0)$,表达式如下:

$$ p(y_w>y_l|x)=\sigma(r(x,y_w)-r(x,y_l)-\gamma) $$
从而,Simple-DPO的优化函数:
$$ \mathcal L_{SimPO}(\pi_\theta)=-\mathbb E_{(x,y_w,y_l)\sim\mathcal D}[log\ \sigma(\frac{\beta}{|y_w|}log\ \pi_\theta(y_w|x)-\frac{\beta}{|y_l|}log\ \pi_\theta(y_l|x)-\gamma)] $$

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$反应对损失的敏感程度。

基于上述效用方程,作者做了一定修改使其更适合模型训练,损失函数如下:

$$ \mathcal L_{KTO}(\pi_\theta,\pi_{ref})=\mathbb E_{x,y\sim\mathcal D}[w(y)(1-v_{KTO}(x, y;\beta))] $$
其中
$$ r_{KTO}(x,y)=\beta log\frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}\\\\ z_{ref}=\mathbb E_{x^\prime\sim\mathcal D}[\beta KL(\pi_\theta(y^\prime|x^\prime)||\pi_{ref}(y^\prime|x^\prime))]\\\\ v_{KTO}(x)=\begin{cases} \sigma(r_{KTO}(x,y)-z_{ref})& if\ y\sim y_{desirable}|x\\ \sigma(z_{ref}-r_{KTO}(x, y))& if\ y\sim y_{undesirable}|x \end{cases}\\\\ w(y)=\begin{cases} \lambda_D& if\ y\sim y_{desirable}|x\\ \lambda_U& if\ y\sim y_{undesirable}|x \end{cases} $$

4. Step-DPO

Step-DPO (Lai et al. (2024))主要解决大模型处理数学这类需要较长reasoning过程效果不佳的问题,作者指出用传统DPO训练数学类偏好数据存在一定缺陷,即数学类问题的reasoning过程往往是在中间的一些step开始出现错误,而前面的step推理是正确的,因此直接将整条数据归类为win或者lose都不合适。基于此,作者提出Step-DPO方法,即在initial steps之后对数据划分成win和lose,具体损失函数如下:

$$ \mathcal L_{Step-DPO}(\theta)=-\mathbb E_{x,s_{1\sim k-1},s_{win},s_{lose}\sim\mathcal D}[log\ \sigma(\beta log\frac{\pi_\theta(s_{win}|x;s_{1\sim k-1})}{\pi_{ref}(s_{win}|x;s_{1\sim k-1})})-\beta log\frac{\pi_\theta(s_{lose}|x;s_{1\sim k-1})}{\pi_{ref}(s_{lose}|x;s_{1\sim k-1})}] $$

此外本文提出了一种偏好数据构建流水线,来获取偏好数据${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}$,其对数似然概率:

$$ logP_\theta(y|x)=\frac{1}{m}\sum_{t=1}^mlog\ P_\theta(y_t|x,y_{< t}) $$
定义Odds Ratio $odds_\theta(y|x)=\frac{P_\theta(y|x)}{1-P_\theta(y|x)}$表示模型生成$y$相比不生成$y$的概率倍数,基于此定义$OR_\theta(y_w, y_l)$:
$$ OR_\theta(y_w,y_l)=\frac{odds_\theta(y_w|x)}{odds_\theta(y_l|x)} $$
表示模型在给定$x$条件下相比于生成$y_l$,更可能生成$y_w$的程度。最终改良后的SFT损失函数:
$$ \mathcal L_{ORPO}=\mathbb E_{(x,y_w,y_l)\sim\mathcal D}[\mathcal L_{SFT}+\lambda\cdot\mathcal L_{OR}]\\\\ \mathcal L_{OR}=-log\ \sigma(log\frac{odds_\theta(y_w|x)}{odds_\theta(y_l|x)}) $$

6. R-DPO

Park et al. (2024)考虑DPO在长度控制上的不足:容易生成过长啰嗦的文本,考虑在DPO的损失中引入对长度的约束,具体损失函数如下:

$$ \mathcal L_{R-DPO}(\pi_\theta;\pi_{ref})=-\mathbb E_{(x,y_w,y_l)\sim\mathcal D}[log\ \sigma (\beta log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)}-\beta log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)})+\alpha|y_w|-\alpha|y_l|] $$

7. CPO

Xu et al. (2024)简化DPO (Rafailov et al. (2023))损失函数,将$\pi_{ref}$用均匀分布替代,并在偏好对齐中再次引入SFT损失约束,具体损失函数如下:

$$ \mathcal L_{CPO}=-\mathbb E_{(x,y_w,y_l)\sim\mathcal D}[ log\ \sigma(\beta log\ \pi_\theta(y_w|x)-\beta log\ \pi_\theta(y_l|x))+\lambda\ log\ \pi_\theta(y_w|x)] $$

8. sDPO

Kim et al. (2024)提出了一个简单有效的DPO改进方案,作者发现DPO的损失优化存在理论下界

$$ \begin{align*} \mathcal L_{DPO}(\pi_\theta, \pi_{ref}) &=-\mathbb E_{(x, y_w, y_l)\sim\mathcal D} [log\ \sigma(\beta log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)})]\\ &=-\mathbb E_{(x,y_w,y_l)\sim\mathcal D }[log\ \sigma(\beta\cdot(\gamma_{\pi_\theta}(x, y_w, y_l) - \gamma_{\pi_{ref}}(x, y_w, y_l)))] \end{align*} $$
其中$\gamma_\pi(x, y_w, y_l)=log\frac{\pi(y_w|x)}{\pi(y_l|x)}$,即正例和负例句子的对数似然差值,理论上,优化DPO损失的过程最终导致$\gamma_{\pi_\theta}>\gamma_{\pi_{ref}}$。因此$\gamma_{\pi_{ref}}$可以看作reference model的下界。基于该motivation,作者做了初步验证试验,即使用不同的模型作为reference model进行DPO训练,发现reference model越强,最后训练出来的$\pi_\theta$性能越好,从而在实验上验证这一点。基于此作者提出step-wise DPO的方法,即对一批偏好数据,不要一次性训练完,而是将数据做切分,每次用一小批数据训练迭代一版模型,下一次训练的时候用上一轮训练好的$\pi_\theta$作为新的reference model训练,这样可以不断提高策略模型的能力下届。

关于偏好数据的切分上,作者提出的思路是,按照偏好数据对的偏好强弱程度划分(即训练的难易程度,类比课程学习,由易到难的学习),因此作者思路是使用一个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).