【ChatGPT 默认强化学习策略】PPO 近端策略优化算法

PPO 近端策略优化算法

    • PPO = 概率比率裁剪 + 演员-评论家算法
      • 演员-评论家算法:多智能体强化学习核心框架
      • 概率比率裁剪:逐步进行变化的方法
        • PPO 目标函数的设计
          • 重要性采样
          • KL散度

 


PPO = 概率比率裁剪 + 演员-评论家算法

论文链接:https://arxiv.org/abs/1707.06347

OpenAI 提出 PPO 旨在解决一些在策略梯度方法中常见的问题,特别是与训练稳定性和样本效率有关的问题。

能在提高学习效率和保持训练稳定性之间找到平衡。

策略梯度方法的问题:

  1. 策略更新过快
    在传统的策略梯度方法中,如果每次更新都大幅度改变策略,可能会导致学习过程变得非常不稳定。
    这种大幅更新可能会使得智能体忘记之前有效的策略,或者探索到低效的行为区域。

  2. 数据利用率低
    许多强化学习算法,特别是那些基于样本的算法,需要大量的数据才能学到有效的策略。
    PPO试图通过更有效地使用数据来缓解这个问题,使得从每个数据样本中学到更多信息。

  3. 训练周期长
    由于数据利用率低,传统的强化学习算法通常需要很长的训练周期才能收敛到一个好的策略。
    PPO通过改进学习算法来减少所需的训练时间。

PPO算法在演员-评论家的框架基础上,使用了 概率比率裁剪 技巧来控制策略更新的幅度,以确保训练的稳定性和性能。

演员-评论家算法:多智能体强化学习核心框架

请猛击:演员-评论家算法:多智能体强化学习核心框架

 


概率比率裁剪:逐步进行变化的方法

想象你有两个不同的蛋糕配方,这个比率就像是告诉你,使用新配方做蛋糕的可能性与旧配方相比有多大的变化。

如果我们的新策略和旧策略差别太大,那就像是突然完全改变蛋糕的配方,可能会做出一个很不一样的蛋糕,我们不确定它会好吃,还是不好吃。

所以,PPO通过计算概率比率来确保新策略不会偏离旧策略太远。

在每次策略更新时,它计算新策略和旧策略之间的比率,并通过限制这个比率的大小来裁剪更新幅度,以防止过大的改变。

解决如何安全地逐步进行变化,控制变化的方法。

具体请见目标函数的设计。

PPO 目标函数的设计


在测试中,PPO 基本在每个任务都是第一梯队。

那我们说一下 PPO 到底做了什么,居然比 A2C (另一种演员-评论家的改进算法)还要好。

近端,主要体现在其目标函数的设计上。

在PPO(近端策略优化)算法中,结合使用重要性采样和KL散度实现了主要的目标。

重要性采样:

  • 探索与利用的平衡:重要性采样帮助算法判断新策略(新动作)与旧策略(旧动作)相比的效果。如果新策略比旧的好,算法会更倾向于采用新策略(这是“利用”)。但同时,算法也会尝试一些不同的策略(这是“探索”),以找到可能更好的解决方案。
  • 渐进式更新:通过重要性采样,PPO能够逐渐、小心地改进策略,而不是一次性做出巨大的改变。这样的逐步改进有助于算法稳定地学习和适应新策略。

KL散度:

  • 防止过度探索:KL散度用于确保新策略不会偏离旧策略太远。这个约束防止了算法在探索新策略时过度激进,从而避免了可能导致性能下降的大幅度策略变动。
  • 维持学习的稳定性:通过限制新旧策略之间的差异,KL散度有助于保持学习过程的稳定性。这种稳定性对于复杂的学习任务特别重要,因为它减少了学习过程中的不确定性和波动。
重要性采样

你正在玩一个跳舞游戏。

在这个游戏里,你有一系列的舞蹈动作可以选择。

刚开始时,你只会一些基础的动作(这是你的“旧策略”)。

现在,你学会了一些新的、酷炫的舞蹈动作(这是你的“新策略”)。

在这个游戏里,你想要知道这些新动作是否真的比旧的好。

但是,你不能一次就完全改变你的舞蹈风格,因为这样你可能会跳得很差。

所以,你需要一种方法来慢慢地、安全地加入新动作。

使用重要性采样,你可以基于旧动作的经验来估计新动作的效果。

比如,如果新动作只是在旧动作的基础上做了一些小改动(比如多举了一下手),你可以推测这个新动作会有类似的效果。

通过比较,你可以决定哪些新动作真的相似,值得加入到你的舞蹈里,同时确保你的整体舞蹈还是很流畅。

不仅链接了新旧动作,还是渐进式更新。

在这个过程中,你不需要每次都完全重新学习动作。

相反,你只是在旧动作的基础上做一些小的调整。

这样,你可以逐渐地、稳步地改进你的动作,而不是一下子完全改变。

KL散度

