<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ppo on Wilson Wu</title><link>https://wilsonwu.me/zh/tags/ppo/</link><description>Recent content in Ppo on Wilson Wu</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sun, 28 Jun 2026 00:00:00 -0400</lastBuildDate><atom:link href="https://wilsonwu.me/zh/tags/ppo/index.xml" rel="self" type="application/rss+xml"/><item><title>PPO vs GRPO：两种主流 LLM 强化学习范式的对比与选择</title><link>https://wilsonwu.me/zh/blog/2026/ppo-vs-grpo/</link><pubDate>Sun, 28 Jun 2026 00:00:00 -0400</pubDate><guid>https://wilsonwu.me/zh/blog/2026/ppo-vs-grpo/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;在大模型后训练（Post-training）阶段，强化学习（RLHF / RLAIF）已经成为决定模型能力上限的关键因素之一。近期，GLM-5.2 在训练算法上从 GLM-5.1 使用的 GRPO（Generalized Reward Policy Optimization）切换到更经典的 PPO（Proximal Policy Optimization），并带来了明显的效果提升。&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="引言">引言</h2>
<p>在大模型后训练（Post-training）阶段，强化学习（RLHF / RLAIF）已经成为决定模型能力上限的关键因素之一。近期，GLM-5.2 在训练算法上从 GLM-5.1 使用的 GRPO（Generalized Reward Policy Optimization）切换到更经典的 PPO（Proximal Policy Optimization），并带来了明显的效果提升。</p>
<p>这一变化并非简单的“算法替换”，而是一次在<strong>稳定性、泛化能力以及训练可控性</strong>上的系统性升级。</p>
<p><img alt="PPO vs GRPO" loading="lazy" src="/zh/blog/2026/ppo-vs-grpo/1-ppo-vs-grpo.png"></p>
<p>本文将从三个层面展开分析：</p>
<ol>
<li>PPO 与 GRPO 的核心原理</li>
<li>两种算法的关键差异</li>
<li>为什么 PPO 能带来“质的提升”</li>
</ol>
<h2 id="ppoproximal-policy-optimization原理">PPO（Proximal Policy Optimization）原理</h2>
<h3 id="1-背景">1. 背景</h3>
<p>PPO 是 OpenAI 在 2017 年提出的一种策略梯度方法，是 TRPO（Trust Region Policy Optimization）的工程化简化版本，目前已经成为 RLHF 训练中的事实标准。</p>
<h3 id="2-核心思想">2. 核心思想</h3>
<p>PPO 的核心目标是：</p>

<blockquote>
  <p><strong>在优化策略的同时，限制新旧策略之间的偏移，防止训练不稳定。</strong></p>

</blockquote>
<p>其优化目标函数为：</p>

      <div class="math-display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>L</mi><mrow><mi>P</mi><mi>P</mi><mi>O</mi></mrow></msup><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="double-struck">E</mi><mrow><mo fence="true">[</mo><mi>min</mi><mo>⁡</mo><mrow><mo fence="true">(</mo><msub><mi>r</mi><mi>t</mi></msub><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo><msub><mi>A</mi><mi>t</mi></msub><mo separator="true">,</mo><mtext> clip</mtext><mo stretchy="false">(</mo><msub><mi>r</mi><mi>t</mi></msub><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mn>1</mn><mo>−</mo><mi>ϵ</mi><mo separator="true">,</mo><mn>1</mn><mo>+</mo><mi>ϵ</mi><mo stretchy="false">)</mo><msub><mi>A</mi><mi>t</mi></msub><mo fence="true">)</mo></mrow><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">
