【强化学习】PPO算法

PPO(近端策略优化)算法基本原理 近端策略优化(PPO)算法是OpenAI在2017提出的一种强化学习算法,本文将从PPO算法的基础入手,理解从传统策略梯度算法直到PPO算法的演进过程,以及算法迭代过程中的优化细节。一、Policy Gradient(策略梯度算法)在强化学习(Reinforcement Learning, RL)领域,智能体(Agent)通过与环境(Environment)的交互来学习如何做出决策。 阅读详情

​ 📢本文是博主记录的学习摘录和笔记📝,若有不当之处,恳请各位小伙伴及时联系博主进行改正🙏,还望大家多多谅解与包容!🤝😊

PPO算法

算法介绍

PPO算法(近端策略优化,Proximal Policy Optimization是一种在强化学习领域广泛应用的策略梯度方法,由OpenAI于2017年提出 Proximal Policy Optimization Algorithms。它通过限制策略更新的幅度,解决了传统策略梯度方法中训练不稳定的问题,在多个领域展现出卓越的性能。

背景

在强化学习中,策略梯度方法(如REINFORCE、A2C、TRPO)通过直接优化策略参数来最大化期望回报。然而,这些方法存在一些问题:

  • 更新步长难以控制:如果策略更新幅度过大,可能导致策略崩溃;更新过小则训练缓慢。
  • 样本效率低:传统策略梯度通常每个样本只能使用一次。
  • 实现复杂:例如TRPO(Trust Region Policy Optimization)虽然能保证策略更新的稳定性,但需要二阶优化和复杂的约束处理,实现复杂,计算开销大。

PPO 正是为了解决这些问题而设计的:PPO算法保留了TRPO的优点(即稳定、可靠的策略更新),同时简化实现、提高计算效率。

核心思想

​ 在强化学习中,策略梯度方法的目标函数的梯度公式如下:
∇ θ J ( θ ) = E S ∼ η ,   A ∼ π ( S , θ ) [ ∇ θ ln ⁡ π ( A ∣ S , θ )   ( q π ( S , A ) − v π ( S ) ) ] \nabla_\theta J(\theta) = \mathbb{E}_{S \sim \eta,\, A \sim \pi(S, \theta)} \left[ \nabla_\theta \ln \pi(A|S, \theta) \, (q_\pi(S, A)-v_\pi(S)) \right] ∇θ​J(θ)=ES∼η,A∼π(S,θ)​[∇θ​lnπ(A∣S,θ)(qπ​(S,A)−vπ​(S))]
​ 目标函数可以写成

L PG ( θ ) = E ( s t , a t ) ∼ π θ [ log ⁡ π θ ( a t ∣ s t )   A t ] L^{\text{PG}}(\theta) = \mathbb{E}_{(s_t, a_t) \sim \pi_\theta} \left[ \log \pi_\theta(a_t \mid s_t) \, A_t \right] LPG(θ)=E(st​,at​)∼πθ​​[logπθ​(at​∣st​)At​]
在 TRPO 中,目标函数在策略更新大小约束下被最大化,即
maximize θ E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t ] \mathop{\text{maximize}}\limits_{\theta} \quad \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\text{old}}}(a_t \mid s_t)} \hat{A}_t \right] θmaximize​E^t​[πθold​​(at​∣st​)πθ​(at​∣st​)​A^t​]

subject to E ^ t [ K L [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] ≤ δ . \text{subject to} \quad \hat{\mathbb{E}}_t \left[ \mathrm{KL} \left[ \pi_{\theta_{\text{old}}}(\cdot \mid s_t), \pi_\theta(\cdot \mid s_t) \right] \right] \leq \delta. subject toE^t​[KL[πθold​​(⋅∣st​),πθ​(⋅∣st​)]]≤δ.

其中:

r t ( θ ) = π θ ( a t ∣ s t ) π old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\text{old}}(a_t \mid s_t)} rt​(θ)=πold​(at​∣st​)πθ​(at​∣st​)​ 称为重要性采样比率

当 π θ \pi_\theta πθ​ 与 π o l d \pi_{old} πold​ 差异较大时, r t ( θ ) r_t(\theta) rt​(θ) 可能非常大或非常小,导致梯度估计方差极大,甚至使策略崩溃。

