3.深度强化学习------PPO(Proximal Policy Optimization)算法资料+原理整理

2023-10-27

文章地址:
PPO: Proximal Policy Optimization Algorithms

一. PPO资料

PPO原理讲解BLOG①:这篇blog详细讲了PPO算法的产生过程及原理,包含部分理论推导,看完这篇blog基本就理解PPO了。
PPO原理讲解BLOG②:可参考,其中包含部分tensorflow实现代码。

二. PPO原理简述

2.1 背景

PPO是基于基本的Policy Gradient进行改进的算法,关于PG的更新过程这里不详细描述了,可以根据上述BLOG①或其他资料推导理解一下即可。总之,得到的关于PG的策略更新过程的loss可以写为:
L ( θ ) = E [ l o g π ( a ∣ s , θ ) f ( s , a ) ] = ∑ l o g π ( a ∣ s , θ ) f ( s , a ) L(\theta) = \mathrm{E} [log\pi(a|s,\theta)f(s,a)]= \sum log\pi(a|s,\theta)f(s,a) L(θ)=E[logπ(as,θ)f(s,a)]=logπ(as,θ)f(s,a) L P G ( θ ) = E ^ t [ log ⁡ π θ ( a t ∣ s t ) A ^ t ] L^{P G}(\theta)=\hat{\mathbb{E}}_{t}\left[\log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t}\right] LPG(θ)=E^t[logπθ(atst)A^t]
其中 f ( s , a ) f(s,a) f(s,a)是对状态动作对的价值评估,计算该值有多种方式(可查看BLOG①),通常采用Advantage的方式更优,但为了更好的平衡偏差和方差的问题,一般采用GAE即 T D ( λ ) TD(\lambda) TD(λ)的形式

T D ( λ ) TD(\lambda) TD(λ)可以理解为对n个n-step 的估计值作加权平均得到的结果

2.2 原理

  PG所存在的一个问题是在更新计算Advantage时并不准确,实际上是有偏差的,如果policy一次更新得太远,那么下次基于更新后的policy进行采样的动作就会存在很大的偏差,如此就会陷入一个恶性循环,TRPO的核心思想是将policy的更新约束在一个trust region内,这样就可保证policy整个更新过程是单调上升的。如下图所示:
在这里插入图片描述
  这里注意TRPO的loss与之前所推导得到的PG的loss不一样,这是由于采用了importance sampling。TRPO是on-policy的,为什么这里采用IS?对于TRPO及PPO而言,虽然是基于on-policy的思想构建算法,但是对于on-policy而言,采样得到的数据仅训练一次就丢掉有些浪费,因此通常是将一次采样得到的经验数据分为多个minibatch进行训练,一般的还会sample reuse一下。如此一来,策略更新时所依赖的经验数据并非是实时采样得到的数据,这样就会造成一种off-policy的情况,因此就会引入importance sampling进行纠正。

IS实际上实现的过程就是用一种分布的采样均值来代替另一种分布的期望


PPO的主要贡献是提出了clipped surrogate objective,如下所示
在这里插入图片描述
note that the probability ratio r r r is clipped at 1 − ϵ 1-\epsilon 1ϵ or 1 + ϵ 1+\epsilon 1+ϵ depending on whether the advantage is positive or negative

ϵ \epsilon ϵ通常来说是一个比较小的值,论文中作者设置为0.2时在比较好的实验效果,这个clip操作实际上是限制了策略更新的幅度,避免策略的一次更新偏离太远。

PPO论文中还给出了对TRPO方法的一种近似/替代
在这里插入图片描述
即使用一个penalty代替TRPO中的constraint。这里作者引入了一个系数 β \beta β,文中针对 β \beta β又给出了两种情况,一种是 β \beta β固定的情况一种是自适应调整 β \beta β值的情况。具体查看论文即可

  PPO最终的loss如下:
在这里插入图片描述
  最终得到的PPO的算法伪代码如下:
在这里插入图片描述
  这里借鉴BLOG①的资料讨论一下PPO在一次iteration中更新了多少次?一次sample reuse的概念和使用:
  从算法伪代码中可以看出,PPO单次采样NT的经验数据,然后按照某个minibatch size训练K个epochs:假设设置K=3,minibatch size = NT/4,因此就可以得到PPO在一次iteration中就更新了12次。 这里的K把它定义为sample reuse ratio,如果这个ratio=1,那么就相当于完全on-policy,使得经验数据利用率很低。最理想的情况下是一次采样多次训练更新,一直更新到clip函数的边界,这样就可以最大化的利用单次所采样的经验数据。
  按照上述推导过程,也就是说actor或worker越大,单次采样的数据量也就越多,在控制训练次数前提下的batch size也就越大,对梯度的估计也就越准确,bias也就越小,效果越好。

openai dota five对sample reuse有不同的定义
在这里插入图片描述
其含义就是每秒样本使用量除以样本的生成量

先写到这里吧,后续有好的资料或者代码实现再更新

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.深度强化学习------PPO(Proximal Policy Optimization)算法资料+原理整理 的相关文章

