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

PPO近端策略优化算法

本文学习自不去幼儿园大佬的文章!加上自己的一些小见解,欢迎交流!【强化学习】近端策略优化算法(PPO)万字详解(附代码)-腾讯云开发者社区-腾讯云

过去,在强化学习中,直接优化策略会导致不稳定的训练,模型可能因为过大的参数更新而崩溃。

解决方案:PPO通过限制策略更新幅度,使得每一步训练都不会偏离当前策略太多,同时高效利用采样数据。

PPO(Proximal Policy Optimization)核心思想

PPO的目标是:

1、限制策略更新幅度,防止策略过度偏离

2、使用优势函数   A(s, a)   来评价某个动作的相对好坏。

PPO目标函数如下:

                        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]

其中,有一些重要参数:

E_t :表示对时间步 t 的期望值,时间步 t 的期望值,即对

一、概率比例    r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)}   它表示新策略旧策略在同一状态下选择动作的概率比值。

\pi_\theta(a_t | s_t):新策略对动作a_t的概率。

\pi_{\theta_{\text{old}}}(a_t | s_t):旧策略对动作a_t的概率。

这个比率表示策略变化的程度。

二、优势函数  A_t = Q(s_t, a_t) - V(s_t),或者用广义优势估计(GAE)的方法近似。

表示在状态s_t下采取动作a_t相对于平均情况的优越程度。

三、剪辑操作 \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon),它将 r_t(\theta) 限制在区间 [1-\epsilon, 1+\epsilon],防止策略变化过大。

为什么 PPO 很强?

  1. 简洁性: 比 TRPO(Trust Region Policy Optimization)更简单,无需二次优化。
  2. 稳定性: 使用剪辑机制防止策略更新过度。
  3. 高效性: 利用采样数据多次训练,提高样本利用率。

PPO的直观类比

假设你是一个篮球教练,训练球员投篮:

如果每次训练晚秋改变投篮动作,球员可能会表现失常(类似于策略更新过度)

如果每次训练动作变化太小,可能很难进步(类似于更新不足)

PPO的剪辑机制就像一个“适度改进”的规则,告诉球员在合理范围内调整投篮动作,同时评估每次投篮的表现是否优于平均水平。

强化学习的核心目标是优化策略\pi_\theta,表示在给定状态下采取某个动作的概率分布

最大化累计奖励R

策略梯度方法(如REINFORCE)直接优化策略,但更新过大可能导致不稳定。为了解决这个问题,PPO通过引入限制更新幅度的机制,保证策略的稳定性。

目标是优化以下期望:J(\theta) = \mathbb{E}{\pi\theta} \left[ R \right]

通过梯度上升法更新策略。

值函数优化

PPO不仅优化策略,还同时更新值函数V(s_t)

通过最小化均方误差来更新:L^{VF}(\theta) = \mathbb{E}_t \left[ \left( V(s_t; \theta) - R_t \right)^2 \right]

V(s_t; \theta):表示当前状态的值函数的预测

R_t = \sum_{k=0}^n \gamma^k r_{t+k}:累计回报。

策略熵正则化

为了鼓励策略探索,PPO引入了熵正则化项:L^{ENT}(\theta) = \mathbb{E}t \left[ H(\pi\theta(s_t)) \right]

H(\pi_\theta(s_t)):策略的熵,表示策略分布的不正确性

增加熵可以防止策略过早收敛到局部最优。

总损失函数

PPO结合策略损失、值函数损失和熵正则化项,形成总损失函数:L(\theta) = \mathbb{E}_t \left[ L^{CLIP}(\theta) - c_1 L^{VF}(\theta) + c_2 L^{ENT}(\theta) \right]

c_1c_2:权重系数,用于平衡策略优化、值函数更新和熵正则化。

http://www.xdnf.cn/news/5362.html

相关文章:

  • Tailwind CSS v4 主题化实践入门(自定义 Theme + 主题模式切换)✨
  • shell 编程之正则表达式与文本处理器
  • JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数
  • SaaS场快订平台项目说明【持续更新】
  • ensp的华为小实验
  • 管道-验证和转换
  • 关于“铜宝”电线的质量,以下是综合分析:
  • 第3.2.3节 Android动态调用链路的获取
  • 【程序员AI入门:开发】11.从零构建智能问答引擎:LangChain + RAG 实战手册
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 08.阴影
  • Python函数式编程入门:闭包与装饰器详解
  • 【数据结构】子串、前缀
  • 数据库索引详解:原理 · 类型 · 使用 · 优化
  • 傅利叶十周年,升级核心战略:“有温度”的具身智能蓝图
  • 【STM32 学习笔记】USART串口
  • ScaleTransition 是 Flutter 中的一个动画组件,用于实现缩放动画效果。
  • vscode_python远程调试_pathMappings配置说明
  • 一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨
  • Day21 奇异值分解(SVD)全面解析
  • 【Redis】缓存和分布式锁
  • spark-哈希join介绍
  • spring中的@Inject注解详情
  • 嵌入式学习笔记 - 运算放大器的共模抑制比
  • 探索C++内存管理
  • MySQL中like模糊查询如何优化?
  • JSON 在 Java 中的应用:手动生成与使用库的对比
  • 部署dify
  • 操作系统学习笔记第2章 (竟成)
  • 材料创新与工艺升级——猎板PCB引领高频阻抗板制造革命
  • 不同环境下运行脚本如何解决pythonpath问题