RLHF
此文章由 gpt-4.1 生成,并由人类进行少量修改
PPO
PPO(Proximal Policy Optimization,近端策略优化)是一种常用的强化学习策略梯度算法,由 OpenAI 于 2017 年提出。它在许多实际应用和基准测试中表现优异,成为了当前深度强化学习领域的主流方法之一。
基本思想
PPO 属于策略优化类方法(Policy Optimization),主要用于训练智能体在环境中学习一个最优策略。它的核心思想是在更新策略时,限制“每一步”策略的变化幅度,从而保证训练过程的稳定性和效率。
相比于传统的策略梯度方法(如 REINFORCE)和基于信赖域的 TRPO(Trust Region Policy Optimization),PPO 通过引入一个“剪切”目标函数,既保持了较高的样本利用率,又避免了 TRPO 复杂的二阶优化。
目标函数
其中:
- \(\theta\) 表示策略网络的参数
- \(r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\) 是新旧策略概率比
- \(\hat{A}_t\) 是优势函数(Advantage Function)
- \(\epsilon\) 是一个超参数,通常为 0.1~0.2,用于限制策略更新的幅度
CLIP 操作保证了策略更新不会偏离原策略太远,防止训练不稳定。
优势
- 实现简单:只需要一阶优化器(如 Adam)即可实现,无需复杂的二阶优化。
- 训练稳定:通过剪切目标函数保证了策略的平滑更新。
- 高效:样本利用率高,可以在多个环境中并行采样。
PPO 广泛应用于各种强化学习任务,如游戏(Atari、OpenAI Gym)、机器人控制、自然语言处理等。
简单 PyTorch 实现框架:
import torch as th
import torch.nn as nn
from torch.distributions import Categorical
class PolicyNet(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.fc = nn.Sequential(
nn.Linear(state_dim, 128),
nn.ReLU(),
nn.Linear(128, action_dim),
nn.Softmax(dim=-1)
)
def forward(self, x):
return self.fc(x)
# 优化时使用 PPO 的 clip 损失
loss = -th.min(ratio * advantages, torch.clamp(ratio, 1-eps, 1+eps) * advantages).mean()

PPO 由三个系统组成:
-
策略模型(Policy Model):即被训练的语言模型,接收问题并生成回答,参数在训练过程中更新。
-
奖励模型(Reward Model):对策略模型生成的回答打分,提供训练信号,参数固定不变。
-
参考模型(Reference Model):通常是 SFT(监督微调)后的模型副本,用于计算 KL 散度惩罚:
\[r = r_\theta(x, y) - \beta \cdot \mathbb{D}_{\text{KL}}\left[\pi_\phi(y \mid x) \,\|\, \pi_{\text{ref}}(y \mid x)\right] \]防止策略模型偏离参考模型太远,避免"奖励欺骗"(reward hacking),参数同样固定不变。
- 我们使用奖励模型来计算当前环境的奖励,目标是最大化奖励。
- PPO 的公式看起来很复杂,因为它是为了保持稳定性设计的。
论文:Proximal Policy Optimization Algorithms | arXiv
参见:Proximal Policy Optimization (PPO) | Hugging Face
DPO
在大语言模型训练中,DPO(Direct Preference Optimization,直接偏好优化)是一种强化学习范式,用于直接优化模型输出的偏好顺序。DPO 主要用于对齐(alignment)任务,即让模型更符合人类的偏好。
DPO 的核心思想是:直接使用人类偏好数据(如一组答案 A 和 B,标注人类更喜欢哪个),不需要额外训练奖励模型或使用复杂的强化学习算法(如 PPO)。它通过最大化模型生成偏好输出的概率,并最小化不偏好输出的概率,实现模型的微调。
DPO 的损失函数通常为:
- \(x\):输入
- \(y^+\):人类偏好的输出
- \(y^-\):人类不偏好的输出
- \(s_\theta(x, y)\):模型的得分
- \(\beta\):温度参数,控制分布的陡峭程度
- \(D\):带有偏好对的数据集
优点
- 训练更直接、更高效、无需奖励模型
- 更易于实现(可用 PyTorch 实现)
论文:Direct Preference Optimization: Your Language Model is Secretly a Reward Model | arXiv
GRPO

GRPO 是由 DeepSeek 团队提出的一种强化学习算法,用于大语言模型的对齐训练,最早在 DeepSeek-Math 中引入,后在 DeepSeek-R1 中得到广泛应用。
动机:对 PPO 的改进
标准 PPO(Proximal Policy Optimization)在 LLM 训练中需要一个与策略模型等大的价值模型,显存开销极大。GRPO 的核心思想是用组内相对奖励代替价值模型估计的基线,从而去掉价值模型。
组采样(Group Sampling)
对于每个问题 \(q\),从当前策略 \(\pi_{\theta_\text{old}}\) 中采样 \(G\) 个输出:
优势估计(Advantage Estimation)
对每个输出 \(o_i\) 计算奖励 \(r_i\),然后用组内归一化计算优势:
这个设计完全绕开了价值模型,用同一问题下的组内相对表现作为基线。
训练目标
其中:
- \(\rho_{i,t} = \dfrac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_\text{old}}(o_{i,t} \mid q, o_{i,<t})}\) 为 importance sampling ratio
- \(\varepsilon\) 为 clip 超参(通常取 0.1~0.2)
- \(\beta\) 控制 KL 散度惩罚强度,防止策略偏离参考模型 \(\pi_\text{ref}\) 过远
与 PPO 的对比
| 特性 | PPO | GRPO |
|---|---|---|
| 是否需要价值模型 | ✅ 需要(等大模型) | ❌ 不需要 |
| 基线估计方式 | 价值函数 \(V(s)\) | 组内奖励均值 |
| 显存开销 | 高(2× 模型) | 低 |
| 优势估计方差 | 低(有价值模型) | 相对较高 |
| 适用场景 | 通用 RL | LLM 对齐(尤其推理任务) |
直觉理解
GRPO 的思想非常朴素:把同一道题的多个答案放在一起比较,好的答案得到正强化,差的得到负强化。不需要一个复杂的价值模型来告诉你“这个状态值多少分”,只需要“这组答案里你排第几”。这与人类学习中的同伴比较颇为相似——不需要绝对评分标准,只需横向对比。
论文:DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models | arXiv
参见:

