news 2026/7/23 5:04:23

PPO算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PPO算法

我们想最大化轨迹奖励的期望,所以对轨迹概率求导;
为了方便求导,用 ∇p=p∇log⁡p\nabla p = p \nabla \log p∇p=p∇logp;
又因为轨迹概率是每一步动作概率和环境转移概率的连乘,而环境不依赖策略参数,所以最后只剩下所有动作对数概率的梯度之和。

$$R(\tau)$$代表的是一整条轨迹的奖励,$$\pi_{\theta}(a_t | s_t)$$却是针对单步的,用整条轨迹的奖励去评估单步的价值,是否合适?

毕竟,单条轨迹的奖励高,不代表轨迹中每一步的奖励都高。所以,需要在$$R(\tau)$$上做文章,我们可以通过各种方法来代替$$R(\tau)$$。

注意:这个梯度不是“来自某个损失函数”,而是直接从期望回报推导出来的最优更新方向;我们只是人为构造了一个 loss,使它的梯度等于这个表达式,从而可以用标准的反向传播来优化。

PPO的演变

一、累积折扣奖励 Gt

G_t 是从当前时刻开始,对未来奖励的“折扣加权和”


🔴 1. 公式

以及递推形式:


🔴 2. 每个符号含义

符号含义
rt第 t 步的即时奖励
Gt从 t 开始的“未来总奖励”
γ折扣因子(0~1)
T轨迹长度

🧠 关键理解

👉 Gt不是“整条轨迹奖励”
👉 而是:“从当前时刻 t 看未来能拿多少”

越靠后的 token:离结果越近责任越大

👉 所以:G 越大

二、动作价值函数

单次采样(G)有噪声

✅ 所以必须:

Q(s,a)=E[Gt],计算生成这个动作带来的平均奖励

三、优势函数

它表示:

在状态 st​ 下,动作 at​ 比“这个状态下的平均水平”好多少。

展开式

TD_error定义:

它表示:

当前状态价值的“目标值”减去“当前估计值”

其中:

  • Vπ(st):你原来认为当前状态值多少钱

  • rt+γVπ(st+1):走了一步后得到的“更新目标”

所以:

  • 如果 δt>0\,说明这一步比原来预期更好

  • 如果 δt<0\,说明这一步比原来预期更差

Advantge与TD error的区别:

TD error:是一次具体转移上的量。它依赖这一次真实采样到的 st+1​,所以带随机性。

Advantage:是把这种随机性平均掉后的“真实动作优势”。

所以:

  • δt​:一次样本上的瞬时优势信号

  • At​:理论上的平均优势

在实际算法里,尤其 PPO 训练中,我们通常用采样得到的 δt或 GAE 来近似 At。

四、GAE

最朴素的办法:直接用总回报

最自然的想法是:

At≈Gt−V(st)

其中:

  • Gt​:从第 ttt 步开始的真实累积折扣奖励

  • V(st):当前状态的平均价值估计

PPO 里到底需要什么

在策略梯度 / PPO 里,更新方向大致长这样:∇log⁡πθ(at∣st)⋅At

这里最关键的量就是: At

也就是Advantage(优势)

它回答的问题是:

在状态 st​ 下,这次选的动作 at​,到底比“平均水平”好多少?

如果:

  • At>0:说明这个动作比平均更好,应该提高它的概率

  • At<0:说明这个动作比平均更差,应该降低它的概率

所以,PPO 真正需要的是一个靠谱的 Advantage 估计


2. 最朴素的办法:直接用总回报

最自然的想法是:

At≈Gt−V(st)

其中:

  • Gt:从第 t 步开始的真实累积折扣奖励

  • V(st):当前状态的平均价值估计

这个做法的直觉是:

实际拿到的结果 Gt​,减去这个状态本来平均能拿到的结果 V(st),就得到“这次动作到底超常还是失常”。

这个想法本身没问题,而且理论上是对的。


2.1 但为什么它不够好?

因为:

Gt

一次采样出来的真实结果,随机性很强,方差很大。

也就是说,同样的状态、同样的动作,你多跑几次,后面轨迹不一样,Gt可能差很多。


2.2 例子:一句生成的后半段随机性很大

假设 LLM 当前状态是:

今天天气

当前动作是:

很好

这个动作本身可能没问题,但后面的生成是随机的。

三次采样可能得到:

  1. 今天天气很好,适合出去散步。奖励 +1

  2. 今天天气很好。奖励 0.5

  3. 今天天气很好但是我讨厌你。奖励 −1

