强化学习的核心目标是通过不断调整策略(即根据当前状态选择动作的规则),使智能体表现得更好。在强化学习中,有几个关键元素至关重要:首先是奖励模型和价值函数,它们用于评估每个动作或策略的优劣,从而决定模型优化的方向;其次是更新规则,主要涉及损失函数的约束项,它决定了策略更新的力度和稳定性。
本文首先介绍了
三类基础的强化学习算法
,这三类算法主要在奖励计算和更新规则上有所不同,是 RLHF(人类反馈强化学习)的核心。接着,重点讨论了
四种改进方法
:REINFORCE、RLOO、PRIME 和 REINFORCE++,它们通过引入 EMA、在线采样、过程奖励等技术,使奖励更加无偏并提高密集成都。
最后,介绍了 GRPO(Group Relative Policy Optimization)方法,它在奖励函数的计算和策略更新规则上做出了进一步的改进,以提升训练的稳定性和效率。
Policy Gradient
最早的 Policy Gradient Methods 就是直接优化策略的一种方法。简单来说,策略梯度方法通过计算“策略梯度”(表示如何调整策略模型以提升表现)来更新策略,从而让智能体在长期内获得更高的奖励。
1. 计算策略梯度:
通过当前策略和动作的效果(优势函数),我们可以计算出一个梯度(action 对于 policy model 的梯度),告诉我们如何调整策略。
2. 优化策略:
通过梯度上升的方法调整策略参数,以提升智能体的表现。
3. 反复更新:
这个过程是一个
反复的采样和优化过程
,每次都会根据新的数据调整策略。
表示在状态
下,采取动作
的概率,
是策略的参数,控制策略的行为。
是策略梯度,表示策略参数变化时,策略的行为(即动作选择概率)如何变化。
是优势函数的估计值,它表示动作
相对于当前策略的“好坏”。如果
,说明该动作相较于平均水平是好的,应该增加这种动作的概率;如果
,则说明该动作不好,应该减少其概率。
表示对多个样本的平均,意思是我们在进行多次实验后,计算这个期望值。
这是我们的
目标函数
,我们希望最大化这个目标。简而言之,就是通过调整策略参数
,使得智能体选择的动作(那些优势高的动作)变得更加可能。
对于 LLM,也就是直接将 outcome reward 作为每个 token 的 advantage。例如有两个 sample,分别为错误和正确,第一个 sample 有 5 个 token,它的 advantage 矩阵为 [0,0,0,0,0];第二个 sample 有 6 个 token,它的 advantage 矩阵为 [1,1,1,1,1,1],不断提升正确样本的 token 概率。
这里的问题在于,如果我们对同一批数据做多次优化,可能会导致策略的更新过大(比如参数调整过猛)。这样会使得策略发生剧烈变化,导致性能反而变差。因此,
过度更新
会导致学习不稳定。
TRPO (Trust Region Policy Optimization)
TRPO(Trust Region Policy Optimization)是一种改进的策略优化方法,核心思想是限制策略更新的幅度,避免策略变化过大导致学习不稳定。简单来说,TRPO 通过引入“信赖区域”的概念,确保每次更新后的策略不会偏离旧策略太远,从而保证学习过程的平稳性。他的目标函数如下所示:
通过最大化这个目标函数,TRPO 试图找到一种策略,使得新策略在优势动作上的概率更高。同时,KL 散度用于衡量当前策略和旧策略之间的差异。这个约束确保了策略的更新不会过于激进。
当然直接求解这个问题是很困难的,TRPO 在其具体实现中做了一步近似操作来快速求解,作者对目标和约束进行了泰勒展开,并分别用一阶和二阶进行近似,最后得出的结果需要用到 hessian 矩阵 H 和 g(目标函数对 policy 的梯度)。
这对于 LLM 来说是不可接受的,因此作者又用了共轭梯度的方法避免存储 hessian 矩阵,总体优化比较复杂,而且因为 KL 散度和优化目标都是泰勒近似,很难保证 KL 散度的约束一定被满足。因此每一轮迭代 TRPO 还要通过先行搜索找到一个整数 i 来强行使得 KL diververge 的约束被满足。
这里就有一个有趣的问题,就是为什么选择把 KL 散度作为一个 hard constraint 而不是一个目标函数的惩罚项。
实际上原作者是证明了,这种形式的惩罚项会形成一个 lower bound 来限制策略的变化。但是作者认为如果使用惩罚项,𝛽 系数需要针对不同任务进行调整。在一个任务中,合适的 𝛽 值可能在学习的不同阶段有所不同。固定的 𝛽 值在某些情况下可能会导致策略更新过大或过小,从而影响训练效果。
PPO (Proximal Policy Optimization Algorithms)
TRPO 算法在很多场景上的应用都很成功,但是我们也发现它的计算过程非常复杂,每一步更新的运算量非常大。于是,TRPO 算法的改进版——PPO 算法在 2017 年被提出,PPO 基于 TRPO 的思想,但是其算法实现更加简单。并且大量的实验结果表明,与 TRPO 相比,PPO 能学习得一样好(甚至更快),这使得 PPO 成为非常流行的强化学习算法。
从这里开始我们使用 LLM 的 notion 方便理解,即 q 作为 state(输入token),o 作为 action,输出 token,policy model 即 LLM 模型。传统的 PPO 由如下公式训练,直接将 KL divergence 的 term 替换成了 CLIP 的操作。
3.1 优势函数(Advantage Function)
优势函数
衡量了在当前状态下选择某个动作的优越性,相对于其他动作的预期回报的提升。实际中,优势函数通常是通过
累计折扣奖励
减去基准来实现的。公式为:
其中,
是
折扣因子
,决定了未来奖励的权重。
是环境在时间步
提供的奖励。
是
基准
(baseline),用来减小优势函数的方差,常见的选择包括直接使用值函数或奖励的
群体平均
。
3.2 值函数(Value Function)
尽管
蒙特卡洛估计
(MC 估计)是无偏的,但它因为依赖所有未来的动作和奖励,而可能受到很高的方差影响。为了降低方差,引入了
值函数
,它预测从某个状态出发,智能体能够获得的累计奖励。
值函数
有助于在计算优势函数时减少波动。
常见的方式是使用
广义优势估计(GAE)
来减少方差,同时保持估计的偏差在可接受范围内。GAE 公式如下:
在
PPO
(Proximal Policy Optimization)等
actor-critic
算法中,值函数和策略模型是一起训练的。
REINFORCE在LLM对齐中的应用
在 LLM 应用中,奖励 r(x, y) 通常只在完整序列生成后获得。这种方法允许使用
REINFORCE 估计器
来优化整个序列的奖励目标:
为了在保持无偏估计的同时减少方差,引入了一个基线 b:
一个简单有效的基线是训练过程中所有奖励的
移动平均值
:
其中
是训练步数,
是第
步的 prompt-completion 对。
RLOO
(
REINFORCE Leave-One-Out
)
移动平均基线
虽然简单,但可以通过使用
多个在线样本
来进一步改进。
REINFORCE Leave-One-Out (RLOO)
估计器利用多个样本来
减少方差
:
-
每个样本的奖励可以作为其他样本的基线;
-
策略更新通过对每个样本的梯度估计取平均来实现,从而得到一个
方差减少的蒙特卡洛(MC)估计
。
RLOO 为每个样本创建了一个
即时的、无参数的基线
,比
更有效,
但需要额外的采样时间。
6.1 稠密奖励信号的重要意义
PPO 的方法可以自然地将稠密奖励融入到优势函数中,但在大多数LLM实践中比如 RLOO 和 Reinforce,实际可用的奖励模型(ORM)通常是
输出奖励模型(Outcome Reward Models)
。这意味着通常只有
最后一个 token
才会得到有意义的奖励,而
中间的 token
不会获得奖励。
例如,在这种设置下,
对于
而
是非零的,公式(2)变为:
这种简化形式虽然更易实现,但
奖励稀疏性
问题会导致许多问题:
1. 错误过程的解决方案:
奖
励只出现在生成过程的最后,可能会导致策略学习出错的过程(如不正确的生成过程),但最终得到正确的答案。
2. 样本效率降低:
由于奖励仅在最后提供,智能体需要较长的时间来感知并学习每个 token 对最终结果的影响,导致样本效率下降。
3. 信用分配问题(Credit Assignment Problem):
这种奖励结构使得很难追溯每个 token 的贡献,尤其在生成过程中,智能体需要学习如何将奖励归因于先前的生成步骤。
这些问题在
复杂任务
中尤为突出,因为这些任务可能需要更多的思考和执行步骤,因此需要
稠密奖励
(即在每个 token 生成时提供反馈)。使用采用稠密奖励模型(PRM)来缓解奖励稀疏性问题是比较直观的,但是难以训练,而且成本较高。
6.2 PRM-free的dense reward
PRIME 的核心思想是应用隐式过程奖励,这些奖励可以从隐式奖励模型(Implicit PRM)中推导出来,而这个模型只需要结果标签(outcome labels)来训练。
推理阶段:
在推理阶段,使用隐式奖励模型来计算每个 token 级的奖励,这里的 implicit reward 是和 ORM 的唯一区别,公式为:
这里,
是在生成过程中当前时刻的 token,
是该时刻之前生成的 tokens。通过这种方式,隐式奖励模型在生成每个 token 时提供了奖励反馈。
因为现在我们可以为每个 token 提供 reward,那么就可以进一步考虑如何利用这些奖励估算优势,从而指导策略更新。PRIME 发现
蒙特卡洛估计
(MC)比
广义优势估计(GAE)
更简单,效果也更好,因此选择 MC 作为默认选择。
对于每个生成的样本,优势函数通过
leave-one-out baseline
来估算进一步减小方差:
其中,
是第
个响应在最终步骤
的奖励。
是每个提示生成的样本数。
作者将 process reward 与 outcome reward 都利用了起来:
1. 使用平均的隐式过程奖励来计算留一法基准(LOO);
2. 通过减去基准值来
规范化
每个步骤的过程奖励;
3. 计算每个响应的折扣回报(discounted return);
结果奖励(Outcome Rewards)
则直接采用留一法(LOO),无需修改。而且结合得到最终的 reward:
REINFORCE++
这里的核心贡献主要有两个:对 KL 散度的限制更加严格,以及优势函数逐 batch 做归一化,更加稳定。
在 REINFORCE++ 中,Token-Level KL 惩罚被整合到奖励函数中。
奖励函数的定义如下:
其中,
是一个指示函数,当 token
是序列结束符(End of Sequence, EOS)时取值为 1,否则为 0。
是模型生成的完整序列
对应的奖励。
是一个超参数,用于控制 KL 惩罚的强度。
是 token
的 KL 散度,计算公式为:
其中:
是 RL 模型在状态
下生成 token
的概率。
是 SFT 模型在状态
下生成 token
的概率。
这种做法有助于更好的 credit 分配,同时与
过程奖励模型(PRM)
无缝集成,增强了训练的稳定性。
7.2 Advantage Normalization(优势标准化)
为了确保梯度的稳定性并避免训练中的发散,文章对优势进行
z-score 标准化
:
其中
和
分别是 batch 中的平均值和标准差。优势标准化有助于平衡不同训练步骤中的梯度幅度,确保训练过程的稳定性,并防止出现梯度爆炸或消失的问题。
GRPO
GRPO 是 PPO 的又一改进,主要是想去掉 value model 的存在,同时克服奖励稀疏性的问题。GRPO 的目标函数如下:
其中,
和
是超参数。
是基于组内相对奖励计算的优势函数。
1. 去除价值函数:
GRPO 不需要额外的价值函数模型,而是使用
多组采样输出的平均奖励