RLHF的替代算法之DPO原理解析:从Zephyr的DPO到Claude的RAILF

前言

本文的成就是一个点顺着一个点而来的,成文过程颇有意思

  1. 首先,如上文所说,我司正在做三大LLM项目,其中一个是论文审稿GPT第二版,在模型选型的时候,关注到了Mistral 7B(其背后的公司Mistral AI号称欧洲的OpenAI,当然 你权且一听,切勿过于当真)
  2. 而由Mistral 7B顺带关注到了基于其微调的Zephyr 7B,而一了解Zephyr 7B的论文,发现它还挺有意思的,即它和ChatGPT三阶段训练方式的不同在于:
    在第二阶段标注排序数据的时候,不是由人工去排序模型给出的多个答案,而是由AI比如GPT4去根据不同答案的好坏去排序
    且在第三阶段的时候,用到了一个DPO的算法去迭代策略,而非ChatGPT本身用的PPO算法去迭代策略
  3. 考虑到ChatGPT三阶段训练方式我已经写得足够完整了(instructGPT论文有的细节我做了重点分析、解读,论文中没有的细节我更做了大量的扩展、深入、举例,具体可以参见《ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT》)
    而有些朋友反馈到DPO比PPO好用(当然了,我也理解,毕竟PPO那套RL算法涉及到4个模型,一方面是策略的迭代,一方面是价值的迭代,理解透彻确实不容易),所以想研究下DPO
  4. 加之ChatGPT的最强竞品Claude也用到了一个RAILF的机制(和Zephyr 7B的AI奖励/DPO颇有异曲同工之妙),之前也曾想过写来着,但此前一直深究于ChatGPT背后的原理细节,现在也算有时间好好写一写了

综上,便拟定了本文的标题

第一部分 什么是DPO

今年5月份,斯坦福的一些研究者提出了RLHF的替代算法:直接偏好优化(Direct Preference Optimization,简称DPO),其对应论文为《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》

1.1 DPO与RLHF的本质区别

那其与ChatGPT所用的RLHF有何本质区别呢,简言之

  1. 在做了SFT之后,RLHF将奖励模型拟合到人类偏好数据集上,然后使用RL方法比如PPO算法优化语言模型的策略
    即经典的ChatGPT三阶段训练方式:1) supervised fine-tuning (SFT); 2) preferencesampling and reward learning and 3) reinforcement-learning optimization

    虽然RLHF产生的模型具有令人印象深刻的会话和编码能力,但RLHF比监督学习复杂得多,其涉及训练多个LM和在训练循环中从LM策略中采样(4个模型,涉及到经验数据的采集,以及策略的迭代和价值的迭代,如果不太熟或忘了,请参见《ChatGPT技术原理解析》),从而产生大量的计算成本
    While RLHF produces models with impressive conversational and coding abilities, the RLHFpipeline is considerably more complex than supervised learning, involving training multiple LMs andsampling from the LM policy in the loop of training, incurring significant computational costs.
  2. 相比之下,DPO通过简单的分类目标直接优化最满足偏好的策略,而没有明确的奖励函数或RL
    DPO directly optimizes for the policy best satisfying the preferences with a simple classification objective, without an explicit reward function or RL

更具体而言,DPO的本质在于增加了被首选的response相对不被首选的response的对数概率(increases the relative log probability of preferred to dispreferred responses),但它包含了一个动态的、每个示例的重要性权重,以防止设计的概率比让模型的能力退化(it incorporates a dynamic, per-example importance weight that prevents the model degeneration that we find occurs with a naive probability ratio objective)

