当前位置: 首页 > news >正文

【深度强化学习 DRL 快速实践】近端策略优化 (PPO)

在这里插入图片描述

PPO(2017,OpenAI)核心改进点

Proximal Policy Optimization (PPO):一种基于信赖域优化的强化学习算法,旨在克服传统策略梯度方法在更新时不稳定的问题,采用简单易实现的目标函数来保证学习过程的稳定性

  • 解决问题:在强化学习中,直接优化策略会导致不稳定的训练,模型可能因为过大的参数更新而崩溃
  • model-free,off-policy,actor-critic
核心改进点说明
剪切目标函数使用剪切函数 clip 限制策略更新的幅度,避免策略大幅更新导致性能崩溃
off-policy每个采样数据可用于多轮更新,提升样本利用率,提高学习效率

PPO 网络更新

策略网络

PPO 使用旧策略和新策略的比值来定义目标函数,在保持改进的同时防止策略变化过大:

L C L I P ( θ ) = E t [ min ⁡ ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] , where  r t = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) L^{CLIP}(\theta) = {\mathbb{E}}_t \left[ \min \left( r_t(\theta) {A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) {A}_t \right) \right], \text{where } r_t = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} LCLIP(θ)=Et[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)],where rt=πθold(atst)πθ(atst)

  • Advantage 优势函数 A t {A}_t At:如 Q ( s t , a t ) − V ( s t ) Q(s_t, a_t) - V(s_t) Q(st,at)V(st)
  • 剪切系数 ϵ \epsilon ϵ:如 0.2

价值网络

L V F ( θ μ ) = E t [ ( V θ μ ( s t ) − R t ) 2 ] L^{VF}(\theta^\mu) = \mathbb{E}_t \left[ (V_{\theta^\mu}(s_t) - R_t)^2 \right] LVF(θμ)=Et[(Vθμ(st)Rt)2]

  • 真实或估算的回报 R t R_t Rt:如 ∑ k = 0 n = γ k r t + k \sum^n_{k=0} = \gamma^k r_{t+k} k=0n=γkrt+k

总损失函数

PPO 的总损失是策略损失、值函数损失和熵正则项 (鼓励探索) 的加权和:

L ( θ ) = L C L I P ( θ ) − c 1 L V F ( θ μ ) + c 2 H ( π ( s t ) ) L(\theta) = L^{CLIP}(\theta) - c_1 L^{VF}(\theta^\mu) + c_2 H(\pi(s_t)) L(θ)=LCLIP(θ)c1LVF(θμ)+c2H(π(st))

  • c 1 , c 2 c_1, c_2 c1,c2:权重系数,常用 c 1 = 0.5 c_1=0.5 c1=0.5, c 2 = 0.01 c_2=0.01 c2=0.01

基于 stable_baselines3 的快速代码示例

import gymnasium as gym
from stable_baselines3 import PPO# 创建环境
env = gym.make("CartPole-v1")
env.reset(seed=0)# 初始化模型
model = PPO("MlpPolicy", env, verbose=1)# 训练模型
model.learn(total_timesteps=100_000)
model.save("ppo_cartpole_v1")# 测试模型
obs, _ = env.reset()
total_reward = 0
for _ in range(200):action, _ = model.predict(obs, deterministic=True) obs, reward, terminated, truncated, _ = env.step(action)total_reward += rewardif terminated or truncated:breakprint("Test total reward:", total_reward)

参考资料:PPO 详解

相关文章:

  • 七、函数重载与默认参数(Function Overloading Default Arguments)
  • 【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理
  • 短视频矩阵系统可视化剪辑功能开发,支持OEM
  • ASP.NET Core 自动识别 appsettings.json的机制解析
  • 2025年的营销趋势-矩阵IP
  • C 语言中实现依赖反转(Dependency Inversion Principle,DIP)
  • linux安装单节点Elasticsearch(es),安装可视化工具kibana
  • 汽车行业EDI教程——北美X12标准 需求分析及方案
  • 通过模仿学习实现机器人灵巧操作:综述(下)
  • 1.9软考系统架构设计师:优秀架构设计师 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析
  • springboot启动的端口如何终止
  • pyqt中以鼠标所在位置为锚点缩放图片
  • 初识Redis · 哨兵机制
  • Hbase集群管理与实践
  • lumen中使用JWT下getTTL令牌过期源码解析(AI)
  • 基于Docker的Flask项目部署完整指南
  • Bytebase 3.5.1 - 扩展了对数据库的连接参数支持
  • 纯HTMLCSS静态网站——元神
  • 操作指南:vLLM 部署开源大语言模型(LLM)
  • Kafka与Spark-Streaming:大数据处理的黄金搭档
  • 伊朗港口爆炸事件已致195人受伤
  • 快捷公寓单间不足5平方米?公寓方:预订平台图片只是参考,已退房款
  • 拉卡拉一季度净利约1亿降超五成,去年净利3.5亿降逾23%
  • 魏晓栋已任上海崇明区委常委、组织部部长
  • 《哪吒之魔童降世》电影版权方诉《仙侠神域》游戏运营方侵权案开庭
  • 云南昭通黄吉庆寻子29年终团聚:儿子在同事鼓励下回乡认亲