【深度强化学习】(6) PPO 模型解析,附Pytorch完整代码

大家好,今天和各位分享一下深度强化学习中的近端策略优化算法(proximal policy optimization,PPO),并借助 OpenAI 的 gym 环境完成一个小案例,完整代码可以从我的 GitHub 中获得:

https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model


1. 算法原理

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

同样地置信域策略梯度算法(Trust Region Policy Optimization,TRPO)虽然利用重要性采样(Important-sampling)、共轭梯度法求解提升了样本效率、训练速率等,但在处理函数的二阶近似时会面临计算量过大,以及实现过程复杂、兼容性差等缺陷。 

PPO 算法具备 Policy Gradient、TRPO 的部分优点采样数据和使用随机梯度上升方法优化代替目标函数之间交替进行,虽然标准的策略梯度方法对每个数据样本执行一次梯度更新,但 PPO 提出新目标函数,可以实现小批量更新。

鉴于上述问题,该算法在迭代更新时,观察当前策略在 t 时刻智能体处于状态 s 所采取的行为概率\pi (a_t |s_t),与之前策略所采取行为概率 \pi_{\theta old} (a_t | s_t)计算概率的比值来控制新策略更新幅度,比值 r_t 记作:

r_t(\theta) = \frac{\pi _{\theta}(a_t|s_t)}{\pi_{\theta old}(a_t|s_t)}

新旧策略差异明显且优势函数较大,则适当增加更新幅度;若 r_t 比值越接近 1,表明新旧策略差异越小。

优势函数代表,在状态 s 下,行为 a 相对于均值的偏差。在论文中,优势函数 \hat{A}_t 使用 GAE(generalized advantage estimation)来计算:

\hat{A}_t^{GAE(\gamma, \lambda)} = \sum_{l=0}^{\bowtie } (\gamma \lambda )^l \delta _{t+l} ^ V

内容概要:本文全面解析了近端策略优化(PPO强化学习算法的核心原理、算法流程、Python代码实现及典型应用案例。文章首先介绍强化学习PPO的背景,指出传统策略梯度方法存在的训练不稳定和样本利用率低等问题,并引出PPO通过裁剪代理目标函数、重要性采样和广义优势估计(GAE)等机制有效解决了这些难题。随后详细阐述PPO的数学原理与目标函数设计,结合Actor-Critic架构的伪代码和具体步骤说明其数据收集、优势计算与策略优化过程。配套的Python实现基于PyTorch和Gym环境,展示了从模型定义、数据采集到策略更新的完整流程。最后通过Dota 2、机器人控制和ChatGPT等实际案例,体现PPO在复杂任务中的广泛应用,并讨论其局限性及改进方向如PPO-Adaptive、POP和Meta-PPO等。; 适合人群:具备一定机器学习基础,熟悉Python编程和深度学习框架(如PyTorch)的高校学生、研究人员及从事AI算法开发的工程师,尤其适合希望深入理解强化学习算法原理并动手实践的技术人员; 使用场景及目标:①掌握PPO算法的核心思想与数学推导,理解其相较于传统策略梯度方法的优势;②通过完整代码实现,学习如何构建Actor-Critic网络、计算GAE优势、执行裁剪目标函数优化;③应用于游戏AI、机器人控制、自然语言处理等领域的策略优化任务,提升模型训练稳定性与样本效率; 阅读建议:建议读者结合代码逐段调试运行,重点关注重要性采样比、裁剪机制和优势估计的实现逻辑,同时尝试调整超参数(如ε、γ、λ)观察训练效果变化,并可扩展至其他Gym环境进行实战验证,以深化对算法行为的理解。
03-08
### Proximal Policy Optimization (PPO) 算法概述 Proximal Policy Optimization (PPO) 是一种用于强化学习中的策略优化方法,旨在通过改进代理的行为来最大化累积奖励。此算法特别之处在于其能够稳定而高效地训练复杂的神经网络模型。 #### PPO 的核心概念 在 PPO 中,为了防止更新过程中新旧策略之间差异过大而导致性能下降,在损失函数中引入了一个信任区域的概念。具体来说,这里是指定一个范围内的变化被认为是合理的;超出这个范围的变化则会被惩罚[^1]。 对于每次迭代: - 计算当前策略下的动作概率分布 - 使用采样得到的经验数据计算优势估计值(Advantage Estimation) - 更新前策略参数表示为特定向量形式 - 对于目标进行线性逼近以及对约束条件做二次逼近处理之后,采用共轭梯度法有效地解决了这个问题 这种方法不仅提高了收敛速度还增强了鲁棒性和稳定性。 ```python import torch.nn as nn from torch.distributions import Categorical class ActorCritic(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(ActorCritic, self).__init__() self.actor = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, output_dim), nn.Softmax(dim=-1) ) def select_action(state): state = torch.from_numpy(state).float().unsqueeze(0) probs = actor_critic.actor(state) m = Categorical(probs) action = m.sample() return action.item(), m.log_prob(action) ``` 上述代码展示了如何定义一个简单的演员评论家架构,并实现选择行动的功能。这有助于理解 PPO 实现过程的一部分逻辑结构。
评论 28
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值