与RLHF一样,DPO依赖于理论偏好模型,衡量给定的奖励函数与经验偏好数据的一致性(如果接下来这一段没太看明白,没事 不急,下节1.2节会重点解释,^_^)

  • 在SFT阶段,针对同一个prompt x生成答案对\left(y_{1}, y_{2}\right) \sim \pi^{\mathrm{SFT}}(y \mid x),然后人工标注出y_w是相对y_l是更好的答案,接着通过这些偏好数据训练一个奖励模型r^{*}(y, x)
    那怎么建模偏好损失函数呢,Bradley-Terry(BT)模型是一个常见选择(当然,在可以获得多个排序答案的情况下,Plackett-Luce 是更一般的排序模型)。BT 模型规定人类偏好分布p *可以表示成
    p^{*}\left(y_{1} \succ y_{2} \mid x\right)=\frac{\exp \left(r^{*}\left(x, y_{1}\right)\right)}{\exp \left(r^{*}\left(x, y_{1}\right)\right)+\exp \left(r^{*}\left(x, y_{2}\right)\right)}

    假定我们从上面的分布中采样出来一个数据集 
    \mathcal{D}=\left\{x^{(i)}, y_{w}^{(i)}, y_{l}^{(i)}\right\}_{i=1}^{N}

    同时,建立我们的奖励模型r_{\phi}(x, y),然后对其参数做最大似然估计,从而将问题建模为二分类问题,并使用负对数似然损失:
    \mathcal{L}_{R}\left(r_{\phi}, \mathcal{D}\right)=-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(r_{\phi}\left(x, y_{w}\right)-r_{\phi}\left(x, y_{l}\right)\right)\right]
    与RLHF类似,其中\sigma是logistic函数,r_{\phi}(x, y)通常从SFT模型\pi^{\mathrm{SFT}}(y \mid x)初始化,并在transformer结构的顶部添加一个线性层,该层对奖励值产生单个标量预测
  • 接下来,如果是ChatGPT所用的RLHF的话,则是在训练好的奖励模型的指引下迭代策略,其迭代策略的方法是PPO算法
    \max _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[r_{\phi}(x, y)\right]-\beta \mathbb{D}_{\mathrm{KL}}\left[\pi_{\theta}(y \mid x) \| \pi_{\mathrm{ref}}(y \mid x)\right]
    其中,\beta修正项是对奖励函数的修正,避免迭代中的策略\pi_{\theta}(y \mid x)与基线策略\pi_{\mathrm{ref}}(y \mid x)偏离太远
    r(x, y)=r_{\phi}(x, y)-\beta\left(\log \pi_{\theta}(y \mid x)-\log \pi_{\text {ref }}(y \mid x)\right)

    DPO利用从奖励函数到最优策略的解析映射,这使我们能够将奖励函数上的偏好损失函数转换为策略上的损失函数(our key insight is to leverage an analyticalmapping from reward functions to optimal policies, which enables us to transform a loss functionover reward functions into a loss function over policies)
    具体做法是给定人类对模型响应的偏好数据集,DPO使用简单的二元交叉熵目标优化策略,而无需在训练期间明确学习奖励函数或从策略中采样(Given a dataset of human preferences overmodel responses, DPO can therefore optimize a policy using a simple binary cross entropy objective,without explicitly learning a reward function or sampling from the policy during training)
    \pi_{r}(y \mid x)=\frac{1}{Z(x)} \pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)

    其中
    Z(x)=\sum_{y} \pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)
    实际上,我们使用 ground-truth 奖励函数 r^{*} 的最大似然估计值 r_{\phi},估计配分函数Z(x)依然十分困难,这使得这种表示方法在实践中难以利用,那咋办呢?

1.2 DPO的逐步推导:力求清晰易懂

1.2.1 带KL约束奖励的最大化目标的推导(特别是公式3到4)

