LLM:强化学习

Posted by OAA on January 12, 2025

在大规模语言模型(LLM)中,强化学习扮演了重要的角色。具体来说,强化学习的一个重要应用是在模型训练中的 RLHF。在这阶段,模型生成的文本被人类评估并给出反馈。这些反馈通常以奖励信号的形式传递给模型,通过强化学习来优化模型的输出,使其更符合用户需求或道德规范。此外,对于需要进行多步推理的任务(如长时间序列预测或规划),强化学习被用来引导模型选择最佳的行动序列,以实现最终目标。

本章节将从强化学习的一些基本概念开始,逐步展开到强化学习在 LLM 中的应用。

1、强化学习基本概念

强化学习(Reinforcement Learning,RL)关注智能体(agent)如何在环境(environment)中采取一系列行动,以最大化累积奖励。

1.1、强化学习基本要素

  • 智能体 (Agent)
    • 智能体是强化学习中的主体,它根据环境的反馈(状态和奖励)来进行决策,并通过采取某种动作与环境交互。智能体的目标是最大化长期累积的奖励,或者说,找到一个策略(policy)来决策在每个状态下应该采取什么动作
  • 环境 (Environment)
    • 环境是智能体互动的对象,表示外部世界。环境根据智能体的行为反馈信息:当前状态、奖励和下一个状态。环境的定义可以是物理世界(如机器人控制问题)、虚拟世界(如游戏、棋类等),或者某些抽象模型(如推荐系统、广告系统)
  • 状态 (State)
    • 状态是对环境当前情境的一个描述,代表了智能体所处的环境状况。例如,在玩游戏时,状态可能包括角色的位置、健康值、游戏得分等
  • 动作 (Action)
    • 智能体在某一时刻基于当前的状态做出的决策叫做动作。动作可以是离散的(如上下左右方向)或者连续的(如推力大小)。每个动作的选择会影响到环境的状态。智能体的目标就是找到一个最佳的动作序列,以最大化长期奖励
  • 奖励 (Reward)
    • 奖励是智能体执行某个动作后,环境给予的反馈,用来衡量该动作的好坏。奖励通常是数值型的,可以是正数(奖励)或负数(惩罚)。智能体的目标是最大化未来的累计奖励
  • 策略 (Policy)
    • 策略是智能体的决策规则,定义了在每个状态下智能体应该采取什么样的动作。策略可以是确定性的(每个状态对应唯一的动作)或随机的(根据一定概率选择动作)。通常,强化学习的任务是学习一个最优策略,使得长期奖励最大化
  • 价值函数(Value Function)
    • 价值函数用于评估每个状态或状态-动作对的好坏,帮助智能体预测在某一状态下执行某个动作之后,未来获得的奖励。常见的价值函数有:
      • 状态价值函数 $V(s)$:给定一个状态 $s$,评估从该状态出发智能体能够获得的总奖励
      • 动作价值函数 $Q(s, a)$:给定一个状态 $s$ 和动作 $a$,评估从状态 $s$ 开始,执行动作 $a$ 后能够获得的总奖励
  • 回报 (Return)
    • 表示从当前时间步开始直到未来的累积奖励和,通常用符号 $G_t$ 表示:$G_t = R_{t+1} + R_{t+2} + \dots + R_T$。回报的定义是智能体决策的重要依据,因为强化学习的目标是训练一个策略,使得智能体在每个状态下的期望回报最大化。回报通常通过折扣因子来加权,表示智能体对于未来奖励的关注程度
  • 折扣因子(Discount Factor, $\gamma$)
    • 折扣因子用于决定未来奖励的影响程度。值越接近 1,智能体越重视未来的奖励;值越接近 0,智能体越偏向于追求即时奖励
  • 轨迹 (Trajectory)
    • 轨迹(又称为回合或episode)是指智能体在一次完整的交互过程中经历的一系列状态、动作和奖励的序列。轨迹通常表示为 $\tau = (s_0, a_0, s_1, a_1, \dots, s_T)$,其中 $s_i$ 表示第 $i$ 时刻的状态,$a_i$ 表示智能体在状态 $s_i$ 下选择的动作。比如大语言模型生成时,它的状态就是已经生成的 token 序列。当前的动作是生成下一个 token。当前 token 生成后,已生成的序列就加上新生成的 token 成为下一个状态

1.2、强化学习的算法

常见的强化学习算法可以分为以下几类:

  1. 基于值的方法:通过学习状态值函数或动作值函数来寻找最优策略。例如,Q 学习(Q-learning)和时序差分学习(TD-learning)

  2. 基于策略的方法:直接优化策略,使得智能体能选择最优的动作。例如,策略梯度(Policy Gradient)方法

  3. 演员-评论家方法(Actor-Critic):结合了基于值和基于策略的方法。演员(Actor)负责学习策略,而评论家(Critic)负责评估策略的好坏

  4. 深度强化学习:将深度学习与强化学习结合,使用深度神经网络来近似值函数或策略。著名的算法有深度 Q 网络(DQN)和 Proximal Policy Optimization(PPO)

1.3、强化学习目标

在强化学习中,特别是策略梯度方法,目标是找到一个最优策略 $\pi$(通常是一个神经网络),使得在所有状态 $s$ 下,智能体执行的动作能够最大化轨迹回报 $R(\tau)$ 的期望值。形式化地表示为:

\[E(R(\tau))_{\tau \sim P_{\theta}(\tau)} = \sum_{\tau} R(\tau) P_{\theta}(\tau)\]

其中:

  1. \(E(R(\tau))_{\tau \sim P_{\theta}(\tau)}\):表示在策略 $P_{\theta}(\tau)$ 下,轨迹 $\tau$ 的回报 $R(\tau)$ 的期望值。也可以理解为,在策略 $\pi_\theta$ 下,所有可能轨迹的回报的加权平均值

  2. $R(\tau)$:轨迹 $\tau$ 的回报,是指从起始状态到终止状态过程中,智能体获得的所有奖励的总和。回报是评估智能体在整个任务中表现好坏的一个指标

  3. $\tau$:表示一条轨迹,即智能体在环境中的状态和动作序列。轨迹可以写作 $\tau = {(S_0, A_0, R_0), (S_1, A_1, R_1), \dots, (S_T, A_T, R_T)}$,其中 $S_t$ 是状态,$A_t$ 是动作,$R_t$ 是奖励

  4. $P_{\theta}(\tau)$:在给定策略参数 $\theta$ 下,生成轨迹 $\tau$ 的概率。这个概率通常由策略网络 $\pi_{\theta}(a|s)$ 给出,即策略网络在每个状态下选择动作的概率分布

  5. $\theta$:策略的参数,控制着策略 $P_{\theta}$ 的行为。在神经网络的情况下,$\theta$ 是神经网络的权重,决定了在每个状态下采取哪种动作的概率

期望

期望(Expectation)是描述一个随机变量的平均值或 “中心位置” 的量,提供了对一个随机过程或随机变量长时间行为的预期。

1. 期望的定义

期望的数学定义与随机变量的概率分布密切相关。如果随机变量 $X$ 具有某种概率分布 $P(X)$,那么期望值 $E(X)$ 是随机变量 $X$ 所有可能取值的加权平均值,权重为每个取值的概率。

对于离散型随机变量 $X$,其期望 $E(X)$ 定义为:

\[E(X) = \sum_{x_i} x_i P(x_i)\]

其中:

  • $x_i$ 是 $X$ 的每个可能取值
  • $P(x_i)$ 是 $x_i$ 发生的概率

对于连续型随机变量 $X$,期望 $E(X)$ 定义为:

\[E(X) = \int_{-\infty}^{\infty} x f(x) dx\]

其中:

  • $f(x)$ 是 $X$ 的概率密度函数(PDF)
  • 积分对所有可能的 $x$ 值进行求和,得到 $X$ 的加权平均值

2. 期望的几何意义

期望可以看作是 “加权平均” 或 “重心” 的位置。对于离散随机变量,是所有可能取值的加权平均;对于连续随机变量,期望是概率分布的重心。可以把它理解为 “理论上的平均结果”,即如果多次进行实验或重复观测,期望值通常是这些实验结果的平均值。

3. 期望的性质

  • 线性性:期望是线性的,即对于任意常数 $a$ 和 $b$,以及随机变量 $X$ 和 $Y$,有:
\[E(aX + bY) = aE(X) + bE(Y)\]
  • 加法性:如果我们有多个随机变量,期望值的总和等于这些变量期望值的和:
\[E(X + Y) = E(X) + E(Y)\]
  • 常数的期望:如果 $c$ 是常数,那么:
\[E(c) = c\]

4. 期望与方差

期望不仅仅是一个平均值,它还与方差(variance)密切相关,方差描述的是随机变量的波动性或不确定性。期望提供了 “中心位置”,而方差则告诉我们随机变量围绕该中心位置的离散程度。公式为:

\[\text{Var}(X) = E[(X - E(X))^2]\]

在强化学习中,方差也非常重要,特别是在策略优化过程中。策略梯度方法中的回报 $R(\tau)$ 可能具有较高的方差,这使得学习过程变得不稳定。因此,很多强化学习算法采用了方差减少技术来加速收敛。

5. 期望的计算方法

在实际应用中,期望的计算通常通过采样(sampling)来实现,尤其在强化学习和其他机器学习任务中。由于计算所有可能的轨迹和回报通常是不可行的,因此常常依赖于从概率分布中采样来近似期望。

例子:

假设我们从环境中采样得到 $N$ 条轨迹 $\tau^1, \tau^2, \dots, \tau^N$,每条轨迹的回报为 $R(\tau^n)$。期望可以通过样本的平均值来估计:

\[E(R(\tau)) \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^n)\]

1.4、强化学习目标的优化

强化学习的目标就是 找到一个策略 $\pi_{\theta}$,使得期望回报 $E(R(\tau))$ 最大化,即:

\[\max_{\theta} E(R(\tau))_{\tau \sim P_{\theta}(\tau)} = \sum_{\tau} R(\tau) P_{\theta}(\tau)\]

为了找到最优的策略,通常采用梯度上升的方法,不断更新策略参数 $\theta$,使得期望回报逐步增大。具体来说,梯度上升的更新规则是:

\[\theta_{t+1} = \theta_t + \alpha \nabla_{\theta} E[R(\tau)]_{\tau \sim P_{\theta}(\tau)}\]

其中:

  • $\alpha$ 是学习率,控制每一步更新的幅度
  • $\nabla_{\theta} E[R(\tau)]$ 是关于策略参数 $\theta$ 的梯度,表示如何调整策略参数以最大化期望回报

1.5、策略梯度计算

梯度计算步骤:

\[\begin{align*} \nabla E(R(\tau))_{\tau \sim P_{\theta}(\tau)} &= \nabla \sum_{\tau} R(\tau) P_{\theta}(\tau) \tag{1}\\ &= \sum_{\tau} R(\tau) \nabla P_{\theta}(\tau) \tag{2}\\ &= \sum_{\tau} R(\tau) \nabla P_{\theta}(\tau) \frac{P_{\theta}(\tau)}{P_{\theta}(\tau)} \tag{3}\\ &= \sum_{\tau} P_{\theta}(\tau) R(\tau) \frac{\nabla P_{\theta}(\tau)}{P_{\theta}(\tau)} \tag{4}\\ &= \sum_{\tau} P_{\theta}(\tau) R(\tau) \nabla \log P_{\theta}(\tau) \tag{5}\\ &\approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \nabla \log P_{\theta}(\tau^n) \tag{6} \end{align*}\]
  1. 步骤(1):$ P_{\theta}(\tau) $ 是在策略参数 $\theta$ 下生成轨迹 $\tau$ 的概率分布,$ R(\tau) $ 是轨迹 $\tau$ 的回报
  2. 步骤(3):为了将梯度的形式转化为对数梯度的形式,通过引入 $ \frac{P_{\theta}(\tau)}{P_{\theta}(\tau)} $(即“1”的形式)来进行转换
  3. 步骤(4):重新排列,将 $ P_{\theta}(\tau) $ 提取了出来,而 $ \frac{\nabla P_{\theta}(\tau)}{P_{\theta}(\tau)} $ 就是最终所需要的对数梯度的形式
  4. 步骤(5):进一步化简,即,期望回报关于策略参数 $\theta$ 的梯度可以通过轨迹的回报($R(\tau)$)与对数策略概率的梯度($\nabla \log P_{\theta}(\tau)$)的乘积来表示
  5. 步骤(6):在实际计算中,通常不能枚举所有的轨迹,因此用 蒙特卡洛采样 来近似这个期望。具体来说,从 $ N $ 条轨迹中采样来近似期望值。其中 $\tau^n$ 是第 $n$ 条轨迹,$R(\tau^n)$ 是这条轨迹的回报,$ \nabla \log P_{\theta}(\tau^n) $ 是相应轨迹的对数概率的梯度。通过这种方式,策略梯度可以通过有限的轨迹样本来进行估计

接下来,计算 Trajectory 的概率 $P_{\theta}(\tau)$ :

