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算法概览
PPO算法从入门到放弃-1探
https://jiangsanyin.github.io/2026/05/04/PPO算法从入门到放弃-1探/