我们从头到尾梳理一下,且以下第几点则代表公式几

  1. p^{*}\left(y_{1} \succ y_{2} \mid x\right)=\frac{\exp \left(r^{*}\left(x, y_{1}\right)\right)}{\exp \left(r^{*}\left(x, y_{1}\right)\right)+\exp \left(r^{*}\left(x, y_{2}\right)\right)}
  2. \mathcal{L}_{R}\left(r_{\phi}, \mathcal{D}\right)=-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(r_{\phi}\left(x, y_{w}\right)-r_{\phi}\left(x, y_{l}\right)\right)\right]
  3. 公式3:\max _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[r_{\phi}(x, y)\right]-\beta \mathbb{D}_{\mathrm{KL}}\left[\pi_{\theta}(y \mid x) \| \pi_{\mathrm{ref}}(y \mid x)\right]
  4. 通过上面公式3,可以得到公式4:
    \pi_{r}(y \mid x)=\frac{1}{Z(x)} \pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)
    ————————————————
    这一步很关键,是怎么推导出来的呢?
    对于公式3,一方面有
    \begin{aligned} \max _{\pi_{\theta}} & \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}[r(x, y)]-\beta \mathbb{D}_{\mathrm{KL}}\left[\pi_{\theta}(y \mid x) \| \pi_{\mathrm{ref}}(y \mid x)\right] \\ & =\max _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}[r(x, y)]-\beta \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}\right] \\ & =\max _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[r(x, y)-\beta \log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}\right] \\ & =\min _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[\beta \log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}-r(x, y)\right] \\ & =\min _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}-\frac{1}{\beta} r(x, y)\right] \\ & =\min _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)}\right] \end{aligned}

    还是针对公式3,另一方面,假定在奖励函数r下的最优策略为\pi _r,公式3的目标自然便是要得到最优策略,因此公式3等价于最小化\pi _\theta\pi _r的KL散度,即有
    \begin{aligned} \max _{\pi_{\theta}} & \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}[r(x, y)]-\beta \mathbb{D}_{\mathrm{KL}}\left[\pi_{\theta}(y \mid x) \| \pi_{\mathrm{ref}}(y \mid x)\right] \\ & =\min _{\pi_{\theta}} \mathbb{D}_{\mathrm{KL}}\left[\pi_{\theta}(y \mid x)|| \pi_{r}(y \mid x)\right] \\ & =\min _{\pi_{\theta}} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_{\theta}(y \mid x)}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{r}(y \mid x)}\right] \end{aligned}

    因此,结合上面针对公式3两个方面的推导,可得
    \min _{\pi_{\theta}} \mathbb{E}_{x, y}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)}\right]=\min _{\pi_{\theta}} \mathbb{E}_{x, y}\left[\log \frac{\pi_{\theta}(y \mid x)}{\pi_{r}(y \mid x)}\right]
    从而有\pi_{r}(y \mid x)\pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)正相关,因此不妨设
    \pi_{r}(y \mid x)=\frac{1}{Z(x)} \pi_{\text {ref }}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)
    其中
    Z(x)=\sum_{y} \pi_{\text {ref }}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)
    这个Z(x)函数只与 x 和基线策略\pi_{r e f}有关,而不依赖于策略 \pi,其目的是使得右边满足取值在[0,1],相当于起到一个归一化的效果
  5. 为了根据其对应的最优策略\pi_{r}、基线策略\pi_{r e f}和未知的配分函数Z(\cdot),来表示奖励函数
    首先对上面公式4
    \pi_{r}(y \mid x)=\frac{1}{Z(x)} \pi_{\mathrm{ref}}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)
    的两边取对数,然后通过一些代数运算得到公式5
    r(x, y)=\beta \log \frac{\pi_{r}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}+\beta \log Z(x)

    假定最优奖励函数 r^{*}下对应的最优模型策略是\pi^{*} ,则有
    r^{*}(x, y)=\beta \log \frac{\pi^{*}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}+\beta \log Z(x)
  6. 考虑到最优策略不确定,因此先用参数化的策略\pi _\theta来表示,相应的奖励函数即可表示为
    r_{\theta}(x, y)=\beta \log \frac{\pi_{\theta}(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}+\beta \log Z(x)
  7. 接下来,便可以为策略 \pi_{\theta}构建最大似然目标
    类似于奖励建模方法(甚至你可以简单粗暴的认为,即是把上面公式6直接代入进公式2中:\mathcal{L}_{R}\left(r_{\phi}, \mathcal{D}\right)=-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(r_{\phi}\left(x, y_{w}\right)-r_{\phi}\left(x, y_{l}\right)\right)\right])
    即最大化偏好答案与非偏好答案奖励的差值,我们的策略目标变为:
    \begin{aligned} \mathcal{L}_{\mathrm{DPO}}(\theta) & =-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(r_{\theta}\left(x, y_{w}\right)-r_{\theta}\left(x, y_{l}\right)\right)\right] \\ & =-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(\beta \log \frac{\pi_{\theta}\left(y_{w} \mid x\right)}{\pi_{\mathrm{ref}}\left(y_{w} \mid x\right)}-\beta \log \frac{\pi_{\theta}\left(y_{l} \mid x\right)}{\pi_{\mathrm{ref}}\left(y_{l} \mid x\right)}\right)\right] \end{aligned}
    完美! 你会发现,如阿荀所说,推导出奖励函数r和策略\pi的联系,就是为了把公式2所示的ranking loss中的r换掉,从而也就完美实现了DPO的目标:根本就不需要训练奖励函数(这一句话便道出了DPO的本质目标,但很多文章不会如此一针见血的指出来)