\[\begin{align*} \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \nabla \log P_{\theta}(\tau^n) &= \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \nabla \log \prod_{t=1}^{T_n} P_{\theta}(a_n^t \mid s_n^t) \tag{1}\\ &= \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \sum_{t=1}^{T_n} \nabla \log P_{\theta}(a_n^t \mid s_n^t) \tag{2}\\ &= \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^n) \nabla \log P_{\theta}(a_n^t \mid s_n^t) \tag{3} \end{align*}\]
  1. 步骤(1):轨迹 $\tau^n$ 是由一系列状态和动作对组成的序列,通常表示为 $\tau^n = (s_1^n, a_1^n, s_2^n, a_2^n, \dots, s_{T_n}^n, a_{T_n}^n)$,其中 $T_n$ 是轨迹的长度。轨迹的概率 $P_{\theta}(\tau^n)$ 是该轨迹在当前策略下的生成概率,可以表示为一系列状态-动作对的联合概率:$P_{\theta}(\tau^n) = \prod_{t=1}^{T_n} P_{\theta}(a_n^t \mid s_n^t)$

  2. 步骤(2):根据对数乘法法则,梯度可以分解为每个时间步的梯度之和 $\nabla \log P_{\theta}(\tau^n) = \sum_{t=1}^{T_n} \nabla \log P_{\theta}(a_n^t \mid s_n^t)$

  3. 步骤(3):交换求和顺序便于表达和处理,在策略梯度方法中,$R(\tau^n)$ 表示轨迹 $\tau^n$ 的累积回报,反映了从该轨迹中获得的收益情况。将 $R(\tau^n)$ 与每一步的 $\nabla \log P_{\theta}(a_n^t \mid s_n^t)$ 相乘,相当于用累积回报对每一步的对数梯度进行加权。直观上,回报高的轨迹对应的步骤,其梯度对策略更新的影响更大,这有助于引导策略朝着获得更高回报的方向优化,体现了优势估计的思想,即通过这种加权方式突出那些对最终回报有较大贡献的动作选择

1.6、损失函数定义

为了训练 Policy 网络,需要定义一个损失函数。通过之前策略梯度的方法推导得到的目标函数:

\[\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^n) \log P_{\theta}(a_n^t \mid s_n^t)\]

该公式本质上是与最大化期望回报相关的表达式,通过在其前面加上负号,将原本的最大化期望回报问题转化为最小化损失函数的问题。这样就可以利用梯度下降方法,通过不断更新策略网络的参数 $\theta$,使得损失函数值不断减小,从而实现期望回报的最大化。即:

\[Loss = - \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} R(\tau^n) \log P_{\theta}(a_n^t \mid s_n^t)\]

1.7、折扣回报的引入

虽然理论上可以用梯度下降求解,但在实际训练中,由于简单梯度下降可能存在训练不稳定等问题,通常会采用基于策略梯度的更稳定的方法,如近端策略优化(PPO)、信赖域策略优化(TRPO)等。这些方法在处理复杂的策略优化问题时,能够更好地平衡探索与利用,提高训练的稳定性和效率。

具体的,根据上述公式,如果某条轨迹 $\tau^n$ 的回报 $R(\tau^n)$ 较大,那么 $\log P_{\theta}(a_n^t \mid s_n^t)$ 项在求和中的贡献会使整体值增大,为了最小化损失函数,就会增大这条轨迹下所有动作 $a_n^t$ 的概率 $P_{\theta}(a_n^t \mid s_n^t)$;反之,若回报小,则会减小相应动作概率。通过这种方式不断调整策略,期望实现回报最大化。

但这种简单地直接使用回报来调整策略的方式存在不足,在实际训练中,简单的策略梯度方法可能会导致训练过程不稳定,原因在于回报 $R(\tau^n)$ 的方差较大。例如,可能会出现某些回报值波动很大的情况,这就导致策略更新受到这些波动的较大影响,使得回报的方差较大,进而造成训练不稳定。

为了解决回报方差大的问题,通常的做法是使用 折扣回报。折扣回报的核心思想是:给定轨迹中的某一时刻 $t$,计算从当前时刻到轨迹结束时刻 $T_n$ 的未来回报,这个回报考虑了折扣因子 $\gamma$,使得离当前时刻越远的奖励的权重越小。

将原来的轨迹累积回报 $R(\tau^n)$ 替换为从时间步 $t$ 开始的未来折扣回报 $R_t^n$,即:

\[R(\tau^n) \rightarrow \sum_{t' = t}^{T_n} \gamma^{t' - t} r_{t'}^n = R_t^n\]

其中,

  • $R(\tau^n)$ 与 $R_t^n$:$R(\tau^n)$ 原本是轨迹 $\tau^n$ 的累积回报,现在被重新定义的 $R_t^n$ 替代,$R_t^n$ 更强调从时间步 $t$ 开始的未来累计回报,并且考虑了未来奖励的折扣情况
  • 求和范围:$\sum_{t’ = t}^{T_n}$ 明确了是对从当前时间步 $t$ 到轨迹结束时刻 $T_n$ 之间的所有奖励 $r_{t’}^n$ 进行求和,涵盖了从当前时刻往后的所有奖励信息
  • 折扣因子 $\gamma$:$\gamma^{t’ - t}$ 中的折扣因子 $\gamma$ 取值范围在 $[0, 1]$ 之间。其作用是对未来不同时刻的奖励进行加权,随着时间步 $t’$ 与当前时刻 $t$ 的距离增大,$\gamma^{t’ - t}$ 的值会逐渐减小,意味着越远未来的奖励对当前决策的影响越小。这符合实际情况,因为在很多场景下,近期的奖励对当前策略的影响更为重要,同时也有助于控制回报的方差,使训练更加稳定
  • 即时奖励 $r_{t’}^n$:$r_{t’}^n$ 表示在时间步 $t’$ 发生的即时奖励,是构成未来折扣回报 $R_t^n$ 的基本元素

我们修改了目标函数,使用了 折扣回报 $R_t^n$,而不是简单的 累积回报 $R(\tau^n)$。折扣回报将未来的奖励也考虑进来,使得策略的更新不仅依赖于当前的奖励,还依赖于未来的奖励。这是为了降低 回报方差,从而使得训练过程更加稳定。通过这种方式,远期奖励的影响被折扣因子控制,避免了过于波动的奖励带来的不稳定性。例如,在一个复杂的游戏场景中,某个时刻可能因为偶然因素获得了高回报,但从长远看,这个动作可能并非最优。使用折扣后的未来回报,就能更全面地评估该动作的价值,从而减小因局部波动导致的回报方差,使训练更加稳定。

1.8、引入基线(Baseline)

另外,在强化学习中,算法的稳定性还可能受到当前状态下的 “局势” 影响。比如:

  • 好的局势下,不论智能体做什么动作,都会获得较高的奖励。这时候,所有动作的概率都会增加,特别是那些获得高奖励的动作。这虽然可以提高回报,但由于所有动作的概率都被提升,可能导致更新过于缓慢,且训练过程中策略更新不够精确
    • 例如:在一个游戏中,如果玩家处于优势局面,此时各种操作都能带来一定收益,算法可能会盲目增加所有操作的执行概率,而不是专注于进一步优化能扩大优势的关键操作,这就使得训练速度变慢,同时由于动作概率调整的不精准,也会导致训练过程的不稳定
  • 坏的局势下,动作的回报普遍较低。此时,策略很可能会被过度抑制,导致很少有动作被认为是有价值的,影响模型的探索能力

为了解决上面提到的问题,采取的常见策略是使用基线(Baseline)。基线是对回报的一个 “参考”,它允许我们对每个动作的回报进行标准化,从而去除一些不必要的干扰。

具体来说,对于每个动作的回报,用一个基线 $B(s_n^t)$ 来进行调整:

\[\text{Reward Adjusted} = R_t^n - B(s_n^t)\]

这个基线 $B(s_n^t)$ 反映了状态 $s_n^t$ 下的平均回报预计回报,从而将每个动作的回报与这个基准进行比较。这样一来:

  • 如果某个动作的回报大于基线,则说明该动作在当前状态下表现较好,应该增加该动作的选择概率
  • 如果某个动作的回报小于基线,则说明该动作在当前状态下表现较差,应该减少该动作的选择概率

1.9、Actor-Critic 架构

为了学习这个基线 $B(s_n^t)$,我们引入 Actor-Critic 架构。这种架构分为两个主要部分:

  • Actor:负责输出策略,即在给定状态下选择动作的概率。它根据当前的策略更新选择动作
  • Critic:负责评估当前策略的表现,计算每个状态的价值函数或优势函数(这里的基线 $B(s_n^t)$ 就是其中的一种实现)。Critic 的作用是对 Actor 输出的动作进行评分,告诉 Actor 哪些动作更好,哪些动作更差

在这个架构下:

  • Actor 根据当前策略 $\pi$ 输出动作的概率分布 $P_{\theta}(a_n^t \mid s_n^t)$
  • Critic 通过神经网络来估计每个状态的价值函数或优势函数,作为 $B(s_n^t)$ 来对奖励进行调整

因此,我们的目标函数变为:

\[\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} (R_t^n - B(s_n^t)) \nabla \log P_{\theta}(a_n^t \mid s_n^t)\]

在这个目标函数中,$R_t^n - B(s_n^t)$ 表示调整过的奖励,它减去了基线,反映了动作的相对优势

1.10、引入优势函数

1. Action-Value Function $Q_{\theta}(s, a)$

  • 定义:$Q_{\theta}(s, a)$ 表示在状态 $s$ 下,采取动作 $a$ 后,按照策略 $\pi$ 执行,最终获得的回报的期望值。这个值是动作价值函数,用来评估在某个状态下,执行某个动作的期望回报。

  • 作用:通过 $Q_{\theta}(s, a)$,可以量化每个动作的价值,从而指导智能体做出选择。在强化学习中,通常需要比较不同动作的 $Q$-值,选择 $Q$-值最大(期望回报最大)的动作。

2. State-Value Function $V_{\theta}(s)$

  • 定义:$V_{\theta}(s)$ 表示在状态 $s$ 下,按照策略 $\pi$ 执行,最终获得的回报的期望值。与动作价值函数 $Q_{\theta}(s, a)$ 不同,状态价值函数仅仅评估状态的好坏,考虑了在该状态下所有可能动作的期望回报。

  • 作用:通过 $V_{\theta}(s)$,可以评估某个状态的价值,从而指导智能体决定是否继续待在该状态或采取某个动作。

3. Advantage Function $A_{\theta}(s, a)$

  • 定义:优势函数 $A_{\theta}(s, a)$ 是在给定状态 $s$ 和动作 $a$ 下,评估该动作相对于该状态下期望动作的优势。它是通过动作价值函数和状态价值函数之间的差异来定义的:

    \[A_{\theta}(s, a) = Q_{\theta}(s, a) - V_{\theta}(s)\]

    换句话说,优势函数 $A_{\theta}(s, a)$ 衡量了某个动作相对于其他动作的表现优劣。如果 $A_{\theta}(s, a) > 0$,说明在状态 $s$ 下采取动作 $a$ 是一个好的选择;反之,则不太理想。

  • 作用:优势函数通过去除了状态的部分(即 $V_{\theta}(s)$),直接比较动作的优劣。它能帮助智能体专注于那些在当前状态下优于期望动作的行为。

通过引入优势函数 $A_{\theta}(s, a)$,我们可以更加精确地优化策略,减少高方差带来的不稳定性。原目标函数:

\[\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} (R_t^n - B(s_n^t)) \nabla \log P_{\theta}(a_n^t \mid s_n^t)\]

这里的 $R_t^n - B(s_n^t)$ 就是优势函数 $A_{\theta}(s_n^t, a_n^t)$,表示在状态 $s_n^t$ 下,采取动作 $a_n^t$ 相对于期望动作的优势。因此,目标函数变为:

\[\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} A_{\theta}(s_n^t, a_n^t) \nabla \log P_{\theta}(a_n^t \mid s_n^t)\]

通过这种调整,算法优化的目标变成了最大化优势函数的期望。也就是说,算法通过不断调整策略,使得采取每个动作的相对优势尽可能大。

1.11、优势函数计算

在强化学习里,时序差分(Temporal Difference, TD) 是一种重要的预测算法,它结合了蒙特卡罗方法和动态规划方法的特点,通过在每一步更新对价值函数的估计,利用当前步骤的即时奖励和下一个状态的价值估计来更新当前状态的价值估计。其核心公式为:

\[V(S_t) \leftarrow V(S_t) + \alpha [R_{t + 1} + \gamma V(S_{t + 1}) - V(S_t)]\]

其中 $[R_{t + 1} + \gamma V(S_{t + 1}) - V(S_t)]$ 被称为 TD 误差。

下面我们在时序差分的基础上回顾优势函数的定义:

\[A_{\theta}(s, a) = Q_{\theta}(s, a) - V_{\theta}(s)\]

其中:

  • $Q_{\theta}(s, a)$ 是在状态 $s$ 下采取动作 $a$ 后的预期回报
  • $V_{\theta}(s)$ 是在状态 $s$ 下的状态价值

动作价值 $Q_{\theta}(s_t, a)$ 的计算方式为:

\[Q_\theta(s_t, a) = r_t + \gamma \cdot V_\theta(s_{t+1})\]

根据这一公式,$Q_\theta(s_t, a)$ 由即时奖励 $r_t$ 和下一个状态的价值函数 $V_\theta(s_{t+1})$ 决定。这里的折扣因子 $\gamma$ 控制了未来奖励的相对重要性。当 $\gamma$ 接近 1 时,智能体更注重未来长远的奖励,倾向于采取有利于长期收益的动作;当 $\gamma$ 接近 0 时,智能体更关注即时奖励,决策更偏向短期利益。

可以发现,$Q_\theta(s_t, a)$ 的计算思想体现了时序差分中利用即时奖励和下一个状态价值估计当前状态价值的核心思想。

现在,将 $Q_\theta(s_t, a)$ 代入到优势函数的定义中,我们得到:

