RLHF

此文章由 gpt-4.1 生成,并由人类进行少量修改

PPO

PPO(Proximal Policy Optimization,近端策略优化)是一种常用的强化学习策略梯度算法,由 OpenAI 于 2017 年提出。它在许多实际应用和基准测试中表现优异,成为了当前深度强化学习领域的主流方法之一。

基本思想

PPO 属于策略优化类方法(Policy Optimization),主要用于训练智能体在环境中学习一个最优策略。它的核心思想是在更新策略时,限制“每一步”策略的变化幅度,从而保证训练过程的稳定性和效率。

相比于传统的策略梯度方法(如 REINFORCE)和基于信赖域的 TRPO(Trust Region Policy Optimization),PPO 通过引入一个“剪切”目标函数,既保持了较高的样本利用率,又避免了 TRPO 复杂的二阶优化。

目标函数

\[\mathcal{L}^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min \left(r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right] \]

其中:

  • \(\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 操作保证了策略更新不会偏离原策略太远,防止训练不稳定。

优势

  1. 实现简单:只需要一阶优化器(如 Adam)即可实现,无需复杂的二阶优化。
  2. 训练稳定:通过剪切目标函数保证了策略的平滑更新。
  3. 高效:样本利用率高,可以在多个环境中并行采样。

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.jpg

PPO 由三个系统组成:

  1. 策略模型(Policy Model):即被训练的语言模型,接收问题并生成回答,参数在训练过程中更新。

  2. 奖励模型(Reward Model):对策略模型生成的回答打分,提供训练信号,参数固定不变。

  3. 参考模型(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 的损失函数通常为:

\[\mathcal{L} = -\mathbb{E}_{(x, y^+, y^-) \sim D} \left[ \log \frac{\exp(\beta \cdot s_\theta(x, y^+))}{\exp(\beta \cdot s_\theta(x, y^+)) + \exp(\beta \cdot s_\theta(x, y^-))} \right] \]

  • \(x\):输入
  • \(y^+\):人类偏好的输出
  • \(y^-\):人类不偏好的输出
  • \(s_\theta(x, y)\):模型的得分
  • \(\beta\):温度参数,控制分布的陡峭程度
  • \(D\):带有偏好对的数据集

优点

  • 训练更直接、更高效、无需奖励模型
  • 更易于实现(可用 PyTorch 实现)

论文:Direct Preference Optimization: Your Language Model is Secretly a Reward Model | arXiv

GRPO

image

GRPO 是由 DeepSeek 团队提出的一种强化学习算法,用于大语言模型的对齐训练,最早在 DeepSeek-Math 中引入,后在 DeepSeek-R1 中得到广泛应用。

动机:对 PPO 的改进

标准 PPO(Proximal Policy Optimization)在 LLM 训练中需要一个与策略模型等大的价值模型,显存开销极大。GRPO 的核心思想是用组内相对奖励代替价值模型估计的基线,从而去掉价值模型。

组采样(Group Sampling)

对于每个问题 \(q\),从当前策略 \(\pi_{\theta_\text{old}}\) 中采样 \(G\) 个输出:

\[\{o_1, o_2, \ldots, o_G\} \sim \pi_{\theta_\text{old}}(\cdot \mid q) \]

优势估计(Advantage Estimation)

对每个输出 \(o_i\) 计算奖励 \(r_i\),然后用组内归一化计算优势:

\[\hat{A}_i = \frac{r_i - \text{mean}(\{r_j\}_{j=1}^G)}{\text{std}(\{r_j\}_{j=1}^G)} \]

这个设计完全绕开了价值模型,用同一问题下的组内相对表现作为基线。

训练目标

\[\mathcal{J}_\text{GRPO}(\theta) = \mathbb{E}_{q \sim \mathcal{D},\, \{o_i\} \sim \pi_{\theta_\text{old}}} \left[ \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \left( \min\left( \rho_{i,t} \hat{A}_i,\ \text{clip}(\rho_{i,t}, 1-\varepsilon, 1+\varepsilon)\hat{A}_i \right) - \beta\, \mathbb{D}_\text{KL}\left[\pi_\theta \| \pi_\text{ref}\right] \right) \right] \]

其中:

  • \(\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

参见:

grpo.jpg

马尔科夫决策过程

马尔科夫决策过程(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 的核心假设是马尔科夫性,即“无记忆性”:下一个状态和奖励只依赖于当前状态和当前动作,与之前的历史无关。用公式表示为:

\[P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, ..., s_0, a_0) = P(s_{t+1} \mid s_t, a_t) \]

目标

在 MDP 中,智能体的目标是找到一个策略(policy)\(\pi(a \mid s)\),即在每个状态下选择动作的概率分布,使得累计奖励最大化。累计奖励通常定义为期望的总折扣奖励:

\[G_t = \mathbb{E}\left[ \sum_{k=0}^{\infty} \gamma^k r_{t+k} \right] \]

posted @ 2025-06-09 19:11  undefined443  阅读(107)  评论(0)    收藏  举报