【深度长文】RLHF 算法全景解析:从 PPO 到 DPO/GRPO 的范式革命

ModelEngine·创作计划征文活动 10w+人浏览 1.5k人参与

在 LLM 的训练体系中,Pretrain 决定了模型的知识广度,SFT(监督微调)决定了模型的指令遵循能力,而 RLHF(Post-Training) 则决定了模型的上限——即它能否在复杂的逻辑权衡中,输出符合人类价值观(Helpful, Honest, Harmless)甚至超越人类平均水平的内容。

GitHub 上的 MiniMind 项目提供了一个很有价值的实战项目,让我们得以窥见 LLM 训练的完整流程。我们将围绕作者指出的 PO(Policy Optimization)统一视角 展开:

P O = E q ∼ P ( Q ) , o ∼ π ( O ∣ q ) [ f ( r t ) ⏟ 策略引导 ⋅ g ( A t ) ⏟ 优势评估 − h ( K L t ) ⏟ 正则约束 ] PO = \mathbb{E}_{q \sim P(Q), o \sim \pi(O|q)} [\underbrace{f(r_t)}_{\text{策略引导}} \cdot \underbrace{g(A_t)}_{\text{优势评估}} - \underbrace{h(KL_t)}_{\text{正则约束}}] PO=EqP(Q),oπ(Oq)[策略引导 f(rt)优势评估 g(At)正则约束 h(KLt)]


第一部分:PPO (Proximal Policy Optimization)

PPO 是 OpenAI 训练 GPT-3.5/4 的核心算法。虽然繁琐,但它是在复杂环境中鲁棒性最强的算法。为了讲透 PPO,我们必须把它拆解为四个模型的博弈五个步骤的循环

1.1 准备工作:四个模型的“协作团队”

在PPO训练正式启动前,显存中需要同时加载(或根据硬件资源动态部分卸载)四个核心模型,它们各司其职、相互配合,共同构成了大模型RLHF(基于人类反馈的强化学习)中PPO训练的核心框架,就像一场麻将局里不同角色的玩家各有分工:

  1. Actor Model (策略模型 π θ \pi_\theta πθ)

    • 角色:团队里的“玩家”,是我们重点训练的核心主角,由经过有监督微调(SFT)的大语言模型(LLM)担任。
    • 状态:参数处于可训练状态(Requires Grad),会在训练中不断更新优化。
    • 输入:用户的提示词(Prompt)。 输出:生成响应(Response)的token概率分布,以此决定下一步生成的内容。
  2. Reward Model (奖励模型 R ψ R_\psi Rψ)

    • 角色:团队里的“裁判”,本质是模拟人类偏好的打分系统,为Actor生成的响应提供客观、贴合人类需求的奖励反馈,在RLHF流程中扮演“环境”的核心角色。
      • 状态:以SFT模型为基础构建,输出端新增线性层(Linear)作为价值头(value head,输入维度为模型hidden_dim,输出维度为1);在RLHF强化学习阶段,参数全程冻结(Frozen),训练过程中不更新,仅作为固定“环境反馈模块”。训练目标为排序任务,通过rank loss让人类偏好响应(chosen)得分远高于非偏好响应(rejected)。
      • 输入:Prompt + Actor生成的完整Response。 输出:一个标量奖励值(Reward r r r),直接反映响应符合人类偏好的程度。
  3. Critic Model (价值模型 V ϕ V_\phi Vϕ)

    • 角色:团队里的“教练”,不直接参与内容生成,而是以旁观者视角精准评估Actor的表现——具体是对当前状态(Prompt + 部分生成的Response)的价值进行量化判断,为Actor的后续优化提供依据。
    • 状态:参数可训练(Requires Grad)。核心初始化逻辑由训练完成的Reward Model直接初始化而来,通过继承Reward Model的特征提取能力,实现对状态价值的精准近似。
    • 输入:Prompt + 完整/部分生成的Response。 输出:一个标量值 V ( s ) V(s) V(s),代表该状态下Actor能获得的预期长期收益。
  4. Reference Model (亦称为Value Model,参考模型 π r e f \pi_{ref} πref)

    • 角色:团队里的“初心标尺”,通常是SFT阶段训练完成后模型的完整副本。其核心作用是约束Actor的生成行为,防止Actor为了追求奖励模型的高分而出现“胡言乱语”“投机取巧”的奖励黑客(Reward Hacking)现象。
    • 状态:参数冻结(Frozen),始终保持SFT结束时的状态,作为衡量Actor生成内容合理性的基准。