\[A_{\theta}(s_t, a) = Q_{\theta}(s_t, a) - V_{\theta}(s_t) = r_t + \gamma \cdot V_\theta(s_{t+1}) - V_\theta(s_t)\]

这就是优势函数的简化版本,它只依赖于状态价值函数 $V_\theta(s_t)$ 和下一个状态 $s_{t+1}$ 的价值函数 $V_\theta(s_{t+1})$。相比原来的公式,我们减少了对动作价值函数 $Q_\theta(s_t, a)$ 的依赖,转而只需要依赖状态价值函数。

此公式中的 $\gamma \cdot V_\theta(s_{t+1}) - V_\theta(s_t)$ 反映了时序差分误差(TD Error)的雏形。它衡量当前状态价值估计 $V_\theta(s_t)$ 与通过实际奖励 $r_t$ 和后续状态估计 $V_\theta(s_{t+1})$ 形成的TD目标之间的差异。

在实际的神经网络实现中,原本计算优势函数可能需要分别训练一个用于估计 $Q$ 函数的神经网络和一个用于估计 $V$ 函数的神经网络。而现在通过这种推导,只需要训练一个用于估计状态价值函数 $V_{\theta}$ 的网络即可。这样大大减少了训练所需的神经网络数量,降低了训练的复杂度。

对状态价值函数 $V_{\theta}(s_{t + 1})$ 进行一步采样,即使用 $r_{t + 1} + \gamma \cdot V_{\theta}(s_{t + 2})$ 来近似 $V_{\theta}(s_{t + 1})$ ,即:

\[V_\theta(s_{t+1}) \approx r_{t+1} + \gamma \cdot V_\theta(s_{t+2})\]

这是基于强化学习中对未来价值估计的一种迭代思想。类似于 $Q$ 函数的计算,从状态 $s_{t + 1}$ 出发,智能体获得即时奖励 $r_{t + 1}$ ,并期望从下一个状态 $s_{t + 2}$ 获得的价值为 $V_{\theta}(s_{t + 2})$ ,经过折扣因子 $\gamma$ 调整后,两者之和作为对 $V_{\theta}(s_{t + 1})$ 的近似。

这种一步采样的方式为后续多步采样优势函数提供了基础。同时体现了 TD 方法的自举(Bootstrapping)特性:价值函数的更新既依赖于实际奖励 $r_{t+1}$,又基于后续状态的估计值。即时序差分中不断迭代更新价值估计的思想。

1.12、多步采样

在多步采样中,我们不再只考虑一步之后的回报,而是通过连续的回报和价值来进行估计。具体来说,引入多个不同步长的优势函数:

一步采样($A_\theta^1$):

\[A_\theta^1(s_t, a) = r_t + \gamma \cdot V_\theta(s_{t+1}) - V_\theta(s_t)\]

这与之前的公式一致,是标准的优势函数计算。此步骤是单步 TD 误差 $\delta_t^V$ 的直接应用,即 $A_\theta^1(s_t, a) = \delta_t^V$。TD 误差通过当前奖励和后续状态估计修正价值函数,为策略评估提供了即时反馈。

两步采样($A_\theta^2$):

在 $A_{\theta}^1(s_t, a)$ 的基础上,对 $V_{\theta}(s_{t + 1})$ 进行一步采样替换,即把 $V_{\theta}(s_{t + 1}) \approx r_{t + 1} + \gamma \cdot V_{\theta}(s_{t + 2})$ 代入 $A_{\theta}^1(s_t, a)$ 中,得到:

\[\begin{align*} A_\theta^2(s_t, a) &= r_t + \gamma \cdot (r_{t + 1} + \gamma \cdot V_{\theta}(s_{t + 2})) - V_{\theta}(s_t) \\ &= r_t + \gamma \cdot r_{t+1} + \gamma^2 \cdot V_\theta(s_{t+2}) - V_\theta(s_t) \end{align*}\]

这里,优势函数的计算不仅考虑了当前的即时奖励 $r_t$,还考虑了下一个时间步的奖励 $r_{t+1}$,并折扣回下下个状态的价值 $V_\theta(s_{t+2})$。因此,它包含了更多的信息,能够更好地反映策略在更长时间内的表现。

此过程可视为两次单步 TD 误差的叠加。将 $V_\theta(s_{t+1})$ 替换为 $r_{t+1} + \gamma V_\theta(s_{t+2})$ 后,原始 TD 误差 $\delta_t^V$ 被分解为当前步的奖励和下一时间步的 TD 误差的组合。

三步采样($A_\theta^3$):

\[A_\theta^3(s_t, a) = r_t + \gamma \cdot r_{t+1} + \gamma^2 \cdot r_{t+2} + \gamma^3 \cdot V_\theta(s_{t+3}) - V_\theta(s_t)\]

类似地,这个公式进一步考虑了三个时间步的奖励 $r_{t+1}, r_{t+2}, r_{t+3}$ 和最终的折扣回报。

T 步采样($A_\theta^T$):

\[A_\theta^T(s_t, a) = r_t + \gamma \cdot r_{t+1} + \gamma^2 \cdot r_{t+2} + \gamma^3 \cdot r_{t+3} + \cdots + \gamma^T \cdot r_T - V_\theta(s_t)\]

以此类推,当进行 $T$ 步采样时,优势函数 $A_{\theta}^T(s_t, a)$ 包含了从当前时间步 $t$ 到 $t + T$ 的所有即时奖励(经过不同程度的折扣)以及最后一个状态 $s_{t + T}$ 的价值估计。最后,还需要减去当前状态的价值 $V_\theta(s_t)$,这样得出的优势函数能更好地反映在多个时间步内的回报。

此前定义的广义优势估计的形式在计算上存在困难,因为它需要求解多个 $T$ 步优势值,随着 $T$ 的增大,计算复杂度会显著升高。因此有必要引入优化,需要对 $T$ 步优势的计算方法进行改写。具体而言,对 $T$ 步优势的计算方法进行改写,通过定义 TD 误差来简化计算。TD 误差反映了相邻状态价值估计的差异,借助 TD 误差与 $T$ 步优势值之间的关系,能够将原本复杂的 $T$ 步优势计算转化为 TD 误差的累加形式,从而有效降低计算复杂度。

定义 TD 误差 (TD-error):

\[\begin{align*} \delta_t^V &= r_t + \gamma \cdot V_\theta(s_{t + 1}) - V_\theta(s_t) \\ \delta_{t + 1}^V &= r_{t + 1} + \gamma \cdot V_\theta(s_{t + 2}) - V_\theta(s_{t + 1}) \end{align*}\]

则 $T$ 步采样可简化为:

\[\begin{align*} A_{\theta}^{1}(s_{t},a)&=\delta_{t}^{V} \\ A_{\theta}^{2}(s_{t},a)&=\delta_{t}^{V}+\gamma\delta_{t+1}^{V} \\ A_{\theta}^{3}(s_{t},a)&=\delta_{t}^{V}+\gamma\delta_{t+1}^{V}+\gamma^{2}\delta_{t+2}^{V} \\ & \cdots \\ A_{\theta}^{T}(s_{t},a) &= \sum_{l=1}^{T}\gamma^{l-1}\delta_{t+l-1}^{V} \end{align*}\]

这种多步采样的优势函数在强化学习中可以更有效地捕捉长期的奖励趋势,帮助智能体做出更优的决策。同时,不同步数的优势函数在实际应用中可以根据具体问题和场景进行选择,以平衡计算复杂度和策略评估的准确性。例如,在一些简单场景中,可能较小的 $T$ 值就能满足需求,而在复杂的长期决策任务中,可能需要较大的 $T$ 值来充分考虑未来的各种情况。

1.13、广义优势估计(GAE)

在强化学习中,优势函数 $A_{\theta}(s_t, a_t)$ 是用来评估某个动作相对其他动作的好坏。通常来说,采样步数越多,意味着考虑的未来奖励越多。长时间的采样可以使得偏差变小,因为它更全面地考虑了未来的回报。然而,长时间采样的方差也会增大,因为未来的不确定性增加,会导致训练过程更加不稳定。

为了避免单纯使用一步或多步采样可能带来的极端结果(方差大或者偏差大),广义优势估计(GAE)被提出以解决采样步数选择的难题,它通过一种加权求和的方式,将不同步数的优势函数结合起来,从而平衡偏差和方差。它使用一个权重参数 $\lambda$,控制每个步长(从 $A_\theta^1$ 到 $A_\theta^T$)的影响。

根据 GAE 的定义,优势函数 $A_\theta^{\text{GAE}}$ 是一系列优势函数(不同步长的优势函数)按权重加权得到的结果,权重随着步数的增加而逐渐减小。具体来说,GAE 优势函数的表达式为:

\[A_\theta^{\text{GAE}}(s_t, a) = (1 - \lambda) \left( A_\theta^1(s_t, a) + \lambda A_\theta^2(s_t, a) + \lambda^2 A_\theta^3(s_t, a) + \cdots \right)\]

其中,$\lambda$ 是一个超参数,通常取值在 [0, 1] 之间。假设 $\lambda = 0.9$,则可以得到:

\[\begin{align*} A_\theta^{\text{GAE}}(s_t, a) = 0.1 \cdot A_\theta^1(s_t, a) + 0.09 \cdot A_\theta^2(s_t, a) + 0.081 \cdot A_\theta^3(s_t, a) + \cdots \end{align*}\]

将定义好的 $\delta_t^V$ 和 $\delta_{t + 1}^V$ 等代入 GAE 优势函数中,得到:

\[\begin{align*} A_{\theta}^{G A E}(s_{t},a)&=(1-\lambda)(A_{\theta}^{1}+\lambda*A_{\theta}^{2}+\lambda^{2}A_{\theta}^{3}+\cdots) \\ &=(1-\lambda)(\delta_{t}^{V}+\lambda*(\delta_{t}^{V}+\gamma\delta_{t+1}^{V})+\lambda^{2}(\delta_{t}^{V}+\gamma\delta_{t+1}^{V}+\gamma^{2}\delta_{t+2}^{V})+\cdots) \\ &=(1-\lambda)(\delta_{t}^{V}(1+\lambda+\lambda^{2}+\cdots)+\gamma\delta_{t+1}^{V}*(\lambda+\lambda^{2}+\cdots) + \cdots) \\ &=(1-\lambda)(\delta_{t}^{V}\frac{1}{1-\lambda}+\gamma\delta_{t+1}^{V}\frac{\lambda}{1-\lambda}+\cdots) \end{align*}\]

进一步推导得出:

\[A_\theta^{\text{GAE}}(s_t, a) = \sum_{l = 0}^{\infty} (\gamma \lambda)^l \delta_{t + l}^V\]

其中,

  • $\delta_{t+l}^V$ 表示在时间步 $t + l$ 时的优势函数,它的计算基于奖励 $r_t$ 和折扣后的价值函数 $V_\theta(s_{t+l})$
  • $\gamma$ 是折扣因子,控制未来奖励的重要性
  • $\lambda$ 是平滑因子,用来调节优势函数中一步采样多步采样的平衡

这个最终公式简洁地表达了 GAE 优势函数是由一系列经过权重调整的 $\delta$ 值累加而成,其中权重由折扣因子 $\gamma$ 和 GAE 特有的参数 $\lambda$ 共同决定。通过这种方式,GAE 能够在偏差和方差之间取得较好的平衡,在不同的强化学习环境中更有效地估计优势函数,帮助智能体学习到更优的策略。

1.14、邻近策略优化(PPO)

综上,我们得到三个表达式,如下:

\[\delta_t^V = r_t + \gamma \cdot V_\theta(s_{t + 1}) - V_\theta(s_t)\]

GAE 优势函数表达式:

\[A_\theta^{\text{GAE}}(s_t, a) = \sum_{l = 0}^{\infty} (\gamma \lambda)^l \delta_{t + l}^V\]

策略梯度的优化目标:

\[\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} A_{\theta}^{\text{GAE}}(s_n^t, a_n^t) \nabla \log P_{\theta}(a_n^t \mid s_n^t)\]

三个表达式中,$V_\theta(s)$ 状态价值函数用神经网络拟合,一般和策略函数共用网络参数,只是最后一层不同。

我们详细推导了优势函数(包括广义优势估计GAE)及其如何通过多步采样来平衡偏差与方差。接下来,我们可以通过引入Proximal Policy Optimization(PPO)来将这些思想应用到策略优化中,确保策略更新的稳定性。

PPO 是 OpenAI 提出的一种基于策略梯度的强化学习算法,它通过对策略梯度的优化,来提高策略的稳定性和收敛速度。PPO 算法的核心思想是在更新策略时,通过引入一个重要性采样比例,来限制策略更新的幅度,从而保证策略的稳定性。

重要性采样

重要性采样(Importance Sampling,IS) 是一种用于在不同分布间进行转换的统计方法,尤其在强化学习中常用来纠正 off-policy 采样中的偏差。它的基本思想是通过调整每个样本的权重,使得来自不同分布的数据能够在学习时进行合理的利用。特别是在 off-policy 强化学习中,重要性采样帮助我们将通过行为策略(Behavior Policy)生成的数据应用于目标策略(Target Policy)进行学习。

在离散情况下,对于一个随机变量 $X$,其函数 $f(X)$ 关于概率分布$p(x)$的期望为:

\[E_p[f(X)]=\sum_x f(x)p(x)\]

假设我们要计算 $E_p[f(X)]$,但直接从分布 $p(x)$ 中采样并计算期望很困难,比如 $p(x)$ 的形式复杂难以直接采样,或者在高维空间中采样效率极低等。这时可以引入一个相对容易采样的分布 $q(x)$,这就是重要性采样的基本动机。