随机推荐

  • springboot 实现权限管理(一)

    一 背景 1 为什么进行权限管理 生活在形形色色的世界之中 我们各自扮演着各自的角色 拥有不同的权利和义务 映射在计算机系统之中 也一样需要 角色 权限 来进行对用户的分类 限制访问资源 保证资源地合理被使用 使人各司其职 2 应用场景 假
  • 如何生成静态页面的五种方案

    方案1
  • 数据挖掘流程-HCIE-BigData

    机器学习流程 机器学习流程 1 了解需求 确认目标 2 获取数据 3 审阅数据 4 数据分析 4 1 统计分析 4 2 相关性分析 4 3 图形分析 1 散点图 2 热力图 3 直方图 4 统计图 5 柱状图 6 饼图 7 综合绘图 5 数
  • java自动化测试语言高级之泛型

    java自动化测试语言高级之泛型 文章目录 java自动化测试语言高级之泛型 Java 泛型 Java 泛型 Java 泛型 generics 是 JDK 5 中引入的一个新特性 泛型提供了编译时类型安全检测机制 该机制允许程序员在编译时检
  • element plus 使用 icon 图标(两种方式)

    前提 Element UI 和 Element Plus 对 Icon 图标 的使用方式改变较大 在此记录 Element UI Icon 图标 使用CSS 类名方式 Element Plus Icon 图标 使用Vue 组件方式 安装 n
  • -128的补码及原码、反码、补码

    一 原码 一个字节占8位 一个字长为n的机器数能表示不同的数字的个数是固定的2 n个 n 8时2 n 256 用来表示有符号数 数的范围就是 2 n 1 2 n 1 1 n 8时 这个范围就是 128 127 用来表示无符号数 就不需要用一
  • 【异步编程】1. 异步编程的实现方式

    总体介绍 回调函数的方式 使用回调函数的方式有一个缺点是 多个回调函数嵌套的时候会造成回调函数地狱 上下两层的回调函数间的代码耦合度太高 不利于代码的可维护 Promise的方式 使用 Promise 的方式可以将嵌套的回调函数作为链式调用
  • 指针、引用与const指针

    指针与引用 1 综述 2 指针 2 1 什么是指针 2 2 代码示例1 2 3 代码示例2 3 引用 3 1 什么是引用 3 2 引用的代码示例 4 const 迷惑 鄙人的C 是在网易云课堂上跟着吕鑫老师学的 课程名字叫 C语言 C 数据
  • echarts人员关系网络图,张三朋友的朋友扩散图

    我的另外一个博客echarts实现关系网络图 单个节点可无限扩散 方便实用易懂 就是通过下方这个改的 所以这个是最原版的代码 大家可以参考一下 其实意思很明了 主人公张三是中心点 第二层就是展示他的朋友 第三层是朋友的朋友 第四层循环下去
  • 【Qt】报错error: undefined reference to `vtable for的解决方法

    1 问题描述 编译Qt程序时 在某个类构造函数定义处报错 error undefined reference to vtable for 2 原因分析 导致错误信息的原因是 子类没有实现父类的纯虚函数 在Qt中 首先要想到的是在一个类中添加
  • crontab定时删除tomcat日志

    一 前言 前面一篇文章讲了在linux环境中按日期切割tomcat生成的Catalina out日志 虽然日志切割了 但是生成的日志文件还是会占用磁盘空间 积累一段时间还是会造成磁盘空间不够用的情况 之前的做法是手动的删除tomcat日志
  • win下nginx+php7+mysql配置

    win下nginx php7 mysql配置 nginx mysql部署请查看 洗盡鉛華 最終是你 php7部署 下载安装包 http yuefly com upload software php 7 2 33 nts Win32 VC15
  • set nx px

    我们知道分布式锁的特性是排他 避免死锁 高可用 分布式锁的实现可以通过数据库的乐观锁 通过版本号 或者悲观锁 通过for update Redis的setnx 命令 Zookeeper 在某个持久节点添加临时有序节点 判断当前节点是否是序列
  • python3中argparse模块

    python3中argparse模块 1 argparse是python标准库里面用来处理命令行参数的库 2 命令行参数分为位置参数和选项参数 位置参数就是程序根据该参数出现的位置来确定的 root openstack 1 ls root
  • JAVA面对对象继承性---方法覆写

    二 覆写 继承性的主要特征是子类可以根据父类已有的功能进行功能的扩展 但是在子类定义属性或方法时 有可能出现定义的属性或方法与父类同名的情况 这样的操作就称为覆写 方法的覆写 当子类定义了和父类的方法名称 返回值类型 参数类型及个数完全相同
  • Verilog function 函数

    文章目录 语法 函数的定义 函数的调用 递归调用 多文件调用 语法 function automatic return type name port list statements endfunction Verilog中的Function
  • Webview妙用(实现源生复杂UI页面)

    前几天 前同事找到我 具体是让我帮忙 实现一个类似答题的UI页面 这哥们又接外包了 1 具体功能如图 2 做为一个android程序员 首先自然想到是在android上如何实现 捋了一下官方给出的所有控件 并没有能解决该UI界面的方法 于是
  • 快手直播如何引流?快手直播引流怎么做?快手直播推广如何精准吸粉?​

    互联网让我们彼此的联系更加紧密 借助互联网的各个平台我们就可以寻找到我们的精准的目标客户 这些我们每天都在接触的平台其实就是我们的引流渠道 快手 这个短视频平台用户数量非常之庞大 大概有5亿的用户 如果能够从中获取到流量 这个引流的效果是非
  • char类型整数输入字符输出代码

    include
  • 3.深度强化学习------PPO(Proximal Policy Optimization)算法资料+原理整理

    文章地址 PPO Proximal Policy Optimization Algorithms 一 PPO资料 PPO原理讲解BLOG 这篇blog详细讲了PPO算法的产生过程及原理 包含部分理论推导 看完这篇blog基本就理解PPO了