那么同一个动作"很好",三次对应的 Gt可能分别是:

1,0.5,−1

波动特别大。

这就意味着:

你用 Gt−V(st)当优势时,训练信号会非常抖。


2.3 这会带来什么问题?

会导致:

  • 梯度噪声很大

  • 训练不稳定

  • 需要很多样本才能平均掉这种噪声

所以:

直接用 Monte Carlo 回报 Gt虽然理论上接近真实,但方差太大。


3. 那干脆只看一步,行不行?

为了降低方差,我们可以只看一步,定义:

δt=rt+γV(st+1)−V(st)

这就是TD error(时序差分误差)


3.1 它是什么意思?

它的意思是:

当前状态价值 V(st)估计得准不准?
实际走了一步之后,观察到“即时奖励 + 下一状态价值”,再和当前状态价值作比较。

如果:

rt+γV(st+1)>V(st)

说明:

这一步比原来预期更好

如果:

rt+γV(st+1)<V(st)

说明:

这一步比原来预期更差


3.2 为什么 TD 的方差更小?

因为它只看:

  • 当前一步的奖励 rt

  • 下一状态的价值 V(st+1)

它不需要一直等到整条轨迹结束,所以随机性更小。

这意味着:

TD 更稳定、更低方差。


3.3 但为什么 TD 也不够?

因为它只看了一步,信息太短视了。

它的问题是:

可能某个动作的好坏,不会立刻体现在下一步,而是要过几步才显现出来。


3.4 例子:短期没奖励,长期才出效果

还是 LLM 例子。

当前状态:

请一步步回答:1+1=

如果模型当前动作生成:

2

这个动作其实非常关键,是对的。

但在很多 RLHF / 序列任务设定里:

  • 中间步骤的即时奖励 rtr_trt​ 可能是 0

  • 直到整句话结束才给总奖励

于是这一步的 TD error 可能近似是:

δt=0+γV(st+1)−V(st)

它只看一步,不一定能完整反映这一步动作对最终成功的贡献。

所以:

TD 低方差,但偏差更大,因为它太依赖价值函数 V的估计,而且只看一步。


4. 现在核心矛盾出现了

我们有两个候选:

方法 A:Monte Carlo

At≈Gt−V(st)

特点:

  • 长期信息完整

  • 偏差小

  • 方差大

方法 B:一步 TD

At≈δt

特点:

  • 方差小

  • 更稳定

  • 偏差大,只看一步


5. 所以 GAE 的目标是什么?

GAE 的目标就是:

在“低偏差”和“低方差”之间做折中。

你可以把它理解成:

不要像 Monte Carlo 那样一直看到结尾,也不要像一步 TD 那样只看一步;
而是看多步,但越远的步数权重越小。

这就是 GAE 的直觉来源。

一般的 k 步 advantage

于是得到:

At(k)=δt+γδt+1+γ2δt+2+⋯+γk−1δt+k−1

这表示:

看未来 k 步的 TD error 累积起来,作为 advantage 估计

这样比一步 TD 看得更远,但又没到完整 Monte Carlo 那么极端。


7. 但问题又来了:k 到底取多少?

如果:

  • k=1:就是一步 TD,偏差大

  • k 很大直到终点:接近 Monte Carlo,方差大

那么最自然的想法就是:

不固定只取某一个 k,而是把所有 k-step advantage 混合起来。

这就是 GAE 的核心思想。


8. GAE 的定义

GAE 最终写成:

A^tGAE(γ,λ)=δt+γλδt+1+γ2λ2δt+2+⋯

也就是:

A^tGAE=∑l=0∞(γλ)lδt+l


9. 这里为什么多了一个 λ?

γ 本来就是 RL 里的折扣因子,表示“未来奖励本来就应该衰减”。

而 λ 是 GAE 额外引入的一个参数,用来控制:

你愿意把多远的未来 TD error 纳入 advantage。

它的作用是“再加一层衰减”。

所以:

  • 越近的 TD error 权重大

  • 越远的 TD error 权重小


9.1 两个极端情况

当 λ=0 :A^tGAE=δt

这就退化成一步 TD。

当 λ=1 :A^tGAE=δt+γδt+1+γ2δt+2+⋯

这会接近 Monte Carlo 风格的 advantage: Gt−V(st)

所以:

GAE 用 λ 把 TD 和 Monte Carlo 连成了一条连续光谱。

两种PPO算法