基于此,对 $E_p[f(X)]$ 进行变形:

\[E_p[f(X)]=\sum_x f(x)p(x)=\sum_x f(x)\frac{p(x)}{q(x)}q(x)=E_q[\frac{p(x)}{q(x)}f(x)]\]

这里 $\frac{p(x)}{q(x)}$ 就被称为重要性权重。

也就是说,我们可以从分布 $q(x)$ 中进行采样得到样本 $x_i$,然后计算 $\frac{p(x_i)}{q(x_i)}f(x_i)$,用这些样本的均值来近似 $E_p[f(X)]$,即:

\[E_p[f(X)]\approx\frac{1}{N}\sum_{i = 1}^{N}\frac{p(x_i)}{q(x_i)}f(x_i)\]

其中 $x_i$ 是从 $q(x)$ 中采样得到的样本,$N$ 是样本数量。

我们用重要性采样更新目标函数的梯度公式:

\[\begin{aligned} & \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} A_\theta^{G A E}\left(s_n^t, a_n^t\right) \nabla \log P_\theta\left(a_n^t \mid s_n^t\right) \\ = & \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} A_{\theta^{\prime}}^{G A E}\left(s_n^t, a_n^t\right) \frac{P_\theta\left(a_n^t \mid s_n^t\right)}{P_{\theta^{\prime}}\left(a_n^t \mid s_n^t\right)} \nabla \log P_\theta\left(a_n^t \mid s_n^t\right) \\ = & \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} A_{\theta^{\prime}}^{G A E}\left(s_n^t, a_n^t\right) \frac{P_\theta\left(a_n^t \mid s_n^t\right)}{P_{\theta^{\prime}}\left(a_n^t \mid s_n^t\right)} \frac{\nabla P_\theta\left(a_n^t \mid s_n^t\right)}{P_\theta\left(a_n^t \mid s_n^t\right)} \\ = & \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} A_{\theta^{\prime}}^{G A E}\left(s_n^t, a_n^t\right) \frac{\nabla P_\theta\left(a_n^t \mid s_n^t\right)}{P_{\theta^{\prime}}\left(a_n^t \mid s_n^t\right)} \end{aligned}\]

其中:

  1. $\frac{1}{N} \sum_{n=1}^{N}$:对 $N$ 条轨迹(采样的样本)取平均值。这里的 $N$ 表示采样轨迹的总数,通过对多个轨迹求平均来估计梯度,以获得更稳定的更新。例如,在不同的游戏轨迹中,每次游戏的奖励分布和最优策略选择可能不同,但通过大量轨迹的平均,能够更准确地反映出策略的总体趋势

  2. $\sum_{t=1}^{T_n}$:对每条轨迹 $n$ 中的 $T_n$ 个时间步求和,表示对单条轨迹中的所有时间步的累积。对单条轨迹内的所有时间步进行求和,意味着综合考虑了轨迹上每个时间点的信息,全面评估该轨迹对策略梯度的贡献。比如在一个机器人执行任务的轨迹中,每个时间步的动作和状态变化都对最终任务完成情况有作用,通过对所有时间步求和能完整地体现这条轨迹的价值

  3. $A_{\theta’}^{GAE}(s_n^t, a_n^t)$:广义优势估计(GAE),由参数 $\theta’$ 估计,计算在状态 $s_n^t$ 下,采取动作 $a_n^t$ 的优势。该优势函数考虑了当前时刻的奖励和未来的奖励,通过折扣因子 $\gamma$ 调整它们的贡献

  4. $\frac{\nabla P_\theta(a_n^t | s_n^t)}{P_{\theta’}(a_n^t | s_n^t)}$:分母 $P_{\theta’}(a_n^t | s_n^t)$ 代表旧策略在状态 $s_n^t$ 下采取动作 $a_n^t$ 的概率,分子 $\nabla P_{\theta}(a_n^t | s_n^t)$ 是新策略关于该 状态-动作 对的概率梯度。两者比值是 重要性采样比率,表示目标策略 $\pi_\theta$ 和行为策略 $\pi_{\theta’}$ 在同一 状态-动作 对上的概率比值。行为策略 $\pi_{\theta’}$ 是采样数据时使用的策略,而目标策略 $\pi_\theta$ 是我们要优化的策略。这个比值反映了新策略相对于旧策略在同一 状态-动作 对上的变化趋势。通过将优势函数与这个比值相乘,能够根据优势大小以及新旧策略的关系,准确地调整策略参数 $\theta$,引导策略朝着更优的方向发展。例如,如果在某个 状态-动作 对上,新策略的概率梯度与旧策略概率的比值较大,且优势函数也较大,说明在这个状态下采取该动作能带来较大优势,且新策略倾向于更频繁地选择该动作,那么就应该朝着增加这种选择倾向的方向更新策略参数

整个公式的作用是通过优势估计来计算策略梯度,以优化策略参数,使得策略倾向于选择优势更高的动作,从而提升策略性能。GAE 可以有效降低方差,使得策略优化过程更加稳定和高效。

将上述梯度公式去掉求梯度符号并取负号,转化为最小化问题,可以得到 PPO 算法 Loss 公式:

\[Loss = - \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} A_{\theta'}^{GAE}(s_n^t, a_n^t) \frac{\nabla P_\theta(a_n^t | s_n^t)}{P_{\theta'}(a_n^t | s_n^t)}\]

通过这种方式,我们实现了在 off-policy 环境下进行策略更新,同时通过 GAE 和重要性采样的组合,降低了方差,提高了策略优化的稳定性和效率。

重要性采样是 off-policy 强化学习中的一个重要技术,通过引入权重调整,帮助我们利用来自行为策略的数据来学习目标策略。尽管重要性采样在某些情况下非常有效,但它也面临高方差的问题,尤其是在行为策略和目标策略之间差异较大时。

PPO 算法通过引入裁剪技术来平衡重要性采样的方差和稳定性问题。

1.15、PPO-Penalty 和 PPO-Clipped

PPO 算法引入了两种创新性的技术,即 Adaptive KL Penalty Coefficient(自适应 KL 惩罚系数)和 Clipped Surrogate Objective(截断替代目标),旨在解决策略梯度方法中策略更新不稳定的问题,确保策略在优化过程中既能有效探索新的策略空间,又能保持一定的稳定性,避免因更新幅度过大而导致性能下降。

PPO-Penalty(惩罚)

PPO-Penalty 运用拉格朗日乘数法,将 KL 散度的限制直接融入目标函数,把原本的约束优化问题转化为无约束优化问题。在迭代过程中,通过动态调整 KL 散度前的系数 $\beta$,实现对新旧策略之间差异的灵活控制。即:

\[Loss_{kl} = -\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} A_{\theta'}^{GAE}(s_n^t, a_n^t) \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta'}(a_n^t | s_n^t)} + \beta KL(P_\theta, P_{\theta'})\]
  • 第一项
    • $\frac{P_\theta(a_n^t | s_n^t)}{P_{\theta’}(a_n^t | s_n^t)}$ 是策略比值,反映了新策略和旧策略在某个 状态-动作 对上的概率比
    • $A_{\theta’}^{GAE}(s_n^t, a_n^t)$ 是广义优势估计,表示在状态 $s_n^t$ 下采取动作 $a_n^t$ 的优势
    • 第一项是基于重要性采样和 GAE 优势估计的策略梯度部分,与前文利用重要性采样更新目标函数梯度的公式相关,表示通过优势估计和策略概率比值来更新策略参数 $\theta$
  • 第二项
    • $\beta KL(P_\theta, P_{\theta’})$ 是一个 KL散度 项,表示新策略和旧策略之间的 KL 散度。KL 散度度量了两个分布之间的差异。通过控制这个差异,防止策略发生过大的变化
    • $\beta$ 是一个超参数,调节KL散度项的权重,进而控制策略更新的幅度

PPO-Penalty 使用 KL 散度来限制新策略和旧策略之间的变化幅度。如果新策略和旧策略的差异过大,就会增加损失,以惩罚过度的更新。这使得策略优化更加稳定,并避免了大幅度的参数更新导致的不稳定学习过程。

PPO-Clipped(截断)

PPO-Clipped则是 PPO 的另一种变体,它通过截断策略更新的幅度,进一步增加了稳定性。具体来说,它限制了新旧策略比值的变化范围,防止策略的变化过大,从而避免了策略的剧烈波动。损失函数为:

\[Loss_{clip} = -\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_n} \min \left( A_{\theta'}^{GAE}(s_n^t, a_n^t) \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta'}(a_n^t | s_n^t)}, \, \text{clip} \left( \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta'}(a_n^t | s_n^t)}, 1 - \epsilon, 1 + \epsilon \right) A_{\theta'}^{GAE}(s_n^t, a_n^t) \right)\]
  • 第一项
    • $A_{\theta’}^{GAE}(s_n^t, a_n^t) \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta’}(a_n^t | s_n^t)}$:这是标准的策略梯度项,表示优势估计与新旧策略概率比的乘积
  • 第二项
    • 裁剪函数:$\text{clip} \left( \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta’}(a_n^t | s_n^t)}, 1 - \epsilon, 1 + \epsilon \right)$
      • 这部分对新旧策略的比值进行了裁剪,限制其范围在 $[1 - \epsilon, 1 + \epsilon]$ 之间,其中 $\epsilon$ 是一个超参数,决定了策略更新幅度的最大允许变化
      • 当新策略和旧策略的比值超出该范围时,会强制其回到这个区间,避免策略更新过快或过大
  • $\min$ 操作
    • 在计算损失时,取原始策略梯度项与裁剪后的项之间的最小值。这样可以确保,如果新策略更新过大(即策略比值超出裁剪范围),损失函数将被限制在裁剪后的项,而不会受到过大更新的影响

PPO-Clipped 通过裁剪策略的概率比值,控制策略更新的幅度,防止过大的参数更新。这种方法比传统的策略梯度方法更加稳定,并且能在一定程度上平衡探索(exploration)和利用(exploitation)。

2、RLHF

RLHF (Reinforcement Learning with Human Feedback),即 基于人类反馈的强化学习,是一种通过结合人类反馈来训练强化学习模型的技术。在传统的强化学习(RL)中,代理通过与环境的交互来最大化奖励信号,从而学习最优策略。然而,在很多实际问题中,设计一个明确的奖励函数可能是困难的,或者获得大量的模拟环境交互数据过于昂贵。在这种情况下,RLHF 提供了一种替代方案,它通过直接利用人类的反馈来引导代理的学习。

RLHF 的步骤可以分为:

  1. 数据收集:使用 LLM 生成一些文本数据作为初始语料库,让人类标注者对生成的数据进行标注或打分。标注的内容可以包括文本的质量、相关性、准确性、有用性等方面
  2. 监督学习微调:使用标签器的标注数据对预训练的 LLM 模型进行监督学习微调(SFT)来训练一个策略网络,得到 SFT 模型。SFT 模型的训练目标是最小化标签器对模型输出的偏好损失
  3. 奖励模型训练:收集模型输出之间的比较数据,其中标注员指出他们对于给定输入更倾向于哪个输出。然后训练一个奖励模型(RM)来预测人类偏好的输出。奖励模型的输入是一个提示和一个响应,输出是一个标量奖励
  4. 强化学习优化
    • 策略网络与环境交互: 将训练好的策略网络放入环境中进行交互。在自然语言处理的场景中,环境可以是与用户的交互过程,或者是根据给定的任务要求生成文本的过程。策略网络根据当前的状态(如输入的文本、对话历史等)生成输出文本
    • 获取奖励信号: 根据奖励模型对策略网络生成的输出文本进行打分,得到奖励信号。这个奖励信号反映了生成的文本在多大程度上符合人类的期望和标准
    • 更新策略网络: 利用强化学习算法,根据奖励信号来更新策略网络的参数,使得策略网络能够生成更符合人类期望的文本,从而提高模型的性能。常见的强化学习算法如 PPO(Proximal Policy Optimization)等可以用于此过程

2.1、采用 PPO 方式的 RLHF

RLHF 在 RL 框架下的问题建模为:

  • 策略(Policy):被微调的语言模型(LM),接收提示并生成一系列文本或文本的概率分布
  • 行动空间(Action Space):LM 的词表规模(通常约 50k 词元),决定每一步可选的生成词元
  • 观察空间(Observation Space):所有可能的输入词元序列,规模极大($\text{词汇量}^ \text{输入长度}$)

PPO 训练过程分为四个阶段:

  • 阶段 1:预训练模型微调(SFT) & 奖励模型训练
    • SFT Model:基于 Pretrain Model(预训练模型)微调得到 SFT Model(监督微调模型)
    • Reward Model:训练奖励模型(Reward Model)用于评估生成结果的质量,可通过 SFT Model 或 Pretrain Model 进行热启训练
  • 阶段 2:PPO 过程初始化
    • Actor Model:即策略模型(基于 SFT Model 初始化,模型持续更新),是主要优化对象,同时用于数据采样,基于 SFT model 进行热启
    • Reference Model:静态参考模型(基于 SFT Model,模型冻结),仅用于计算 KL 约束,防止 Actor Model 偏离原始分布过远
    • Critic Model:价值模型(基于 Reward Model 初始化,模型持续更新),评估当前 token 到生成结束的整体价值评分,基于 Reward Model 热启动
    • Reward Model:预训练好的奖励模型(Outcome Reward Model,模型冻结),对完整的生成结果进行评分,提供最终生成质量分数,训练过程中不更新
  • 阶段 3:Experience 采样
    1. 随机采样一批指令集(Prompts)作为输入
    2. 通过 Actor Model 生成 1 条或多条序列响应
    3. 结合四个模型协同构建经验数据(Experience)
      • Reward Model 提供最终结果评分
      • Critic Model 预测各时间步状态价值
      • Reference Model 计算 KL 散度约束项
      • Actor Model 提供策略概率分布
  • 阶段 4:模型训练
    • 以 Experience 数据训练 Actor Model 和 Critic Model,Actor Model 优化目标是最大化奖励和 KL 约束下的策略优势,Critic Model 学习最小化价值预测误差
    • 反复执行 阶段 3(采样)阶段 4(训练),直至 Loss 收敛