你的舞蹈老师给了你一个规则:虽然可以尝试新动作,但是不能让你的舞蹈风格变化太大,否则会失去控制,可能跳得一团糟。

KL散度就像是舞蹈老师的一条规则,它告诉你新舞蹈和旧舞蹈之间的差别。

如果差别太大,就意味着你可能偏离了舞蹈的基本风格太远,需要调整一下。

这样,你就可以在尝试新动作的同时,保持你的舞蹈整体风格和质量。

仅仅使用重要性采样可能会导致策略变化过大,特别是在新策略与旧策略差异显著时。

KL散度提供了一种衡量策略之间差异的方法。

通过限制新旧策略之间的KL散度,PPO能够保证学习过程的连续性和平滑性,减少策略更新的剧烈波动。

数学公式:

  • J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) ⏟ Regularization = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] − β K L ( θ , θ ′ ) \begin{aligned} J_{\mathrm{PPO}}^{\theta^{\prime}}(\theta)& =J^{\theta^{\prime}}(\theta)-\underbrace{\beta\mathrm{KL}(\theta,\theta^{\prime})}_{\text{Regularization}} \\ &=\mathbb{E}_{(s_t,a_t)\sim\pi_{\theta^{\prime}}}\left[\frac{p_\theta\left(a_t\mid s_t\right)}{p_{\theta^{\prime}}\left(a_t\mid s_t\right)}A^{\theta^{\prime}}\left(s_t,a_t\right)\right]-\beta\mathrm{KL}(\theta,\theta^{\prime}) \end{aligned} JPPOθ(θ)=Jθ(θ)Regularization βKL(θ,θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]βKL(θ,θ)