进一步,上面公式7所表达的目标函数表示的到底啥意思?意思就是

  • 当一个答案是好的答案时,我们要尽可能增大其被策略模型生成的概率(且这个的概率尽可能大于被基线模型生成的概率,举个例子,既然是好的,就要比初期更大胆的趋近之)
  • 当一个答案是差的答案时,我们要尽可能降低其被策略模型生成的概率(且这个的概率尽可能小于被基线模型生成的概率,换言之,既然是差的,则要比初期尽可能远离之)

还不够直白?OK,我们换个表达方式
由于我们追求的是让目标函数最大(虽说我们一般要求loss最小化,但毕竟整个目标函数的最前面加了个负号),故意味着针对大括号里的这个式子而言

\beta \log \frac{\pi_{\theta}\left(y_{w} \mid x\right)}{\pi_{\mathrm{ref}}\left(y_{w} \mid x\right)}-\beta \log \frac{\pi_{\theta}\left(y_{l} \mid x\right)}{\pi_{\mathrm{ref}}\left(y_{l} \mid x\right)}

我们希望左边尽可能大,而右边尽可能小,那左边、右边分别意味着什么呢?

  • 左半部分代表good response相较于没训练之前的累积概率差值
  • 右半部分代表 bad response 相较于没训练之前的累计概率差值

有三种可能的情况

  1. 左边变大,右边变小,理想情况,good response概率提升,bad response概率下降
  2. 左边变小,右边更小,good response概率下降,但是bad response概率下降的更多,生成的时候还是倾向于good response
  3. 左边变的更大,右边只大了一点点,和2) 同理

相当于奖与惩必须越发拉开差距

  • 如果是好的,就该被尽可能奖励(即good response对应的奖励应尽可能大),且得到的r_{\theta}\left(x, y_{w}\right)比初期更多
  • 如果是差的,则要被尽可能惩罚(即 bad response 对应的奖励应尽可能小),且得到的r_{\theta}\left(x, y_{l}\right)比初期更小

1.2.2 求解DPO目标函数梯度的推导

为了进一步理解DPO,求解下上述公式7\mathcal{L}_{\mathrm{DPO}}\left(\pi_{\theta} ; \pi_{\mathrm{ref}}\right)=-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(\beta \log \frac{\pi_{\theta}\left(y_{w} \mid x\right)}{\pi_{\text {ref }}\left(y_{w} \mid x\right)}-\beta \log \frac{\pi_{\theta}\left(y_{l} \mid x\right)}{\pi_{\text {ref }}\left(y_{l} \mid x\right)}\right)\right]的梯度


  • u=\beta \log \frac{\pi_{\theta}\left(y_{w} \mid x\right)}{\pi_{\text {ref }}\left(y_{w} \mid x\right)}-\beta \log \frac{\pi_{\theta}\left(y_{l} \mid x\right)}{\pi_{\text {ref }}\left(y_{l} \mid x\right)}
    则有
    \begin{aligned} \nabla_{\theta} \mathcal{L}_{\mathrm{DPO}} & =-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\nabla_{\theta} \log \sigma(u)\right] \\ & =-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\frac{1}{\sigma(u)} \nabla_{\theta} \sigma(u)\right] \\ & =-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\frac{\sigma^{\prime}(u)}{\sigma(u)} \nabla_{\theta} u\right] \end{aligned}

    根据sigmoid函数的性质\sigma^{\prime}(x)=\sigma(x)(1-\sigma(x))以及\sigma(-x)=1-\sigma(x),可得

    其中
    \hat{r}_{\theta}(x, y)=\beta \log \frac{\pi_{\theta}(y \mid x)}{\pi_{r e f}(y \mid x)}
    由优化策略 \pi_{\theta}和基线策略 \pi_{r e f}定义(在 DPO的论文中,该修正项称为隐式奖励模型)
    至于红色部分表示当非偏好答案y_l的奖励大于偏好答案y_w的奖励时,梯度越大,而损失函数的梯度会增加生成偏好回答 y_w的概率(对应绿色部分),降低非偏好回答 y_l 的概率(对应蓝色部分)

// 待更

第二部分 Zephyr 7B:基于Mistral 7B微调且采取AIF + DPO

2.1 7B小模型的基准测试超过70B