为了解决上述问题,PPO 提出了 裁剪替代目标函数(Clipped Surrogate Objective):
L CLIP ( θ ) = E t [ min ⁡ ( r t ( θ ) A ^ t ,   clip ( r t ( θ ) ,   1 − ϵ ,   1 + ϵ ) A ^ t ) ] L^{\text{CLIP}}(\theta) = \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(θ)=Et​[min(rt​(θ)A^t​,clip(rt​(θ),1−ϵ,1+ϵ)A^t​)]
其中:
ϵ > 0 \epsilon > 0 ϵ>0 是一个小的超参数(通常取 0.2)
clip ( x , a , b ) \text{clip}(x, a, b) clip(x,a,b) 将 x x x 限制在区间 $ [a, b] $ 内

PPO 的另一种方法是使用 KL 散度惩罚,但在实验中发现性能不如 CLIP ,实验也更复杂。

PPO 的目标函数不是简单地使用裁剪后的比率,而是取原始比率目标和裁剪后目标的较小值。这是为了保守更新)。

  • 当 A t > 0 A_t >0 At​>0(动作比平均好):

    • 我们希望增大 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ​(at​∣st​),即让 r t ( θ ) > 1 r_t(\theta) > 1 rt​(θ)>1
    • 但如果 r t ( θ ) > 1 + ϵ r_t(\theta) > 1 + \epsilon rt​(θ)>1+ϵ,说明更新太大,此时裁剪后的值为 ( 1 + ϵ ) A t (1 + \epsilon)A_t (1+ϵ)At​
    • 取 min 后,目标函数值被限制,防止过度鼓励该动作
  • 当 A t < 0 A_t < 0 At​<0(动作比平均差):

    • 我们希望减小 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ​(at​∣st​),即让 r t ( θ ) < 1 r_t(\theta) < 1 rt​(θ)<1
    • 但如果 r t ( θ ) < 1 − ϵ r_t(\theta) < 1 - \epsilon rt​(θ)<1−ϵ,说明策略变化太大,裁剪后为 ( 1 − ϵ ) A t (1 - \epsilon)A_t (1−ϵ)At​
    • 注意:因为 A t < 0 A_t < 0 At​<0, ( 1 − ϵ ) A t < r t ( θ ) A t (1 - \epsilon)A_t < r_t(\theta)A_t (1−ϵ)At​<rt​(θ)At​, min 会选更小的,限制策略下降的幅度

完整的 PPO 目标函数:
L t ( θ ) = E t [ L t CLIP ( θ ) − c 1 L t VF ( θ ) + c 2 S [ π θ ] ( s t ) ] L_t(\theta)=\mathbb{E}_t \left[ L^{\text{CLIP}}_t(\theta)-c_1L^{\text{VF}}_t(\theta)+c_2S[\pi_\theta](s_t) \right] Lt​(θ)=Et​[LtCLIP​(θ)−c1​LtVF​(θ)+c2​S[πθ​](st​)]
其中:

  • L t VF ( θ ) = E t [ ( V θ ( s t ) − V t target ) 2 ] L^{\text{VF}}_t(\theta)=\mathbb{E}_t\left[(V_\theta(s_t)-V_t^{\text{target}})^2\right] LtVF​(θ)=Et​[(Vθ​(st​)−Vttarget​)2]:价值函数的均方误差损失;
  • S [ π θ ] ( s t ) = E t [ − ∑ a π θ ( a ∣ s t ) log ⁡ π θ ( a ∣ s t ) ] S[\pi_\theta](s_t)=\mathbb{E}_t\left[-\sum_a\pi_\theta(a|s_t)\log\pi_\theta(a|s_t)\right] S[πθ​](st​)=Et​[−∑a​πθ​(a∣st​)logπθ​(a∣st​)]:策略熵,用于鼓励探索;
  • c 1 , c 2 c_1,c_2 c1​,c2​ 是超参数

