参考:蘑菇书EasyRL

Policy Gradient梯度策略(PG)_bujbujbiu的博客-CSDN博客

PPO论文:

DeepMind Emergence of Locomotion Behaviours in Rich Environments

openAI Proximal Policy Optimization Algorithms

目录

1.同策略和异策略

2.近端策略优化(PPO)

2.1 近端策略优化惩罚(PPO-penalty)

2.2 近端策略优化裁剪(PPO-clip)​​​​​​​

1.同策略和异策略

  • 同策略(on policy):要学习的智能体和与环境交互的智能体是相同的
  • 异策略(off policy):要学习的智能体和与环境交互的智能体不是相同的

策略梯度算法是同策略,交互和更新的参数相同,因此每次更新完参数后就要重新采样,并且一次只能更新一次参数,非常浪费时间。为此需要将同策略变成异策略,也就是用另一个演员与环境交互,用 采样的数据去训练,这样可以多次更新参数。此处的采样就需要用到重要性采样这个概念(importance sampling)。

如果是从分布p中采样x,得到f(x),此时f(x)的期望值计算如下:

但是如果只能从分布q中采集数据x,那期望计算公式就要进行修正

这样我们不能直接从p中采样数据,但是可以通过从q里采样数据,再根据公式计算从p中采样x对应f(x)的期望值。是用来修正两个分布的重要性权重(importance weight)。问题是即便两个分布的期望值相同,其方差也不一定相同,通过计算可得等式左右两边方差为:

其区别在于,如果采样次数够多,可能结果也是一样,但是如果采样次数不够,因为方差差距的原因,其结果也会差很多。下图为例,从分布p中采样,期望值很显然为负,因为p(x)左边区域概率高,而f(x)<0。从分布q中采样,如果采样数不够多,很可能只采集到右侧,此时期望值为正,这样就会出现两个期望有较大差异,这个重要性采样存在的问题会在后面的PPO中解决,此处咱不说明。

将重要性采样用到梯度策略中使其变成异策略,之前是用策略与环境交互,采样出轨迹,再计算。现在用另一个策略与环境交互,就是这个演员做示范,是从中采样出来的。此处和前文重要性采样关系可以理解为:p就是,q就是

实际上在策略梯度中提到权重使用的是每一对(s,a)的优势函数而非整个轨迹的奖励

再将重要性采样结合变成

拆解

可以假设上述公式中红色框线比值为1,至于原因,直接点就是难以计算(对!就是这个原因!)就能得到如下梯度公式

由梯度反推目标函数

 括号里的 是我们要优化的参数,示范,也就是与环境交互的演员,通过交互采样出,计算出其优势,再乘上前面的重要性权重。

2.近端策略优化(PPO)

前文提到重要性采样时有一个问题:不能相差太多,否则结果会非常不好,训练的时候要增加一个约束即KL散度(KL divergence),用于衡量的相似程度,因此PPO有两项:原先就要优化的 和KL散度约束。

PPO有一个前身:信任区域策略优化(trust region policy optimization,TRPO),TRPO表示如下,其与PPO区别在于:TRPO将KL散度作为约束,PPO将KL散度放进优化式子中。TRPO额外约束的方式比较难计算,虽然两者性能差不多,但是PPO在实现上简单许多。

KL散度不是参数上的距离,而是一种行为距离,行为距离(behavior distance)就是,给定同样的状态,输出动作之间的差距。这两个动作的分布都是概率分布,所以我们可以计算这两个概率分布的 KL 散度。把不同的状态输出的这两个分布的 KL 散度的平均值就是我们所指的两个演员间的 KL 散度。

PPO有两个主要的变种:近端策略优化惩罚(PPO-penalty)近端策略优化裁剪(PPO-clip)

2.1 近端策略优化惩罚(PPO-penalty)

使用KL散度解决重要性采样问题,此处的是前一个训练迭代得到的演员参数。在DeepMind的论文中带KL的PPO算法如下,​​​​​​​是根据上一次的,因此关于ppo是on policy还是off policy存在争议。

KL散度前面的需要动态调整,称为自适应KL惩罚(adaptive KL penalty),设置KL最大值和最小值,如果,表明惩罚项没有发挥作用,增大;如果,表明惩罚项效果太大了,减小

2.2 近端策略优化裁剪(PPO-clip)

如果觉得KL计算比较复杂,可以使用 PPO-clip,其目标函数中没有KL散度

min操作符表明只需在两项中选择最小的那个,第一项为常规目标函数,第二项为裁剪的目标函数。第二项中的clip裁剪函数括号里有三项,第一项最大不能超过,最小不能小于,在这个范围内就等于本身。是一个超参数,需要调整,可以设置为0.1或0.2。

