4321 words
22 minutes
RL
2026-04-07

强化学习与对齐技术:RL、PPO 与 RLHF 详解#

引言:强化学习概述#

强化学习(Reinforcement Learning,RL)是机器学习三大范式之一,与监督学习和无监督学习并列。与其他两种范式不同,强化学习强调智能体(Agent)通过与环境互动来学习最优策略。智能体在每一步交互中根据当前状态(State)采取动作(Action),环境随后返回新的状态和奖励(Reward),智能体据此调整策略,逐步学习如何最大化累积奖励。

强化学习的核心框架可以用一个简洁的循环来描述:Agent → Action → Environment → State + Reward → Agent。这个循环不断迭代,智能体逐渐学会在不同状态下采取最优动作。

强化学习的三要素#

任何强化学习系统都包含三个核心要素:

要素描述作用
Agent(智能体)学习者和决策者感知环境、选择动作、学习策略
Environment(环境)智能体与之交互的外部系统接收动作、返回状态和奖励
Reward(奖励)环境反馈的标量信号指导智能体学习方向

智能体的目标是学习一个策略(Policy),使得从任意初始状态出发,按照该策略行动能够获得最大的期望累积奖励。奖励信号是强化学习的关键——它定义了什么是”好”的行为,但与监督学习不同,智能体不会收到关于”正确”动作的明确指导。

强化学习与其他范式的区别#

强化学习与监督学习最本质的区别在于延迟反馈序列决策。在监督学习中,每个样本都有明确的标签;而在强化学习中,奖励往往是延迟的——一个动作的好坏可能需要在多个时间步之后才能体现。此外,强化学习中的动作往往会影响后续的状态和奖励,形成复杂的依赖关系。

PPO 算法详解#

PPO 的提出与背景#

PPO(Proximal Policy Optimization,近端策略优化) 由 OpenAI 于 2017 年提出,迅速成为强化学习领域最具影响力的算法之一。在 PPO 之前,策略梯度算法面临两个核心挑战:一是策略更新过大导致训练崩溃;二是样本效率低下,需要大量交互才能收敛。PPO 通过巧妙的机制设计,在很大程度上解决了这些问题。

核心思想:限制策略更新幅度#

PPO 的核心思想是限制每次策略更新的幅度,确保训练过程的稳定性。这一思想通过**重要性采样(Importance Sampling)裁剪目标函数(Clipped Objective)**来实现。

在传统的策略梯度方法中,每次更新都基于当前策略采集的样本,这导致了样本效率低下的问题。重要性采样允许我们使用旧策略采集的样本来估计新策略的梯度,从而提高样本效率。但重要性采样引入了一个问题:当新旧策略差异过大时,估计会变得不准确。PPO 通过裁剪机制来解决这个问题。

数学公式#

PPO 的裁剪目标函数定义为:

LCLIP(θ)=Eτπθold[t=0Tmin(rt(θ)At,clip(rt(θ),1ε,1+ε)At)]L^{CLIP}(\theta) = E_{\tau \sim \pi_{\theta_{old}}} \left[ \sum_{t=0}^{T} \min\left( r_t(\theta) \cdot A_t, \text{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon) \cdot A_t \right) \right]

其中:

  • rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} 是重要性比率
  • AtA_t 是优势函数(Advantage Function)
  • ε\varepsilon 是裁剪超参数,通常取 0.1 或 0.2
  • clip(x,a,b)\text{clip}(x, a, b)xx 裁剪到区间 [a,b][a, b]

优势函数与 GAE#

优势函数 A(s,a)A(s, a) 衡量在状态 ss 下采取动作 aa 相比平均水平的好坏程度:

A(s,a)=Q(s,a)V(s)A(s, a) = Q(s, a) - V(s)

其中 Q(s,a)Q(s, a) 是状态-动作值函数,V(s)V(s) 是状态值函数。优势函数为正表示该动作优于平均,为负表示劣于平均。

在实际计算中,优势函数的估计是一个关键问题。GAE(Generalized Advantage Estimation) 提供了一种平衡偏差和方差的估计方法:

AGAE(γ,λ)=l=0(γλ)lδt+lA_{GAE}(\gamma, \lambda) = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}

其中 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) 是时序差分误差,γ\gamma 是折扣因子,λ\lambda 是 GAE 参数。

Critic 网络在 PPO 中的作用#

策略梯度与值函数估计#

在策略梯度方法中,我们需要估计动作值函数 Q(s, a) 来计算梯度:

θJ(θ)=Eτπθ[t=0Tθlogπθ(atst)Q(st,at)]\nabla_\theta J(\theta) = E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot Q(s_t, a_t) \right]

