------从 Agent、Policy、Reward 到 Policy Gradient 和 PPO 的底层逻辑

本文是强化学习(Reinforcement Learning, RL)系列的第一篇。目标不是立刻掌握 PPO、GRPO 等算法的实现,而是建立理解这些算法所需的基本概念。
读完本文,你应该能够解释一个关键问题:为什么一个回答得了 0.8 分,并不代表这个回答就应该被强化?
一、强化学习到底在解决什么问题?
假设我们正在训练一个大语言模型(LLM)。
用户问:
为什么天空是蓝色的?
模型生成了一个回答:
因为大气中的分子对太阳光中的短波长光散射得更强,而蓝光属于较短波长的可见光。
假设这个回答获得了 0.8 分。
接下来,我们应该怎么做?
一种直觉是:
-
回答得分高,就增加生成这个回答的概率。
-
回答得分低,就降低生成这个回答的概率。
但这里隐藏着一个问题:
0.8 分究竟算高,还是算低?
假设模型面对这个问题时,通常只能生成 0.5 分的回答,那么 0.8 分显然不错。
但是,如果模型通常能够生成 0.95 分的回答,那么这个 0.8 分的回答实际上低于模型当前的正常水平。
因此,强化学习不能只关心一个行为得到了多少奖励,还需要关心:
这个行为的结果,相对于当前策略的预期表现,究竟好多少?
这正是 Advantage(优势)的核心思想。
在正式理解 Advantage 之前,我们需要先建立强化学习的基本框架。
二、Agent 与 Environment:谁在做决策,谁在提供反馈?
强化学习通常涉及两个基本角色:
Agent(智能体):负责观察环境、选择动作,并根据反馈调整行为。
Environment(环境):接收智能体的动作,更新状态,并返回奖励或其他反馈。
例如训练一个玩游戏的 AI:
-
游戏画面告诉 AI 当前处于什么位置。
-
AI 选择向左移动。
-
游戏环境更新角色位置。
-
如果移动有利,AI 可能获得正奖励。
-
AI 利用交互经验调整后续策略。
这可以抽象为:
环境状态 → Agent 选择动作 → 环境反馈 → 更新状态 → 再次选择动作
在 LLM 强化学习中,我们可以建立类似的对应关系。
| 传统强化学习 | LLM 强化学习 |
|---|---|
| Agent | 当前语言模型 |
| Environment | 提示词、生成上下文、工具及评分系统等组成的交互环境 |
| State | Prompt 与已生成的 Token 等上下文 |
| Action | 生成下一个 Token |
| Policy | 模型对下一个 Token 的概率分布 |
| Reward | 奖励模型、规则验证器或其他反馈机制给出的奖励 |
需要注意,LLM 的环境与游戏环境不完全一样。
在最简单的文本生成任务里,模型生成一个 Token 后,状态只是增加了这个 Token;而在能够调用工具的 Agent 系统里,一个动作还可能触发搜索、执行代码或改变外部环境。
虽然具体形式不同,但核心机制相同:
智能体通过与环境交互获得反馈,并利用反馈改进自己的决策策略。
三、State、Action 和 Policy:LLM 是如何做决策的?
3.1 State:模型当前知道什么?
在强化学习中,State(状态)通常记作 (s)。
它描述了智能体做出当前决策时所依据的信息。
对于自回归语言模型,在第 (t) 步,可以将状态简化表示为:
其中:
-
(x):用户输入的 Prompt。
-
(
):模型已经生成的 Token。
-
(
):模型生成第 (t) 个 Token 之前的上下文。
例如,模型正在回答:
法国的首都是
此时状态就是当前问题与已经生成的文字。
模型接下来需要决定生成哪个 Token。
3.2 Action:模型下一步做什么?
在强化学习中,Action(动作)通常记作 (a)。
在标准的 Token 级别语言模型建模中:
也就是说,生成下一个 Token,就是执行一个动作。
例如,模型可能预测:
| 下一个 Token | 概率 |
|---|---|
| 巴黎 | 0.85 |
| 伦敦 | 0.05 |
| 里昂 | 0.04 |
| 其他 | 0.06 |
这里的概率只是一个教学示例。
模型可以根据这个概率分布采样,决定下一步生成什么。
整个回答就是由连续的动作组成的。
3.3 Policy:为什么模型会选择某个动作?
Policy(策略)通常记作:
它表示:在状态 (s) 下,参数为 (\theta) 的模型选择动作 (a) 的概率。
其中,(\theta) 就是模型的可训练参数。
在 LLM 中,对应的是:
语言模型每次生成 Token,本质上就是依据当前策略进行一次概率决策。
对于一个完整回答:
其条件生成概率可以分解为:
这是理解 LLM 强化学习的重要基础。
因为我们真正要优化的,不是某个回答文本本身,而是模型生成不同回答的概率分布。
如果某类回答比模型当前预期更好,我们就希望提高生成它的概率。
如果某类回答更差,就希望降低生成它的概率。
但是,到底应该提高多少、降低多少,需要依赖后面介绍的价值估计与策略优化方法。
四、Reward、Trajectory 和 Return:AI 如何知道自己做得好不好?
4.1 Reward:奖励从哪里来?
Reward(奖励)通常记作:
它描述智能体在某次交互中获得的即时反馈。
在 LLM 强化学习中,奖励可以来自不同渠道。
例如:
第一种:奖励模型(Reward Model)
奖励模型对生成的回答进行评分,例如根据有用性、正确性或偏好数据进行评价。
第二种:规则验证器(Rule-based Verifier)
例如数学题有标准答案:
-
回答正确:奖励 1。
-
回答错误:奖励 0。
编程任务也可以通过测试用例的通过情况提供奖励。
第三种:过程奖励(Process Reward)
不只检查最终答案,还对推理步骤、中间操作或工具使用结果提供反馈。
这里需要区分两个概念:
Reward 是评价信号,而不是模型参数的直接修改量。
一个回答获得奖励 1,并不意味着所有生成这个回答的 Token 概率都应该无条件增加。
奖励还必须经过价值估计、优势估计以及优化算法的处理。
4.2 稀疏奖励与密集奖励
根据奖励出现的频率,可以区分两类情况。
稀疏奖励(Sparse Reward)
只有完成整个任务后,才收到一次奖励。
例如模型生成完整的数学解答后,验证器才判断正确与否。
密集奖励(Dense Reward)
在多个中间步骤中,模型都可能收到奖励。
例如:
-
中间推导正确,获得一定奖励。
-
调用工具成功,获得一定奖励。
-
最终答案正确,再获得奖励。
密集奖励通常能提供更丰富的学习信号,但也有风险:如果中间奖励设计不合理,模型可能学会追求评分规则,而不是真正完成任务。
稀疏奖励则更加直接,但往往面临更困难的信用分配问题(Credit Assignment):
最终得到了 1 分,究竟是前面的哪个动作促成了成功?
这也是为什么 LLM 强化学习需要研究如何把回答级别的反馈转化为 Token 级别的优化信号。
4.3 Trajectory / Rollout:一次完整生成过程
Trajectory(轨迹)描述智能体从初始状态到任务结束的一系列交互。
可以表示为:
在 LLM 中,一次 Rollout 通常可以理解为:
给定一个 Prompt,让模型按照某个策略生成一个完整回答,并记录生成过程及相关反馈。
例如:
Prompt:2 + 3 等于多少?
Token 1:5
Token 2:。
Token 3:<EOS>
最终奖励:1.0
这就是一次简化的生成轨迹。
需要注意,Rollout 通常指采样或执行过程;Trajectory 则更强调由此得到的状态、动作和奖励序列。实际工程中二者经常在相近语境下使用。
4.4 Return:为什么不能只看即时奖励?
Reward 衡量某一步的反馈,但强化学习通常希望优化的是长期累计收益。
这就是 Return(累计回报):
其中:
-
(G_t):从第 (t) 步开始的累计回报。
-
(r_{t+k}):未来第 (k) 步的奖励。
-
(\gamma):折扣因子(Discount Factor),通常满足 (0\leq\gamma\leq1)。
举一个简单例子。
假设智能体在连续三个时间点获得奖励:
当 (\gamma=0.9) 时:
折扣因子的作用,是控制未来奖励在当前决策中的权重。
-
当 (\gamma=1) 时,未来奖励不随时间折扣。
-
当 (\gamma) 较小时,模型会更重视近期奖励。
对于很多只在回答结束时给出最终评分的 LLM 训练任务,可以采用 (\gamma=1)。
这时,较早的生成步骤也能获得来自最终结果的学习信号。
不过,最终奖励能够反馈到前面的步骤,并不代表我们已经知道每个 Token 分别贡献了多少。后者仍然需要更精细的价值估计与信用分配机制。
五、Value、Q Function 和 Advantage:强化学习最重要的三个概念
这是全文最关键的一部分。
前面我们知道,模型可以获得奖励。
但奖励只是结果。
强化学习还希望知道:
在当前状态下,什么样的行为比模型通常会采取的行为更好?
为此,我们需要引入三个概念:
Value Function、Q Function 和 Advantage Function。
5.1 Value Function:当前状态有多大价值?
状态价值函数通常写作:
定义为:
它回答:
如果当前处于状态 (s),之后继续按照策略 (\pi) 行动,预期能够获得多少累计回报?
例如,模型正在回答一个数学题。
根据当前模型的能力,以及它已经写出的内容,我们估计:
这意味着,在当前状态下,模型按照现有策略继续完成任务,预期回报为 0.9。
注意,这不是保证模型一定得到 0.9,而是一个期望值。
5.2 Q Function:如果选择某个动作,预期回报是多少?
动作价值函数通常表示为:
其定义是:
它回答:
在当前状态下,先执行动作 (a),然后继续按照策略 (\pi) 行动,预期能够获得多少累计回报?
这里有一个重要区别:
-
(V^\pi(s)):不指定当前动作,按照现有策略行动的平均预期。
-
(Q^\pi(s,a)):指定当前动作后,按照现有策略继续行动的预期。
二者满足:
因此,Value 是不同动作的 Q 值按照策略概率加权得到的平均值。
5.3 Advantage:这个动作比正常水平好多少?
现在我们终于可以定义 Advantage。
中文称为优势函数。
直观含义:
优势 = 选择某个动作后的预期回报 − 当前策略的平均预期回报
这意味着:
-
当 (A(s,a)>0) 时,动作优于当前策略的平均预期。
-
当 (A(s,a)<0) 时,动作劣于当前策略的平均预期。
-
当 (A(s,a)=0) 时,动作与当前策略的平均预期一致。
下面通过一个完整例子理解。
5.4 为什么一个 0.8 分的回答,不一定应该被强化?
为了便于理解,我们暂时采用一个简化的一步决策模型:
模型一次选择一个完整回答,而不是逐 Token 生成。
假设同一个问题有两个候选回答,当前策略分别以 50% 的概率选择它们。
| 候选回答 | 选择概率 | Q 值 |
|---|---|---|
| 回答 A | 50% | 0.8 |
| 回答 B | 50% | 1.0 |
当前状态的 Value 为:
于是:
XML
<text size="sm">这两个回答的相对表现可以直观表示为:</text>
<box border radius="lg" padding={3} gap={3}>
<box gap={1}>
<row justify="between" align="center">
**回答 A**
<text color="secondary" weight="medium" tabularNums>Q = 0.80</text>
</row>
<box background="surface-tertiary" radius="full" height="12px" clip>
<box background="warning-solid" width="80%" height="100%" radius="full"/>
</box>
<text color="secondary" size="xs">Advantage = −0.10,低于当前预期</text>
</box>
<box gap={1}>
<row justify="between" align="center">
**当前策略的平均预期**
<text color="secondary" weight="medium" tabularNums>V = 0.90</text>
</row>
<box background="surface-tertiary" radius="full" height="12px" clip>
<box background="secondary" width="90%" height="100%" radius="full"/>
</box>
</box>
<box gap={1}>
<row justify="between" align="center">
**回答 B**
<text color="secondary" weight="medium" tabularNums>Q = 1.00</text>
</row>
<box background="surface-tertiary" radius="full" height="12px" clip>
<box background="success-solid" width="100%" height="100%" radius="full"/>
</box>
<text color="secondary" size="xs">Advantage = +0.10,高于当前预期</text>
</box>
</box>
这里出现了一个反直觉的结果:
回答 A 明明获得了 0.8 的较高评分,但它的 Advantage 却是负数。
为什么?
因为在这个状态下,模型本来就有能力实现 0.9 的平均回报。
回答 A 反而低于正常水平。
如果我们不加区分地强化回答 A,就可能把概率分配给一个相对较差的回答,从而损害策略的预期表现。
再考虑另一个情况:
一个能力较弱的模型,面对相同问题时,当前预期回报只有 0.6。
如果某个动作的 Q 值达到 0.8,那么:A(s,a)=0.8-0.6=+0.2
此时,同样是 0.8 的结果,优势却为正数。
所以:
决定一个动作是否值得提高概率的,不只是绝对奖励,而是它相对于当前状态下策略预期表现的优势。
这里也要强调:真实训练中,一个回答实际得到的 0.8 分是一次观测到的 Reward 或 Return,并不天然等于 (Q(s,a))。上面的例子假设了确定性的一步任务,因此两者可以对应。
在一般的多步任务中,Q 是条件期望,通常无法直接精确获得。实际算法往往使用观测回报、Value 网络或其他方法估计 Advantage。
六、Baseline:为什么要从 Reward 中减去一个基线?
理解 Advantage 后,我们自然会遇到另一个概念:Baseline(基线)。
所谓基线,就是我们在评价一个动作时引入的参考值。
最常见的选择,是当前状态的价值函数:
但 Baseline 并不一定非要由 Value 网络给出。
为什么要减去基线?
有两个值得区分的角度。
6.1 直观角度:将绝对表现转化为相对表现
假设模型连续生成了三个回答:
| 回答 | Return | Baseline | 差值 |
|---|---|---|---|
| A | 0.8 | 0.9 | −0.1 |
| B | 1.0 | 0.9 | +0.1 |
| C | 0.9 | 0.9 | 0 |
使用差值后,我们获得了更有针对性的优化信号。
这就是使用优势估计进行策略优化的直观理由。
6.2 数学角度:降低梯度估计的方差
在策略梯度算法中,一个典型的梯度估计项是:
其中 (G) 是观测到的累计回报。
因为动作来自概率采样,不同采样之间的回报可能波动很大,梯度估计也会出现明显波动。
我们可以引入基线:
这样做为什么不会改变期望梯度?
关键在于:
由于 (b(s)) 不依赖当前采样动作:
利用:
得到:
因为所有动作的概率之和为 1:
因此:
也就是说,在满足相应条件时,减去不依赖当前动作的基线不会改变策略梯度的期望。
同时,一个选择合理的基线通常可以降低梯度估计的方差,从而提高训练稳定性。
但这里存在两个重要细节:
第一,并非任意基线都一定能降低方差。不合适的基线甚至可能增加方差。
第二,(V(s)) 是常见且有效的基线,但它并不总是严格意义下使梯度方差最小的基线。
这些区别在阅读 PPO、Actor-Critic 相关论文时非常重要。
七、Policy Gradient:模型参数究竟如何被更新?
现在我们已经知道,Advantage 可以衡量动作相对当前策略的好坏。
接下来的问题是:
怎样将这个信号转化为模型参数的变化?
这就需要 Policy Gradient(策略梯度)。
7.1 强化学习优化的目标是什么?
一个常见目标是最大化策略的期望累计回报:
其中:
-
(\theta):策略参数。
-
(\tau):按照策略采样得到的轨迹。
-
(G(\tau)):轨迹的累计回报。
我们希望通过调整模型参数,使 (J(\theta)) 尽可能大。
策略梯度定理给出了一种计算优化方向的方法。
在适当的状态分布或轨迹加权约定下,其核心形式可以写成:
这里最关键的是两部分的乘积:
以及:
前者表示如何改变模型参数,才能影响当前动作的对数概率。
后者决定当前动作应该受到正向还是负向的优化信号。
7.2 Advantage 如何影响动作概率?
假设某个 Token 的 Advantage 为正:
策略梯度的期望更新方向会倾向于提高该动作在相应状态下的概率。
相反,如果:
则会倾向于降低该动作的概率。
若 Advantage 为 0,那么这个动作对上述策略梯度项不产生直接贡献。
因此可以用一句话理解策略梯度:
增加相对较优行为的概率,减少相对较差行为的概率。
但还不能忽略一个问题:
如果某次采样得到了很高的 Advantage,是否应该大幅提高其概率?
答案通常是否定的。
因为单次采样可能存在噪声,优势估计也可能不准确。
如果参数更新过大,模型可能在一次训练中产生剧烈的概率分布变化。
这正是 PPO 等稳定策略优化算法试图解决的问题。
八、KL Divergence 与 Entropy:为什么不能只追求高奖励?
强化学习不只是让奖励最大化,还需要控制策略变化和探索行为。
这里涉及两个重要概念:
KL Divergence 和 Entropy。
8.1 KL Divergence:新策略偏离旧策略有多远?
KL 散度用于衡量两个概率分布之间的差异。
对于离散分布 (P) 和 (Q):
需要注意,KL 散度通常不是对称的:
假设旧模型面对一个问题时,下一个 Token 的概率为:
| Token | 旧策略 | 新策略 |
|---|---|---|
| 巴黎 | 0.70 | 0.95 |
| 伦敦 | 0.20 | 0.04 |
| 里昂 | 0.10 | 0.01 |
新策略更加偏向"巴黎"。
对于这个问题,这种变化可能是有益的。
但是,如果大量状态中的概率分布都在一次更新后发生剧烈变化,那么模型可能出现:
-
已有能力退化。
-
输出模式变得单一。
-
对奖励信号中的噪声过拟合。
-
训练过程不稳定。
因此,许多 LLM 强化学习方法会限制策略偏离某个参考策略的程度。
一种常见目标是:
这里是一个简化表达,实际计算通常还包含 Prompt 和生成轨迹上的期望。
其中 (\pi_{\mathrm{ref}}) 可以是冻结的参考模型,例如经过 SFT 的模型。
KL 惩罚的含义是:不仅要获得更高奖励,还要避免为了奖励而过度偏离原有策略。
尤其要区分两种对象:
-
参考策略 (\pi_{\mathrm{ref}}):用于约束模型不要偏离指定的参考分布。
-
旧策略 (\pi_{\mathrm{old}}):用于表示采集当前训练数据时的行为策略。
二者不一定相同。
PPO 的概率比率通常涉及旧策略;LLM 对齐训练中的 KL 正则化则可能涉及另一套冻结的参考策略。
8.2 Entropy:为什么模型不能只选择一个动作?
Entropy(熵)衡量概率分布的不确定性。
对于策略分布:
考虑两种策略:
策略 A:
| 动作 | 概率 |
|---|---|
| A | 0.98 |
| B | 0.01 |
| C | 0.01 |
策略 B:
| 动作 | 概率 |
|---|---|
| A | 0.50 |
| B | 0.30 |
| C | 0.20 |
策略 A 的概率高度集中,熵较低。
策略 B 的概率更加分散,熵较高。
如果模型很早就将概率集中到某一种行为上,它可能过早放弃探索其他更优行为的机会。
因此,一些强化学习算法会通过熵奖励鼓励适度探索:
其中 (\alpha) 控制熵奖励的权重。
但是,熵也不是越高越好。
过高的熵可能意味着模型过于随机,难以稳定输出高质量答案。
优化目标不是让所有 Token 都有相近概率,而是在任务表现与探索之间保持合理平衡。
可以将 KL 和 Entropy 的作用理解为:
-
KL:控制策略与指定参考分布之间的距离。
-
Entropy:衡量策略自身的随机性,适当的熵奖励可以鼓励探索。
它们有联系,但并不等价。
九、Importance Sampling:为什么可以用旧模型生成的数据更新新模型?
现在考虑一个实际训练问题。
假设我们使用当前策略生成了一批回答。
记采样时的策略为:
随后,我们更新了模型参数,得到:
这时,训练数据来自旧策略,而我们正在优化新策略。
能不能继续使用这些旧数据?
这就需要理解 Importance Sampling(重要性采样)。
9.1 核心思想:通过概率比率进行修正
假设我们希望计算:
但手中的样本来自:
我们可以利用概率比率:
在两个分布满足相应支持集条件时:
这就是重要性采样的基本原理。
9.2 为什么需要概率比率?
假设某个动作:
-
在旧策略下的概率是 0.2。
-
在新策略下的概率是 0.3。
则:
这意味着该动作在新策略下更常见。
如果使用旧策略采集的数据估计新策略下的期望,就需要对这个采样概率的变化进行修正。
反过来,如果:
说明该动作在新策略下的概率比旧策略更低。
需要区分:在严格的期望变换中,多步轨迹的重要性权重可能涉及连续动作概率比率的乘积;而 PPO 常用的是在旧策略状态、动作数据上构造逐步的代理优化目标,并非完整的无偏轨迹修正。
重要性采样还存在一个明显问题:
当新旧策略差异过大时,概率比率可能变得非常极端,从而导致估计方差增大。
这也是 PPO 需要限制策略变化幅度的原因之一。
十、On-policy 与 Off-policy:训练数据必须来自当前模型吗?
这两个概念关注的是:用于学习的数据,是由什么策略采集的?
10.1 On-policy:主要使用当前策略的数据
On-policy 方法通常使用当前策略,或非常接近当前策略的行为策略所生成的数据进行学习。
典型流程是:
-
使用当前模型采样一批回答。
-
计算奖励与优势估计。
-
使用这批数据更新策略。
-
在策略变化后重新采样。
优点是数据与当前优化目标更加匹配。
缺点是需要不断生成新数据,采样成本较高。
10.2 Off-policy:允许使用其他策略的数据
Off-policy 方法允许利用并非当前目标策略生成的数据进行学习。
例如:
-
历史版本模型生成的回答。
-
经验回放缓冲区中的旧数据。
-
其他行为策略采集的数据。
这样可以提高样本复用效率,但也会遇到数据分布与当前策略不匹配的问题。
因此,Off-policy 方法通常需要相应的分布修正机制或专门设计的学习目标。
10.3 PPO 属于哪一种?
PPO 通常被归类为 On-policy 策略优化算法。
但它有一个重要特点:PPO 允许在同一批由旧策略采样的数据上执行多轮优化。
它通过新旧策略之间的概率比率构造代理目标,并通过裁剪等机制降低过大更新带来的风险。
所以,PPO 并不是每进行一次梯度更新都必须立即重新采样。
但这也不意味着 PPO 可以无条件使用任意久远的历史数据。
如果当前策略与采样策略差异过大,使用这些数据可能导致训练效果变差甚至不稳定。
十一、将所有概念连接起来:PPO 为什么需要 Advantage?
现在我们可以把前面学到的知识连接起来。
PPO 的全称是 Proximal Policy Optimization。
它的核心目标之一是:
在改善策略表现的同时,避免单次策略更新幅度过大。
11.1 PPO 的核心优化形式
PPO 的经典 Clipped Surrogate Objective 可以表示为:
其中:
各个变量对应的含义如下:
| 符号 | 含义 |
|---|---|
| 正在更新的新策略 | |
| 采样时使用的旧策略 | |
| 新旧策略的动作概率比率 | |
| 对当前动作 Advantage 的估计 | |
| 裁剪范围的超参数 | |
| 将比率数值限制在指定区间内 |
这一公式看起来复杂,但可以拆成两个问题:
第一个问题:应该增加还是减少动作概率?
主要由 Advantage 的正负决定。
第二个问题:允许把动作概率改变到什么程度?
由概率比率与 Clipped Objective 共同控制。
11.2 一个具体例子
假设:
说明该动作的估计优势为正。
如果新策略把该动作的概率提高到旧策略的 1.4 倍:
假设:
那么裁剪区间是:
PPO 中的两项分别为:
以及:
最终取较小值:
也就是说,对于这个正优势样本,当概率比率超过 1.2 时,代理目标不再因为继续提高该比率而获得额外收益。
这使优化器缺少继续大幅提高该动作概率的动力。
对于负 Advantage,裁剪机制也会抑制过度降低动作概率所产生的额外优化收益。
但需要注意:
PPO 的 Clip 并不是对模型参数或最终概率施加绝对的硬约束。它是在代理目标层面抑制过大的策略变化,实际训练中依然可能需要监控 KL 散度或使用其他稳定性措施。
11.3 为什么 PPO 不直接使用 Reward?
现在回到文章最开始的问题。
假设一个回答得到:R=0.8
但当前模型在相同状态下的预期回报为:V(s)=0.9
在使用观测回报减去状态价值作为优势估计的简化情况下:
这说明该次结果低于模型的预期。
如果 PPO 直接把正的 Reward 当成策略优化权重,那么这个得到 0.8 分的样本依然会产生提高其概率的信号。
但是使用 Advantage 后,该样本的策略梯度信号就转为负向。
因此,PPO 使用 Advantage 的核心意义在于:
它需要知道采样动作相对于当前策略的表现是好还是差,而不是只知道这个动作获得了一个多大的绝对奖励数值。
严格来说,Reward 并非在理论上完全不能用于策略梯度。REINFORCE 等方法可以直接使用回报构造无偏梯度估计。
但是,使用合适的 Baseline 与 Advantage 估计,通常能够降低梯度方差,并提供更稳定的策略优化信号。
所以,更精确的说法是:
PPO 采用 Advantage 估计,是为了改善策略梯度的估计与优化稳定性,而不是因为 Reward 在数学上完全无法用于策略优化。
十二、把整个 LLM 强化学习训练流程串起来
现在我们可以用一个简化的 PPO 训练流程,把全部概念联系起来。
第一步:准备 Prompt
从训练数据中抽取问题:
Prompt:请解释什么是梯度下降。
它构成模型的初始生成状态。
第二步:使用旧策略生成回答
通过:
采样一个完整回答。
在生成过程中,模型连续根据当前状态选择下一个 Token。
这一过程就是一次 Rollout。
第三步:计算 Reward
使用奖励模型或验证器,对回答进行评分。
例如:R=0.8
第四步:估计 Return 和 Advantage
首先根据任务奖励计算相应的 Return。
然后使用价值函数或其他估计方法生成 Advantage。
例如:
这是一个简单的 Monte Carlo 风格优势估计形式。
实际 PPO 中也经常采用 GAE(Generalized Advantage Estimation)等方法,在偏差与方差之间做权衡。
第五步:计算策略概率比率
对于采样得到的动作,计算:
利用它评估新策略相对于采样策略的概率变化。
第六步:执行策略优化
使用 Advantage 与概率比率构造 PPO Clipped Objective。
在实际实现中,训练目标还可能包括:
-
Value Function 的拟合损失。
-
熵奖励。
-
KL 正则化或 KL 监控。
-
其他辅助约束。
通过反向传播更新模型参数。
第七步:重复训练
使用更新后的模型采集新的 Rollout,继续估计奖励、回报和优势,并执行下一轮优化。
最终,我们希望模型对不同状态的行为分布逐渐发生变化:
相对较好的行为更有可能出现,相对较差的行为更不容易出现。
这就是 LLM 强化学习训练的基本逻辑。
十三、最容易混淆的六个问题
问题 1:Reward、Return、Value 和 Q 有什么区别?
Reward 是某一步实际获得的奖励。
Return 是从当前时间步起累计的未来奖励。
Value 是从当前状态出发,遵循某个策略能够获得的预期 Return。
Q 是在当前状态先执行指定动作,再遵循策略能够获得的预期 Return。
问题 2:Advantage 就是 Reward 减去 Value 吗?
严格定义是:
但实际算法可以使用:等形式进行估计。
如果把观测 Reward 或 Return 直接当成 Q,必须说明相应的任务假设或估计近似,不能在所有情况下混为一谈。
问题 3:为什么正 Reward 可以对应负 Advantage?
因为 Reward 是绝对评价,而 Advantage 是相对当前策略预期的评价。
当结果低于当前预期时,即使 Reward 本身为正,Advantage 也可能为负。
问题 4:为什么要减去 Baseline?
使用不依赖当前采样动作的基线,在适当条件下不会改变策略梯度的期望。
合理选择基线通常可以降低梯度估计的方差,使策略优化更稳定。
问题 5:KL 和 Entropy 都在限制策略变化吗?
不是。
KL 关注两个概率分布之间的差异,可以用于限制策略偏离指定参考策略。
Entropy 衡量单个概率分布本身的不确定性,常用于分析或鼓励探索。
问题 6:PPO 为什么同时需要 Advantage 和概率比率?
二者解决不同的问题。
Advantage 决定优化动作概率的方向和相对强度。
概率比率衡量新旧策略对当前动作的概率变化,并用于构造限制过大更新收益的 PPO 代理目标。
简单概括就是:
Advantage 负责判断行为是否值得强化,概率比率与 PPO 的裁剪机制负责控制强化过程的幅度。
十四、学完这一层,你应该建立怎样的直觉?
强化学习中,最容易产生误解的地方,就是认为:
一个行为得分高,就应该增加这个行为的概率。
这句话只有在附加适当条件时才成立。
强化学习真正关心的是如何提高策略整体的期望累计回报。
为了做到这一点,我们需要:
-
用 Policy 描述智能体如何选择动作。
-
用 Reward 和 Return 评价交互结果。
-
用 Value 和 Q 预测不同状态与动作的长期收益。
-
用 Advantage 判断动作相对当前策略预期的好坏。
-
用 Baseline 改善策略梯度估计的稳定性。
-
用 Policy Gradient 将优化信号传递到模型参数。
-
用 Importance Sampling 处理新旧策略之间的采样概率差异。
-
用 PPO、KL 正则化等机制控制策略更新。
-
用 Entropy 理解策略的随机性与探索。
-
用 Rollout 不断采集训练经验,并根据 On-policy 或 Off-policy 的算法设定使用这些数据。
所有概念最终都服务于同一个目标:
让智能体通过经验,将概率逐渐分配给能够带来更高预期累计回报的行为。
如果只记住这篇文章中的一个公式,那应该是:
如果只记住一个思想,那应该是:
优化决策时,除了看一个动作获得多少回报,还要看它相比当前策略的预期表现究竟好多少。
这个思想是理解 PPO、Actor-Critic、GAE,以及进一步学习 GRPO 等 LLM 强化学习算法的重要基础。
思考题:检验你是否真正理解了第一层
假设模型生成了三个回答,其结果如下。为了简化,假定给出的分数就是可以用于计算优势的动作价值或对应估计。
| 回答 | 动作价值估计 | 当前状态 Value |
|---|---|---|
| A | 0.8 | 0.9 |
| B | 0.6 | 0.4 |
| C | 0.9 | 0.9 |
请回答:
-
哪个回答的 Advantage 最大?
-
哪个回答的 Advantage 为负?
-
回答 A 的绝对分数高于回答 B,为什么策略梯度仍可能倾向于提高 B 的概率、降低 A 的概率?
-
如果训练只依据原始正向奖励增加回答概率,可能出现什么问题?
-
如果某个正优势动作的新旧策略概率比率已经达到 1.5,而 PPO 的裁剪范围为 (\epsilon=0.2),继续提高该动作概率,是否还能增加这个样本的 Clipped Objective?
如果你能够独立解释以上问题,而不只是机械地代入公式,那么就说明你已经理解了强化学习第一层最重要的优化逻辑。
下一层建议学习:Policy Gradient 的数学推导、REINFORCE、Actor-Critic、GAE,以及 PPO 的完整损失函数。 这些内容会进一步解释,为什么相同的基本原理能够衍生出不同的强化学习训练算法。