奖励函数的设计如下:

  • 生成文本比较:分别将提示输入初始 LM 和微调后的 LM,得到文本输出 $y_1$ 和 $y_2$
  • 奖励模型(RM):通过奖励模型对微调后的文本 $y_2$ 评分,生成奖励 $r_\theta$
  • KL 散度惩罚:计算新旧策略输出文本的 KL 散度,用于限制新策略与旧策略之间的差异,避免生成无意义或不连贯的文本。最终的奖励为 $r = r_\theta - \lambda \cdot r_{KL}$。惩罚项作用是防止模型在优化中为获高奖励生成偏离初始模型过多的乱码文本,确保输出合理连贯

RLHF 中的 PPO 损失函数为:

\[\mathcal{L}_{\text{PPO}}(\phi) = \mathbb{E}_{(x, y) \sim D_{\pi_\phi^{\mathrm{RL}}}} \left[ \min \left( \frac{\pi_\phi^{\mathrm{RL}}(y | x)}{\pi^{\mathrm{SFT}}(y | x)} A_{\theta'}^{\mathrm{GAE}}(x, y), \, \text{clip} \left( \frac{\pi_\phi^{\mathrm{RL}}(y | x)}{\pi^{\mathrm{SFT}}(y | x)}, 1 - \epsilon, 1 + \epsilon \right) A_{\theta'}^{\mathrm{GAE}}(x, y) \right) \right]\]

其中:

  • $\pi_\phi^{\mathrm{RL}}(y | x)$:表示 RL 策略下,给定输入 $x$ 时生成输出 $y$ 的概率分布
  • $\pi^{\mathrm{SFT}}(y | x)$:是监督训练模型(SFT)给定相同输入 $x$ 时生成输出 $y$ 的概率分布
  • $A_{\theta’}^{\mathrm{GAE}}(x, y)$:广义优势估计(GAE),用于衡量当前策略在生成输出 $y$ 时的优势程度
  • $\epsilon$:是一个超参数,控制 PPO 的 “裁剪” 范围,防止策略的更新幅度过大。通常设置为 0.1 到 0.3 之间
  • clip:裁剪操作,限制策略比值 $\frac{\pi_\phi^{\mathrm{RL}}(y | x)}{\pi^{\mathrm{SFT}}(y | x)}$ 在 $[1-\epsilon, 1+\epsilon]$ 区间内,防止策略的更新过于剧烈,确保优化过程的稳定性

2.2、采用 DPO 方式的 RLHF

直接偏好优化(Direct Preference Optimization,DPO)算法不进行显式奖励建模或强化学习的情况下直接优化语言模型以符合人类偏好。

基于人类反馈的强化学习(RLHF)流程通常包含三个阶段:1)监督微调(SFT);2)偏好采样与奖励学习;3)强化学习优化。

2.2.1、前置知识

2.2.1.1、监督微调(SFT)

RLHF 通常始于对预训练的语言模型(LM)进行监督学习微调,所使用的是针对感兴趣的下游任务(对话、摘要等)的高质量数据,以此获得模型 $\pi_{SFT}$。

2.2.1.2、奖励建模阶段

在第二阶段,使用提示 $x$ 激发 SFT 模型,生成答案对 $(y_1, y_2) \sim \pi_{SFT}(y | x)$。然后将这些答案对展示给人类标注者,标注者会表达对其中一个答案的偏好,记为 $y_w \succ y_l | x$,其中 $y_w$ 和 $y_l$ 分别表示在 $(y_1, y_2)$ 中偏好和不偏好的完成结果。

假定这些偏好是由某个潜在的奖励模型 $r^*(y, x)$ 生成的,但我们无法直接获取该模型。有多种用于对偏好进行建模的方法,Bradley-Terry(BT)模型是一种常用选择(不过,如果我们能获取多个已排序的答案,更通用的 Plackett-Luce 排序模型也与该框架兼容)。

BT 模型规定,人类偏好分布 $p^*$ 可写为:

\[p^*(y_1 \succ y_2 | x) = \frac{\exp (r^*(x, y_1))}{\exp (r^*(x, y_1)) + \exp (r^*(x, y_2))} \tag{1}\]

假设我们有一个从 \(p^*\) 采样得到的静态比较数据集 \(D = \{(x^{(i)}, y^{(i)}_w, y^{(i)}_l)\}_{i = 1}^N\),我们可以对奖励模型 \(r_{\phi}(x, y)\) 进行参数化,并通过最大似然估计来估算参数。将此问题构建为二分类问题,我们得到负对数似然损失:

\[L_R(r_{\phi}, D) = - \mathbb{E}_{(x, y_w, y_l) \sim D} \left[\log \sigma(r_{\phi}(x, y_w) - r_{\phi}(x, y_l))\right] \tag{2}\]

其中 $\sigma$ 是逻辑函数。在语言模型的情境下,网络 \(r_{\phi}(x, y)\) 通常由 SFT 模型 $\pi_{SFT}(y | x)$ 初始化,在最终的 Transformer 层之上添加一个线性层,该线性层为奖励值生成单个标量预测。为确保奖励函数具有较低方差,先前的研究对奖励进行归一化,使得对于所有 $x$,有 \(\mathbb{E}_{x, y \sim D} [r_{\phi}(x, y)] = 0\)。

2.2.1.3、强化学习微调阶段

在强化学习阶段,所学的奖励函数用于向语言模型提供反馈。遵循先前的研究,优化问题被构建为:

\[\max_{\pi_{\theta}} \mathbb{E}_{x \sim D, y \sim \pi_{\theta}(y|x)} \left[r_{\phi}(x, y)\right] - \beta D_{KL} \left[\pi_{\theta}(y | x) || \pi_{ref}(y | x)\right] \tag{3}\]

其中 $\beta$ 是一个参数,用于控制与基础参考策略 $\pi_{ref}$(即初始 SFT 模型 $\pi_{SFT}$)的偏差。在实践中,语言模型策略 $\pi_{\theta}$ 也初始化为 $\pi_{SFT}$。添加的约束很重要,因为它可防止模型偏离奖励模型准确的分布太远,同时保持生成的多样性,并防止模式坍缩为单一的高奖励答案。由于语言生成的离散性质,此目标不可微,通常使用强化学习进行优化。标准方法是构建奖励函数 $r(x, y) = r_{\phi}(x, y) - \beta(\log \pi_{\theta}(y | x) - \log \pi_{ref}(y | x))$,并使用近端策略优化算法(PPO)进行最大化。

2.2.2、直接偏好优化(DPO)

鉴于在诸如微调语言模型这类大规模问题上应用强化学习算法所面临的挑战,我们的目标是推导出一种直接利用偏好进行策略优化的简单方法。与先前的基于人类反馈的强化学习(RLHF)方法不同,那些方法先学习一个奖励,然后通过强化学习对其进行优化,而基于 DPO 的方法利用了一种特定的奖励模型参数化选择,使得能够以封闭形式提取其最优策略,无需强化学习训练循环。正如接下来将详细阐述的,其关键见解是利用从奖励函数到最优策略的解析映射,这使我们能够将关于奖励函数的损失函数转换为关于策略的损失函数。这种变量变换方法避免了拟合一个明确的、独立的奖励模型,同时仍然在现有的人类偏好模型(如 Bradley-Terry 模型)下进行优化。本质上,策略网络既代表语言模型,也代表(隐式的)奖励。

1、推导直接偏好优化(DPO)目标

从与先前工作相同的强化学习目标开始,即公式(3),在一般奖励函数 $r$ 下。遵循先前的工作,很容易证明公式(3)中 KL 约束奖励最大化目标的最优解形式为:

\[\pi_r(y|x) = \frac{1}{Z(x)}\pi_{\text{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) \tag{4}\]

其中 $Z(x) = \sum_y \pi_{\text{ref}}(y|x)\exp (\frac{1}{\beta}r(x,y) )$ 是配分函数。

推导 KL 约束奖励最大化目标的最优解

推导以下目标的最优解:

\[\max_{\pi} \mathbb{E}_{x\sim\mathcal{D}, y\sim\pi}[r(x, y)]-\beta \mathbb{D}_{KL}\left[\pi(y\mid x)||\pi_{\text{ref}}(y\mid x)\right] \tag{a}\]

对于任何奖励函数 $r(x, y)$、参考模型 $\pi_{\text{ref}}$ 和一般的非参数策略类。我们现在有:

\[\begin{align*} \max_{\pi} \mathbb{E}_{x\sim\mathcal{D}, y\sim\pi}&[r(x, y)]-\beta \mathbb{D}_{KL}\left[\pi(y\mid x)||\pi_{\text{ref}}(y\mid x)\right] \\ &= \max_{\pi} E_{x\sim\mathcal{D}} E_{y\sim\pi(y\mid x)}\left[r(x, y)-\beta\log\frac{\pi(y\mid x)}{\pi_{\text{ref}}(y\mid x)}\right] \\ &= \min_{\pi} \mathbb{E}_{x\sim\mathcal{D}} \mathbb{E}_{y\sim\pi(y\mid x)}\left[\log\frac{\pi(y\mid x)}{\pi_{\text{ref}}(y\mid x)}-\frac{1}{\beta} r(x, y)\right] \\ &= \min_{\pi} \mathbb{E}_{x\sim\mathcal{D}} \mathbb{E}_{y\sim\pi(y\mid x)}\left[\log\frac{\pi(y\mid x)}{\frac{1}{Z(x)}\pi_{\text{ref}}(y\mid x)\exp\left(\frac{1}{\beta} r(x, y)\right)}-\log Z(x)\right] \tag{b} \end{align*}\]

其中我们有一个分区函数:

\[Z(x)=\sum_y\pi_{\text{ref}}(y\mid x)\exp\left(\frac{1}{\beta} r(x, y)\right).\]

注意分区函数只是 $x$ 和参考策略 $\pi_{\text{ref}}$ 的函数,但不依赖于策略 $\pi$ 。我们现在可以定义

\[\pi^*(y\mid x)=\frac{1}{Z(x)}\pi_{\text{ref}}(y\mid x)\exp\left(\frac{1}{\beta} r(x, y)\right),\]

这是一个有效的概率分布,因为对于所有的 $y$,\(\pi^*(y\mid x)\geq 0\) 并且 \(\sum_{y}\pi^*(y\mid x)=1\) 。由于 $Z(x)$ 不是 $y$ 的函数,我们可以重新组织方程(b)中的最终目标为:

\[\min_\pi E_{x\sim\mathcal{D}}\left[E_{y\sim\pi(y\mid x)}\left[\log\frac{\pi(y\mid x)}{\pi^*(y\mid x)}\right]-\log Z(x)\right]= \tag{c}\] \[\min_{\pi} E_{x\sim\mathcal{D}}\left[\mathbb{D}_{KL}\left(\pi(y\mid x)||\pi^*(y\mid x)\right)-\log Z(x)\right] \tag{d}\]

现在,由于 $Z(x)$ 不依赖于 $\pi$ ,最小值是通过最小化第一个 KL 项来实现的目标。Gibbs 不等式告诉我们,如果两个分布相同,那么 KL 散度在 0 处被最小化。因此我们有最优解:

\[\pi(y\mid x)=\pi^*(y\mid x)=\frac{1}{Z(x)}\pi_{\text{ref}}(y\mid x)\exp\left(\frac{1}{\beta} r(x, y)\right) \tag{e}\]

对于所有的 $x\in\mathcal{D}$ 。推导完成。

即使使用真实奖励函数 $r^*$ 的最大似然估计 $r_{\phi}$,估计配分函数 $Z(x)$ 仍然代价高昂,这使得这种表示在实践中难以利用。然而,我们可以重新整理公式(4),用其对应的最优策略 $\pi_r$、参考策略 $\pi_{\text{ref}}$ 和未知的配分函数 $Z(·)$ 来表示奖励函数。

具体来说,我们首先对公式(4)两边取对数,然后通过一些代数运算得到:

\[r(x,y) = \beta \log\frac{\pi_r(y|x)}{\pi_{\text{ref}}(y|x)} + \beta \log Z(x) \tag{5}\]

我们可以将这种重新参数化应用于真实奖励 \(r^*\) 和相应的最优模型 \(\pi^*\)。幸运的是,Bradley-Terry 模型仅依赖于两个完成结果之间的奖励差异,即:

\[p^*(y_1 \succ y_2 | x) = \sigma(r^*(x, y_1) - r^*(x, y_2))\]

将公式(5)中对 \(r^*(x, y)\) 的重新参数化代入偏好模型公式(1),配分函数消去,我们可以仅用最优策略 \(\pi^*\) 和参考策略 \(\pi_{ref}\) 来表示人类偏好概率。因此,在 Bradley-Terry 模型下的最优 RLHF 策略 $\pi^*$ 满足偏好模型:

\[p^*(y_1 \succ y_2 | x) = \frac{1}{1 + \exp\left(\beta \log\frac{\pi^*(y_2|x)}{\pi_{ref}(y_2|x)} - \beta \log\frac{\pi^*(y_1|x)}{\pi_{ref}(y_1|x)}\right)} \tag{6}\]

在 Bradley-Terry 模型下得出 DPO 目标

在推导 DPO 目标函数在 Bradley-Terry 模型下的形式时,我们可以从 Bradley-Terry 模型的偏好表达式开始:

\[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)} \tag{a}\]