了解裁剪函数的输出后,结合起来看,下图中绿色的直线为常规目标函数,蓝色的线为裁剪目标函数,红色为执行min操作后得到的目标函数值。在A>0时,也就是某个状态动作对是好的,就要增加这个状态动作对的概率,也就是越大越好,但是其与比值不能超过。在A<0时, 也就是某个状态动作对是不好的,就要减少这个状态动作对的概率,越小越好,减到为止。这样我们在更新策略的时候又不会是采样误差过大。

在openAI的论文中比较了PPO和其它算法,PPO为紫色,多数情况下,PPO表现都更好。

Proximal Policy Optimization近端策略优化(PPO)相关推荐

  1. 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】

    1 前言 我们回顾一下policy network: 强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客 它先去跟环境互动,搜集很多的 路径τ.根据它搜集 ...

  2. Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始

    近端策略优化(PPO)算法是OpenAI在2017提出的一种强化学习算法,被认为是目前强化学习领域的SOTA方法,也是适用性最广的算法之一.本文将从PPO算法的基础入手,理解从传统策略梯度算法(例如R ...

  3. 近端策略优化算法(PPO)

    策略梯度算法(PG) 策略梯度迭代,通过计算策略梯度的估计,并利用随机梯度上升算法进行迭代.其常用的梯度估计形式为: E^t[∇θlogπθ(at∣st)A^t]\hat{\mathbb{E}}_t[ ...

  4. 【详解+推导!!】PPO 近端策略优化

    近端策略优化(PPO, Proximal Policy Optimization)是强化学习中十分重要的一种算法,被 OpenAI 作为默认强化学习算法,在多种强化学习应用中表现十分优异. 文章目录 ...

  5. PPO近端策略优化算法概述

    Policy Gradient算法存在两个问题,一是蒙特卡罗只能回合更新,二是on-policy采集的数据只能使用一次. 对于第一个更新慢的问题,改用时序差分方法,引入critic网络估计V值,就能实 ...

  6. 深度增强学习PPO(Proximal Policy Optimization)算法源码走读

    原文地址:https://blog.csdn.net/jinzhuojun/article/details/80417179 OpenAI出品的baselines项目提供了一系列deep reinfo ...

  7. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  8. 基于近端策略优化算法的车载边缘计算网络频谱资源分配

    摘要 [目的]在车载网络边缘计算中,合理地分配频谱资源对改善车辆通讯质量具有重要意义.频谱资源稀缺是影响车辆通讯质量的重要原因之一,车辆的高移动性以及在基站处准确收集信道状态信息的困难给频谱资源分配带 ...

  9. 基于近端策略优化的阻变存储硬件加速器自动量化

    摘 要 卷积神经网络在诸多领域已经取得超出人类的成绩.但是,随着模型存储开销和计算复杂性的不断增加,限制处理单元和内存单元之间数据交换的"内存墙"问题阻碍了其在诸如边缘计算和物联网 ...

  10. 近端策略优化深度强化学习算法

    PPO:Proximal Policy Optimization Algorithms,其优化的核心目标是: ppo paper 策略梯度 以下是马尔可夫决策过程MDP的相关基础以及强化学习的优化目标 ...

最新文章

  1. 一步步教你下载centos镜像
  2. 独家 | 关于Facebook数据泄露你需要知道的事
  3. java连接数据库核心代码
  4. 一个简单的tcpserver
  5. c++ const 常指针
  6. idea 怎么快速创建类的快捷键_「快捷键设置」[IDEA]常用快捷键和个人设置 - seo实验室...
  7. 图像分割matlab_基于MATLAB的指针示数识别
  8. Android开发之Glide设置View背景图的方法
  9. 使用identity+jwt保护你的webapi(二)——获取jwt token
  10. 脚本解决.NET MVC按钮重复提交问题
  11. 第一章 计算机系统概述 1.1 计算机发展史 [计算机组成原理笔记]
  12. 信息学奥赛C++语言:质数
  13. Lumen 5.4 时区设置
  14. 算法设计 分治, 归并排序, 快速排序
  15. jpa 表注释和字段注释_JPA注释–Hibernate注释
  16. 教育部 计算机类专业代码,全国本科专业代码查询
  17. CE教程:植物大战僵尸(金币数值修改)
  18. Windebug 专题
  19. Alpha 测试(α测试) Beta 测试(β测试)区别
  20. 将照片p成素描画——ps

热门文章

  1. 揭开 Java 注解的神秘面纱
  2. python浮点数加整数_Python中整数和浮点数运算
  3. VMware14配置虚拟网络详解
  4. SpringCloud(若依微服务版为例)集成WebSocket实现前后端的消息推送
  5. 元神一直显示连接服务器失败,原神连接服务器失败怎么办
  6. Snipe-IT部署方案
  7. 精灵图在线测量,自动生成想要图片的宽高及位置
  8. Locust1.x 的监控平台——boomer
  9. matlab八节点六面体程序,八节点六面体等参数元计算程序
  10. CPAN | 配置阿里源