1.2 PPO 训练全流程详解 (The Step-by-Step Loop)

一个完整的 PPO Step 包含以下流程:

Step 1: 采样 (Rollout/Experience Collection)

Actor 模型针对一个 Batch 的 Prompt 生成回复。

  • 动作 o ∼ π θ ( O ∣ q ) o \sim \pi_\theta(O|q) oπθ(Oq)
  • 同时,Ref Model 也对同样的 q q q 和生成的 o o o 进行一次前向传播,计算参考对数概率 log ⁡ π r e f ( o ∣ q ) \log \pi_{ref}(o|q) logπref(oq)
  • 产出input_ids, response, log_probs, ref_log_probs
Step 2: 评分 (Evaluation)
  • Reward Model 打分:计算最终生成的句子的奖励分数 r s c o r e r_{score} rscore
  • KL 散度修正:为了防止模型跑偏,我们将 KL 散度作为惩罚项加入奖励中。即:
    R t = r s c o r e − β ⋅ log ⁡ π θ ( o t ∣ s t ) π r e f ( o t ∣ s t ) R_t = r_{score} - \beta \cdot \log \frac{\pi_\theta(o_t|s_t)}{\pi_{ref}(o_t|s_t)} Rt=rscoreβlogπref(otst)πθ(otst)
    MiniMind 细节:这里通常是 Token 级别的修正。如果某个 Token 偏离 Reference 太远,该 Token 获得的即时奖励就会大幅下降。
Step 3: 广义优势估计 (Generalized Advantage Estimation - GAE)

这是 PPO 最难理解的部分。我们需要 Critic 模型介入。

  • Critic 对序列中的每一个 Token 状态 s t s_t st 预测一个价值 V ( s t ) V(s_t) V(st)
  • 我们计算 TD Error (时序差分误差)
    δ t = R t + γ V ( s t + 1 ) − V ( s t ) \delta_t = R_t + \gamma V(s_{t+1}) - V(s_t) δt=Rt+γV(st+1)V(st)
    直观理解: δ t \delta_t δt 代表“现实(Reward + 下一刻价值)比预期(当前价值)好了多少”。
  • GAE (Generalized Advantage Estimation):通过加权累加 δ t \delta_t δt 来平衡方差和偏差:
    A t = ∑ k = 0 ∞ ( γ λ ) k δ t + k A_t = \sum_{k=0}^{\infty} (\gamma \lambda)^k \delta_{t+k} At=k=0(γλ)kδt+k
    • A t > 0 A_t > 0 At>0:说明当前动作比平均水平好,应该鼓励(增加概率)。
    • A t < 0 A_t < 0 At<0:说明当前动作差劲,应该抑制。
Step 4: 策略优化 (Policy Update)

现在我们有了数据对 ( s t , a t , A t , π o l d ( a t ∣ s t ) ) (s_t, a_t, A_t, \pi_{old}(a_t|s_t)) (st,at,At,πold(atst))。进入内层循环(Epochs),更新 Actor 参数。

  • 计算新旧策略比率: r t ( θ ) = π θ ( a t ∣ s t ) π o l d ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{old}(a_t|s_t)} rt(θ)=πold(atst)πθ(atst)
  • Clip Loss(核心公式)
    L C L I P ( θ ) = E [ min ⁡ ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] L^{CLIP}(\theta) = \mathbb{E} [ \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) ] LCLIP(θ)=E[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)] 解释:如果 A t A_t At 是正的(好动作),我们要提高概率,但不能提太猛(由 1 + ϵ 1+\epsilon 1+ϵ 限制);如果 A t A_t At 是负的,我们要降低概率,也不能降太猛。这就是“Proximal(近端)”的含义——步子大了容易扯着蛋。注意,这里我们要最大化目标函数,即对 − L C L I P ( θ ) -L^{CLIP}(\theta) LCLIP(θ) 求梯度
