PPO算法

PPO算法 我们想最大化轨迹奖励的期望所以对轨迹概率求导为了方便求导用 ∇pp∇log⁡p\nabla p p \nabla \log p∇pp∇logp又因为轨迹概率是每一步动作概率和环境转移概率的连乘而环境不依赖策略参数所以最后只剩下所有动作对数概率的梯度之和。$$R(\tau)$$代表的是一整条轨迹的奖励$$\pi_{\theta}(a_t | s_t)$$却是针对单步的用整条轨迹的奖励去评估单步的价值是否合适毕竟单条轨迹的奖励高不代表轨迹中每一步的奖励都高。所以需要在$$R(\tau)$$上做文章我们可以通过各种方法来代替$$R(\tau)$$。注意这个梯度不是“来自某个损失函数”而是直接从期望回报推导出来的最优更新方向我们只是人为构造了一个 loss使它的梯度等于这个表达式从而可以用标准的反向传播来优化。PPO的演变一、累积折扣奖励 GtG_t 是从当前时刻开始对未来奖励的“折扣加权和” 1. 公式以及递推形式 2. 每个符号含义符号含义rt第 t 步的即时奖励Gt从 t 开始的“未来总奖励”γ折扣因子0~1T轨迹长度 关键理解 Gt不是“整条轨迹奖励” 而是“从当前时刻 t 看未来能拿多少”越靠后的 token离结果越近责任越大 所以G 越大二、动作价值函数单次采样G有噪声✅ 所以必须Q(s,a)E[Gt]计算生成这个动作带来的平均奖励三、优势函数它表示在状态 st​ 下动作 at​ 比“这个状态下的平均水平”好多少。展开式TD_error定义它表示当前状态价值的“目标值”减去“当前估计值”其中Vπ(st)你原来认为当前状态值多少钱rtγVπ(st1)走了一步后得到的“更新目标”所以如果 δt0\说明这一步比原来预期更好如果 δt0\说明这一步比原来预期更差Advantge与TD error的区别TD error是一次具体转移上的量。它依赖这一次真实采样到的 st1​所以带随机性。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​到底比“平均水平”好多少如果At0说明这个动作比平均更好应该提高它的概率At0说明这个动作比平均更差应该降低它的概率所以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. 那干脆只看一步行不行为了降低方差我们可以只看一步定义δtrtγV(st1)−V(st)这就是TD error时序差分误差。3.1 它是什么意思它的意思是当前状态价值 V(st)估计得准不准实际走了一步之后观察到“即时奖励 下一状态价值”再和当前状态价值作比较。如果rtγV(st1)V(st)说明这一步比原来预期更好如果rtγV(st1)V(st)说明这一步比原来预期更差3.2 为什么 TD 的方差更小因为它只看当前一步的奖励 rt下一状态的价值 V(st1)它不需要一直等到整条轨迹结束所以随机性更小。这意味着TD 更稳定、更低方差。3.3 但为什么 TD 也不够因为它只看了一步信息太短视了。它的问题是可能某个动作的好坏不会立刻体现在下一步而是要过几步才显现出来。3.4 例子短期没奖励长期才出效果还是 LLM 例子。当前状态请一步步回答11如果模型当前动作生成2这个动作其实非常关键是对的。但在很多 RLHF / 序列任务设定里中间步骤的即时奖励 rtr_trt​ 可能是 0直到整句话结束才给总奖励于是这一步的 TD error 可能近似是δt0γV(st1)−V(st)它只看一步不一定能完整反映这一步动作对最终成功的贡献。所以TD 低方差但偏差更大因为它太依赖价值函数 V的估计而且只看一步。4. 现在核心矛盾出现了我们有两个候选方法 AMonte CarloAt≈Gt−V(st)特点长期信息完整偏差小方差大方法 B一步 TDAt≈δt特点方差小更稳定偏差大只看一步5. 所以 GAE 的目标是什么GAE 的目标就是在“低偏差”和“低方差”之间做折中。你可以把它理解成不要像 Monte Carlo 那样一直看到结尾也不要像一步 TD 那样只看一步而是看多步但越远的步数权重越小。这就是 GAE 的直觉来源。一般的 k 步 advantage于是得到At(k)δtγδt1γ2δt2⋯γk−1δtk−1这表示看未来 k 步的 TD error 累积起来作为 advantage 估计这样比一步 TD 看得更远但又没到完整 Monte Carlo 那么极端。7. 但问题又来了k 到底取多少如果k1就是一步 TD偏差大k 很大直到终点接近 Monte Carlo方差大那么最自然的想法就是不固定只取某一个 k而是把所有 k-step advantage 混合起来。这就是 GAE 的核心思想。8. GAE 的定义GAE 最终写成A^tGAE(γ,λ)δtγλδt1γ2λ2δt2⋯也就是A^tGAE∑l0∞(γλ)lδtl9. 这里为什么多了一个 λγ 本来就是 RL 里的折扣因子表示“未来奖励本来就应该衰减”。而 λ 是 GAE 额外引入的一个参数用来控制你愿意把多远的未来 TD error 纳入 advantage。它的作用是“再加一层衰减”。所以越近的 TD error 权重大越远的 TD error 权重小9.1 两个极端情况当 λ0 A^tGAEδt这就退化成一步 TD。当 λ1 A^tGAEδtγδt1γ2δt2⋯这会接近 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 来自回报回归拟合未来收益两者通过 advantageR_t - V(s_t)紧密耦合。