在上文我们展示了如何通过其对应的最优策略将不可用的真实奖励表示出来:

\[r^*(x, y)=\beta\log\frac{\pi^*(y\mid x)}{\pi_{\text{ref}}(y\mid x)}+\beta\log Z(x) \tag{b}\]

将方程(b)代入方程(a),我们得到:

\[\begin{align*} p^*\left(y_1\succ y_2\mid x\right)&=\frac{\exp\left(\beta\log\frac{\pi^*\left(y_1\mid x\right)}{\pi_{\text{ref}}\left(y_1\mid x\right)}+\beta\log Z(x)\right)}{\exp\left(\beta\log\frac{\pi^*\left(y_1\mid x\right)}{\pi_{\text{ref}}\left(y_1\mid x\right)}+\beta\log Z(x)\right)+\exp\left(\beta\log\frac{\pi^*\left(y_2\mid x\right)}{\pi_{\text{ref}}\left(y_2\mid x\right)}+\beta\log Z(x)\right)} \\ &= \frac{1}{1+\exp\left(\beta\log\frac{\pi^*\left(y_2\mid x\right)}{\pi_{\text{ref}}\left(y_2\mid x\right)}-\beta\log\frac{\pi^*\left(y_1\mid x\right)}{\pi_{\text{ref}}\left(y_1\mid x\right)}\right)} \\ &= \sigma\left(\beta\log\frac{\pi^*\left(y_1\mid x\right)}{\pi_{\text{ref}}\left(y_1\mid x\right)}-\beta\log\frac{\pi^*\left(y_2\mid x\right)}{\pi_{\text{ref}}\left(y_2\mid x\right)}\right). \end{align*}\]

虽然公式(6)使用了 Bradley-Terry 模型,但我们同样可以在更一般的 Plackett-Luc 模型下推导出表达式。

在 Plackett-Luce 模型下推导 DPO 目标函数

在推导 Plackett-Luce 模型下的 DPO 目标函数时,Plackett-Luce 模型是对 Bradley-Terry 模型的推广,适用于排名(而不仅仅是成对比较)。类似于 Bradley-Terry 模型,它规定当给定一组可能的选项时,人们更倾向于选择具有某种潜在奖励函数值的选项的概率与奖励函数值成正比。

在我们的上下文中,当给定一个提示 $x$ 和一组 $K$ 个答案 $y_1, \ldots, y_K$ 时,用户会输出一个排列 $\tau: [K] \rightarrow [K]$,给出他们对答案的排名。

Plackett-Luce 模型规定:

\[p^*\left(\tau\mid y_1, \ldots, y_K, x\right) = \prod_{k=1}^K \frac{\exp\left(r^*\left(x, y_{\tau(k)}\right)\right)}{\sum_{j=k}^K \exp\left(r^*\left(x, y_{\tau(j)}\right)\right)} \tag{a}\]

请注意,当 $K=2$ 时,方程(a)简化为 Bradley-Terry 模型。然而,对于一般的 Plackett-Luce 模型,我们仍然可以利用方程(5)的结果并替换由最优策略参数化的奖励函数。取消归一化常数 $Z(x)$ ,我们得到:

\[p^*\left(\tau\mid y_1, \ldots, y_K, x\right) = \prod_{k=1}^K \frac{\exp\left(\beta\log\frac{\pi^*\left(y_{\tau(k)}\mid x\right)}{\pi_{ref}\left(y_{\tau(k)}\mid x\right)}\right)}{\sum_{j=k}^K \exp\left(\beta\log\frac{\pi^*\left(y_{\tau(j)}\mid x\right)}{\pi_{ref}\left(y_{\tau(j)}\mid x\right)}\right)}\]

如果我们有一个数据集 $\mathcal{D} = \{\tau^{(i)}, y_1^{(i)}, \ldots, y_K^{(i)}, x^{(i)}\}_{i=1}^N$ 包含提示和用户指定的排名,我们可以使用一个参数化模型并通过最大似然来优化这个目标:

\[\begin{align*} \mathcal{L}_{\text{DPO}}(\pi_{\theta}, \pi_{\text{ref}}) &= -\mathbb{E}_{\tau, y_1, \ldots, y_K, x \sim \mathcal{D}} \left[\log \prod_{k=1}^K \frac{\exp\left(\beta\log\frac{\pi_{\theta}\left(y_{\tau(k)}\mid x\right)}{\pi_{\text{ref}}\left(y_{\tau(k)}\mid x\right)}\right)}{\sum_{j=k}^K \exp\left(\beta\log\frac{\pi_{\theta}\left(y_{\tau(j)}\mid x\right)}{\pi_{\text{ref}}\left(y_{\tau(j)}\mid x\right)}\right)}\right] \end{align*}\]

现在我们已经用最优策略而非奖励模型表示了人类偏好数据的概率,我们可以为参数化策略 $\pi_{\theta}$ 制定一个最大似然目标。类似于奖励建模方法(即公式(2)),我们的策略目标变为:

\[\mathcal{L}_{DPO}(\pi_{\theta}; \pi_{\text{ref}}) = - \mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[\log \sigma\left(\beta \log\frac{\pi_{\theta}(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log\frac{\pi_{\theta}(y_l|x)}{\pi_{\text{ref}}(y_l|x)}\right)\right] \tag{7}\]

这样,我们使用一种替代参数化拟合了一个隐式奖励,其最优策略就是 $\pi_{\theta}$。此外,由于我们的过程等同于拟合一个重新参数化的 Bradley-Terry 模型,它具有一定的理论性质,比如在对偏好数据分布的适当假设下具有一致性。

2、DPO 更新的作用是什么?

为了从机制上理解 DPO,分析损失函数 $\mathcal{L}_{DPO}$ 的梯度是很有用的。关于参数 $\theta$ 的梯度可以写成:

\(\begin{aligned} & \nabla_{\theta}\mathcal{L}_{DPO}(\pi_{\theta};\pi_{ref})= \\ & -\beta \mathbb{E}_{(x,y_{w},y_{l})\sim\mathcal{D}}[\underbrace{\sigma(\hat{r}_{\theta}(x,y_{l})-\hat{r}_{\theta}(x,y_{w}))}_{\text{higher weigh when reward estimate is wrong}}[\underbrace{\nabla_{\theta}\log\pi(y_{w}\mid x)}_{\text{increase likelihood of }y_{w}} - \underbrace{\nabla_{\theta}\log\pi(y_{l}\mid x)}_{\text{decrease likelihood of }y_{l}}]], \end{aligned}\) 其中

\[\hat{r}_{\theta}(x, y) = \beta \log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}\]

是由语言模型 $\pi_{\theta}$ 和参考模型 $\pi_{\text{ref}}$ 隐式定义的奖励。

直观地说,损失函数 $\mathcal{L}_{DPO}$ 的梯度增加了偏好完成结果 $y_w$ 的可能性,降低了非偏好完成结果 $y_l$ 的可能性。

重要的是,这些示例是根据隐式奖励模型 $\hat{r}_{\theta}$ 对非偏好完成结果的评价高出多少(由 $\beta$ 缩放)来加权的,也就是说,隐式奖励模型对完成结果的排序错误程度,同时考虑了 KL 约束的强度。这种加权很重要,因为没有加权系数的这种方法的简单版本会导致语言模型退化。

3、DPO概述

一般的 DPO 流程如下:

  1. 对于每个提示 $x$,从 $\pi_{\text{ref}}(· | x)$ 中采样完成结果 $y_1, y_2$,用人类偏好进行标注,以构建离线偏好数据集 \(\mathcal{D} = \{(x^{(i)}, y^{(i)}_w, y^{(i)}_l)\}_{i = 1}^N\);
  2. 针对给定的 $\pi_{\text{ref}}$、$\mathcal{D}$ 和期望的 $\beta$,优化语言模型 $\pi_{\theta}$ 以使 $\mathcal{L}_{DPO}$ 最小化。

在实践中,人们希望重用公开可用的偏好数据集,而不是生成样本并收集人类偏好。由于偏好数据集是使用 $\pi^{\text{SFT}}$ 采样得到的,只要有 $\pi^{\text{SFT}}$,我们就将 $\pi_{\text{ref}}$ 初始化为 $\pi^{\text{SFT}}$。

然而,当没有 $\pi^{\text{SFT}}$ 时,我们通过最大化偏好完成结果 $(x, y_w)$ 的似然来初始化 $\pi_{\text{ref}}$,即:

\[\pi_{\text{ref}} = \arg\max_{\pi} \mathbb{E}_{x, y_w \sim \mathcal{D}} [\log \pi(y_w|x)]\]

这个过程有助于减轻真实参考分布(不可用)与 DPO 使用的 $\pi_{\text{ref}}$ 之间的分布偏移。

2.3、采用 GRPO 方式的 RLHF

近端策略优化(PPO)是一种基于 演员-评论家(actor-critic) 的强化学习算法,广泛应用于大语言模型的强化学习微调阶段。具体而言,它通过最大化以下替代目标来优化大语言模型:

\[\begin{align*} \mathcal{J}_{PPO}(\theta) = \mathbb{E}[q \sim P(Q), o \sim \pi_{\theta_{old}}(O|q)] \frac{1}{|o|} \sum_{t = 1}^{|o|} \min & \left[ \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})} A_t, \right. \\ & \left. \text{clip} \left( \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{\theta_{old}}(o_t|q, o_{<t})}, 1 - \varepsilon, 1 + \varepsilon \right) A_t \right] \tag{1} \end{align*}\]

其中:

  • $\pi_{\theta}$ 和 $\pi_{\theta_{old}}$ 分别是当前和旧的策略模型,$q$、$o$ 分别是从问题数据集和旧策略 $\pi_{\theta_{old}}$ 中采样得到的问题和输出
  • $\varepsilon$ 是 PPO 中引入的与裁剪相关的超参数,用于稳定训练
  • $A_t$ 是优势值,通过应用广义优势估计(GAE),基于奖励 ${r_{\geq t}}$ 和学习到的价值函数 $V_{\psi}$ 计算得出

因此,在 PPO 中,价值函数需要与策略模型一同训练,并且为了减轻奖励模型的过度优化,标准方法是在每个 token 的奖励中添加来自参考模型的每个 token 的 KL 散度惩罚项,即:

\[r_t = r_{\varphi}(q, o_{\leq t}) - \beta \log \frac{\pi_{\theta}(o_t|q, o_{<t})}{\pi_{ref}(o_t|q, o_{<t})} \tag{2}\]

其中,$r_{\varphi}$ 是奖励模型,$\pi_{ref}$ 是参考模型,通常是初始的监督微调模型,$\beta$ 是 KL 散度惩罚项的系数。

由于 PPO 中使用的价值函数通常是与策略模型规模相当的另一个模型,这带来了巨大的内存和计算负担。此外,在强化学习训练期间,价值函数在优势值计算中被用作基线以减少方差。然而,在大语言模型的情境中,通常只有最后一个 token 由奖励模型赋予奖励分数,这可能会使在每个 token 上都准确的价值函数的训练变得复杂。

为了解决这些问题,如图所示,DeepSeekMath 提出了组相对策略优化(GRPO),它无需像 PPO 那样进行额外的价值函数近似,而是使用针对同一问题生成的多个采样输出的平均奖励作为基线。

近端策略优化(PPO)与群组相对策略优化(GRPO)的展示。GRPO 无需价值模型,而是通过组分数来估计基线,显著减少了训练资源

更具体地说,对于每个问题 $q$,GRPO 从旧策略 $\pi_{\theta_{old}}$ 中采样一组输出 $\{o_1, o_2, \cdots, o_G\}$,然后通过最大化以下目标来优化策略模型:

\[\begin{align*} \mathcal{J}_{GRPO}(\theta) &= \mathbb{E}[q \sim P(Q), \{o_i\}_{i = 1}^{G} \sim \pi_{\theta_{old}}(O|q)] \\ & \frac{1}{G} \sum_{i = 1}^{G} \frac{1}{|o_i|} \sum_{t = 1}^{|o_i|} \left\{ \min \left[ \frac{\pi_{\theta}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})} \hat{A}_{i,t}, \text{clip} \left( \frac{\pi_{\theta}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t}|q, o_{i,<t})}, 1 - \varepsilon, 1 + \varepsilon \right) \hat{A}_{i,t} \right] - \beta \text{D}_{KL}[\pi_{\theta} || \pi_{ref}] \right\} \tag{3} \end{align*}\]

其中,$\varepsilon$ 和 $\beta$ 是超参数,$\hat{A}_{i,t}$ 是仅基于每组内输出的相对奖励计算得到的优势值,将在以下小节中详细介绍。GRPO 利用组相对的方式计算优势值,这与奖励模型的比较性质非常契合,因为奖励模型通常是在关于同一问题的输出之间的比较数据集上进行训练的。

还需注意的是,GRPO 不是在奖励中添加 KL 散度惩罚项,而是通过直接将训练后的策略与参考策略之间的 KL 散度添加到损失中来进行正则化,避免了使 $\hat{A}_{i,t}$ 的计算复杂化。并且与 公式(2) 中使用的 KL 散度惩罚项不同,DeepSeekMath 使用以下无偏估计器来估计 KL 散度:

