PPO的理解1——概述
文章目录一、前言二、PPO论文信息代码库推荐学习路径由浅入深三、核心内容总结四、跑PPO问题1回答1这是跑完了吗训练效果怎么样跑完后怎么看结果建议五、PPO论文摘要解释第一句第二句通俗理解一句话总结回到原文1 引言问题Deep Q-learning、Vanilla Policy Gradient、Trust Region / Natural Policy Gradient1. Deep Q-learning [Mni15] — 深度Q学习DQN2. Vanilla Policy Gradient [Mni16] — 原始策略梯度A3C / A2C3. Trust Region / Natural Policy Gradient [Sch15b] — 信赖域/自然策略梯度TRPO为什么 PPO 被提出一句话总结通俗解释1. Deep Q-learningDQN— 打分表法2. Vanilla Policy GradientA3C— 试错了改法3. TRPO信赖域/自然策略梯度— 小心翼翼法为什么要搞 PPO一句话总结回到原文一、前言仅供参考未经实验验证。二、PPO论文信息论文标题Proximal Policy Optimization Algorithms 近端策略优化算法作者John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov机构OpenAI发表时间2017 年 7 月论文地址 https://arxiv.org/pdf/1707.06347GitHub 地址 论文本身未附带独立 GitHub 仓库官方实现收录于 OpenAI Baselineshttps://github.com/openai/baselinesOpenAI的PPO教程https://spinningup.openai.com/en/latest/algorithms/ppo.html#proximal-policy-optimization代码库推荐学习路径由浅入深阶段推荐仓库为什么选它第一阶段CleanRL(vwxyzjn/cleanrl)单文件约 300 行CartPole 无需 GPU5 分钟跑通。代码结构清晰注释到位最适合第一次理解 PPO 完整训练流程。第二阶段ppo-implementation-details这是 CleanRL 作者写的“37 个实现细节”配套代码。在 CleanRL 基础上逐条还原官方实现里的工程 trickGAE、归一化、正交初始化等。想复现论文结果必须学这个。第三阶段pytorch-a2c-ppo-acktr-gail(ikostrikov)研究界广泛使用的稳定实现代码模块化程度更高适合想改算法、发论文、做研究时参考。第四阶段OpenAI Baselines官方原始实现但代码复杂、依赖旧版 TensorFlow。除非你要做严格的历史对比实验否则不建议作为学习入口。想快速理解 PPO 原理→CleanRLcleanrl/ppo.py想复现论文、理解工程细节→ppo-implementation-details想做研究、改算法→pytorch-a2c-ppo-acktr-gailOpenAI Baselines属于考古级参考学习价值不如上面三个三、核心内容总结1. 研究背景与动机传统策略梯度方法如 Vanilla Policy Gradient / REINFORCE对步长step size非常敏感步长太小收敛慢步长太大策略崩溃后难以恢复。TRPOTrust Region Policy Optimization通过约束 KL 散度解决了稳定性问题但实现复杂、计算开销大且与某些网络架构如参数共享、RNN不兼容。2. 核心贡献PPO 算法论文提出了两种更简单高效的替代方案PPO-Clip主流版本在目标函数中引入clipped surrogate objective直接裁剪新旧策略的概率比率限制每次更新的幅度无需计算 KL 散度或二阶优化。PPO-KL自适应版本在目标函数中加入自适应 KL 惩罚系数根据实际 KL 散度动态调整惩罚强度效果接近 TRPO 但实现更简单。3. 核心公式PPO-ClipL C L I P ( θ ) E ^ t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 ϵ ) A ^ t ) ] L^{CLIP}(\theta) \hat{\mathbb{E}}_t \left[ \min\left( r_t(\theta)\hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1\epsilon)\hat{A}_t \right) \right]LCLIP(θ)E^t[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1ϵ)A^t)]其中r t ( θ ) π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta) \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}rt(θ)πθold(at∣st)πθ(at∣st)是策略比率A ^ t \hat{A}_tA^t是优势函数估计使用 GAEϵ \epsilonϵ是超参数通常 0.1 或 0.2。4. 实验与结果在MuJoCo 连续控制、Atari 离散控制和Roboschool 3D 控制上进行了全面评测。PPO 在样本效率、最终性能和训练稳定性上均优于或持平于 A2C、A3C、TRPO 等基线方法。实现简单、通用性强成为后续 RLHF如 InstructGPT、ChatGPT中 PPO 阶段的算法基础。5. 影响PPO 已成为强化学习领域最广泛使用的策略优化算法因其在稳定性、实现难度和性能之间取得了最佳平衡被 OpenAI、DeepMind 等大量研究者和工程团队采用。四、跑PPO# 1. 创建conda环境conda create-n cleanrl python3.10.14-y conda activate cleanrl# 2. 安装 PyTorch (CUDA 12.1)pip install torch2.2.2torchvision0.17.2--index-url https://download.pytorch.org/whl/cu121# 3. 克隆并安装 CleanRLgit clone https://github.com/vwxyzjn/cleanrl.gitcd cleanrl pip install-r requirements/requirements.txt# 4. 如果要跑 Ataripip install-r requirements/requirements-atari.txt# 5.验证 CartPole无需 GPU1 分钟跑完python cleanrl/ppo.py--env-idCartPole-v1--total-timesteps50000问题1global_step49408, episodic_return[428.]SPS: 2763这是跑完CartPole-v1了吗啥意思回答1这三个是 CleanRL 的实时训练日志意思是指标含义global_step49408智能体与环境交互的总步数接近你设的--total-timesteps50000说明快跑完了episodic_return[428.]最近一个回合episode的累计奖励。CartPole 每存活 1 步得 1 分所以这一回合坚持了428 步后失败了SPS: 2763Steps Per Second每秒处理 2763 步说明你的 CPU/GPU 运行效率很高这是跑完了吗还没完全结束但只剩最后几百步了。默认total-timesteps50000现在到了 49408再过几秒就会结束并保存模型。训练效果怎么样CartPole-v1 的满分是 500 分环境内置max_episode_steps500。你的智能体目前只能坚持 428 步说明还没完全学会最优策略应该能稳定拿到 500 分但已经不错了从随机策略约 20~30 分进步到 428 分说明 PPO 正在有效学习跑完后怎么看结果训练结束后在runs/目录会生成 TensorBoard 日志运行tensorboard--logdirruns然后在浏览器打开http://localhost:6006重点看两个曲线charts/episodic_return回合奖励理想情况下应该逐渐上升到 500 并稳定losses/ppo_loss策略损失应该平稳下降建议如果想看满分效果把总步数加大再跑一次python cleanrl/ppo.py --env-id CartPole-v1 --total-timesteps200000一般 10 万步左右就能稳定 500 分。如果想看训练好的智能体实际表现加--capture_video参数会在videos/目录生成 MP4你可以看到小车怎么平衡杆子的。如果 5 万步后奖励还是 428 左右可能是种子问题换--seed 2再跑一次PPO 对随机种子敏感。五、PPO论文Proximal Policy Optimization Algorithms近端策略优化算法摘要We propose a new family of policy gradient methods for reinforcement learning, which alternate between sampling data through interaction with the environment, and optimizing a “surrogate” objective function using stochastic gradient ascent. Whereas standard policy gradient methods perform one gradient update per data sample, we propose a novel objective function that enables multiple epochs of minibatch updates.我们提出了一类新的强化学习策略梯度方法。这类方法在与环境交互采样数据和利用随机梯度上升优化一个“替代”目标函数之间交替进行。标准的策略梯度方法对每个数据样本只做一次梯度更新而我们提出了一种新颖的目标函数使得我们可以对数据进行多个 epoch 的小批量更新。解释这段话是核心是在说怎么让强化学习更省数据、训练更稳定。逐句拆解第一句“We propose a new family of policy gradient methods… which alternate betweensampling datathrough interaction with the environment, andoptimizing a ‘surrogate’ objective functionusing stochastic gradient ascent.”意思PPO 是一种策略梯度方法训练过程在两个步骤之间循环交替采样Sampling让智能体去环境里玩收集一批经验数据状态、动作、奖励。优化Optimizing不直接优化原始目标而是优化一个**“替代目标函数”surrogate objective**——也就是用一个近似/代理的数学公式来更新策略。第二句“Whereas standard policy gradient methods performone gradient update per data sample, we propose a novel objective function that enablesmultiple epochs of minibatch updates.”意思标准策略梯度比如 REINFORCE、 vanilla PG数据很一次性——智能体在环境里采了一个数据算一次梯度更新然后这条数据就扔了不能再用了。PPO 的做法采一批数据比如 2048 步的经验然后可以像深度学习训练一样把这批数据切成小批量minibatch反复跑多个 epoch来更新策略。通俗理解标准策略梯度PPO数据用法做一道题对一道答案然后扔掉做一套模拟卷反复研究、修改、订正更新次数每条数据只用 1 次同一批数据可以用 4~10 个 epoch风险数据利用率低训练慢反复用旧数据策略可能变太多数据过期PPO 怎么解决数据过期的问题关键就在那个“surrogate”替代目标函数——PPO 加了一个裁剪clip机制限制每次策略更新的幅度。即使你把同一套卷子反复做也不允许你一次性把答案改得面目全非。这样旧数据仍然可信训练既稳定又省数据。一句话总结PPO 的本质就是采一批数据然后像训练神经网络一样反复利用这批数据做多个 epoch 的小批量更新同时用一个带安全护栏的替代目标函数防止策略更新过猛。回到原文The new methods, which we call proximal policy optimization (PPO), have some of the benefits of trust region policy optimization (TRPO), but they are much simpler to implement, more general, and have better sample complexity (empirically). Our experiments test PPO on a collection of benchmark tasks, including simulated robotic locomotion and Atari game playing, and we show that PPO outperforms other online policy gradient methods, and overall strikes a favorable balance between sample complexity, simplicity, and wall-time.我们称之为近端策略优化PPO的新方法具有信赖域策略优化TRPO的一些优点但它们实现起来更简单、更通用并且具有更好的样本复杂度经验上。我们的实验在一系列基准任务上测试了PPO包括模拟机器人运动和Atari游戏我们表明PPO优于其他在线策略梯度方法并且在样本复杂度、简单性和实际运行时间之间取得了良好的平衡。1 引言In recent years, several different approaches have been proposed for reinforcement learning with neural network function approximators. The leading contenders are deep Q-learning [Mni15], “vanilla” policy gradient methods [Mni16], and trust region / natural policy gradient methods [Sch15b]. However, there is room for improvement in developing a method that is scalable (to large models and parallel implementations), data efficient, and robust (i.e., successful on a variety of problems without hyperparameter tuning).近年来人们提出了几种不同的方法用于使用神经网络函数逼近器的强化学习。主要的竞争者包括深度 Q 学习 [Mni15]、“vanilla”策略梯度方法 [Mni16] 以及信任区域/自然策略梯度方法 [Sch15b]。然而在开发一种可扩展适用于大型模型和并行实现、数据高效且稳健即在各种问题上成功而无需超参数调整的方法方面仍有改进的空间。问题Deep Q-learning、Vanilla Policy Gradient、Trust Region / Natural Policy Gradient这段文字对比了当时2017年前后强化学习领域的三大主流路线。下面逐一解释1. Deep Q-learning [Mni15] — 深度Q学习DQN代表论文Mnih et al., 2015,“Human-level control through deep reinforcement learning”核心思想用深度神经网络来近似Q函数即状态-动作值函数估计在当前状态下采取某个动作未来能获得多少累积回报。选择动作时遵循ε-贪婪策略大多数时候选Q值最高的动作偶尔随机探索。属于Value-based方法它学的是值而不是直接输出动作概率。特点首次证明了深度神经网络 强化学习可以在 Atari 游戏上达到人类水平。只能处理离散动作空间如游戏的上下左右对连续控制问题如机器人关节角度不太友好。存在Q值高估overestimation问题后续有 Double DQN、Dueling DQN 等改进。2. “Vanilla” Policy Gradient [Mni16] — 原始策略梯度A3C / A2C代表论文Mnih et al., 2016,“Asynchronous Methods for Deep Reinforcement Learning”核心思想直接用一个神经网络π(a|s)输出动作的概率分布这叫做策略网络Policy Network。通过梯度上升来优化策略如果某个动作带来了高回报就增大它的概率反之则减小。基本公式就是REINFORCE算法及其变体A3C、A2C。特点属于Policy-based方法天然支持连续动作空间。可以和Actor-Critic架构结合一个网络输出动作Actor一个网络评估好坏Critic降低方差。A3C 用异步多线程并行采样不需要经验回放池。缺点数据效率低样本用完就扔训练不稳定梯度步长稍微大一点就可能崩溃。3. Trust Region / Natural Policy Gradient [Sch15b] — 信赖域/自然策略梯度TRPO代表论文Schulman et al., 2015,“Trust Region Policy Optimization”核心思想原始策略梯度的问题在于更新步长如果太大新策略可能变得极差甚至无法恢复。TRPO 引入信赖域约束Trust Region每次更新时要求新策略和旧策略的KL散度不能相差太大确保策略是渐进式改进。它用到了自然梯度Natural Gradient的思想考虑了参数空间的几何结构而非普通梯度。特点训练非常稳定在机器人控制等连续任务上表现很好。但实现复杂需要计算二阶导数Fisher信息矩阵计算开销大难以扩展到大规模网络和并行架构。超参数如 KL 惩罚系数调起来也比较麻烦。为什么 PPO 被提出这段文字最后说“there is room for improvement in developing a method that isscalable,data efficient, androbust”——意思是方法可扩展性数据效率鲁棒性DQN较好经验回放高样本复用一般对超参数敏感Vanilla PG好A3C异步低单样本更新差步长敏感TRPO差二阶优化复杂较高好信赖域保护PPO 的目标就是取各家之长像 TRPO 一样稳定避免策略崩溃但不用复杂的二阶优化。像 Vanilla PG 一样简单、可扩展支持大规模并行但数据效率更高。通过Clipped Surrogate Objective裁剪替代目标这种小技巧用一阶优化就实现了近似信赖域的效果。一句话总结DQN学值来选动作Vanilla PG直接学策略但容易崩TRPO用复杂数学来防崩但太慢PPO用简单的裁剪技巧实现了既稳定又好扩展的平衡。通俗解释好我用最接地气的方式给你讲。1. Deep Q-learningDQN— 打分表法想象你在玩一个游戏你手里有一张打分表上面写着“当前这个画面按’上’能得多少分按’下’能得多少分按’跳’能得多少分…”你每次看屏幕就查这张表选分数最高的那个动作。DQN 就是用神经网络来学这张打分表。它不会直接告诉你该跳还是该跑而是告诉你每个动作值多少钱。优点数据可以反复用像复习错题本学得快。缺点只能处理有限的选项比如游戏手柄就那几个键遇到转方向盘转多少度这种连续问题就懵了。2. Vanilla Policy GradientA3C— 试错了改法这次你不查表了你直接有一个本能反应手册看到什么画面就本能地做出某个动作。怎么训练这个本能呢你蒙着眼睛随机做一堆动作做完后回头看这次得了高分那刚才做的那些动作概率通通加大得了低分那些动作的概率通通减小这就是策略梯度的核心用结果好坏来直接调整行为概率。优点什么动作都能学连续的控制比如机器人走路也能搞定。缺点太莽了。每次改完就扔掉数据浪费而且步子迈大了策略直接崩掉怎么调都救不回来。3. TRPO信赖域/自然策略梯度— 小心翼翼法刚才那个试错了改太莽TRPO 说“每次改策略的时候新策略和旧策略不能差太远”就像你学骑自行车莽夫版今天突然把坐姿、握把方式、蹬踏节奏全部改掉 → 摔死。TRPO 版每次只微调一点点确保你还是在会骑的安全范围内。它用很复杂的数学KL散度、Fisher信息矩阵来约束这个改动幅度。优点非常稳不会突然崩掉。缺点数学太复杂算起来慢很难用到大型网络和并行训练上。为什么要搞 PPO上面三个各有毛病方法像什么毛病DQN查表打分选项太多就查不过来Vanilla PG蒙眼试错容易摔死还浪费经验TRPO小心翼翼地改算得太慢没法大规模用PPO 的作者说“我想要一个既像 TRPO 一样稳又像 Vanilla PG 一样简单好扩展的方法。”于是 PPO 想了个聪明的办法不用复杂的数学约束而是直接**“把改动幅度剪一刀”**——改太多了不行剪掉。这样既简单又达到了不要改太猛的效果。一句话总结DQN是查表选分高的Vanilla PG是蒙眼试错好了就加概率TRPO是小心翼翼用复杂数学防摔PPO是简单粗暴地剪一刀既防摔又跑得快。回到原文Q-learning (with function approximation) fails on many simple problems1 and is poorly understood, vanilla policy gradient methods have poor data effiency and robustness; and trust region policy optimization (TRPO) is relatively complicated, and is not compatible with architectures that include noise (such as dropout) or parameter sharing (between the policy and value function, or with auxiliary tasks).Q学习带有函数逼近在许多简单问题上都会失败1并且人们对它的理解不足原始策略梯度方法的数据效率和鲁棒性较差而信任区域策略优化TRPO相对复杂并且与包含噪声例如dropout或参数共享在策略和价值函数之间或与辅助任务之间的架构不兼容。This paper seeks to improve the current state of affairs by introducing an algorithm that attains the data efficiency and reliable performance of TRPO, while using only first-order optimization. We propose a novel objective with clipped probability ratios, which forms a pessimistic estimate (i.e., lower bound) of the performance of the policy.本文旨在通过引入一种算法来改进当前状况该算法实现了 TRPO 的数据效率和可靠性能同时仅使用一阶优化。我们提出了一个具有裁剪概率比的新目标函数它构成了策略性能的悲观估计即下界。To optimize policies, we alternate between sampling data from the policy and performing several epochs of optimization on the sampled data.为了优化策略我们在从策略中抽样数据和对抽样数据执行几个优化周期之间交替进行。Our experiments compare the performance of various different versions of the surrogate objective, and find that the version with the clipped probability ratios performs best. We also compare PPO to several previous algorithms from the literature. On continuous control tasks, it performs better than the algorithms we compare against.我们的实验比较了代理目标函数的不同版本发现带有裁剪概率比的版本表现最佳。我们还将 PPO 与文献中的几种先前算法进行了比较。在连续控制任务上其性能优于我们进行比较的算法。On Atari, it performs significantly better (in terms of sample complexity) than A2C and similarly to ACER though it is much simpler.在Atari上它在样本复杂度方面表现明显优于A2C并且与ACER相似尽管它要简单得多。