马尔科夫决策过程
马尔科夫决策过程(Markov Decision Process,MDP)是人工智能和强化学习中用于建模决策问题的数学框架。它可以用来描述一个智能体(agent)在某个环境中,根据当前状态选择动作,并根据动作获得奖励和转移到下一个状态的过程。
组成部分
一个标准的马尔科夫决策过程通常由以下四元组 \((S, A, P, R)\) 组成:
- \(S\):状态空间(States),即所有可能的环境状态的集合。
- \(A\):动作空间(Actions),即智能体在每个状态下可以采取的所有动作的集合。
- \(P\):状态转移概率(Transition Probability),\(P(s' \mid s,a)\) 表示在状态 \(s\) 下采取动作 \(a\) 后转移到状态 \(s'\) 的概率。
- \(R\):奖励函数(Reward Function),\(R(s,a)\) 表示在状态 \(s\) 下采取动作 \(a\) 后获得的即时奖励。
有时还会加上一个折扣因子 \(\gamma \in [0,1]\),用来权衡当前奖励和未来奖励的重要性。
马尔科夫性
MDP 的核心假设是马尔科夫性,即“无记忆性”:下一个状态和奖励只依赖于当前状态和当前动作,与之前的历史无关。用公式表示为:
目标
在 MDP 中,智能体的目标是找到一个策略(policy)\(\pi(a \mid s)\),即在每个状态下选择动作的概率分布,使得累计奖励最大化。累计奖励通常定义为期望的总折扣奖励:

浙公网安备 33010602011771号