我们想最大化轨迹奖励的期望,所以对轨迹概率求导;
为了方便求导,用 ∇p=p∇logp\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今天天气很好。奖励 0.5今天天气很好但是我讨厌你。奖励 −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))紧密耦合。