这个公式是近端策略优化(PPO)算法中的一个重要部分,它包含了重要性采样和KL散度。

  1. 重要性采样

    • 公式的这部分: p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_\theta(a_t | s_t)}{p_{\theta'}(a_t | s_t)} pθ(atst)pθ(atst),表示的是重要性采样比率。
    • 这里, p θ ′ ( a t ∣ s t ) p_{\theta'}(a_t | s_t) pθ(atst) 是旧策略(即上一次更新前的策略)在状态(s_t)下选择动作(a_t)的概率。
    • p θ ( a t ∣ s t ) p_\theta(a_t | s_t) pθ(atst) 是新策略(即当前更新的策略)在相同状态下选择同一动作的概率。
    • 通过这个比率,我们可以量化新旧策略之间在选择特定动作上的差异。
  2. 优势函数 A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at)

    • 公式中的 A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st,at) 是优势函数,它评估在特定状态下采取某个动作相对于平均情况的好坏。
    • 优势函数用于量化一个特定动作比平均情况要好或坏多少。
  3. 期望值 E \mathbb{E} E

    • E ( s t , a t ) ∼ π θ ′ [ … ] \mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}[…] E(st,at)πθ[] 表示对于由旧策略 π θ ′ \pi_{\theta'} πθ 生成的状态和动作的期望值。
    • 这意味着我们在计算这个公式时,考虑的是在旧策略下可能发生的所有状态和动作组合。
  4. KL散度

    • 公式中的 K L ( θ , θ ′ ) \mathrm{KL}(\theta, \theta') KL(θ,θ) 代表KL散度,它是一种衡量两个概率分布差异的方法。
    • 在这里,它用来衡量新策略和旧策略之间的差异。
    • β \beta β是一个调节参数,它控制了我们对策略变化的惩罚强度。KL散度越大,意味着新旧策略差异越大。
  5. 整体公式

    • 整个公式的第一部分, E ( s t , a t ) ∼ π θ ′ [ … ] \mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}[…] E(st,at)πθ[],计算的是在旧策略下,采用新策略能带来多少优势。
    • 第二部分, − β K L ( θ , θ ′ ) -\beta\mathrm{KL}(\theta, \theta') βKL(θ,θ),则是在控制新策略不要偏离旧策略太远的约束。

所以,这个公式基本上是在做两件事:

  • 一方面,它试图找到一个新策略,使得在旧策略下的表现更好;
  • 另一方面,它确保新策略不会与旧策略差异太大,从而保持学习的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle-深入了解cache buffer chain

文章目录 1.Cache buffer chain介绍2.Buffer cache的工作原理3 Buffer chains4.Multi-versioning of Buffers5.Latches6.诊断CBC latch等待7.解决 CBC Latch等待 1.Cache buffer chain介绍 经常看到会话等待事件“latch:cache buffers chain”。 如果想知道意味着什…

FA对接FC流程

2、FA进行对接 (1)首先安装好AD域控服务器DHCPDNS(注意,不要忘记了做DNS正反向解析,就是把已经安装了ITA的主机做解析),在里面创建域用户 (2)安装ITA和VAG/VLB&#xf…

2024孙多勇®跨年演讲,重塑医美增长力,开启璀璨华章!

不谋万事者,不足谋一时;不谋全局者,不足谋一域。明者因时而变,智者随时而制。 12月31日-1月3日由汇成医美集团主办的,以“重塑医美增长力”为主题的第七届孙多勇跨年演讲暨「英雄2024」年度战略规划案,在中…

权威Scrum敏捷开发企业培训分享

课程简介 Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程,面向研发管理者、项目经理、产品经理、研发团队等,旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…

Excel模板填充:从minio上获取模板使用easyExcel填充

最近工作中有个excel导出的功能,要求导出的模板和客户提供的模板一致,而客户提供的模板有着复杂的表头和独特列表风格,像以往使用poi去画是非常耗时间的,比如需要考虑字体大小,单元格合并,单元格的格式等问…

Maya-UE xgen-UE 毛发导入UE流程整理

首先声明:maya建议用2022版本及一下,因为要用到Python 2 ,Maya2023以后默认是Python3不再支持Python2; 第一步:Xgen做好的毛发转成交互式Groom 第二步:导出刚生成的交互式Groom缓存,需要设置一下当前帧,和…

大数据与人工智能|全面数字化战略与企业数字化转型(第1节 )

要点一:培养跨学科思维 在分析时,需要采用多学科的思维方式 结果不重要,重要的是如何提炼现象、分析问题和得出结论的过程。 1. 介绍了锤子精神和多学科思维方式的重要性。指出了只从自身学科出发解决问题的局限性。 2. 提倡跨学科思维方式&a…

2023下半年的总结

我从八月下旬开始写的,到现在差不多有半年了,总结一下吧! 1.计算机视觉 在计算机视觉方面,想必两个有名的深度学习框架(TensorFlow和PyTorch)大家都很清楚吧,以及OpenCV库。对于人脸识别&…

在高并发场景下,缓存“雪崩”了怎么办

1. 缓存雪崩的常见原因 缓存“雪崩”是指,因为部分缓存节点不可用,而导致整个缓存系统(甚至是整个服务系统)不可用。缓存“雪崩”主要分为以下两种情况: 因缓存不支持 rehash 而导致的缓存“雪崩”缓存支持 rehash 时…

电脑怎么检测手机配置信息

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

带大家做一个,易上手的家常蒜酱鲍鱼

超市有个福利鲍鱼 就买回来弄一下 搞一个整个的蒜 蒜去皮切末 三四个干辣椒切小末 切一点葱花混进去 鲍鱼去壳 去内脏&牙齿 将鲍鱼切块 因为鲍鱼是正经不好入味的东西 起锅烧油 下入 葱蒜干辣椒 翻炒出味 然后倒入鲍鱼进行翻炒 翻炒均匀后 倒入 一勺生抽 半勺老抽 …

Linux 内存数据 Metrics 指标解读

过去从未仔细了解过使用 free、top 等命令时显式的内存信息,只关注了已用内存 / 可用内存。本文我们详解解读和标注一下各个数据项的含义,同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识,很多查看内存的命令行工具都是 cat /pro…

71内网安全-域横向网络传输应用层隧道技术

必备知识点; 代理和隧道技术的区别? 代理主要解决的是网络访问问题,隧道是对过滤的绕过, 隧道技术是为了解决什么 解决被防火墙一些设备,ids(入侵检测系统)进行拦截的东西进行突破&#xff0…

2023-12-11 LeetCode每日一题(最小体力消耗路径)

2023-12-11每日一题 一、题目编号 1631. 最小体力消耗路径二、题目链接 点击跳转到题目位置 三、题目描述 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格…

自定义富集分析结果的term顺序

大家好,元旦过得还好吗?之前我们聊过如果富集分析结果不理想,如何选择富集分析的terms,如果不记得,可以看看这三个推文和视频。 ​富集分析结果不理想:如何从上千个term中找到自己想要所有term?…

Spark 集群搭建

文章目录 搭建前准备安装搭建解压并重命名环境变量配置配置文件yarn-site.xmlspark-env.sh 官网求 π(PI) 案例启动spark-shell通过浏览器查看显示查看 Spark 的网页信息展示 搭建前准备 下载地址:Index of /dist/spark (apache.org) 配置好 hadoop 环境&#xff…

HttpClient入门

HttpClient入门 简介 HttpClient 是 Apache HttpComponents 项目中的一个开源的 Java HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应。它提供了一组强大而灵活的 API,使得在 Java 程序中执行 HTTP 请求变得相对简单 maven依赖 org.apache.httpco…

【BIG_FG_CSDN】C++ 数组与指针 (个人向——学习笔记)

一维数组 在内存占用连续存储单元的相同类型数据序列的存储。 数组是静态存储器的块;在编译时确定大小后才能使用; 其声明格式如下: 元素类型 数组名[常量];元素类型:数组中元素的数据类型; 常量&#…

租房数据分析可视化大屏+58同城 Django框架 大数据毕业设计(附源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P105-从前序与中序遍历序列构造二叉树-Java题解🌏题目描述💡题…