\[\mathbb{D}_{KL}[\pi_{\theta} || \pi_{ref}] = \frac{\pi_{ref}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta}(o_{i,t}|q, o_{i,<t})} - \log \frac{\pi_{ref}(o_{i,t}|q, o_{i,<t})}{\pi_{\theta}(o_{i,t}|q, o_{i,<t})} - 1 \tag{4}\]

该估计器保证为正值。

3、RFT

RFT (Reinforcement Fine-Tuning) 是一种用于 LLM 微调的技术,它结合了强化学习 (RL) 和基于规则的奖励系统。RFT 主要目标是通过验证器(verifier)来提供反馈,帮助模型通过强化学习进一步调整其策略,以生成更加合适的响应。与传统的 RLHF (Reinforcement Learning with Human Feedback) 相比,RFT 使用基于规则的验证器代替了人工反馈或奖励模型。

  • RFT 的核心流程
    • 给定一个提示(输入),模型会生成若干个包含 CoT(Chain of Thought)的响应(输出),这些响应的正确性会由验证器/评分器来判断(例如一道数学题的答案是否正确,代码是否可以运行),从而产生一个 “反馈信号”,并以此指导模型参数的更新。这里的关键点是评分器是基于规则的,而不是像传统的 RLHF 那样使用经过训练的奖励模型来生成反馈
  • RLHF 的核心流程
    • 给定一个提示,模型生成多个响应。使用奖励模型评估这些响应的质量,这个模型通过人类反馈来理解和量化 “人类偏好”,即哪些响应更符合人类的期望或需求。奖励模型为每个响应生成一个奖励信号,模型根据这些信号来更新参数,优化生成的策略。这一步通常使用 策略优化算法(例如 PPO)来调整模型的策略,尽量生成更符合人类偏好的回答

3.1、ReFT

增强大规模语言模型(LLMs)推理能力的一种方法是通过链式思维(Chain-of-Thought, CoT)标注进行监督微调(Supervised Fine-Tuning, SFT)。然而,这种方法的泛化能力不够强,因为训练仅依赖于给定的 CoT 数据。例如,在数学问题求解中,训练数据中通常只有每个问题的一个标注推理路径。直观地说,算法从给定问题的多个标注推理路径中学习,效果会更好。

ReFT(Reinforced Fine-Tuning,强化微调)首先通过监督微调(SFT)进行预热阶段,通常在一到两个 epoch 内完成(如图中阴影框所示)。这个初始阶段使得模型具备了一定程度的能力来生成正确的数学问题答案。

以 GSM8K 数据集中的问题($x$)、思维链($e$)和答案($y$)为例。SFT 过程会在训练数据上迭代多个轮次。ReFT 方法从 SFT 预热开始,并在相同的数据上进行强化学习训练

接下来,ReFT 通过利用在线强化学习(RL)算法(如近端策略优化(PPO)算法),进一步优化模型。通过这种方式,ReFT 能够从多个正确的推理路径或 CoT 标注中进行采样并从中学习。

由于训练数据包括真实答案,因此在训练 PPO 时,黄金奖励(golden reward)可以自然地从中派生出来。因此,不需要单独训练一个奖励模型。而与之对比的是,RLHF 则需要使用从人工标注数据中学习的奖励模型。

在预热阶段,ReFT 通过监督学习获得一定的准确性。在 RL 阶段,ReFT 通过强化学习进一步增强其能力,通过采样多样的 CoT 推理路径。在这种方式下,ReFT 获得比 SFT 更加丰富的监督信号。这种方法使得 ReFT 在数学问题求解中大大提高了泛化能力。需要注意的是,ReFT 通过使用相同的训练问题超过了 SFT,而不依赖于额外或增强的训练问题。

3.1.1、强化微调

强化微调(ReFT)过程包括两个阶段:预热阶段(Warm-up)和强化学习阶段(Reinforcement Learning)。

1、Warm-up

在此阶段,策略会在由 (question, CoT) 元组,即 $(x, e)$ 组成的数据集上进行几个轮次的微调。这使得模型具备基本的问题解决技能,能够生成恰当的回复。从形式上看,思维链生成过程可以分解为一系列的下一个词元预测动作。最后一个动作词元 \(\text{<eos>}\) 表示生成过程结束。思维链 $e$ 可写为:

\[e = [a_1, a_2,..., a_{L−1}, a_{L} = \text{<eos>}]\]

其中 $L$ 代表最大长度。在时间步 $t$ ,动作 $a_t$ 是从策略 $\pi_{\theta}(· \mid st)$ 中采样得到的,其中 $a_t$ 可以是词汇表中的任意词元,状态 $s_t$ 包含问题中的所有词元以及到目前为止生成的所有词元。每次动作之后,生成的状态 $s_{t+1}$ 是当前状态 $s_t$ 与动作 $a_t$ 的拼接:

\[s_{t + 1} = \begin{cases} x, & t = 0 \\ [s_t, a_t], & 1 \leq t \leq L \end{cases}\]

当生成的动作是 \(\text{<eos>}\) 词元时,生成的状态 $s_{L+1}$ 就是终止状态,生成过程结束。基于此表示法,一个样本的损失函数可写为:

\[\mathcal{L}_{SFT}(\theta) = - \mathbb{E}_{e \sim \mathcal{D}} \left[ \sum_{t = 1}^{L} \log(\pi_{\theta}(a_t | s_t)) \right] \tag{1}\]

2、Reinforcement Learning

在这个阶段,策略通过一种在线自学习方式,利用由 (question, answer) 元组,即 $(x, y)$ 组成的数据集来提升其性能。具体而言,策略模型通过反复采样回复、评估回复答案的正确性,并以在线方式更新其参数进行学习。ReFT 采用近端策略优化算法(PPO)以及带裁剪目标的算法进行训练。价值模型 $V_{\phi}$ 通过在预热阶段后的策略模型 $\pi_{\theta}$ 的最后隐藏状态之上添加一个线性价值头来构建。

对于所有导致非终止状态的动作,给予奖励 0。在终止状态,使用一个奖励函数,该函数直接比较从状态的思维链中提取的答案与真实答案 $y$。在此,若答案被判定为正确,奖励函数返回 1,否则返回 0。对于答案全为数值型的数据集,当能提取出答案且其为数值类型时,可应用 0.1 的部分奖励(partial reward)。对于 $1 \leq t \leq L$,定义:

\[r(s_t, a_t, s_{t + 1}) = \begin{cases} 1, & \text{EXTRACT}(s_{t + 1}) = y \\ 0.1, & \text{EXTRACT}(s_{t + 1}) \neq \text{null}, \neq y \\ 0, & \text{EXTRACT}(s_{t + 1}) = \text{null} \end{cases}\]

这样的部分奖励有助于减轻从稀疏奖励中学习的影响。此外,总奖励是奖励函数得分与学习到的强化学习策略和初始策略之间的 Kullback-Leibler 散度(KL 散度)之和,并由系数因子 $\beta$ 进行缩放。

\[r_{total}(s_t, a_t, s_{t + 1}) = r(s_t, a_t, s_{t + 1}) - \beta \text{KL} \left( \pi_{\theta}(\cdot|s_t), \pi_{\theta}^{(0)}(\cdot|s_t) \right)\]

广义优势估计(generalized advantage estimate)用于优势计算:

\[\hat{A}_t = \sum_{l = 0}^{L - t} (\gamma \lambda)^l \delta_{t + l}\]

其中,时间差分(Temporal Difference,TD)定义为:

\[\delta_{t'} = - V_{\phi}(s_{t'}) + r_{total}(s_{t'}, a_{t'}, s_{t' + 1}) + \gamma V_{\phi}(s_{t' + 1})\]

且终止状态值 $V_{\phi}(s_{L + 1}) := 0$,$\lambda \in (0, 1]$ 是奖励的折扣因子,$\gamma \in [0, 1]$ 是时间差分的折扣因子。对于回报估计,利用 $\lambda -$ 回报 $\hat{R}_t$,它可写为广义优势估计与价值估计之和:

\[\hat{R}_t = \hat{A}_t + V_{\phi}(s_t)\]

最后,策略目标和价值目标可写为以下两个方程:

\[\mathcal{L}_{policy}(\theta) = - \mathbb{E}_{e \sim \pi_{\theta}^{old}} \left[ \min \left( \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta}^{old}(a_t|s_t)} \hat{A}_t, \text{clip} \left( \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta}^{old}(a_t|s_t)}, 1 - \epsilon, 1 + \epsilon \right) \hat{A}_t \right) \right]\] \[\mathcal{L}_{value}(\phi) = \frac{1}{2} \mathbb{E}_{e \sim \pi_{\theta}^{old}} \left[ \max \left( \left( V_{\phi}(s_t) - \hat{R}_t \right)^2, \text{clip} \left( \hat{R}_t - V_{\phi}(s_t), \hat{A}_t - \epsilon, \hat{A}_t + \epsilon \right)^2 \right) \right]\]

其中,$\pi_{\theta}^{old}$,$V_{\phi}^{old}$ 用于采样思维链并计算 $\hat{A}_t$,$\hat{R}_t$。统一损失函数是上述目标的加权和:

\[\mathcal{L}_{RL}(\theta, \phi) = \mathcal{L}_{policy} + \alpha \mathcal{L}_{value} \tag{2}\]

其中,$\alpha$ 是价值目标的系数。

3.2、KIMI K1.5

3.2.1、问题设定

给定一个训练数据集 \(D = \{(x_i, y^*_i)\}_{i = 1}^n\),其中包含问题 \(x_i\) 以及相应的真实答案 \(y^*_i\),我们的目标是训练一个策略模型 \(\pi_{\theta}\),以准确解决测试问题。

在复杂推理的情境下,从问题 \(x\) 到解决方案 \(y\) 的映射并非易事。为应对这一挑战,思维链(CoT)方法提议使用一系列中间步骤 \(z = (z_1, z_2, \ldots, z_m)\) 来连接 $x$ 和 $y$,其中每个 $z_i$ 都是一个连贯的词元序列,作为解决问题的重要中间步骤。

在解决问题 $x$ 时,思维 \(z_t \sim \pi_{\theta}(\cdot \mid x, z_1, \ldots, z_{t - 1})\) 以自回归方式采样,随后最终答案 \(y \sim \pi_{\theta}(\cdot \mid x, z_1, \ldots, z_m)\)。K1.5 使用 \(y, z \sim \pi_{\theta}\) 来表示这个采样过程。请注意,思维和最终答案都作为语言序列进行采样。

为进一步提升模型的推理能力,在推理阶段采用规划算法来探索各种思维过程,生成改进后的 CoT。这些方法的核心思路是在价值估计的引导下,显式构建一个思维搜索树。这使得模型能够探索思维过程的不同延续方式,或者在遇到死胡同时回溯以探索新的方向。

更详细地说,设 $T$ 为一个搜索树,其中每个节点代表一个部分解决方案 $s = (x, z_{1:|s|})$。这里 $s$ 由问题 $x$ 和一系列通向该节点的思维 $z_{1:|s|} = (z_1, \ldots, z_{|s|})$组成,$|s|$ 表示序列中思维的数量。规划算法使用一个评判模型 $v$ 来提供反馈 $v(x, z_{1:|s|})$,这有助于评估当前解决问题的进展,并识别现有部分解决方案中的任何错误。反馈可以通过判别分数或语言序列提供。在所有 $s \in T$ 的反馈引导下,规划算法选择最有希望扩展的节点,从而使搜索树得以生长。上述过程不断迭代,直至得出完整的解决方案。

我们也可以从算法角度看待规划算法。给定在第 $t$ 次迭代时可用的过往搜索历史 $(s_1, v(s_1), \ldots, s_{t - 1}, v(s_{t - 1}))$,规划算法 $\mathcal{A}$ 迭代确定下一个搜索方向 $\mathcal{A}(s_t|s_1, v(s_1), \ldots, s_{t - 1}, v(s_{t - 1}))$,并为当前搜索进展提供反馈 $\mathcal{A}(v(s_t)|s_1, v(s_1), \ldots, s_t)$。

由于思维和反馈都可视为中间推理步骤,且这些组件都可表示为语言词元序列,使用 $z$ 替代 $s$,使用 $v$ 来简化符号。相应地,将规划算法视为一个直接作用于推理步骤序列的映射 $\mathcal{A}(\cdot|z_1, z_2, \ldots)$。在此框架中,规划算法使用的搜索树中存储的所有信息都被扁平化,成为提供给算法的完整上下文。这为生成高质量的 CoT 提供了一个有趣的视角:我们无需显式构建搜索树并实施规划算法,而是有可能训练一个模型来近似这个过程。

在此,思维的数量(即语言词元)类似于传统上分配给规划算法的计算资源。近期长上下文窗口方面的进展有助于在训练和测试阶段实现无缝扩展。如果可行,这种方法使模型能够通过自回归预测直接在推理空间中进行隐式搜索。因此,模型不仅学会解决一组训练问题,还培养了有效处理单个问题的能力,从而提高对未见过的测试问题的泛化能力。

因此,我们考虑使用强化学习(RL)来训练模型以生成 CoT。设 $r$ 为一个奖励模型,它依据真实答案 $y^*$ 来判定针对给定问题 $x$ 所给出的答案 $y$ 的正确性,通过赋予一个值 \(r(x, y, y^*) \in \{0, 1\}\)。对于可验证的问题,奖励直接由预定义的标准或规则决定。例如,在编码问题中,我们评估答案是否通过测试用例。对于具有自由形式真实答案的问题,我们训练一个奖励模型 \(r(x, y, y^*)\),该模型预测答案是否与真实答案匹配。