L^{PPO}(\theta) = \mathbb{E}\left[\min\left(r_t(\theta) A_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t\right)\right]
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1413em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span><span class="mord mathnormal mtight" style="margin-right:0.0278em;">O</span></span></span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathbb">E</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">[</span><span class="mop">min</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord text"><span class="mord">clip</span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">ϵ</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">ϵ</span><span class="mclose">)</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;">)</span></span><span class="mclose delimcenter" style="top:0em;">]</span></span></span></span></span></span></div><p>其中：</p>
<ul>
<li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>t</mi></msub><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mrow><msub><mi>π</mi><mi>θ</mi></msub><mo stretchy="false">(</mo><mi>a</mi><mi mathvariant="normal">∣</mi><mi>s</mi><mo stretchy="false">)</mo></mrow><mrow><msub><mi>π</mi><msub><mi>θ</mi><mrow><mi>o</mi><mi>l</mi><mi>d</mi></mrow></msub></msub><mo stretchy="false">(</mo><mi>a</mi><mi mathvariant="normal">∣</mi><mi>s</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex"> r_t(\theta) = \frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0278em;">r</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0278em;">θ</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.6357em;vertical-align:-0.6257em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">π</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0278em;">θ</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:-0.0278em;margin-right:0.1em;"><span class="pstrut" style="height:2.6944em;"></span><span class="mord mtight"><span class="mord mathnormal mtight">o</span><span class="mord mathnormal mtight" style="margin-right:0.0197em;">l</span><span class="mord mathnormal mtight">d</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3496em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.401em;"><span></span></span></span></span></span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">a</span><span class="mord mtight">∣</span><span class="mord mathnormal mtight">s</span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">π</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3488em;margin-left:-0.0359em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="katex-sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0278em;">θ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1512em;"><span></span></span></span></span></span></span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">a</span><span class="mord mtight">∣</span><span class="mord mathnormal mtight">s</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.6257em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></li>
<li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>A</mi><mi>t</mi></msub></mrow><annotation encoding="application/x-tex"> A_t </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2806em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">t</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>：优势函数（Advantage）</li>
<li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ϵ</mi></mrow><annotation encoding="application/x-tex"> \epsilon </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">ϵ</span></span></span></span>：裁剪系数（通常 0.1~0.2）</li>
</ul>
<h3 id="3-关键机制">3. 关键机制</h3>
<p>PPO 的稳定性来源于三点：</p>
<h4 id="clipping-机制">Clipping 机制</h4>
<p>限制策略更新幅度，防止“过度优化”。</p>
<h4 id="dvantage-estimationgae">dvantage Estimation（GAE）</h4>
<p>降低方差，提高训练稳定性。</p>
<h4 id="多步更新epoch">多步更新（Epoch）</h4>
<p>在同一批数据上进行多次优化，提高 sample efficiency。</p>
<h3 id="4-在大模型中的作用">4. 在大模型中的作用</h3>
<p>在 LLM 训练中，PPO 通常用于：</p>
<ul>
<li>对齐人类偏好（RLHF）</li>
<li>控制生成风格（安全、格式、推理能力）</li>
<li>平衡 exploration vs exploitation</li>
</ul>
<h2 id="grpogeneralized-reward-policy-optimization原理">GRPO（Generalized Reward Policy Optimization）原理</h2>
<h3 id="1-背景-1">1. 背景</h3>
<p>GRPO 是在 RLHF 场景中提出的一种<strong>去 Value Function（无 critic）</strong>的优化方法，其目标是：</p>

<blockquote>
  <p><strong>简化 PPO 训练流程，降低工程复杂度，同时提升吞吐。</strong></p>

</blockquote>
<h3 id="2-核心思想-1">2. 核心思想</h3>
<p>GRPO 的关键在于：</p>
<ul>
<li>不训练 value model</li>
<li>不计算 advantage（或用简化替代）</li>
<li>直接基于 reward 进行相对优化</li>
</ul>
<p>典型流程：</p>
<ol>
<li>对同一 prompt 采样多个输出（N samples）</li>
<li>使用 reward model 打分</li>
<li>做归一化或排序</li>
<li>使用相对奖励更新策略</li>
</ol>
<p>可表示为：</p>

      <div class="math-display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>L</mi><mrow><mi>G</mi><mi>R</mi><mi>P</mi><mi>O</mi></mrow></msup><mo>=</mo><mi mathvariant="double-struck">E</mi><mrow><mo fence="true">[</mo><mi>log</mi><mo>⁡</mo><msub><mi>π</mi><mi>θ</mi></msub><mo stretchy="false">(</mo><mi>a</mi><mi mathvariant="normal">∣</mi><mi>s</mi><mo stretchy="false">)</mo><mo>⋅</mo><mover accent="true"><mi>R</mi><mo>^</mo></mover><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">
L^{GRPO} = \mathbb{E}\left[\log \pi_\theta(a|s) \cdot \hat{R}(a)\right]
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.8913em;"></span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0077em;">GR</span><span class="mord mathnormal mtight" style="margin-right:0.1389em;">P</span><span class="mord mathnormal mtight" style="margin-right:0.0278em;">O</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1.8em;vertical-align:-0.65em;"></span><span class="mord mathbb">E</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size2">[</span></span><span class="mop">lo<span style="margin-right:0.0139em;">g</span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">π</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0278em;">θ</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mord">∣</span><span class="mord mathnormal">s</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord katex-accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9468em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span><span style="top:-3.2523em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1667em;"><span class="mord">^</span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size2">]</span></span></span></span></span></span></span></div><p>其中：</p>
<ul>
<li><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mover accent="true"><mi>R</mi><mo>^</mo></mover><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex"> \hat{R}(a) </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1.1968em;vertical-align:-0.25em;"></span><span class="mord katex-accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9468em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span><span style="top:-3.2523em;"><span class="pstrut" style="height:3em;"></span><span class="accent-body" style="left:-0.1667em;"><span class="mord">^</span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span></span></span></span>：归一化后的 reward（如 rank-based 或 mean-centered）</li>
</ul>
<h3 id="3-关键特点">3. 关键特点</h3>
<h4 id="无-critic-架构">无 Critic 架构</h4>
<p>避免 value model 训练的不稳定性。</p>
<h4 id="batch-内对比学习">Batch 内对比学习</h4>
<p>依赖同一 prompt 下多个样本的“相对优劣”。</p>
<h4 id="高吞吐">高吞吐</h4>
<p>更适合大规模并行训练（尤其是多 GPU 推理采样）。</p>
<h2 id="ppo-vs-grpo核心差异对比">PPO vs GRPO：核心差异对比</h2>
<table>
	<thead>
			<tr>
					<th>维度</th>
					<th>PPO</th>
					<th>GRPO</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>是否使用 Value Model</td>
					<td>✅ 使用</td>
					<td>❌ 不使用</td>
			</tr>
			<tr>
					<td>Advantage 计算</td>
					<td>✅ GAE</td>
					<td>❌ 无（或简化）</td>
			</tr>
			<tr>
					<td>稳定性</td>
					<td>⭐⭐⭐⭐⭐</td>
					<td>⭐⭐⭐</td>
			</tr>
			<tr>
					<td>训练复杂度</td>
					<td>高</td>
					<td>低</td>
			</tr>
			<tr>
					<td>样本效率</td>
					<td>高</td>
					<td>中</td>
			</tr>
			<tr>
					<td>并行友好性</td>
					<td>中</td>
					<td>高</td>
			</tr>
			<tr>
					<td>对 reward 依赖</td>
					<td>中</td>
					<td>高</td>
			</tr>
			<tr>
					<td>对数据质量敏感性</td>
					<td>中</td>
					<td>高</td>
			</tr>
	</tbody>
</table>
<p><img alt="PPO vs GRPO" loading="lazy" src="/zh/blog/2026/ppo-vs-grpo/2-ppo-vs-grpo.png"></p>
<h2 id="为什么-glm-52-从-grpo-切换到-ppo">为什么 GLM-5.2 从 GRPO 切换到 PPO？</h2>
<p>这是本文的核心问题。</p>
<h3 id="1-grpo-的瓶颈">1. GRPO 的瓶颈</h3>
<p>尽管 GRPO 在工程上更简单，但存在几个关键问题：</p>
<h4 id="reward-噪声放大">Reward 噪声放大</h4>
<p>GRPO 强依赖 reward 的“相对排序”，当：</p>
<ul>
<li>reward model 不够精确</li>
<li>多样本之间差异较小</li>
</ul>
<p>会导致：</p>

<blockquote>
  <p>梯度信号极不稳定</p>

</blockquote>
<h4 id="缺乏长期信用分配credit-assignment">缺乏长期信用分配（Credit Assignment）</h4>
<p>GRPO 没有 value function：</p>
<ul>
<li>无法建模长期回报</li>
<li>对长链推理（CoT）不友好</li>
</ul>
<h4 id="训练容易-collapse">训练容易 collapse</h4>
<p>在某些情况下：</p>
<ul>
<li>模型会过拟合 reward model</li>
<li>输出趋于模式化（mode collapse）</li>
</ul>
<h3 id="2-ppo-的优势在-glm-52-中体现">2. PPO 的优势在 GLM-5.2 中体现</h3>
<h4 id="更稳定的优化路径">更稳定的优化路径</h4>
<p>PPO 的 clipping + advantage：</p>
<ul>
<li>避免策略震荡</li>
<li>保证逐步改进（monotonic improvement）</li>
</ul>
<h4 id="更好的推理能力reasoning">更好的推理能力（Reasoning）</h4>
<p>PPO 的 value function：</p>
<ul>
<li>能对“中间步骤”进行隐式建模</li>
<li>更适合 chain-of-thought / multi-step reasoning</li>
</ul>
<h4 id="对-reward-model-依赖降低">对 reward model 依赖降低</h4>
<p>相比 GRPO：</p>
<ul>
<li>PPO 不完全依赖 reward 排序</li>
<li>对 reward 噪声更鲁棒</li>
</ul>
<h4 id="更强的泛化能力">更强的泛化能力</h4>
<p>PPO 本质上优化的是：</p>

<blockquote>
  <p><strong>策略分布，而不是样本排序</strong></p>

</blockquote>
<p>因此在：</p>
<ul>
<li>未见任务</li>
<li>长文本生成</li>
<li>工具调用</li>
</ul>
<p>等场景中更稳定。</p>
<h2 id="一个直观理解排序-vs-回归">一个直观理解：排序 vs 回归</h2>
<p>可以用一个类比帮助理解：</p>
<ul>
<li>
<p><strong>GRPO：像做“排序学习”</strong></p>
<ul>
<li>哪个答案更好？</li>
<li>强依赖 pairwise / listwise 对比</li>
</ul>
</li>
<li>
<p><strong>PPO：像做“回归优化”</strong></p>
<ul>
<li>当前策略离最优策略有多远？</li>
<li>有连续的优化方向</li>
</ul>
</li>
</ul>
<p>结论：</p>

<blockquote>
  <p>GRPO 更“快”，PPO 更“稳且准”。</p>

</blockquote>
<h2 id="总结">总结</h2>
<p>GLM-5.2 从 GRPO 切换到 PPO，本质上是一次：</p>

<blockquote>
  <p><strong>从工程效率优先 → 模型能力优先 的转变</strong></p>

</blockquote>
<h3 id="关键结论">关键结论</h3>
<ol>
<li>
<p>GRPO 适合：</p>
<ul>
<li>快速训练</li>
<li>大规模并行</li>
<li>reward 明确的任务</li>
</ul>
</li>
<li>
<p>PPO 更适合：</p>
<ul>
<li>高质量对齐</li>
<li>复杂推理任务</li>
<li>长上下文生成</li>
</ul>
</li>
<li>
<p>在当前 LLM 发展阶段：</p>
</li>
</ol>

<blockquote>
  <p><strong>稳定性、泛化能力、推理能力 &gt; 训练吞吐</strong></p>

</blockquote>
<p>因此，PPO 的回归成为一个“必然选择”。</p>
<h2 id="结语">结语</h2>
<p>强化学习算法的选择，正在成为大模型能力差异的关键分水岭。从 GRPO 到 PPO，不只是算法切换，更代表着：</p>

<blockquote>
  <p><strong>大模型训练从“能跑”走向“跑得好、跑得稳”。</strong></p>

</blockquote>
<p>未来我们很可能看到：</p>
<ul>
<li>PPO + DPO 混合范式</li>
<li>或新的 off-policy RL 方法</li>
<li>甚至 reward-free alignment</li>
</ul>
<p>但在当前阶段：</p>

<blockquote>
  <p><strong>PPO 仍然是最稳健的工业级选择。</strong></p>

</blockquote>
]]></content:encoded></item></channel></rss>