然而,真实的 Q(s, a) 是未知的,我们需要估计它。这里引入了 Critic 网络来估计值函数。

为什么估计 V(s) 而不是 Q(s, a)#

Critic 网络通常估计状态值函数 V(s) 而非动作值函数 Q(s, a),这是基于以下考虑:

方面V(s) 估计Q(s, a) 估计
输出维度单一标量多个输出(每个 action 一个)
方差
计算复杂度O(1)O(|A|)
连续动作空间可行不可行(无法穷举)
最优 baseline方差最小化不具备

统计效率:V(s) 是对所有可能动作的期望值,具有更低的方差。在信用分配时,使用 V(s) 作为 baseline 可以最小化梯度估计的方差。

计算效率:对于连续动作空间或大规模离散动作空间,无法穷举所有 Q(s, a)。V(s) 作为单一输出,在计算和优化上都更加高效。

最优 baseline 理论:在策略梯度中,使用 on-policy 方式、V(s) 作为 baseline 时,梯度估计的方差最小。这一结论可以从数学上严格证明。

Critic 的训练#

Critic 网络通过最小化均方误差来训练:

LVF(θ)=E(s,r,s)πθold[(Vθ(s)Vtarget)2]L^{VF}(\theta) = E_{(s, r, s') \sim \pi_{\theta_{old}}} \left[ (V_\theta(s) - V_{target})^2 \right]

其中目标值函数定义为:

Vtarget=r+γVθold(s)V_{target} = r + \gamma V_{\theta_{old}}(s')

或者使用更稳定的 n 步返回:

Vtarget=i=0n1γiri+γnVθold(st+n)V_{target} = \sum_{i=0}^{n-1} \gamma^i r_i + \gamma^n V_{\theta_{old}}(s_{t+n})

直接估计 Q(s, a) 的问题#

虽然理论上可以直接估计 Q(s, a),但这面临诸多挑战:

  1. 方差大:每个 (s, a) 对的样本稀疏,导致 Q 估计的方差远高于 V 估计
  2. 计算复杂:需要对所有 action 求期望才能得到 V,无法利用梯度反向传播
  3. 过估计问题:Q 估计的偏差可能导致策略的过度自信

Actor-Critic 框架的最优折中#

Actor-Critic 框架选择估计 V(s) 而非 Q(s, a),是在计算效率统计效率之间的最优折中:

  • Actor 负责根据当前策略选择动作(策略网络)
  • Critic 负责估计值函数,提供相对基准(价值网络)
  • 优势函数 A(s,a)=Q(s,a)V(s)A(s, a) = Q(s, a) - V(s) 通过 Critic 的估计间接获得

这种分工使得 Actor 可以专注于策略改进,而 Critic 专注于值函数估计,两者相互促进,最终收敛到最优策略。

完整损失函数#

PPO 的完整损失函数不仅包含策略损失,还包含值函数损失和熵正则化:

Ltotal=LCLIPc1LVF+c2SL_{total} = L^{CLIP} - c_1 \cdot L^{VF} + c_2 \cdot S

其中:

  • LCLIPL^{CLIP} 是裁剪策略损失
  • LVFL^{VF} 是值函数损失(通常为均方误差)
  • SS 是策略熵(用于鼓励探索)
  • c1,c2c_1, c_2 是相应的系数

GRPO(Group Relative Policy Optimization)#

GRPO 的提出与背景#

GRPO(Group Relative Policy Optimization,分组相对策略优化) 是 DeepSeek 团队于 2024 年提出的新型强化学习算法,被应用于 DeepSeek-V2 和 DeepSeek-R1 的训练中。GRPO 的核心创新在于用组内相对比较代替传统的 Critic 网络,从而在保持训练稳定性的同时大幅降低显存开销。

核心思想:组内相对优势估计#

传统的 PPO 算法需要单独的价值网络(Critic)来估计状态值函数 V(s),进而计算优势函数。这一需求带来了显著的内存开销,尤其是在训练大语言模型时。GRPO 巧妙地解决了这一问题。

GRPO 的核心思想是:对每个输入 prompt 采样 G 个不同的 responses,然后利用这 G 个 response 的奖励进行组内归一化来估计优势函数。具体而言:

Ai=riμσA_i = \frac{r_i - \mu}{\sigma}

其中 rir_i 是第 i 个 response 的奖励,μ\muσ\sigma 分别是该组内所有奖励的均值和标准差。这种组内归一化的优势估计天然具有零均值特性,无需额外的价值网络。

GRPO vs PPO 对比#

特性PPOGRPO
优势估计需要 Critic 网络估计 V(s)组内归一化优势估计
显存开销高(需要维护 Critic)低(无需 Critic)
样本需求单 response 即可需要多 response 采样(G 个)
推理成本较低较高(增加 G 倍推理)
训练稳定性优秀(PPO 裁剪机制)良好
适用场景通用场景奖励信号稀疏或二元奖励场景

GRPO 损失函数#

GRPO 的目标函数继承了 PPO 的裁剪思想,但优势函数的计算方式完全不同:

LGRPO(θ)=Eτπθold[i=1Gmin(ri(θ)Ai,clip(ri(θ),1ε,1+ε)Ai)]L^{GRPO}(\theta) = E_{\tau \sim \pi_{\theta_{old}}} \left[ \sum_{i=1}^{G} \min\left( r_i(\theta) \cdot A_i, \text{clip}(r_i(\theta), 1-\varepsilon, 1+\varepsilon) \cdot A_i \right) \right]

其中:

  • GG 是每个 prompt 采样的 response 数量
  • Ai=riμσA_i = \frac{r_i - \mu}{\sigma} 是组内归一化优势
  • $r_i(\theta) = \frac{\pi_{\theta}(a_i|s)}{\pi_{\theta_{old}}(a_i|s)} 是重要性比率
  • ε\varepsilon 是裁剪超参数

GRPO 在 DeepSeek-R1 中的应用#

DeepSeek-R1 的训练采用了独特的冷启动微调 + GRPO 强化学习流程:

  1. 冷启动微调:使用高质量的 CoT(Chain-of-Thought)数据对基础模型进行微调,建立基本的推理能力
  2. GRPO 强化学习:使用 GRPO 进一步优化策略,对于可以明确判定对错的题目(如数学题、编程题),二元奖励信号非常适合 GRPO 的组内比较机制

这种训练范式使得 DeepSeek-R1 在推理任务上展现了卓越的能力,证明了 GRPO 在特定场景下的有效性。

GRPO 代码骨架#

def grpo_update(policy, prompts, g=8, epsilon=0.2):
"""
GRPO 更新逻辑
Args:
policy: 当前策略模型
prompts: 输入 prompts
g: 每个 prompt 采样的 response 数量
epsilon: 裁剪超参数
"""
# 1. 对每个 prompt 采样 G 个 responses
responses_group = [sample_responses(policy, prompt, g) for prompt in prompts]
# 2. 计算奖励(可以是二元奖励或连续奖励)
rewards_group = [reward_model(prompt, responses) for prompt, responses in zip(prompts, responses_group)]
# 3. 组内归一化优势估计
advantages_group = []
for rewards in rewards_group:
mean_reward = np.mean(rewards)
std_reward = np.std(rewards) + 1e-8 # 防止除零
advantages = [(r - mean_reward) / std_reward for r in rewards]
advantages_group.append(advantages)
# 4. 计算裁剪损失并更新策略
for prompt, responses, advantages in zip(prompts, responses_group, advantages_group):
loss = compute_grpo_loss(policy, prompt, responses, advantages, epsilon)
loss.backward()
optimizer.step()
optimizer.zero_grad()

RLHF 与 LLM 对齐#

为什么需要 RLHF#

大语言模型(LLM)在预训练阶段通过预测下一个 token 来学习语言建模能力。然而,预训练目标(最大化似然)与人类的最终期望——有帮助(Helpful)、无害(Harmless)、诚实(Honest)——之间存在显著差距。RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)正是为了弥合这一差距而提出的。

RLHF 的三阶段流程#

RLHF 是一个复杂的多阶段训练流程:

阶段输入输出目的
1. 预训练语言模型互联网文本基础语言模型学习语言知识和世界知识
2. SFT(监督微调)人类标注的问答对微调后的模型学习格式和基本任务完成能力
3. Reward Model人类排序偏好数据奖励模型学习预测人类偏好
4. PPO 强化学习RM 提供的奖励信号对齐后的模型优化策略以最大化人类偏好

第一阶段是标准的语言模型预训练,模型在海量文本上学习预测下一个 token,从而掌握语言的语法、语义甚至部分世界知识。

第二阶段 SFT(Supervised Fine-Tuning) 使用人类标注的高质量问答数据对预训练模型进行微调。这一阶段让模型学会按照人类期望的格式和风格来回答问题。

第三阶段 Reward Model(奖励模型) 是 RLHF 的核心创新之一。研究者们让人类对模型产生的多个输出进行排序,然后训练一个奖励模型来学习预测这些人类偏好。这个奖励模型能够泛化到未见过的输入,模拟人类评估者的判断。

第四阶段 PPO 强化学习 使用训练好的奖励模型提供反馈信号,通过 PPO 算法优化语言模型的策略。这一阶段是 RLHF 与传统 RL 应用的主要区别所在——环境的动态特性非常复杂(几乎可以视为无限的 token 序列空间),且奖励信号来自学习到的奖励模型而非直接的环境反馈。

RLHF 面临的挑战#

尽管 RLHF 取得了显著成功,但它也面临着一系列挑战:

Reward Hacking(奖励黑客):智能体学会以非预期的方式获得高奖励。在 LLM 场景下,模型可能学会生成在表面上看起来好但实际上不准确的回答,或者学会”谄媚”评估者而非提供真正有用的信息。

谄媚问题(Sycophancy):模型可能学会迎合用户的观点而非提供客观答案。当用户陈述一个观点时,模型倾向于同意而非提供建设性的反馈。

分布偏移(Distribution Shift):PPO 训练过程中,模型的输出分布会逐渐偏离奖励模型训练时所见的数据分布,可能导致奖励模型给出不准确的信号。

RLHF 的替代方案#

针对 RLHF 的局限性,研究社区提出了多种替代和补充方案:

方法提出者/时间核心思想优势
DPO(Direct Preference Optimization)2023直接优化偏好而非学习奖励模型绕过 RM,简化流程
Constitutional AIAnthropic基于原则的自我改进减少人类标注依赖
RLAIF(RL from AI Feedback)2023用 AI 反馈替代人类反馈扩展性更好

DPO(Direct Preference Optimization) 是最具影响力的替代方案之一。它通过重新参数化策略,将奖励模型的学习间接嵌入到策略优化中,从而避免了显式训练奖励模型的需要,同时减少了训练的不稳定性。

Constitutional AI 采用不同的思路:让模型根据一组人类定义的原则来自我批评和改进,从而减少对人类反馈的依赖。

PPO 与 RLHF 的关系#

算法与应用的关系#

PPO 和 RLHF 之间的关系可以从两个层面来理解:

PPO 是 RLHF 的核心优化算法:在 RLHF 的第四阶段,PPO 负责根据奖励模型的信号来更新语言模型的策略。PPO 的稳定性保证和样本效率优势使其成为这一阶段的首选算法。

RLHF 是 PPO 在 LLM 对齐中的应用:PPO 作为一个通用的策略优化算法,在游戏、机器人等领域有着广泛应用。RLHF 将这一技术引入语言模型对齐,开创了将强化学习应用于生成式 AI 的先河。

可以用一个简洁的等式来概括:

RLHF=SFT+Reward Model+PPO\text{RLHF} = \text{SFT} + \text{Reward Model} + \text{PPO}

协作机制#

PPO 和 RLHF 的协作机制体现了强化学习在序列决策问题中的优雅性:

  1. 预训练阶段:语言模型学习语言的基础能力
  2. SFT 阶段:建立基本的任务执行能力
  3. 奖励建模:人类偏好被编码为可微分的奖励函数
  4. PPO 优化:使用信用分配机制,在长序列中有效地将最终奖励归因到每个 token 的生成决策

这种多层级的训练架构使得 PPO 能够在几乎无限的 action space(所有可能的 token 序列)中有效地搜索好的策略。

总结与展望#

强化学习从最初的游戏和机器人控制,到如今成为大语言模型对齐的核心技术,经历了飞速的发展。PPO 作为稳定高效的策略优化算法,为 RLHF 提供了坚实的技术基础;而 GRPO 则在此基础上进一步简化了训练流程,降低了显存开销。RLHF 则将强化学习的应用边界拓展到了生成式 AI 领域,开创了人机协作的新范式。

展望未来,强化学习与语言模型的结合仍将是一个活跃的研究方向。如何进一步减少对人类反馈的依赖、提高样本效率、避免奖励黑客问题,都是亟待解决的问题。同时,随着 AI 系统变得越来越强大,确保这些系统与人类价值观对齐也将成为越来越重要的议题。

理解 RL、PPO、GRPO 和 RLHF 的原理,不仅对于 AI 研究者重要,对于任何关心 AI 未来发展的人都有价值。这些技术正在塑造我们与 AI 系统交互的方式,而深入理解它们将帮助我们更好地参与这场技术变革。


参考资料

  • Schulman, J. et al. (2017). “Proximal Policy Optimization Algorithms”
  • Ouyang, L. et al. (2022). “Training language models to follow instructions with human feedback”
  • Rafailov, R. et al. (2023). “Direct Preference Optimization: Your Language Model is Secretly a Reward Model”
  • DeepSeek-AI (2024). “DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model”
  • DeepSeek-AI (2024). “DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning”
RL
https://sgjki547.top/posts/rl/
Author
SGJki
Published at
2026-04-07
License
CC BY-NC-SA 4.0