Step 5: 价值回归 (Critic Update)

Critic 模型也要进步,它需要让自己的预测 V ( s t ) V(s_t) V(st) 越来越接近真实的 Returns。

  • L V F = M S E ( V ϕ ( s t ) , Returns t ) L^{VF} = MSE(V_\phi(s_t), \text{Returns}_t) LVF=MSE(Vϕ(st),Returnst)

1.3 PO 统一视角

  • 策略项: f ( r t ) = min ⁡ ( r t , clip ( r t , 1 − ε , 1 + ε ) ) f(r_t) = \min(r_t, \text{clip}(r_t, 1−ε, 1+ε)) f(rt)=min(rt,clip(rt,1ε,1+ε)) (裁剪概率比防止更新过激)
  • 优势项: g ( A t ) = A t g(A_t) = A_t g(At)=At (通过Critic来进行GAE)
  • 正则项: h ( K L t ) = β ⋅ E [ K L ] h(KL_t) = β⋅\mathbb{E}[KL] h(KLt)=βE[KL] (全局KL散度约束)

1.4 MiniMind 中的 PPO 代码

minimind/trainer/train_ppo.py 中,上述流程被精简为以下代码逻辑(简化版):

# 伪代码流程
for epoch in range(ppo_epochs):
    # 1. Rollout: 生成数据
    with torch.no_grad():
        seq, action_mask = actor.generate(prompts)
        old_log_probs = actor(seq)
        ref_log_probs = ref_model(seq)
        values = critic(seq)
        reward_score = reward_model(seq)

    # 2. 计算 Reward (含 KL 惩罚)
    kl_div = old_log_probs - ref_log_probs
    rewards = reward_score - beta * kl_div
    
    # 3. 计算 GAE (优势函数)
    advantages, returns = compute_gae(rewards, values)
    
    # 4. PPO Update Step
    for batch in dataloader(seq, advantages, returns):
        new_log_probs = actor(batch.seq)
        ratio = torch.exp(new_log_probs - batch.old_log_probs)
        
        # PPO Clip Loss
        surr1 = ratio * batch.advantages
        surr2 = torch.clamp(ratio, 1-eps, 1+eps) * batch.advantages
        actor_loss = -torch.min(surr1, surr2).mean()
        
        # Critic Loss
        new_values = critic(batch.seq)
        critic_loss = (new_values - batch.returns).pow(2).mean()
        
        # Backward
        loss = actor_loss + 0.5 * critic_loss
        optimizer.step()

第二部分:DPO (Direct Preference Optimization)

看完了 PPO 繁琐的流程,你会发现它太重了。你需要训练 Critic,需要拟合 Value,但这真的是必须的吗?
2023年斯坦福提出的 DPO 证明了:Reward Model 实际上是多余的中间商

2.1 核心改进原理:从奖励建模到策略的变量变换

DPO的核心突破并非否定PPO的优化目标,而是通过数学推导,揭示了“人类偏好数据”与“最优策略”之间的直接关联——偏好数据本身已隐式定义了最优策略,无需先通过偏好训练奖励模型,再用奖励模型优化策略。这一推导过程可拆解为三个关键步骤:

步骤1:用Bradley-Terry模型建模人类偏好

人类对“好回答( y w y_w yw)”和“坏回答( y l y_l yl)”的选择,本质上反映了潜在奖励的差异。DPO采用经典的Bradley-Terry(BT)模型量化这种偏好:假设存在一个真实的潜在奖励函数 r ∗ ( x , y ) r^*(x,y) r(x,y),人类选择 y w y_w yw而非 y l y_l yl的概率,由两者奖励的指数函数比值决定:
p ∗ ( y w ≻ y l ∣ x ) = exp ⁡ ( r ∗ ( x , y w ) ) exp ⁡ ( r ∗ ( x , y w ) ) + exp ⁡ ( r ∗ ( x , y l ) ) p^*(y_w \succ y_l | x) = \frac{\exp(r^*(x, y_w))}{\exp(r^*(x, y_w)) + \exp(r^*(x, y_l))} p(ywylx)=exp(r(x,yw))+exp(r(x,yl))exp(r(x,yw))
传统RLHF的RM阶段,会通过最大化上述概率的似然来训练奖励模型 r ϕ ( x , y ) r_\phi(x,y) rϕ(x,y),损失函数为:
L R ( r ϕ , D ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( r ϕ ( x , y w ) − r ϕ ( x , y l ) ) ] \mathcal{L}_R(r_\phi, \mathcal{D}) = -\mathbb{E}_{(x,y_w,y_l)\sim\mathcal{D}} \left[ \log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)) \right] LR(rϕ,D)=E(x,yw,yl)D[logσ(rϕ(x,yw)rϕ(x,yl))]
但DPO并未止步于此——它进一步探索了“训练好的奖励模型”与“最终策略”的数学关系。

步骤2:推导最优策略与奖励函数的显式关联

在PPO的优化框架中,策略的目标是“最大化奖励期望,同时通过KL散度约束避免偏离参考策略 π ref \pi_{\text{ref}} πref”,其目标函数可表示为:
max ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ( x , y ) ] − β ⋅ KL ( π θ ∥ π ref ) \max_{\pi_\theta} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\theta(y|x)} \left[ r(x,y) \right] - \beta \cdot \text{KL}(\pi_\theta \parallel \pi_{\text{ref}}) πθmaxExD,yπθ(yx)[r(x,y)]βKL(πθπref)
DPO通过数学推导证明:满足上述目标的最优策略 π ∗ \pi^* π,可直接由参考策略 π ref \pi_{\text{ref}} πref和奖励函数 r ( x , y ) r(x,y) r(x,y)参数化,形式为:
π ∗ ( y ∣ x ) = 1 Z ( x ) ⋅ π ref ( y ∣ x ) ⋅ exp ⁡ ( 1 β ⋅ r ( x , y ) ) \pi^*(y|x) = \frac{1}{Z(x)} \cdot \pi_{\text{ref}}(y|x) \cdot \exp\left(\frac{1}{\beta} \cdot r(x, y)\right) π(yx)=Z(x)1πref(yx)exp(β1r(x,y))
其中 Z ( x ) Z(x) Z(x)是归一化常数(确保策略概率和为1), β \beta β是KL散度的权重系数。这一公式的关键意义在于:奖励函数 r ( x , y ) r(x,y) r(x,y)不再是独立的优化目标,而是可以被“最优策略 π ∗ \pi^* π与参考策略 π ref \pi_{\text{ref}} πref的比值”所替代

步骤3:消去奖励函数,直接用策略表示偏好