给定一个问题 $x$,模型 $\pi_{\theta}$ 通过采样过程 $z \sim \pi_{\theta}(\cdot \mid x)$ 生成一个 CoT,然后通过 $y \sim \pi_{\theta}(\cdot \mid x, z)$ 得出最终答案。生成的 CoT 的质量通过它是否能导向正确的最终答案来评估。总之,我们考虑通过优化以下目标来优化策略:

\[\max_{\theta} \mathbb{E}_{(x,y^*) \sim \mathcal{D}, (y,z) \sim \pi_{\theta}} [r(x, y, y^*)] \tag{1}\]

通过扩大强化学习训练规模,我们旨在训练一个模型,该模型兼具基于简单提示的 CoT 和规划增强型 CoT 的优势。在推理过程中,该模型仍然以自回归方式采样语言序列,从而避免了在部署过程中先进规划算法所需的复杂并行化操作。

然而,与基于简单提示的方法的一个关键区别在于,该模型不应仅仅遵循一系列推理步骤。相反,它还应通过利用所探索的全部思维集作为上下文信息,学习关键的规划技能,包括错误识别、回溯和解决方案优化。

3.2.2、策略优化

K1.5 采用一种在线策略镜像下降的变体作为训练算法。该算法迭代执行。在第 $i$ 次迭代时,将当前模型 $\pi_{\theta_i}$ 作为参考模型,并优化以下相对熵正则化策略优化问题:

\[\max_{\theta} \mathbb{E}_{(x,y^*) \sim \mathcal{D}} \left[\mathbb{E}_{(y,z) \sim \pi_{\theta}} [r(x, y, y^*)] - \tau \text{KL}(\pi_{\theta}(x) || \pi_{\theta_i}(x))\right] \tag{2}\]

其中 $\tau > 0$ 是一个控制正则化程度的参数。这个目标有一个封闭形式的解:

\[\pi^*(y, z|x) = \frac{\pi_{\theta_i}(y, z|x) \exp(r(x, y, y^*)/\tau)}{Z}\]

这里 $Z = \sum_{y’,z’} \pi_{\theta_i}(y’, z’ \mid x) \exp(r(x, y’, y^*)/\tau)$ 是归一化因子。对两边取对数,对于任意$(y, z)$,以下约束成立,这使得我们在优化过程中能够利用离策略数据:

\[r(x, y, y^*) - \tau \log Z = \tau \log \frac{\pi^*(y, z|x)}{\pi_{\theta_i}(y, z|x)}\]

这就引出了以下替代损失函数:

\[L(\theta) = \mathbb{E}_{(x,y^*) \sim \mathcal{D}} \left[\mathbb{E}_{(y,z) \sim \pi_{\theta_i}} \left[\left(r(x, y, y^*) - \tau \log Z - \tau \log \frac{\pi_{\theta}(y, z|x)}{\pi_{\theta_i}(y, z|x)}\right)^2\right]\right]\]

为了近似 $\tau \log Z$,使用从 $\pi_{\theta_i}$ 采样得到的样本:

\[(y_1, z_1), \ldots, (y_k, z_k) : \tau \log Z \approx \tau \log \frac{1}{k} \sum_{j = 1}^{k} \exp(r(x, y_j, y^*)/\tau)\]

此外,使用采样奖励的经验均值 \(\bar{r} = \text{mean}(r(x, y_1, y^*), \ldots, r(x, y_k, y^*))\) 能在实际中产生有效的结果。

这是合理的,因为当 $\tau \to \infty$ 时,$\tau \log Z$ 趋近于 $\pi_{\theta_i}$ 下的期望奖励。最后,通过计算替代损失的梯度来完成学习算法。

对于每个问题 $x$,使用参考策略 $\pi_{\theta_i}$ 采样 $k$ 个响应,梯度由下式给出:

\[\frac{1}{k} \sum_{j = 1}^{k} \nabla_{\theta} \log \pi_{\theta}(y_j, z_j|x) (r(x, y_j, y^*) - \bar{r}) - \frac{\tau}{2} \nabla_{\theta} \left(\log \frac{\pi_{\theta}(y_j, z_j|x)}{\pi_{\theta_i}(y_j, z_j|x)}\right)^2 \tag{3}\]

对于熟悉策略梯度方法的人来说,这个梯度类似于使用采样奖励均值作为基线的式(2)的策略梯度。主要区别在于响应是从 $\pi_{\theta_i}$ 采样得到的,而非基于当前策略采样,并且应用了 $l_2$ 正则化。因此,可以将其视为通常的基于策略的正则化策略梯度算法向离策略情况的自然扩展。

从 $\mathcal{D}$ 中采样一批问题,并将参数更新为 $\theta_{i + 1}$,它随后作为下一次迭代的参考策略。由于每次迭代因参考策略的变化而考虑不同的优化问题,在每次迭代开始时也重置优化器。

在训练系统中未使用价值网络,虽然这种设计选择显著提高了训练效率,但我们也假设经典强化学习中用于功劳分配的价值函数的常规用法可能并不适合我们的场景。

考虑这样一种情况,模型生成了部分思维链 $(z_1, z_2, \ldots, z_t)$,并且有两个潜在的下一个推理步骤:$z_{t + 1}$ 和 \(z'_{t + 1}\)。假设 $z_{t + 1}$ 直接导向正确答案,而 \(z'_{t + 1}\) 包含一些错误。如果能获取一个 “神谕” 价值函数,它会表明 $z_{t + 1}$ 相对于 \(z'_{t + 1}\) 具有更高的价值。

根据标准的功劳分配原则,选择 \(z'_{t + 1}\) 会受到惩罚,因为相对于当前策略它具有负优势。然而,探索 \(z'_{t + 1}\) 对于训练模型生成较长的思维链极具价值。通过将从较长思维链得出的最终答案的合理性作为奖励信号,只要模型能成功恢复并得出正确答案,它就能从选择 \(z'_{t + 1}\) 中学习试错模式。

这个例子的关键启示是,我们应该鼓励模型探索多样的推理路径,以增强其解决复杂问题的能力。这种探索性方法能产生丰富的经验,有助于培养关键的规划技能。我们的主要目标并非局限于在训练问题上获得高精度,而是着重于让模型具备有效的问题解决策略,最终提升其在测试问题上的表现。

3.2.3、长度惩罚

K1.5 观察到一种 “过度思考” 现象,即在强化学习训练过程中,模型的响应长度显著增加。尽管这会带来更好的性能,但过长的推理过程在训练和推理时成本较高,而且人类通常也不倾向于过度思考。为解决这一问题,K1.5 引入一种长度奖励机制,以抑制词元长度的快速增长,从而提高模型的词元效率。

给定问题 $x$ 及其真实答案 $y^*$ 的 $k$ 个采样响应 $(y_1, z_1), \ldots, (y_k, z_k)$,设 $\text{len}(i)$ 为 $(y_i, z_i)$ 的长度,$\text{min_len} = \min_i \text{len}(i)$ 且 $\text{max_len} = \max_i \text{len}(i)$。如果 $\text{max_len} = \text{min_len}$,将所有响应的长度奖励设为零,因为它们长度相同。否则,长度奖励由下式给出:

\[\text{len_reward}(i) = \begin{cases} \lambda & \text{if } r(x, y_i, y^*) = 1 \\ \min(0, \lambda) & \text{if } r(x, y_i, y^*) = 0 \end{cases}, \quad \text{where } \lambda = 0.5 - \frac{\text{len}(i) - \text{min_len}}{\text{max_len} - \text{min_len}}\]

本质上,我们鼓励较短的响应,对正确答案中的较长响应进行惩罚,同时明确惩罚答案错误的长响应。然后,这个基于长度的奖励会以一个加权参数加到原始奖励中。

在初步实验中,长度惩罚在训练初期可能会减缓训练速度。为缓解这一问题,K1.5 提议在训练过程中逐步引入长度惩罚。具体来说,先采用无长度惩罚的标准策略优化,然后在训练的剩余阶段采用固定的长度惩罚。

3.3、DeepSeek-R1

  1. 通过引入少量高质量数据作为冷启动,能否进一步提升推理性能或加快收敛速度?
  2. 如何训练一个既能够生成清晰连贯的思维链(CoT),又具备强大通用能力的用户友好型模型?

为解决这些问题,设计一个流程用于训练 DeepSeek-R1 。该流程包含四个阶段,具体如下。

3.3.1、冷启动

与 DeepSeek-R1-Zero 不同,为避免从基础模型进行强化学习训练时早期冷启动阶段的不稳定,对于 DeepSeek-R1 构建并收集了少量长思维链(CoT)数据,对模型进行微调,以此作为初始的强化学习行动者。为收集此类数据探索了多种方法:以长思维链作为示例进行少样本提示,直接促使模型生成带有反思与验证的详细答案,收集格式可读的 DeepSeek-R1-Zero 输出结果,并由人工注释者通过后处理优化这些结果。

在这项工作中收集了数千条冷启动数据,对 DeepSeek-V3-Base 进行微调,将其作为强化学习的起点。与 DeepSeek-R1-Zero 相比,冷启动数据的优势包括:

  • 可读性:DeepSeek-R1-Zero 的一个关键局限在于其内容往往不适合阅读。回复可能夹杂多种语言,或者缺少用于为用户突出答案的 Markdown 格式。相比之下,在为 DeepSeek-R1 创建冷启动数据时设计了一种可读模式,在每个回复的结尾处添加总结,并过滤掉不便于阅读的回复。在此,将输出格式定义为 |特殊标记|<推理过程>|特殊标记|<总结>,其中推理过程是针对查询的思维链,总结则用于概括推理结果
  • 潜力:通过借助人类先验知识精心设计冷启动数据的模式,观察到其性能优于 DeepSeek-R1-Zero。迭代训练对于推理模型而言是一种更优的方式

3.3.2、以推理为导向的强化学习

DeepSeek-R1 训练数据的收集方式如下:

在冷启动数据上对 DeepSeek-V3-Base 进行微调后,采用与 DeepSeek-R1-Zero 相同的大规模强化学习训练流程。此阶段着重提升模型的推理能力,尤其是在诸如编码、数学、科学及逻辑推理等推理密集型任务上,这些任务涉及定义明确且有清晰解法的问题。

在训练过程中注意到思维链(CoT)经常出现语言混用的情况,特别是当强化学习提示涉及多种语言时。为缓解语言混用问题,在强化学习训练中引入语言一致性奖励,该奖励按思维链中目标语言词汇的比例来计算。尽管消融实验表明,这种调整会使模型性能略有下降,但该奖励符合人类偏好,使输出更具可读性。最后,通过直接将推理任务的准确率与语言一致性奖励相加,形成最终奖励。然后,对微调后的模型进行强化学习训练,直至其在推理任务上达到收敛。

3.3.3、拒绝采样和监督式微调

当面向推理的强化学习收敛后,利用得到的检查点为下一轮收集监督微调(SFT)数据。与最初主要聚焦于推理的冷启动数据不同,此阶段纳入了来自其他领域的数据,以提升模型在写作、角色扮演及其他通用任务方面的能力。具体而言,按如下方式生成数据并微调模型。

3.3.3.1、推理数据

DeepSeek-R1 精心整理推理提示,并通过对上述强化学习训练得到的检查点进行拒绝采样来生成推理轨迹。在前一阶段,仅纳入了能够使用基于规则的奖励进行评估的数据。然而在本阶段,通过纳入更多数据来扩充数据集,其中一些数据借助生成式奖励模型,将真实值与模型预测结果输入 DeepSeek-V3 进行判断。此外,由于模型输出有时杂乱且难以阅读,过滤掉了语言混杂的思维链、冗长段落以及代码块。对于每个提示,采样多个回复,仅保留正确的回复。总体而言,收集了约 60万 个与推理相关的训练样本。

3.3.3.2、非推理数据

对于非推理数据,如写作、事实性问答、自我认知以及翻译等,采用 DeepSeek-V3 流程,并复用 DeepSeek-V3 的部分监督微调数据集。对于某些非推理任务,在通过提示回答问题之前,调用 DeepSeek-V3 生成一个潜在的思维链。不过,对于诸如 “你好” 这类简单查询,回复中不提供思维链。最终,总共收集了约 20万 个与推理无关的训练样本。

使用上述精心整理的约 80万 个样本的数据集,对 DeepSeek-V3-Base 进行两个轮次的微调。

参考文献

  1. Proximal Policy Optimization Algorithms
  2. Direct Preference Optimization:Your Language Model is Secretly a Reward Model
  3. Training language models to follow instructions with human feedback
  4. Deep Reinforcement Learning from Human Preferences
  5. REFT: Reasoning with REinforced Fine-Tuning
  6. KIMI K1.5:SCALING REINFORCEMENT LEARNING WITH LLMS
  7. ChatGPT 背后的“功臣”——RLHF 技术详解
  8. 零基础学习强化学习算法:ppo
  9. Secrets of RLHF in Large Language Models Part I: PPO
  10. 什么是 RLHF?
  11. 为什么需要RLHF?SFT不够吗?
  12. Deep Dive into OpenAI’s Reinforcement Fine-Tuning (RFT): Step-by-Step Guide, Comparison to SFT/RLHF/DPO
  13. Let’s Verify Step by Step
  14. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning