RL 算法如何在 LLM 上应用
上一节已经把 LLM 放进了 RL 的基本框架里:prompt 和已生成前缀构成状态,下一个 token 是动作,完整回答是一条轨迹,奖励通常在回答结束后给出。本节继续往前走,讨论传统 RL 算法怎样落到 LLM 训练里,尤其是 Policy Gradient、PPO、GRPO、DPO 和 RLHF 之间的关系。
这里有一个关键点:即使是Policy Gradient这类直接优化Policy的算法,也没办法离开State value这个概念.这是因为传统RL框架里,所有的reward最终都会体现在State value里面.也就是说如果没有state value的话,实际上策略是无法学习到后续的reward的.
在 LLM 中,state value 的含义没有传统 RL 那么直观。传统环境里,状态 \(s\) 往往是一个清晰的环境状态;而在 LLM 中,状态是 \((x,y_{<t})\),也就是 prompt 加已经生成的前缀。State的维度过于巨大, RL中的State 定义方法会失去效果. LLM中的 State 和 Reward 不再像是一系列Reward定义的期望,而是直接使用稀疏的Reward Model或者规则奖励对整条轨迹定义Reward.这是和传统RL的一大区别.因此理解 LLM 中的 reward model、value model 和 advantage,是理解 RLHF/PPO 的关键。d
其中一个非常重要的因素是对于大模型来说,State value的定义并不是那么明显.但是如果看刚才PG族算法的推导,会发现即使是直接优化策略,我们也是离不开State value这个事情的.这是因为对于强化学习来说,所有的样本的反馈. Reward最后都体现在State value里面.也就是说如果没有state value的话,实际上策略是无法学习到后续的reward的.所以对于LLM来说,我们需要想办法定义state value.
Q: 简单回顾一下 LLM 中的状态、动作、奖励是什么?
在 LLM 中,一次回答生成可以看成一条 trajectory。给定 prompt \(x\),模型逐 token 生成回答:
对应到 RL 记号:
- 状态 \(s_t\):prompt 加已生成前缀,\(s_t=(x,y_{<t})\)。
- 动作 \(a_t\):下一个 token,\(a_t=y_t\)。
- 策略 \(\pi_\theta(a_t\mid s_t)\):语言模型的 next-token distribution,也就是 \(\pi_\theta(y_t\mid x,y_{<t})\)。
- 轨迹 \(\tau\):从 prompt 开始到完整回答结束的 token 序列。
- 奖励 \(R(x,y)\):对完整回答 \(y\) 的评价,可以来自人工偏好、reward model、规则奖励或可验证任务的结果。
因此,LLM 中一条轨迹的概率可以写成:
这和普通 RL 中 trajectory probability 的角色是一样的,只是环境状态被文本前缀替代,动作空间变成了词表。
注意这里,奖励变成了稀疏的,变成了对整条轨迹的奖励.而没有了传统RL中每一步都有reward的设定.这是LLM中的一个重要区别.在LLM中,通常会直接使用reward model或者规则奖励对整条轨迹定义reward,而不是像传统RL那样,把reward定义成每一步的即时reward.这其实对算法产生了非常大的简化
Q: Policy Gradient 如何对应到 LLM?
传统 Policy Gradient 的目标是最大化策略诱导出来的期望回报。写成 trajectory 形式,就是:
其中 \(\tau\) 是策略 \(\pi_\theta\) 采样出来的轨迹,\(G(\tau)\) 是这条轨迹上的 return。Policy Gradient 的核心是:虽然 reward 本身通常不能直接对 \(\theta\) 求导,但 trajectory 的概率依赖 \(\theta\),所以可以通过 log-probability trick 更新策略。
在 LLM 中,prompt \(x\) 可以看成初始条件,完整回答 \(y=(y_1,\ldots,y_T)\) 可以看成 trajectory。语言模型策略是:
整段回答的概率为:
于是 LLM 的优化目标可以写成:
这里 \(R(x,y)\) 是完整回答级别的奖励。它可以来自人工规则、可验证任务的结果,也可以来自 reward model:
其中 \(r_\phi\) 是由偏好数据训练出来的奖励模型。在 RLHF 的 PPO 阶段,\(r_\phi\) 通常会被冻结;它负责给当前模型生成的回答打分,但它本身不是正在更新的 policy。
更常见的 RLHF 目标还会加入 KL penalty,防止当前模型偏离参考模型太远:
这和传统 RL 的一个差异是:在很多传统环境里,reward 是环境交互的一部分;而在 LLM 的 RLHF 中,reward 往往是一个额外训练出来的模型或规则函数,对完整回答进行打分。它和 policy model \(\pi_\theta\) 通常是分开的。
这是大模型的最大的一个特点.强化传统的强化学习中,value function跟策略某种意义上是强耦合的.所以说我们一般用两个网络.或者假设action value跟策略的参数\( \theta \)并不相关.以避免求梯度时候复杂的求导问题.但是两者依然是相当耦合的.即我们还需要专门的用各种各样的算法,策略导出的轨迹中的一系列reward去估计value.这导致两者实际上还是耦合在一起的.
但是大模型中对这个进一步进行了简化.它的Reward一般是针对整个序列的.即之前文章中提到过的稀疏reward.并且这个reward可能是通过规则或者是一个reward model计算出来的.所以它确实与模型参数的,或者说策略本身完全的解耦了.
根据整段回答的 log probability:
接下来说明为什么会得到 Policy Gradient 公式。先把目标的期望展开。为了简化记号,先固定一个 prompt \(x\):
对 \(\theta\) 求梯度:
使用 log-derivative trick:
于是:
也就是:
再把 prompt \(x\sim\mathcal{D}\) 的采样也放回期望里:
最后利用自回归分解:
就得到最朴素的 LLM Policy Gradient:
如果使用 advantage,则写成:
这就是传统 Policy Gradient 到 LLM 的连接点:状态变成 prompt 加已生成前缀,动作变成下一个 token,轨迹变成完整回答,reward 来自 reward model、规则奖励或可验证结果,而 advantage 则需要额外估计。
Q: LLM 中的 advantage 怎么来?需要训练 value model 吗?
在传统 actor-critic 中,advantage 衡量的是“这个动作比当前状态下的平均水平好多少”:
在 LLM 中,状态是 \(s_t=(x,y_{<t})\),动作是 \(a_t=y_t\)。因此 token-level advantage 可以理解为:在当前 prompt 和前缀下,选择 token \(y_t\) 之后,最终回答质量比这个前缀下的平均水平好多少。
如果使用 PPO,通常需要一个 value model,也常叫 value head 或 critic。它输入当前前缀状态,输出这个前缀未来能够得到的期望 return:
这里 \(\psi\) 是 value model 的参数,\(G_t\) 是从第 \(t\) 步开始的 return。在 RLHF 中,reward 往往集中在序列末尾,例如 reward model 对完整回答给出 \(r_\phi(x,y)\)。如果再加上 token-level KL penalty,那么可以把每一步的 reward 写成近似的 shaped reward:
并在最后一步加上 reward model 的分数:
于是从第 \(t\) 步开始的 return 可以写成:
value model 的训练就像一个回归问题:让 \(V_\psi(x,y_{<t})\) 预测采样得到的 return 或 GAE target:
有了 value model 之后,最简单的 advantage 估计可以写成:
PPO 实践中常用 GAE 来估计 advantage。它先定义 TD error:
再把多个未来 TD error 做加权和:
所以答案是:如果使用 PPO 这类 actor-critic 方法,通常需要训练一个 value model 来估计 baseline / advantage。在 LLM 中,这个 value model 不是 reward model;reward model 给完整回答打分,value model 则预测“当前前缀未来大概能得到多少总奖励”。
这也是 GRPO 的一个重要动机:它希望避免单独训练 value model,而是对同一个 prompt 采样多个回答,用组内相对奖励直接构造 advantage。
Q: RLHF 到底是一种算法,还是一套流程?
RLHF 是 Reinforcement Learning from Human Feedback,意思是“从人类反馈中进行强化学习”。严格来说,RLHF 不是一个单独算法,而是一套训练流程。
经典 RLHF 通常包含三个阶段。
第一阶段是 SFT,也就是 Supervised Fine-Tuning。给定人工写好的 prompt-response 数据,继续训练预训练模型,让它学会基本的指令跟随格式。
第二阶段是训练 Reward Model。对于同一个 prompt,标注者比较两个或多个回答,指出哪个更好。然后用这些偏好数据训练一个奖励模型 \(r_\phi(x,y)\),让它能够给回答打分。
第三阶段是 RL Optimization。用当前语言模型生成回答,再用 reward model 打分,然后通过 PPO 等强化学习算法更新语言模型,使它更倾向于生成高奖励回答。
所以,RLHF 的结构可以概括为:
Pretrained LM
↓
SFT model
↓
Reward model from human preference
↓
RL optimization, often PPO
↓
Aligned model
在这个流程里,PPO 是第三阶段常用的优化算法;RLHF 是包含数据收集、奖励建模、策略优化在内的整体框架。
因此,问“RLHF 和 PPO 是什么关系”时,一个准确的回答是:
RLHF 是训练范式,PPO 是 RLHF 中常用的 policy optimization 算法。
Q: 为什么 RLHF 通常还要加 KL 惩罚?
如果只最大化 reward model 的分数,模型可能会找到 reward model 的漏洞,生成一些奖励模型喜欢但人类并不真正喜欢的回答。这种现象通常被称为 reward hacking。
此外,SFT 模型已经包含了大量语言能力和基本对齐能力。如果 RL 更新太激进,模型可能偏离原来的语言分布,导致回答质量下降。
因此,RLHF 通常不会只优化:
而是加入一个相对于参考模型 \(\pi_{\text{ref}}\) 的 KL 惩罚:
其中:
- \(\pi_\theta\) 是当前训练的策略模型。
- \(\pi_{\text{ref}}\) 是参考模型,通常是 SFT 模型的冻结副本。
- \(\beta>0\) 控制 KL 惩罚强度。
- KL 项约束当前模型不要偏离参考模型太远。
在实现中,KL 惩罚经常被写成 token-level 近似:
它的直观含义是:如果当前模型对某些 token 的概率比参考模型高很多,就要付出额外代价。这样可以让模型在追求高奖励的同时,尽量保持语言分布稳定。
Q: LLM 中 PPO 是什么?
PPO 是 Proximal Policy Optimization。它是 RLHF 中最经典的策略优化算法之一。
Policy Gradient 的朴素更新可能会让策略一步变化太大。对于 LLM 来说,这尤其危险:模型参数巨大,输出分布复杂,一次过大的更新可能导致训练不稳定。
PPO 的核心目标是:
允许策略朝着更高奖励的方向更新,但限制新策略不要离旧策略太远。
设:
- \(\pi_{\theta_{\text{old}}}\) 是采样数据时使用的旧策略。
- \(\pi_\theta\) 是当前要更新的新策略。
- \(a_t\) 是旧策略在状态 \(s_t\) 下采样到的动作。
PPO 定义概率比值:
在 LLM 中,这个式子对应:
其中:
- 如果 \(r_t(\theta)>1\),说明新策略提高了这个 token 的概率。
- 如果 \(r_t(\theta)<1\),说明新策略降低了这个 token 的概率。
朴素 policy gradient 的 surrogate objective 可以写成:
其中 \(\hat{A}_t\) 是 advantage 估计。如果 \(\hat{A}_t>0\),我们希望提高该动作概率;如果 \(\hat{A}_t<0\),我们希望降低该动作概率。
PPO 的 clipped objective 是:
其中:
- \(\epsilon\) 是裁剪范围,常见值如 0.1 或 0.2。
- \(\operatorname{clip}(r_t,1-\epsilon,1+\epsilon)\) 会把 ratio 限制在 \([1-\epsilon,1+\epsilon]\) 中。
- \(\min\) 的作用是让策略更新在“过度乐观”时被截断。
直观地说,PPO 不希望模型因为某个 batch 的 advantage 就把 token 概率改得太猛。它给 policy update 加了一个局部信任域,使训练更加稳定。
在 RLHF 中,一个典型 PPO 训练循环是:
1. 从 prompt dataset 中采样一批 prompts。
2. 用当前策略模型生成回答。
3. 用 reward model 给回答打分。
4. 加入 KL penalty,得到最终 reward。
5. 用 value model 估计 advantage,例如 GAE。
6. 用 PPO clipped objective 更新 policy model。
7. 更新 value model。
这里可以看到,PPO 本身不是奖励模型,也不是人类反馈数据。它只是拿到 reward 和 advantage 之后,负责稳定地更新策略。
Q: LLM 中 GRPO 是什么?
GRPO 是 Group Relative Policy Optimization。它可以看成一种面向大模型训练场景的 policy optimization 方法。相对于 PPO,它的一个重要特点是:不再依赖单独的 value model 来估计每个样本的 baseline,而是用同一个 prompt 下多个回答的组内相对分数来构造 advantage。
设对同一个 prompt \(x\),当前模型采样出 \(G\) 个回答:
每个回答都有一个奖励:
GRPO 的核心想法是:不要单独训练一个 value model 来预测 \(v(s)\),而是在这一组回答内部做相对比较。比如可以定义组内均值:
以及组内标准差:
然后把第 \(i\) 个回答的 advantage 估计为:
其中:
- \(r^{(i)}\) 是第 \(i\) 个回答的奖励。
- \(\bar{r}\) 是同组回答的平均奖励。
- \(\sigma_r\) 是同组奖励的标准差。
- \(\hat{A}^{(i)}\) 表示第 \(i\) 个回答相对于同组其他回答的好坏。
这样做的直觉很简单:
对同一个问题,如果某个回答比同组其他回答更好,就提高它的概率;如果它比同组平均水平更差,就降低它的概率。
GRPO 仍然可以使用类似 PPO 的 ratio 和 clipping,只是 advantage 的来源变成了 group-relative reward,而不是 value model。
用非常粗略的方式对比:
| 方法 | baseline / advantage 来源 | 是否需要 value model |
|---|---|---|
| PPO | value model / GAE | 通常需要 |
| GRPO | 同一 prompt 下多回答的组内相对奖励 | 通常不需要 |
这就是 GRPO 在大模型训练中有吸引力的原因:对于超大模型,额外训练和维护 value model 的成本很高;而组内相对奖励可以用采样换掉一部分 critic 的复杂度。
Q: DPO 是什么?
DPO 是 Direct Preference Optimization。它和 PPO、GRPO 的风格明显不同。
PPO / GRPO 仍然是比较典型的 policy optimization:模型生成回答,奖励函数或奖励模型打分,然后根据 reward / advantage 更新策略。
DPO 则试图绕开显式 reward model 和在线 RL 过程,直接用偏好数据优化语言模型。
偏好数据通常长这样:
其中:
- \(x\) 是 prompt。
- \(y_w\) 是 preferred response,也就是人类更喜欢的回答。
- \(y_l\) 是 rejected response,也就是人类不喜欢的回答。
DPO 的目标是让模型更倾向于 \(y_w\),而不是 \(y_l\)。同时,它也会相对于参考模型 \(\pi_{\text{ref}}\) 做约束,避免模型偏离太远。
常见的 DPO loss 可以写成:
其中:
- \(\sigma(\cdot)\) 是 sigmoid 函数。
- \(\beta\) 控制偏好优化强度。
- \(\pi_\theta\) 是当前训练模型。
- \(\pi_{\text{ref}}\) 是参考模型,通常是 SFT 模型。
- \(y_w\) 是 chosen / preferred response。
- \(y_l\) 是 rejected response。
这个目标的直觉是:
相对于参考模型,如果当前模型更提高 chosen response 的概率,并更降低 rejected response 的概率,那么 loss 就会变小。
DPO 和 RLHF 的关系可以这样理解:DPO 可以从带 KL 约束的 RLHF 目标推导出来,但它把“训练 reward model + 用 PPO 做 RL 优化”这两步合并成了一个直接的偏好分类式目标。
所以 DPO 的优势是训练流程更简单、更像监督学习;但它通常依赖已有的 preference pair 数据,而不是在线探索新回答。
Q: PPO、GRPO、DPO、RLHF 之间是什么关系?
可以把这几个概念放在同一张逻辑图里:
Human preference data
│
├── RLHF route
│ ├── train reward model
│ └── optimize policy with PPO / GRPO
│
└── Direct preference route
└── optimize policy with DPO
更具体地说:
| 方法 / 概念 | 它是什么 | 核心目标 |
|---|---|---|
| RLHF | 一套训练流程 | 用人类反馈构造奖励信号,再优化模型 |
| PPO | policy optimization 算法 | 在限制策略变化幅度的前提下提高奖励 |
| GRPO | policy optimization 算法 | 用组内相对奖励构造 advantage,减少对 value model 的依赖 |
| DPO | preference optimization 算法 | 直接让模型更偏向 chosen response,而不显式跑 PPO 式 RL |
它们之间不是同一层级的概念。RLHF 是流程,PPO / GRPO 是这个流程中可以使用的策略优化算法,DPO 则是另一条从偏好数据直接优化模型的路线。
如果用“目标是什么”来概括:
- PPO:我有 reward 和 advantage,如何稳定地更新 policy?
- GRPO:我能不能不用 value model,而用同组回答的相对好坏来更新 policy?
- DPO:我能不能不用显式 reward model 和在线 RL,直接从偏好对中优化 policy?
- RLHF:我如何把人类反馈转化成可以训练语言模型的信号?
Q: 这一节应该记住什么?
第一,LLM 天然就是一个 policy。它在每一步根据当前上下文输出下一个 token 的概率分布:
第二,LLM 的一次回答生成可以看成一个 episode。状态是 prompt 加已生成前缀,动作是下一个 token,轨迹是完整回答,奖励通常来自完整回答级别的偏好评价。
第三,LLM 场景更自然地走 policy-based 路线,而不是 value-based 路线。原因是状态和动作空间巨大,奖励又常常是 sequence-level 的;而预训练模型本身已经提供了一个强大的参数化策略。
第四,Policy Gradient 是理解 PPO、GRPO、RLHF 的入口。它的核心公式是:
第五,advantage 是为了判断“这个动作是否比当前状态下的平均选择更好”。GAE 是 advantage 的一种常见估计方法,通常服务于 PPO 这类 actor-critic 方法。
第六,RLHF、PPO、GRPO、DPO 不是同一层级的概念。RLHF 是训练流程,PPO 和 GRPO 是策略优化方法,DPO 是直接偏好优化方法。