PPO算法从入门到放弃-1探

最近自己断断续续学习了PPO算法,其在大模型的后训练时用到。其中内容挺多,学习过程中目前是通过手写笔记记录的,目前是第1次探索学习其大概,后续想通过更多几次更深入学习其实现与某些具体细节,有收获再记录下来。

一、一些概念

ActionSpace 动作空间,表示可选择的动作,比如{left,right,up,down}

Policy 策略函数,输入State(简写为s),输出Action(简写为a)的概率,用符号 \(\pi\) 表示,策略函数 \(\pi\) 一般是通过神经网络来描述。如 \(\pi\) {a|s}=0.3,表示在状态s下执行动作a的概率是0.3。

Trajectory 轨迹,用τ表示,表示一连串状态和动作的序列。也称为Episode,Rollout。表示为{s0,a0,s1,a1,..}

Return 回报,从当前时间点到游戏(比如魂斗罗、越级玛丽)或整个事件结束的Reward的总和

二、PPO算法大致过程

PPO(Proximal Policy Optimization)是一种同策略(On-Policy)算法,其核心逻辑是在保证策略更新平稳的前提下,通过不断迭代提升模型的回报。其运行过程主要分为以下四个阶段的循环:

1. 采样阶段 (Data Collection)

  • 交互采样:使用当前的策略神经网络 \(\pi_{\theta_{old}}\)(即旧策略)与环境进行交互。
  • 记录轨迹:收集并记录一系列轨迹数据 \(\tau\),包括状态 \(s\)、动作 \(a\)、奖励 \(r\) 以及对应的动作概率 \(P_{\theta'}(a|s)\)

2. 评价与优势估计 (Advantage Estimation)

  • 计算回报:基于采集到的奖励,计算每个时间步的长期累积回报(Return)。
  • 估计优势:利用价值网络计算优势函数 \(A^{GAE}\)
    • \(A > 0\):表示当前动作比平均表现好,模型后续会增加该动作的概率。
    • \(A < 0\):表示当前动作表现较差,模型后续会抑制该动作的概率。

3. 策略优化与裁剪 (Optimization with Clipping)

这是 PPO 最核心的步骤,通过梯度上升(Gradient Ascent)更新参数 \(\theta\)

  • 计算概率比率 (Ratio):计算新策略与旧策略的概率比值 \(r_t(\theta) = \frac{P_{\theta}(a|s)}{P_{\theta'}(a|s)}\)
  • 引入裁剪机制 (Clipping):将比率限制在 \([1-\epsilon, 1+\epsilon]\) 之间。
    • 目的:防止新旧策略之间散度过大导致模型学习崩溃(类似于防止学习率过大导致的震荡)。
    • 逻辑:通过 \(\min\) 函数实现“悲观限制”,确保策略在安全的信任区域内小步改进。

4. 模型更新与更迭 (Model Update)

  • 参数同步:在完成多轮 Epoch 的参数微调后,当前的 \(\pi_{\theta}\) 成为新的参考基准。
  • 清空重采:清空已过期的旧轨迹数据,使用更新后的策略重新进入环境采集数据,开始下一轮迭代。

总结: PPO 算法通过在更新过程中引入裁剪机制(Clipping)来限制新旧策略的差异,确保模型在与环境互动的循环中能够以“小步快跑”的方式稳健地最大化累积回报值。

三、PPO算法概览

image-20260504220346785
image-20260504220509736
image-20260504220526347
image-20260504220539848
image-20260504220603344

PPO算法从入门到放弃-1探
https://jiangsanyin.github.io/2026/05/04/PPO算法从入门到放弃-1探/
作者
sanyinjiang
发布于
2026年5月4日
许可协议