机器学习社区hugging face发布了一款名为Zephyr 7B的基座模型,其基于Mistral 7B微调而成,与ChatGPT用的RLHF不太一样的是,它用的是AIF + DPO,最终在一系列基准测试中超越了LLAMA2-CHAT-70B(当然了,基准测试超越不一定就说明代表全方位的超越,要不然国内的都超越GPT4了)

2.2 三步骤训练方式:SFT AIF DPO

如下图所示,便是Zephyr的三步骤训练方式(注意,和ChatGPT的三阶段训练方式有着本质不同,Zephyr的三步骤训练方式中的步骤二只是AI标注数据,不涉及奖励模型的训练)

  1. 通过大规模、自指导式数据集(UltraChat)做精炼的监督微调(dSFT)
    large scale, self-instruct-style dataset construction(UltraChat), followed by distilled supervised fine-tuning (dSFT)

    注意,UltraChat是一个 self-refinement的数据集,由GPT-3.5-TURBO生成的超过30个主题和20种不同类型的文本材料组成的1.47M多轮对话数据
  2. 通过集成收集AI反馈(AIF)聊天模型完成情况,然后通过GPT-4(UltraFeedback)进行评分并二值化为偏好
    AI Feedback (AIF) collection via an ensemble of chat model completions, followed by scoring by GPT-4 (UltraFeedback) and
    binarization into preferences

    注意,UltraFeedback由64k的prompts组成,每个prompt都有四个LLM生成的response,GPT-4根据遵循指令、诚实和乐于助人等标准对这些响应进行评级
    且通过选择最高平均分数作为“选择”响应,并随机选择其余三个中的一个作为“拒绝”响应,从UltraFeedback构建二元偏好(We construct binary preferences from UltraFeedback by selecting the highest mean score as the “chosen” response and one of the remaining three at random as “rejected”)
    我们选择随机选择,而不是选择得分最低的响应,以鼓励多样性并使DPO目标更具挑战性(We opted for random selection instead of selecting the lowest-scored response to encourage diversity and make the DPO objective more challenging)
    如上所述,此步骤是离线计算的,不涉及基线模型的任何采样
  3. 利用反馈数据对dSFT模型进行直接偏好优化(dPO)
    distilled direct preference optimization (dPO) of the dSFT model utilizing the feedback data

2.2.1 三步骤训练方式的细节

假定x_{1}^{0}, \ldots, x_{J}^{0}是一系列prompts数据,被构造为代表一组不同的主题域

  1. Distilled Supervised Fine-Tuning (dSFT)
    对于每个x_0 , 先对response y^{0} \sim \pi_{\mathrm{T}}\left(\cdot \mid x^{0}\right)进行采样,然后通过采样新指令进行细化:x^{1} \sim \pi_{\mathrm{T}}\left(\cdot \mid x^{0}, y^{0}\right),最终数据集为:\mathcal{C}=\left\{\left(x_{1}, y_{1}\right), \ldots,\left(x_{J}, y_{J}\right)\right\},通过SFT进行蒸馏
    \pi_{\mathrm{dSFT}}=\max _{\pi} \underset{(x, y) \sim \mathcal{C}}{\mathbb{E}} \log \pi(y \mid x)
  2. AI Feedback through Preferences (AIF)
    与SFT一样,针对x_{1}, \ldots, x_{J}中的每一个prompt x,收集4个不同模型的response(比如Claude、Falcon、LLaMA等,这点与ChatGPT也不太一样,ChatGPT是针对同一个prompt采集同一个模型不同概率下的4个输出):
    y^{1} \sim \pi_{1}(\cdot \mid x), \ldots, y^{4} \sim \pi_{4}(\cdot \mid x) 

    注意,接下来,便是与ChatGPT不同的地方了(ChatGPT是人工排序),Zephyr会把这些responses给到GPT-4,让GPT4给这些response打分并排序:s^{1} \sim \pi_{T}\left(\cdot \mid x, y^{1}\right), \ldots, s^{4} \sim \pi_{T}\left(\cdot \mid x, y^{4}\right) 
    收集到各个prompt的分数后,将得分最高的response保存为 y_w 并随机将一个较低的得分保存为 y_l,最终的反馈数据集是一个个三元组 \left(x, y_{w}, y_{l}\right)

    上述步骤在论文中的描述如下图所示

  3. Distilled Direct Preference Optimization (dDPO)
    第三步是通过最大化偏好模型中首选y_w而非y_l的概率来进一步微调SFT模型( The goal of the final step is to refine the πdSFT by maximizing the likelihood of ranking the preferred yw over yl in a preference model )
    而这个偏好模型通过利用需要迭代的策略模型\pi _\theta的奖励函数r_\theta (x, y)来确定(
    is determined by a reward function rθ(x, y) which utilizes the student language model πθ )

    不同于ChatGPT通过PPO算法去迭代策略(涉及到通过旧策略采集经验数据),直接偏好算法DPO使用更简单的方法,即直接依据静态数据去优化偏好模型( Direct preference optimization (DPO) uses a simpler approach to directly optimize the preference model from the static data )
    其中的关键便是根据模型的最优策略与SFT策略推导出最优的奖励函数(
    The key observation is to derive the optimal reward function in terms of the optimal LLM policy π∗ and the original LLM policy π dSFT )

    在合适的偏好模型的情况下,对于常数\beta和配分函数Z
    r^{*}(x, y)=\beta \frac{\pi *(y \mid x)}{\pi_{\mathrm{dSFT}}(y \mid x)}+\beta \log Z(x)

    接着将奖励函数插入到偏好模型中,便可以得到目标函数(
    发现没有,直接把奖励函数给消掉消没了 )
    \pi_{\theta}=\max _{\pi} \underset{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}{\mathbb{E}} \log \sigma\left(\beta \log \frac{\pi\left(y_{w} \mid x\right)}{\pi_{\mathrm{dSFT}}\left(y_{w} \mid x\right)}-\beta \log \frac{\pi\left(y_{l} \mid x\right)}{\pi_{\mathrm{dSFT}}\left(y_{l} \mid x\right)}\right)

    基于这个目标函数,我们从模型的SFT版本开始,迭代每个AIF下的三元组\left(x, y_{w}, y_{l}\right)
    1) 根据SFT模型计算(x,y_w)(x,y_l)的概率
    2) 根据DPO模型计算(x,y_w)(x,y_l)的概率

    3) 优化上述目标函数,然后做反向传播以更新