流程

  • 初始化

    • 初始化策略网络(Policy Network) π θ \pi_\theta πθ​(参数为 θ \theta θ)
    • 初始化价值网络(Value Network) V ϕ V_\phi Vϕ​(参数为 ϕ \phi ϕ)
    • 设置超参数:折扣因子 γ \gamma γ、GAE 参数 λ \lambda λ、裁剪范围 ε \varepsilon ε、学习率、训练轮数 K K K、每个批次的轨迹长度 T T T 等
  • 数据收集
    在当前策略 π θ \pi_\theta πθ​ 下,与环境交互收集经验数据:

    • 对于多个并行智能体,执行策略 π θ \pi_\theta πθ​ 生成轨迹:
      • 对于时间步 t = 0 t=0 t=0 到 T − 1 T-1 T−1:
        • 根据当前状态 s t s_t st​,采样动作 a t ∼ π θ ( a ∣ s t ) a_t\sim\pi_\theta(a|s_t) at​∼πθ​(a∣st​)
        • 执行动作 a t a_t at​,获得奖励 r t r_t rt​ 和下一状态 s t + 1 s_{t+1} st+1​
        • 存储 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st​,at​,rt​,st+1​) 等信息
  • 计算优势函数(Advantage Estimation)
    使用收集到的轨迹数据,估计每个时间步的优势函数 A t A_t At​,常用 GAE(Generalized Advantage Estimation):

    • 首先用价值网络 V ϕ ( s ) V_\phi(s) Vϕ​(s) 估计状态价值
    • 计算 TD 残差: δ t = r t + γ V ϕ ( s t + 1 ) − V ϕ ( s t ) \delta_t=r_t+\gamma V_\phi(s_{t+1})-V_\phi(s_t) δt​=rt​+γVϕ​(st+1​)−Vϕ​(st​)
    • A t = δ t + ( γ λ ) δ t + 1 + ( γ λ ) 2 δ t + 2 + ⋯ + ( γ λ ) T − t − 1 δ T − 1 A_t=\delta_t+(\gamma\lambda)\delta_{t+1}+(\gamma\lambda)^2\delta_{t+2}+\dots+(\gamma\lambda)^{T-t-1}\delta_{T-1} At​=δt​+(γλ)δt+1​+(γλ)2δt+2​+⋯+(γλ)T−t−1δT−1​
  • 构建 PPO 目标函数(Clipped Surrogate Objective)
    对每个样本 ( s t , a t ) (s_t,a_t) (st​,at​),计算重要性采样比率

  • 计算PPO-Clip 的目标函数,再加上价值函数损失和熵奖励。

  • 优化目标函数。

优势

训练稳定性高

这是 PPO 最核心的优势。在 PPO 出现之前,策略梯度算法经常面临一个两难选择:

  • 学习率太小:策略更新缓慢,训练耗时。
  • 学习率太大:策略更新步子迈得太大,可能导致策略性能突然崩溃,且难以恢复。

PPO 通过其裁剪机制或 KL 散度惩罚完美地解决了这个问题。它不直接限制学习率,而是限制新旧策略的变化幅度。

实现简单

PPO 的前身是 TRPO(Trust Region Policy Optimization)。TRPO 的思想与 PPO 类似,也是为了限制策略更新的幅度,但它使用了一个复杂的、涉及二阶导数和共轭梯度法的约束来保证更新在“信任区域”内。这使得 TRPO 的实现非常困难且计算成本高昂。

相比之下,PPO-Clip 的核心思想——一个简单的 min 和 clip 操作——可以用几行代码轻松实现。它将复杂的约束问题转化为了一个易于优化的损失函数,使得算法既保留了 TRPO 的稳定性思想,又具有简洁性。

良好的样本效率(相对 on-policy 算法)
  • 虽然 PPO 本质上仍是 on-policy 算法(依赖当前策略生成数据),但它允许对同一批数据进行多次 epoch 更新,提高了数据利用率。

不足

on-policy
  • PPO 与 off-policy 算法相比,样本效率低下, 不能无限重用旧数据,每次策略更新后需重新与环境交互收集数据。
超参数敏感

虽然 PPO 的裁剪机制使其对学习率不那么敏感,但它引入了新的关键超参数,并且整体性能依然依赖于超参数的精心调整:

  • 裁剪范围 ϵ \epsilon ϵ:这是最重要的超参数之一。 ϵ \epsilon ϵ 太小,策略更新会非常缓慢; ϵ \epsilon ϵ 太大,则失去了裁剪的意义,可能变得不稳定。
  • 价值损失系数 c 1 c_1 c1​ 和熵系数 c 2 c_2 c2​: 这两个系数平衡了策略改进、价值评估和探索三者的关系。如果权重设置不当,训练可能会出现各种问题(如不收敛或策略过早确定)。
  • GAE 参数 λ \lambda λ:影响优势函数的计算,控制着偏差和方差的权衡。