将最优策略公式代入Bradley-Terry模型,可消去潜在奖励函数 r ∗ ( x , y ) r^*(x,y) r(x,y),得到仅由策略表示的人类偏好概率:
p ( y w ≻ y l ∣ x ) = σ ( 1 β ⋅ ( log ⁡ π ∗ ( y w ∣ x ) π ref ( y w ∣ x ) − log ⁡ π ∗ ( y l ∣ x ) π ref ( y l ∣ x ) ) ) p(y_w \succ y_l | x) = \sigma\left( \frac{1}{\beta} \cdot \left( \log \frac{\pi^*(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi^*(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right) p(ywylx)=σ(β1(logπref(ywx)π(ywx)logπref(ylx)π(ylx)))
这一推导彻底颠覆了传统流程:既然人类偏好可直接用“当前策略 π θ \pi_\theta πθ与参考策略 π ref \pi_{\text{ref}} πref的对数概率比”表示,我们就无需先训练奖励模型——直接优化 π θ \pi_\theta πθ,使其满足上述偏好概率即可

最终,DPO的损失函数被定义为“最小化模型预测偏好与人类真实偏好的偏差”,形式为二元交叉熵损失:
L DPO ( π θ ; π ref ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β ⋅ ( log ⁡ π θ ( y w ∣ x ) π ref ( y w ∣ x ) − log ⁡ π θ ( y l ∣ x ) π ref ( y l ∣ x ) ) ) ] \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x,y_w,y_l)\sim\mathcal{D}} \left[ \log \sigma\left( \beta \cdot \left( \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right) \right] LDPO(πθ;πref)=E(x,yw,yl)D[logσ(β(logπref(ywx)πθ(ywx)logπref(ylx)πθ(ylx)))]
其中 β \beta β的作用与PPO一致:控制策略偏离 π ref \pi_{\text{ref}} πref的程度—— β \beta β越大,策略越接近参考模型,探索性越弱; β \beta β越小,策略灵活性越高,但易因过度偏离导致训练不稳定。

2.2 流程对比 (PPO vs DPO)

  • PPO:在线 (Online)。必须实时生成数据(Rollout),实时打分,实时更新。效率低,显存炸裂。
  • DPO:离线 (Offline)。你可以把它看作是一种特殊的 Supervised Fine-Tuning
    1. 准备数据集:Prompt x x x, 好回答 y w y_w yw, 坏回答 y l y_l yl
    2. 不需要 Critic,不需要 Reward Model
    3. 直接计算 Loss:
      L D P O = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β log ⁡ π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β log ⁡ π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] L_{DPO} = - \mathbb{E}_{(x, y_w, y_l) \sim D} [\log \sigma (\beta \log \frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)})] LDPO=E(x,yw,yl)D[logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]注意:这边的公式与 DPO 论文统一,因此前面已经加过负号了,求梯度不需要再加了,但下文的 GRPO 与 PPO 一致,还是需要加负号的。

2.3 PO 统一视角

这是 MiniMind 中的解释:

  • 策略项: f ( r t ) = log ⁡ r w − log ⁡ r l f(r_t) = \log r_w - \log r_l f(rt)=logrwlogrl (对比chosen vs rejected的概率比)
  • 优势项: g ( A t ) = / g(A_t) = / g(At)=/ (通过偏好对比,无需显式计算优势)
  • 正则项: h ( K L t ) h(KL_t) h(KLt) 隐含在 β \beta β 中 (控制偏离参考模型程度)

不过我有另一种理解可以参考:

  • 策略项 f ( r t ) f(r_t) f(rt) & 优势项 g ( A t ) g(A_t) g(At):被隐式融合。DPO 认为,“优势”就是 log ⁡ π ( y w ) π ( y l ) \log \frac{\pi(y_w)}{\pi(y_l)} logπ(yl)π(yw) 的比值扩大。
  • 正则项 h ( K L t ) h(KL_t) h(KLt):被完美内嵌。当你优化 DPO Loss 时,你数学上等价于在优化 Reward 且受到 KL 约束。

MiniMind 实践建议:对于个人开发者,首选 DPO。它只需要加载 Actor 和 Ref 两个模型,显存占用减半,且训练速度快数倍。但务必注意:DPO 对数据标注质量极其敏感,脏数据会导致模型迅速崩坏。


第三部分:GRPO (Group Relative Policy Optimization)

PPO 很稳但太贵,DPO 很轻但对数据挑剔且容易过拟合。有没有一种结合二者优点的方案?
DeepSeek-R1 (DeepSeek-Math) 验证了 GRPO 的威力。它特别适用于推理、数学、代码等有明确客观评价标准的领域。

3.1 核心改进:干掉 Critic

在 PPO 中,Critic 模型(Value Function)是最难训练的。它需要预测“这道数学题做到这一步,未来做对的概率是多少”,这太难了。
GRPO 的思路是:我不预测分值了,我直接看这一组考生的相对排名。