// 待更

第三部分 Claude的RAILF

// 待更


参考文献与推荐阅读

  1. ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT
  2. DPO原始论文:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
  3. DPO——RLHF 的替代之《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》论文阅读
    DPO: Direct Preference Optimization 论文解读及代码实践
  4. DPO: Direct Preference Optimization训练目标推导,推导简练易懂,推荐
  5. Zephyr 7B原始论文:ZEPHYR: DIRECT DISTILLATION OF LM ALIGNMENT

创作、修改、完善记录

  1. 11.6日,写第一部分 什么是DPO
    且反复对比介绍DPO的各篇文章,研究如何阐述才是最清晰易懂的
  2. 11.7日,在一字一句抠完Zephyr 7B的论文之后,开始写本文的“第二部分 Zephyr 7B三步骤训练方式:SFT AIF DPO”
  3. 11.8日,优化1.2节中关于DPO目标函数的描述,使其描述尽可能清晰、明确、易懂
    且部分细节与七月黄老师(阿荀)讨论确认,补充了一些表达上更本质的描述(比如加了很关键的一句话:“推导出奖励函数r和策略\pi的联系,就是为了把公式2所示的ranking loss中的r换掉,从而也就完美实现了DPO的目标:根本就不需要训练奖励函数”)
    以及修正了一些不够严谨/精准的描述(比如对于Zephyr 7B而言,表达为三步骤训练方式,比表达为三阶段训练方式更正确)
  4. //..

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

049-第三代软件开发-软件部署脚本(一)

第三代软件开发-软件部署脚本(一) 文章目录 第三代软件开发-软件部署脚本(一)项目介绍软件部署脚本(一)其他方式 关键字: Qt、 Qml、 bash、 shell、 脚本 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object…

nfs配置

1.NFS介绍 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操 作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文 件系统中,而在本地端的系统中来看&#…

【Git】Gui图形化管理、SSH协议私库集成IDEA使用

一、Gui图形化界面使用 1、根据自己需求打开管理器 2、克隆现有的库 3、图形化界面介绍 1、首先在本地仓库更新一个代码文件,进行使用: 2、进入图形管理界面刷新代码资源: 3、点击Stage changed 跟踪文件,将文件处于暂存区 4、通过…

详解机器学习最优化算法

前言 对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题。因此,最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中,小编将对机器学习中所使用的…

