Catalog

    【论文解读】DPO

    Categories: Paper

    目录


    概览

    尽管 LLM 具有广泛的世界知识和推理能力,但由于其无监督训练的性质,很难精确控制它们的行为以符合特定的人类偏好。RLHF 方法通过使用人类偏好数据集训练奖励模型,然后通过 RL 来训练语言模型,具有复杂的训练流程。DPO 则是一种隐式优化与 RLHF 相同目标的算法,可以使用简单的二元交叉熵来优化策略。

    一、回顾 RLHF

    RLHF 通常包括三个阶段:

    • 监督微调 SFT
    • 偏好采样和奖励模型建模
    • RL 优化

    (一)SFT

    通常基于已经得到的 SFT 模型 $\pi^{\text{SFT} }$。

    (二)偏好采样和奖励模型建模

    通过输入 prompt $x$ 来产生回答对 $(y_1, y_2) \sim \pi^{\text{SFT} }(y \mid x)$,然后将它们呈现给人类打标,$y_w \succ y_l \mid x$ 表示对于 prompt $x$ ,$y_w$ 和 $y_l$ 分别表示偏好数据和不偏好数据。

    1. Bradley-Terry 模型对偏好的建模

    假设这些偏好是由某个潜在奖励模型 $r^*(x, y)$ 生成的。Bradley-Terry(BT)模型可以用于建模偏好,人类偏好分布 $p^*$ 可以写成:

    \(\begin{equation} \boxed{p^*(y_w \succ y_l \mid x) = \frac{\exp(r^*(x, y_w))}{\exp(r^*(x, y_w)) + \exp(r^*(x, y_l))} } \end{equation}\) 其逻辑是,真实奖励 $r^*(x, y)$ 越大,人类越偏好该回答,通过指数函数将奖励转化为“偏好概率”,且满足概率和为 1。

    1. 奖励模型的参数化与训练

    接下来,需要学习一个可参数化的奖励模型 $r_\phi(x, y)$,其中 $ \phi $ 是模型参数,使其能够近似真实奖励 $r^*$。假设有一个从真实偏好分布 $p^*$ 中采样的静态比较数据集 $\mathcal{D} = \left\lbrace x^{(i)}, y_w^{(i)}, y_l^{(i)} \right\rbrace_{i=1}^N$。我们可以通过最大似然估计来估计 $r_\phi(x, y)$ 的参数,也就是找到一组参数 $\phi$,使得观测到当前所有人类偏好数据的概率最大。用 $r_{\phi}$ 预测的偏好概率可表示为:

    \(\begin{equation} p_\phi(y_w \succ y_l \mid x) = \frac{\exp(r_\phi(x, y_w))}{\exp(r_\phi(x, y_w)) + \exp(r_\phi(x, y_l))} \label{eq:p_phi} \end{equation}\) 观测到整个数据集 $\mathcal{D}$ 的似然函数为:

    \(\begin{equation} \mathcal{L}(\phi) = \prod_{(x, y_w, y_l) \sim \mathcal{D} } p_\phi(y_w \succ y_l \mid x) \end{equation}\) 为了便于优化(将“最大化似然”转化为“最小化损失”),通常对似然函数取对数,再取负数,得到负对数似然损失:

    \(\begin{equation} \mathcal{L}_R(r_\phi, \mathcal{D}) = -\log \mathcal{L}(\phi) = -\sum_{(x,y_w,y_l) \sim \mathcal{D} } \log p_\phi(y_w \succ y_l \mid x) \end{equation}\) 对于 softmax 和 sigmoid 存在以下关系:

    \(\begin{equation} \frac{\exp(a)}{\exp(a) + \exp(b)} = \sigma(a - b) \end{equation}\) 其中 $\sigma(\cdot)$ 是 sigmoid 函数 $\sigma(z) = \frac{1}{1 + \exp(-z)}$。令 $a = r_\phi(x, y_w)$,$b = r_\phi(x, y_l)$,则公式 $\eqref{eq:p_phi}$ 可以写为: \(\begin{equation} p_\phi(y_w \succ y_l \mid x) = \frac{\exp(r_\phi(x, y_w))}{\exp(r_\phi(x, y_w)) + \exp(r_\phi(x, y_l))} = \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)) \end{equation}\) 因此,负对数似然损失可简化为: \(\begin{equation} \mathcal{L}_R(r_\phi, \mathcal{D}) = -\sum_{(x,y_w,y_l) \sim \mathcal{D} } \log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)) \end{equation}\) 若对其求平均,并将损失定义为期望,最终得到与原文中一致的损失形式:

    \[\begin{equation} \boxed{ \mathcal{L}_R(r_\phi, \mathcal{D}) = -\mathbb{E}_{(x,y_w,y_l) \sim \mathcal{D} }[\log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l))] } \end{equation}\]

    其中,$r_\phi(x, y)$ 通常被初始化为带有一个额外线性层的 $\pi^{\text{SFT} }$ 模型,用于产生单一标量奖励值。为了确保奖励函数的方差较低,先前的工作会对奖励进行归一化,使得 $\mathbb{E}_{x,y \sim D} \left[ r_\phi(x, y) \right] = 0$。

    (三)RL 优化

    在 RL 阶段,使用学习得到的奖励模型为语言模型提供奖励反馈,其优化目标为: \(\begin{equation} \max_{\pi_\theta} \mathbb{E}_{x \sim 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) \mid\mid \pi_{\mathrm{ref} }(y \mid x) \right] \label{eq:rlobj} \end{equation}\) 其中 $\beta$ 是一个控制策略 $\pi_\theta$ 与基准参考策略 $\pi_{\mathrm{ref} }$(即初始的监督微调模型 $\pi^{\mathrm{SFT} }$)之间偏离程度的参数,$\pi_\theta$ 通常也初始化为 $\pi^{\mathrm{SFT} }$。第二项是 KL 散度约束项,它可以防止模型偏离奖励模型准确分布太远,同时保持生成多样性,并避免因过度集中于单一高奖励答案而导致的模式坍塌(mode collapse)。由于语言生成具有离散性,该目标不可微,通常通过强化学习方法进行优化。标准做法是构造奖励函数 $r(x, y) = r_\phi(x, y) - \beta (\log \pi_\theta(y \mid x) - \log \pi_{\mathrm{ref} }(y \mid x))$,并使用 PPO 进行最大化。

    KL 散度定义

    对两个离散概率分布 $P, Q$,KL 散度定义为: \(\begin{equation} \boxed{ \mathbb{D}_{\mathrm{KL} }(P \| Q) = \sum_i P(i) \log \frac{P(i)}{Q(i)} = \mathbb{E}_{i \sim P} \left[ \log P(i) - \log Q(i) \right] } \end{equation}\) 可见这是一个期望,期望是对第一个分布 $P$ 取的,且 KL 散度是非对称的:$\mathbb{D}_{\mathrm{KL} }(P | Q) \neq \mathbb{D}_{\mathrm{KL} }(Q | P)$。在 LLM 的场景下,KL 是条件 KL(在条件 $x$ 上): \(\begin{equation} \mathbb{D}_{\mathrm{KL} }\left( \pi_\theta(\cdot \mid x) \mid\mid \pi_{\mathrm{ref} }(\cdot \mid x) \right) = \mathbb{E}_{y \sim \pi_\theta(\cdot \mid x)} \left[ \log \pi_\theta(y \mid x) - \log \pi_{\mathrm{ref} }(y \mid x) \right] \end{equation}\) 注意这里的随机变量是整个 token 序列 $y = (y_1, y_2, \ldots, y_T)$,且有: \(\begin{equation} \pi(y \mid x) = \prod_{t=1}^T \pi(y_t \mid x, y_{<t}) \end{equation}\) 取 $\log$ 后: \(\begin{equation} \log \pi(y \mid x) = \sum_{t=1}^T \log \pi(y_t \mid x, y_{<t}) \end{equation}\) 因此有: \(\begin{equation} \mathbb{D}_{\mathrm{KL} } = \mathbb{E}_{y \sim \pi_\theta} \left[ \sum_{t=1}^T \left( \log \pi_\theta(y_t \mid x, y_{<t}) - \log \pi_{\mathrm{ref} }(y_t \mid x, y_{<t}) \right) \right] \end{equation}\) 它实际上是每个 token 的 log-prob 差的期望和

    在实际中,对所有可能的序列 $y$ 求期望是不可能的,因此做 $y^{(i)} \sim \pi_{\theta}(\cdot \mid x)$,用样本来近似: \(\begin{equation} \mathbb{D}_{\mathrm{KL} } \approx \frac{1}{N} \sum_{i=1}^N \left( \log \pi_\theta(y^{(i)} \mid x) - \log \pi_{\mathrm{ref} }(y^{(i)} \mid x) \right) \end{equation}\) 因此可以构造一次采样的奖励函数: \(\begin{equation} r(x, y) = r_\phi(x, y) - \beta (\log \pi_\theta(y \mid x) - \log \pi_{\mathrm{ref} }(y \mid x)) \end{equation}\)

    二、直接偏好优化

    (一)推导 DPO 优化目标

    从与先前工作相同的 RL 目标开始,如公式 $\eqref{eq:rlobj}$ 所示,该目标基于一般的奖励函数 $r$,可以证明受 KL 约束的最大化奖励目标的最优解具有以下形式: \(\begin{equation} \boxed{\pi_r(y \mid x) = \frac{1}{Z(x)} \pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right)} \end{equation}\)

    证明过程如下:

    对如下优化目标: \(\begin{equation} \max_\pi \mathbb{E}_{x \sim D,\, y \sim \pi} \left[ r(x, y) \right] - \beta \mathbb{D}_{\mathrm{KL} } \left[ \pi(y \mid x) \mid\mid \pi_{\mathrm{ref} }(y \mid x) \right] \end{equation}\)

    严格来说,应该写为: \(\max_\pi \mathbb{E}_{x \sim D,\, y \sim \pi} \left[ r(x, y) - \beta \mathbb{D}_{\mathrm{KL} } \big( \pi(y \mid x) \mid\mid \pi_{\mathrm{ref} }(y \mid x) \big) \right]\)

    其中 KL 是对 $y$ 的分布: \(\begin{equation} \mathbb{D}_{\mathrm{KL} }(\pi \mid\mid \pi_{\mathrm{ref} }) = \mathbb{E}_{y \sim \pi} \left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)} \right] \end{equation}\) 把 KL 代入得到: \(\begin{equation} \max_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ r(x, y) - \beta \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)} \right] \end{equation}\)

    给上式加负号,就化为求最小值,同时除以正数 $\beta > 0$,最优解不变: \(\begin{equation} \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)} - \frac{1}{\beta} r(x, y) \right] \end{equation}\) 其中,括号内的第二项有:

    \[\begin{equation} - \frac{1}{\beta} r(x, y) = - \log \exp (\frac{1}{\beta} r(x, y)) \end{equation}\]

    进而得到: \(\begin{equation} \begin{aligned} & \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)} - \log \exp (\frac{1}{\beta} r(x, y)) \right] \\ &= \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x) \exp (\frac{1}{\beta} r(x, y))} \right] \end{aligned} \end{equation}\) 这里引入配分函数(partition function): \(\begin{equation} \boxed{Z(x) = \sum_y \pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right)} \end{equation}\) 它相当于一个归一化常数。对于固定的 $x$,$\pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right)$ 相当于参考模型在 $x$ 下,生成 $y$ 的概率和生成 $y$ 得到的奖励项 $\exp\left( \frac{1}{\beta} r(x, y) \right)$ 的乘积,它只是一个非负权重函数,不一定和为 1。对所有可能的回答 $y$ 求和,就是这里定义的配分函数,用它对 $\pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right)$ 进行归一化,并进行恒等变换,则有: \(\begin{equation} \begin{aligned} & \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x) \exp (\frac{1}{\beta} r(x, y))} \right] \\ &= \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\frac{1}{Z(x)} \pi_{\mathrm{ref} }(y \mid x) \exp (\frac{1}{\beta} r(x, y))} + \log (\frac{1}{Z(x)}) \right] \\ &= \min_\pi \mathbb{E}_{x \sim D} \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\frac{1}{Z(x)} \pi_{\mathrm{ref} }(y \mid x) \exp (\frac{1}{\beta} r(x, y))} - \log Z(x) \right] \end{aligned} \end{equation}\) 这里的配分函数是一个仅与 $x$ 和参考模型 $\pi_{\mathrm{ref} }$ 有关的函数,不依赖于策略 $\pi$,定义: \(\begin{equation} \pi^*(y \mid x) = \frac{1}{Z(x)} \pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right) \end{equation}\) 由于 $\pi^*(y \mid x) \geq 0$ 且 $\sum_y \pi^*(y \mid x) = 1$,因此它是一个合法的分布函数。又因为 $Z(x)$ 不是 $y$ 的函数,因此有: \(\begin{equation} \begin{aligned} & \min_\pi \mathbb{E}_{x \sim D} \left[ \mathbb{E}_{y \sim \pi(y \mid x)} \left[ \log \frac{\pi(y \mid x)}{\pi^*(y \mid x)} \right] - \log Z(x) \right] \\ &= \min_\pi \mathbb{E}_{x \sim D} \left[ \mathbb{D}_{\mathrm{KL} }(\pi(y \mid x) \mid\mid \pi^*(y \mid x)) - \log Z(x) \right] \end{aligned} \end{equation}\) 这相当于把原来“奖励-KL”的优化目标,等价改写成了最小化 $\mathbb{D}_{\mathrm{KL} }(\pi \mid\mid \pi^*)$,外加一个与 $\pi$ 无关的常数项 $- \log Z(x)$,因此在优化 $\pi$ 时,可以将它忽略(只影响最小值的数值,不影响最优 $\pi$)。根据 Gibbs 不等式,当且仅当两个分布相同时,KL 散度最小化为 0。因此我们有最优解: \(\begin{equation} \boxed{\pi_r(y \mid x) = \pi^*(y \mid x) = \frac{1}{Z(x)} \pi_{\mathrm{ref} }(y \mid x) \exp\left( \frac{1}{\beta} r(x, y) \right)} \end{equation}\) 但是,即便是我们使用极大似然估计得到了最优奖励函数 $r^*$(即(二)偏好采样和奖励模型建模中所讲),要通过估计 $Z(x)$ 来求得 $\pi_r$ 仍然十分昂贵,因为它要对所有的 $y$ 求和。然而,可以通过重新整理上式来获得奖励函数的表达,首先两边取 log: \(\begin{equation} \log \pi_r(y \mid x) = -\log Z(x) + \log \pi_{\mathrm{ref} }(y \mid x) + \frac{1}{\beta} r(x, y) \end{equation}\) 移项得到: \(\begin{equation} \boxed{r(x, y) = \beta \log \frac{\pi_r(y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)} + \beta \log Z(x)} \label{eq:reward} \end{equation}\) 这一步的意义非常关键,它不再把 $r$ 当做需要显示拟合的 reward model,而是把 reward 当成策略 $\pi_r$ 的一个隐式函数。这种重参数化方法同样可以应用于真实奖励 $r^*$ 及其对应的策略 $\pi^*$。前面我们知道,偏好数据根据 Bradley-Terry 可建模为: \(\begin{equation} p^*(y_1 \succ y_2 \mid x) = \sigma\left( r^*(x, y_1) - r^*(x, y_2) \right) \end{equation}\) 因此: \(\begin{equation} \begin{aligned} r^*(x, y_1) - r^*(x, y_2) &= \beta \log \frac{\pi^*(y_1 \mid x)}{\pi_{\mathrm{ref} }(y_1 \mid x)} - \beta \log \frac{\pi^*(y_2 \mid x)}{\pi_{\mathrm{ref} }(y_2 \mid x)} + \beta \log Z(x) - \beta \log Z(x) \\ &= \beta \log \frac{\pi^*(y_1 \mid x)}{\pi_{\mathrm{ref} }(y_1 \mid x)} - \beta \log \frac{\pi^*(y_2 \mid x)}{\pi_{\mathrm{ref} }(y_2 \mid x)} \end{aligned} \end{equation}\) 最后两项刚好将 partition function 相消。因此: \(\begin{equation} \begin{aligned} p^*(y_1 \succ y_2 \mid x) &= \sigma \left( r^*(x, y_1) - r^*(x, y_2) \right) \\ &= \sigma \left( \beta \log \frac{\pi^*(y_1 \mid x)}{\pi_{\mathrm{ref} }(y_1 \mid x)} - \beta \log \frac{\pi^*(y_2 \mid x)}{\pi_{\mathrm{ref} }(y_2 \mid x)} \right) \\ &= \frac{1}{1 + \exp (\beta \log \frac{\pi^*(y_2 \mid x)}{\pi_{\mathrm{ref} }(y_2 \mid x)} - \beta \log \frac{\pi^*(y_1 \mid x)}{\pi_{\mathrm{ref} }(y_1 \mid x)})} \end{aligned} \end{equation}\) 这里 $\pi^*$ 是理想的 RLHF 的最优策略,不可得。假设有一个从真实偏好分布 $p^*$ 中采样的静态比较数据集 $ \mathcal{D} = \left\lbrace x^{(i)}, y_w^{(i)}, y_l^{(i)} \right\rbrace_{i=1}^N$。对于参数化策略 $\pi_{\theta}$,我们同样可以通过最大似然估计找到一组参数 $\theta$,使得观测到当前所有人类偏好数据的概率最大,以此来估计 $\pi^*$,类似于(二)偏好采样和奖励模型建模中的过程。用 $\pi_{\theta}$ 预测的偏好概率可以表示为: \(\begin{equation} p_{\theta}(y_w \succ y_l \mid x) = \sigma \left( \beta \log \frac{\pi_{\theta}(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} - \beta \log \frac{\pi_{\theta}(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)} \right) \end{equation}\) 似然函数为: \(\begin{equation} \mathcal{L}(\theta) = \prod_{(x, y_w, y_l) \sim \mathcal{D} } p_{\theta}(y_w \succ y_l \mid x) \end{equation}\) 两边取 log 有: \(\begin{equation} \begin{aligned} \log \mathcal{L}(\theta) &= \sum_{(x,y_w,y_l) \sim \mathcal{D} } \log p_{\theta}(y_w \succ y_l \mid x) \\ &= \sum_{(x,y_w,y_l) \sim \mathcal{D} } \log \sigma \left( \beta \log \frac{\pi_{\theta}(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} - \beta \log \frac{\pi_{\theta}(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)} \right) \end{aligned} \end{equation}\) 最大似然估计就是要最大化这个值,因此取负号,并取期望来作为 loss,就有: \(\begin{equation} \boxed{\mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)} \right) \right]} \end{equation}\) 这就是 DPO 的核心训练公式,总的来说,DPO 把 KL 正则最优策略的闭式解当做桥梁,把 reward 改写成最优策略 $\pi^*$ 的隐式函数,从而重参数化 Bradley-Terry 模型,可以直接用偏好数据监督学习 $\pi_{\theta}$。

    (二)DPO 在更新什么?

    首先推导 DPO 损失函数的梯度。对参数 $\theta$ 有: \(\begin{equation} \nabla_\theta \mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) = -\nabla_\theta \mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)} \right) \right] \end{equation}\) 令 $u = \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)}$,则上式可以写为: \(\begin{equation} \nabla_\theta \mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \frac{\sigma'(u)}{\sigma(u)} \nabla_\theta (u) \right] \end{equation}\) 对于 sigmoid 函数,具有如下性质:$\sigma’(x) = \sigma(x)(1 - \sigma(x))$ 和 $\sigma(-x) = 1 - \sigma(x)$,因此,上式可以继续写为: \(\begin{equation} \begin{aligned} \nabla_\theta \mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) &= -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \frac{\sigma'(u)}{\sigma(u)} \nabla_\theta (u) \right] \\ &= -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \sigma(-u) \nabla_\theta (u) \right] \end{aligned} \end{equation}\) 将 $u$ 代入得到: \(\begin{equation} \begin{aligned} &\nabla_\theta \mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) = \\ &-\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ \beta \sigma \left( \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\mathrm{ref} }(y_l \mid x)} - \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\mathrm{ref} }(y_w \mid x)} \right) \Bigl[ \nabla_\theta \log \pi_\theta(y_w \mid x) - \nabla_\theta \log \pi_\theta(y_l \mid x) \Bigr] \right] \end{aligned} \end{equation}\) 定义隐式奖励 $\hat{r}_{\theta}(x,y) = \beta \log \frac{\pi_\theta (y \mid x)}{\pi_{\mathrm{ref} }(y \mid x)}$,则有: \(\begin{equation} \begin{aligned} &\nabla_\theta \mathcal{L}_{\mathrm{DPO} }(\pi_\theta; \pi_{\mathrm{ref} }) = \\ &-\beta \mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D} } \left[ {\color{green}{\underbrace{\sigma(\hat{r}_\theta(x, y_l) - \hat{r}_\theta(x, y_w))}_{\text{higher weight when reward estimate is wrong} }} } {\color{red}{\left( \underbrace{\nabla_\theta \log \pi_\theta(y_w \mid x)}_{\text{increase likelihood of } y_w} - \underbrace{\nabla_\theta \log \pi_\theta(y_l \mid x)}_{\text{decrease likelihood of } y_l} \right)} } \right] \end{aligned} \end{equation}\) 对于红色部分,直观上看,在做梯度下降时,我们希望 winner 部分的梯度大于 0,loser 部分的梯度小于 0,因此这就意味着推高 winner 的概率,减小 loser 的概率。对于绿色部分,如果当前模型认为 winner 的 reward 更大,那么 $\hat{r}_\theta(x, y_l) - \hat{r}_\theta(x, y_w) < 0$,那么 sigmoid 后接近于 0,这会使样本几乎不更新(因为已经排对了)。反之,如果模型把顺序排反,导致 $\hat{r}_\theta(x, y_l) - \hat{r}_\theta(x, y_w) > 0$,则 sigmoid 后接近 1,此时就会应用更大的更新步。此外,$\beta$ 越大,则更新力度越大,同时也意味着在隐式奖励里会把 log ratio 放大更多;$\beta$ 越小,则更新更保守。

    (三)DPO 训练流程

    DPO 的训练流程如下:

    (1)对每个 prompt $x$,从参考模型 $\pi_{\text{ref} }(\cdot|x)$ 采样两个回答 $y_1,y_2$,然后让人类给出偏好,最终得到一个离线偏好数据集 $\mathcal D={(x^{(i)}, y_w^{(i)}, y_l^{(i)})}_{i=1}^N$,其中 $y_w$ 是 winner,$y_l$ 是 loser。

    (2)固定 $\pi_{\text{ref} }$、$\mathcal D$ 和超参数 $\beta$,训练目标模型 $\pi_\theta$,最小化 DPO loss:$\min_\theta \mathcal L_{\text{DPO} }(\pi_\theta;\pi_{\text{ref} },\mathcal D,\beta)$,其中,$\beta$ 控制偏离参考策略的强度。

    在实际中,我们希望复用公开的偏好数据集,而不是每次都用某个 $\pi_\mathrm{ref}$ 去采样回答对并收集人类偏好。但公开数据集往往不是从我们自身的 $\pi_\mathrm{ref}$ 采样的,这会导致我们自己的 $\pi_\mathrm{ref}$ 与数据生成分布不一致(distribution shift)。此时,可以通过使用数据集中“被偏好”的回答 $y_w$ 做一个简单的 MLE 拟合,得到一个替代参考模型: \(\begin{equation} \pi_{\text{ref} } =\arg\max_{\pi}\;\mathbb E_{(x,y_w)\sim\mathcal D}\big[\log \pi(y_w|x)\big] \end{equation}\) 也就是把所有的 winner 当成监督标签,对模型做 SFT。注意,这一步 SFT 不是为了得到最终模型,而是为了得到一个更贴近数据生成分布/更贴近 winner 分布的锚点 $\pi_{\text{ref} }$,减少分布偏移导致的训练不稳定。

    原文描述为:This procedure helps mitigate the distribution shift between the true reference distribution which is unavailable, and $\pi_\mathrm{ref}$ used by DPO. 也就是通过这种方式,减小我们自己进行 DPO 训练时使用的参考模型与真实参考模型之间的分布偏移。

    原文也给出了 DPO 损失的 PyTorch 实现:

    import torch.nn.functional as F
    
    def dpo_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, beta):
        """
        pi_logps: policy logprobs, shape (B,)
        ref_logps: reference model logprobs, shape (B,)
        yw_idxs: preferred completion indices in [0, B-1], shape (T,)
        yl_idxs: dispreferred completion indices in [0, B-1], shape (T,)
        beta: temperature controlling strength of KL penalty
    
        Each pair of (yw_idxs[i], yl_idxs[i]) represents the indices of a single preference pair.
        """
        pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
        ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]
    
        pi_logratios = pi_yw_logps - pi_yl_logps
        ref_logratios = ref_yw_logps - ref_yl_logps
    
        losses = -F.logsigmoid(beta * (pi_logratios - ref_logratios))
        rewards = beta * (pi_logps - ref_logps).detach()
    
        return losses, rewards
    

    三、总结

    原文的理论分析和实验部分略。总之,DPO通过重参数化奖励模型,将复杂的基于强化学习的人类偏好对齐问题,转化为可以直接优化策略的简单分类损失,从而实现更稳定、高效的语言模型微调。

    Read More

    【手撕系列】手撕Qwen3-Next

    【2026-02-06】从零手撕一个小参数量的Qwen3-Next模型,包括Gated DeltaNet、Gated Attention、MoE、负载均衡、Zero-Centered RMSNorm等实现,进行预训练和微调。