强化学习与对齐技术: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 的裁剪目标函数定义为:
其中:
- 是重要性比率
- 是优势函数(Advantage Function)
- 是裁剪超参数,通常取 0.1 或 0.2
- 将 裁剪到区间
优势函数与 GAE
优势函数 衡量在状态 下采取动作 相比平均水平的好坏程度:
其中 是状态-动作值函数, 是状态值函数。优势函数为正表示该动作优于平均,为负表示劣于平均。
在实际计算中,优势函数的估计是一个关键问题。GAE(Generalized Advantage Estimation) 提供了一种平衡偏差和方差的估计方法:
其中 是时序差分误差, 是折扣因子, 是 GAE 参数。
Critic 网络在 PPO 中的作用
策略梯度与值函数估计
在策略梯度方法中,我们需要估计动作值函数 Q(s, a) 来计算梯度:
然而,真实的 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 网络通过最小化均方误差来训练:
其中目标值函数定义为:
或者使用更稳定的 n 步返回:
直接估计 Q(s, a) 的问题
虽然理论上可以直接估计 Q(s, a),但这面临诸多挑战:
- 方差大:每个 (s, a) 对的样本稀疏,导致 Q 估计的方差远高于 V 估计
- 计算复杂:需要对所有 action 求期望才能得到 V,无法利用梯度反向传播
- 过估计问题:Q 估计的偏差可能导致策略的过度自信
Actor-Critic 框架的最优折中
Actor-Critic 框架选择估计 V(s) 而非 Q(s, a),是在计算效率和统计效率之间的最优折中:
- Actor 负责根据当前策略选择动作(策略网络)
- Critic 负责估计值函数,提供相对基准(价值网络)
- 优势函数 通过 Critic 的估计间接获得
这种分工使得 Actor 可以专注于策略改进,而 Critic 专注于值函数估计,两者相互促进,最终收敛到最优策略。
完整损失函数
PPO 的完整损失函数不仅包含策略损失,还包含值函数损失和熵正则化:
其中:
- 是裁剪策略损失
- 是值函数损失(通常为均方误差)
- 是策略熵(用于鼓励探索)
- 是相应的系数
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 的奖励进行组内归一化来估计优势函数。具体而言:
其中 是第 i 个 response 的奖励, 和 分别是该组内所有奖励的均值和标准差。这种组内归一化的优势估计天然具有零均值特性,无需额外的价值网络。
GRPO vs PPO 对比
| 特性 | PPO | GRPO |
|---|---|---|
| 优势估计 | 需要 Critic 网络估计 V(s) | 组内归一化优势估计 |
| 显存开销 | 高(需要维护 Critic) | 低(无需 Critic) |
| 样本需求 | 单 response 即可 | 需要多 response 采样(G 个) |
| 推理成本 | 较低 | 较高(增加 G 倍推理) |
| 训练稳定性 | 优秀(PPO 裁剪机制) | 良好 |
| 适用场景 | 通用场景 | 奖励信号稀疏或二元奖励场景 |
GRPO 损失函数
GRPO 的目标函数继承了 PPO 的裁剪思想,但优势函数的计算方式完全不同:
其中:
- 是每个 prompt 采样的 response 数量
- 是组内归一化优势
- $r_i(\theta) = \frac{\pi_{\theta}(a_i|s)}{\pi_{\theta_{old}}(a_i|s)} 是重要性比率
- 是裁剪超参数
GRPO 在 DeepSeek-R1 中的应用
DeepSeek-R1 的训练采用了独特的冷启动微调 + GRPO 强化学习流程:
- 冷启动微调:使用高质量的 CoT(Chain-of-Thought)数据对基础模型进行微调,建立基本的推理能力
- 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 AI | Anthropic | 基于原则的自我改进 | 减少人类标注依赖 |
| 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 的先河。
可以用一个简洁的等式来概括:
协作机制
PPO 和 RLHF 的协作机制体现了强化学习在序列决策问题中的优雅性:
- 预训练阶段:语言模型学习语言的基础能力
- SFT 阶段:建立基本的任务执行能力
- 奖励建模:人类偏好被编码为可微分的奖励函数
- 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”