总结

PPO通过裁剪目标函数平衡了策略更新的探索与利用,成为强化学习领域的主流算法之一。

参考

【强化学习的数学原理】课程:从零开始到透彻理解(完结)_哔哩哔哩_bilibili

文章分类在👉深度学习专栏【点击跳转】,欢迎关注!

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化 接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。 阅读详情

相关推荐

强化学习-PPO算法详解

近端策略优化(Proximal Policy Optimization, PPO)是强化学习中的一种高效策略优化算法,由OpenAI于2017年提出。其核心目标是提升训练稳定性和样本效率,尤其适用于复杂环境下的连续控制任务。

Rsbstep的博客 4118

PPO算法(附pytorch代码)

PPO算法是一种强化学习中的策略梯度方法,它的全称是Proximal Policy Optimization,即近端策略优化1。PPO算法的目标是在与环境交互采样数据后,使用随机梯度上升优化一个“替代”目标函数,从而改进策略。PPO算法的特点是可以进行多次的小批量更新,而不是像标准的策略梯度方法那样每个数据样本只进行一次梯度更新12。PPO算法有两种主要的变体:PPO-Penalty和PPO-Clip。

qq_45889056的博客 6万+

强化学习PPO算法

PPO 算法之所以被提出,根本原因在于 Policy Gradient 在处理连续动作空间时 Learning rate 取值抉择困难。 Learning rate 取值过小,就会导致深度强化学习收敛性较差,陷入完不成训练的局面,取值过大则导致新旧策略迭代时数据不一致,造成学习波动较大或局部震荡。除此之外,Policy Gradient 因为在线学习的性质,进行迭代策略时原先的采样数据无法被重复利用,每次迭代都需要重新采样; 同样地置信域策略梯度算法(Trust Region Policy Optimiza

putaolove的博客 2345

强化学习------PPO算法

PPO算法之所以被提出,根本原因在于在处理连续动作空间时取值抉择困难。取值过小,就会导致深度强化学习收敛性较差,陷入完不成训练的局面,取值过大则导致新旧策略迭代时数据不一致,造成学习波动较大或局部震荡。除此之外,因为在线学习的性质,进行迭代策略时原先的采样数据无法被重复利用,每次迭代都需要重新采样;同样地置信域策略梯度算法虽然利用重要性采样、共轭梯度法求解提升了样本效率、训练速率等,但在处理函数的二阶近似时会面临计算量过大,以及实现过程复杂、兼容性差等缺陷。而PPO算法具备。

niulinbiao的博客 4万+

【深入分析强化学习PPO算法】

PPO通过剪切机制和重要性采样,在保证训练稳定性的同时实现高效优化,适用于复杂连续控制任务(如机器人控制、游戏AI)。

hw1287789687的专栏 2623

基于MindSpore实现强化学习PPO算法笔记

强化学习的核心思想是通过智能体(Agent)与环境(Environment)交互,基于奖励信号优化策略。状态(State, S):环境的当前状况。动作(Action, A):智能体采取的行为。奖励(Reward, R):环境对动作的反馈。策略(Policy, π):从状态到动作的映射。目标是找到一个最优策略 π*,最大化长期累积奖励。

six_lucky的博客 1153

【强化学习PPO算法】

强化学习基础记录

weixin_47471559的博客 3万+

强化学习笔记1——ppo算法

why PPO? 根据 OpenAI 的官方博客, PPO 已经成为他们在强化学习上的默认算法. 如果一句话概括 PPO: OpenAI 提出的一种解决 Policy Gradient 不好确定 Learning rate (或者 Step size) 的问题. 因为如果 step size 过大, 学出来的 Policy 会一直乱动, 不会收敛, 但如果 Step Size 太小, 对于完成训练, 我们会等到绝望. PPO 利用 New Policy 和 Old Policy 的比例, 限制了 New .

qq_41537299的博客 5292

强化学习之 PPO 算法

强化学习之PPO算法

发呆的比目鱼的博客 9378

腿足机器人之十三-强化学习PPO算法

PPO(Proximal Policy Optimization)算法稳定性强,适合大多数的仿真环境,如MuJoco/Isaac Gym,是初上手的首选,SAC(Soft Actor-Critic )算法在需要高效探索或真实机器人部署(样本成本高)时更优,际工程中,PPO+SAC 组合(如 PPO 微调 + SAC 迁移)已成为提升鲁棒性的常见方案。的,OpenAI一直想做的是AGI,chatGPT是AGI决策中枢,而机器人是AGI在现实世界交互的核心,而机器人运动、姿态控制室交互中的核心。

shichaog的专栏 2792

【强化学习】常用算法之一 “PPO”

强化学习是一种通过智能体与环境的互动来学习最优行为策略的机器学习方法。相较于监督学习和无监督学习,强化学习的特点在于具有延迟奖赏和试错机制。在强化学习中,智能体通过选择动作来影响环境,并且从环境中获得奖励作为反馈。强化学习的目标是通过与环境的交互,使得智能体能够学会最优的行为策略。PPO算法属于策略优化(Policy Optimization)算法家族,是由OpenAI在2017年提出的。与其他策略优化算法相比,PPO算法具有较高的样本利用率和较好的收敛性能。

Code_and516的博客 2450

强化学习PPO算法详解

也就是上图所描述的方法。接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;在上面的介绍方法中PG在更新的时候的基本思想就是增大奖励大的策略动作出现的概率,减小奖励小的策略动作出现的概率。下选择相应的动作来执行,环境根据Agent的动作,反馈新的状态以及奖励,Agent又根据新的状态选择新的动作,这样不停的循环,知道游戏结束,便完成了eposide。

edward_zcl的博客 3119

深度强化学习中的PPO算法实现细节

强化学习是一种通过与环境交互来学习最优决策的机器学习范式。在强化学习中,智能体会根据当前状态选择行动,并获得环境的反馈奖励,通过不断调整策略来最大化长期累积奖励。近年来,随着深度学习技术的发展,深度强化学习(Deep Reinforcement Learning, DRL)成为一个备受关注的研究方向。其中,Proximal Policy Optimization (PPO)算法是近年来深度强化学习领域最为流行和高效的算法之一。

AI天才研究院 1390

强化学习之PPO算法

PPO算法简要介绍

loxs 1035

立创星火计划:基于STM32H743VIH6的Maverick_H743_MK1.0高性能开源飞控硬件全解析

本文详细解析了基于STM32H743VIH6核心的Maverick_H743_MK1.0高性能开源飞控硬件设计。重点阐述了采用双IMU冗余设计、高精度气压计、多路独立电源管理以及丰富接口(如CAN总线)的考量,旨在为穿越机、科研无人机等平台提供强大、可靠的飞行控制解决方案。

weixin_28787801的博客 197

机器视觉中的特征提取【0】:什么是特征提取,特征提取有什么作用?

1.什么是特征提取? 特征提取的英文叫做feature extractor,它是将一些原始的输入的数据维度减少或者将原始的特征进行重新组合以便于后续的使用。简单来说有两个作用:减少数据维度,整理已有的数据特征。 这里我给一个例子来解释特征提取的第二个作用。那就是我们很熟悉的奖学金评定,我们知道学生的文化课成绩,道德分数,以及各种其他竞赛的成绩。摆在奖学金评定委员会面前的任务就是如何知道一个学生是否...

月下花弄影 5万+

PPO强化学习算法详解

PPO是一种策略梯度方法,由OpenAI在2017年提出。在更新策略时,不要让新策略偏离旧策略太远,这样训练更稳定。KL散度KLπold∣∣πnew∑aπolda∣slog⁡πolda∣sπnewa∣sKLπold​∣∣πnew​a∑​πold​a∣slogπnew​a∣sπold​a∣s​直观理解KL散度越大 → 新旧策略差异越大。

ekkoalex的博客 1363

ROST_CM6软件之词频分析、社会网络和语义网络分析、情感分析

简介 ROST CM 6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。 社会网络和语义网络分析(S) 数据 注意,保存时编码要为ANSI 所以这里需要转换一下 准备自定义表与停词表 例如 同时,点击快速分析后,将会弹出网络图 对网络图进行设置 对布局进行设置 对节点、边进行设置 最终效果图 修改 情感分析

积一时之步,臻千里之遥程 9万+
上一篇: 深入理解 LLM 分词器:BPE、WordPiece 与 Unigram
LETTER•
博客等级 码龄3年 62粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值