变体名称核心动机核心思想
PPO-Clipped避免复杂的约束优化,通过简单的裁剪操作直接限制策略更新的变化比例。在目标函数中直接对重要性采样比率进行裁剪,防止其偏离1太远,从而间接约束策略更新步长。
PPO-KL Penalty更直接地继承TRPO的约束思想,但将硬约束转化为软惩罚项,使问题可被一阶优化器(如Adam)轻松求解。在目标函数中增加一个KL散度惩罚项,当新旧策略差异过大时,惩罚会增大,从而抑制过大的更新。

问题总结

一、如果策略更新过于激进,r_t(θ) 可能会远大于1(例如 > 1+ε),导致策略概率分布发生剧变,与旧策略差异过大,这可能损害学习的稳定性。这个风险可能会带来什么后果。

策略更新过于激进导致重采样比例r_t(θ)远大于1+ε,其直接后果是策略分布发生剧变,进而引发策略崩溃或性能灾难性下降。这种现象的根本原因在于,策略梯度方法依赖于在当前策略分布下采集的样本来估计梯度,一旦新策略与旧策略的差异过大,这些样本对新策略而言就成为了“离群样本”或“过时数据”,基于它们计算的梯度估计将产生巨大偏差,无法有效指导策略向提升期望回报的方向更新。具体而言,这种偏差会破坏策略梯度定理成立的前提假设,导致学习过程在参数空间中发生剧烈振荡,无法收敛到一个稳定且高性能的策略。

二、为什么不对差动作进行强惩罚

PPO-clip算法设计的核心目标是稳定训练,而非单纯地、无限制地优化即时回报。不对负优势(A_t < 0)动作施加“强惩罚”(即允许r_t(θ)无限制地变小),是基于对策略优化过程中探索-利用权衡训练数据有效性的深度考量。

三、为什么用R_t 作为学习目标

四、policy loss和value loss如何得到?

policy loss 来自策略梯度(优化动作概率),Value loss 来自回报回归(拟合未来收益);两者通过 advantage(R_t - V(s_t))紧密耦合。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 3:18:33

LMArena发布全球大模型性能榜单:阿里超越GPT5.4,豆包月活破亿

3月20日&#xff0c;国际权威第三方测评机构LMArena发布最新一期全球大模型性能榜单&#xff0c;阿里巴巴千问Qwen3.5-Max-Preview以1464分登顶中国最强大模型&#xff0c;并在全球总榜中位列第六&#xff0c;超越GPT5.4、Claude4.5等海外顶级模型。此次排名中&#xff0c;中国…

作者头像 李华
网站建设 2026/7/22 4:01:23

搞懂 Redis 与数据库的数据一致性,看这一篇就够了

在日常开发中&#xff0c;只要系统并发量稍微上来一点&#xff0c;我们都会不自觉地想到引入 Redis 来做缓存。这本来是件好事&#xff0c;读写速度直接起飞&#xff0c;数据库的压力也降下来了。但是&#xff0c;引入缓存就像是一把双刃剑&#xff0c;它带来了一个让无数开发者…

作者头像 李华
网站建设 2026/7/22 4:35:06

mysql 回表、索引覆盖、索引下推的庖丁解牛

这三个概念常被误解为“晦涩的底层术语”或“只有 DBA 才需要关心的细节”。 但本质上&#xff0c;它们是MySQL 优化器在“减少磁盘 I/O"和“减少 CPU 计算”这两大核心目标上&#xff0c;进化出的三种生存智慧。 回表 (Table Lookup)&#xff1a;是代价&#xff0c;是不得…

作者头像 李华
网站建设 2026/7/22 4:22:05

三相不平衡电网条件下PWM整流电路仿真模型与双闭环控制策略研究

三相不平衡电网条件下的三相PWM整流电路仿真模型。 抑制负序电流和直流电压&#xff0c;双闭环控制。电网电压不对称的时候玩PWM整流器&#xff0c;就像在颠簸路面开手动挡车——得同时踩离合控转速又要稳住方向盘。这次咱们用MATLAB搭个仿真模型&#xff0c;看看怎么用双闭环搞…

作者头像 李华
网站建设 2026/7/22 4:31:05

15 openclaw会话管理:处理用户状态与持久化数据

背景/痛点在构建高性能Web应用时&#xff0c;会话管理是绕不开的核心环节。许多开发者在实现会话功能时&#xff0c;常面临以下痛点&#xff1a;会话数据丢失&#xff1a;服务器重启或进程崩溃导致内存中的会话数据消失性能瓶颈&#xff1a;频繁的会话读写操作成为系统性能瓶颈…

作者头像 李华