3.2 训练流程差异

  1. Group Sampling
    对于一个 Prompt q q q,Actor 采样生成 G G G 个不同的回答 { o 1 , o 2 , . . . , o G } \{o_1, o_2, ..., o_G\} {o1,o2,...,oG}(比如 G = 8 G=8 G=8)。
  2. 打分
    用 Reward Model(或者规则检查器,比如代码编译器、数学答案匹配)给这 G G G 个回答打分,得到 { r 1 , . . . , r G } \{r_1, ..., r_G\} {r1,...,rG}
  3. 计算相对优势 (Group Relative Advantage)
    这是 GRPO 的灵魂。它不需要 Critic 来告诉我基线是多少,而是用这组数据的平均值做基线。
    A i = r i − mean ( r 1.. G ) std ( r 1.. G ) + ϵ A_i = \frac{r_i - \text{mean}(r_{1..G})}{\text{std}(r_{1..G}) + \epsilon} Ai=std(r1..G)+ϵrimean(r1..G)
    • 如果你考了80分,组平均分60分,你的优势就是正的。
    • 如果你考了50分,组平均分60分,你的优势就是负的。
  4. 策略更新
    使用 PPO 的 Clip Loss,但优势 A t A_t At 换成了上面的 A i A_i Ai。并且还需要显式地在 Loss 中加上 KL 散度项(因为没有 PPO 的 Critic 带来的隐式约束)。

L G R P O = E [ 1 G ∑ i = 1 G ( L i C L I P − β D K L ( π ∣ ∣ π r e f ) ) ] L_{GRPO} = \mathbb{E} \left[ \frac{1}{G} \sum_{i=1}^G (L^{CLIP}_i - \beta D_{KL}(\pi || \pi_{ref})) \right] LGRPO=E[G1i=1G(LiCLIPβDKL(π∣∣πref))]

3.3 PO 统一视角

  • 策略项: f ( r t ) = r t f(r_t) = r_t f(rt)=rt (直接使用概率比,无clip裁剪)
  • 优势项: g ( A t ) = R − μ g r o u p σ g r o u p g(A_t) = \frac{R - \mu_{group}}{\sigma_{group}} g(At)=σgroupRμgroup (组内归一化,消除Critic网络)
  • 正则项: h ( K L t ) = β ⋅ K L t h(KL_t) = β⋅KL_t h(KLt)=βKLt (token级KL散度约束)

3.4 为什么 GRPO 适合 Reasoning?

在推理任务中,答案往往非黑即白(Right/Wrong)。

  • 如果模型生成了8个解法,其中1个对了(Reward=1),7个错了(Reward=0)。
  • 平均分是 0.125。
  • 做对的那个样本,优势 A ≈ ( 1 − 0.125 ) / σ A \approx (1 - 0.125) / \sigma A(10.125)/σ,是一个巨大的正信号。
  • GRPO 能极高效地从偶尔的“灵光一现”中提取正反馈,强化模型产生正确推理路径的概率。

第四部分:总结与技术选型表

结合 MiniMind 的实现,我们从工程角度总结这三个算法:

算法核心组件显存压力数据要求核心公式特征 (统一视角)适用场景
PPOActor, Critic, Ref, RM💣 极大 (4模型)偏好对/打分模型 A t A_t At 由 Critic 预测,含 KL 隐式约束通用对话,复杂任务,追求极致稳定性
DPOActor, Ref🍃 极小 (2模型)高质量偏好对 ( y w , y l ) (y_w, y_l) (yw,yl) r r r π \pi π 的解析映射,无显式 A t A_t At资源受限,有高质量数据集,指令微调
GRPOActor, Ref, (RM/Rule)⚖️ 中等 (2模型+采样)Prompt + 评分规则 A t A_t At 由组内均值计算 (Group Norm)数学、代码、逻辑推理,长思维链训练

最后的建议

如果你正在使用 MiniMind 进行入门:

  1. 先跑通 SFT,这是基础。
  2. 想体验 RLHF,先从 DPO 开始,因为它最不容易因为 OOM (显存溢出) 而报错,代码逻辑也最线性。
  3. 当你理解了 DPO,尝试阅读 train_ppo.py,去观察 compute_gae 函数是如何实现的,这是进阶的关键。
  4. 如果你想复现 DeepSeek 的效果,尝试用 GRPO 训练一个小型的数学模型,只需要定义一个简单的 Reward 函数(比如答案匹配),你就能看到模型如何通过自我博弈(Self-Play 雏形)提升准确率。

本文参考:
强化学习一锅端:一文梳理从PPO到GSPO强化学习发展历程 - 曾天真的文章 - 知乎
大模型强化学习-PPO/DPO/GRPO区别对比 - 硅基趣玩喵的文章 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值