算法之路(一)

🖊作者 : D. Star. 📘专栏 :算法小能手 😆今日分享 : 如何学习? 在学习的过程中,不仅要知道如何学习,还要知道避免学习的陷阱。1. 睡眠不足;2. 被动学习和重读;3. 强调标记或画线&am…

使用Ruby编写通用爬虫程序

目录 一、引言 二、环境准备 三、爬虫程序设计 1. 抓取网页内容 2. 解析HTML内容 3. 提取特定信息 4. 数据存储 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法,遍历网页并提取所需的信息。使用Rub…

初识Linux:目录路径

目录 提示:以下指令均在Xshell 7 中进行 一、基本指令: 二、文件 文件内容文件属性 三、ls 指令拓展 1、 ls -l : 2、ls -la: 3、ls [目录名] : 4、ls -ld [目录名]: 四、Linux中的文件和…

串口通信(11)-CRC校验介绍算法

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

2023.11.10联赛 T3题解

题目大意 题目思路 感性理解一下,将一个数的平方变成多个数平方的和,为了使代价最小,这些数的大小应该尽可能的平均。 我们可以将 ∣ b i − a i ∣ |b_i-a_i| ∣bi​−ai​∣放入大根堆,同时将这个数划分的次数以及多划分一段减…

Xmake v2.8.5 发布,支持链接排序和单元测试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好&#x…

java传base64返回给数据报404踩坑

一、问题复现 1.可能因为base64字符太长,导致后端处理时出错,表现为前端请求报400错误; 这一步debug进去发现base64数据是正常传值的 所以排除掉不是后端问题,但是看了下前端请求,猜测可能是转换base64时间太长数据过大导致的404 2.前端传…

FPGA设计过程中有关数据之间的并串转化

1.原理 并串转化是指的是完成串行传输和并行传输两种传输方式之间的转换的技术,通过移位寄存器可以实现串并转换。 串转并,将数据移位保存在寄存器中,再将寄存器的数值同时输出; 并转串,将数据先进行移位&#xff0…

AI:74-基于深度学习的宠物品种识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

OpenHarmony,奏响中国基础软件的“光辉岁月”

梦想需要多久的时间,多少血和泪,才能慢慢实现? 天地间任我展翅高飞,谁说那是天真的预言? 《光辉岁月》歌词中的这两个问题,恰好可以送给今天的中国基础软件事业。 曾几何时,我们认为中国基础软件…

使用jdk21预览版 --enable-preview

异常 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project sb3: Compilation failure [ERROR] --enable-preview 一起使用时无效 [ERROR] (仅发行版 21 支持预览语言功能) 解决…

Matlab导出高清图片方法

一、背景 使用matlab绘制图片后,需要将图片导出为.jpg或.eps格式以便后期使用。但通过文件–另存为.jpg时,并没有清晰度选择,导出的图片只有30几k,以至于图片很模糊。 二、Matlab导出高清图片方法 文件—导出设置 1、大小&…

Unreal Engine 学习笔记 (3)—— 导入资源

1.导入FBX文件 打开系统文件管理器按下鼠标左键拖动fbx文件到UE编辑器中松开鼠标左键在弹出对话框FBX导入选项页面中,选择对应的骨骼 重定向骨骼 拖动UE4的walk_strafe_back.fbx文件到UE5编辑器中 在弹出的FBX导入选项对话框中选择UE4对应的骨骼 使用重定向资产…

【Spring】SpringBoot配置文件

SpringBoot配置文件 配置文件作用SpringBoot配置文件配置文件快速入手配置文件的格式properties配置文件说明基本语法读取配置文件properties缺点分析 yml配置文件说明yml基本语法yml使用进阶yml配置读取配置对象配置集合配置Mapyml优缺点 配置文件作用 计算机上有数以千计的配…

如何利用产品帮助中心提升用户体验

在当今竞争激烈的市场中,提供优秀的用户体验是吸引和保留客户的关键。而一个高效和易于使用的产品帮助中心,正成为越来越多企业用以提升用户体验的重要工具。产品帮助中心是一个集中的信息库,为用户提供关于产品功能、故障排除、常见问题解答…

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来,根据特定字符拆分成多行。 (注意这里我的数据是每个值都有“ ; ”,即使后面没有值,后面也会有个“ ; ”, 如果是正常的分隔符,sql 需要改成” LEVEL…