【强化学习】PPO:近端策略优化算法

近端策略优化算法
《Proximal Policy Optimization Algorithms》

论文地址:https://arxiv.org/pdf/1707.06347.pdf

一、 置信域方法(Trust Region Methods)

​ 设 π θ o l d \pi_{\theta_{old}} πθold是先前参数为 θ o l d \theta_{old} θold的策略网络, π θ \pi_{\theta} πθ则是当前待优化的策略网络,则TRPO的优化目标是:
maximize θ E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t ] subject to E ^ t [ KL [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] ≤ δ \begin{align} &\mathop{\text{maximize}}_{\theta}\quad\hat{\mathbb{E}}_t\Big[\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t \Big] \\ &\mathop{\text{subject}\;\text{to}}\quad\hat{\mathbb{E}}_t[\text{KL}[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]]\leq\delta \end{align} maximizeθE^t[πθold(atst)πθ(atst)A^t]subjecttoE^t[KL[πθold(st),πθ(st)]]δ
其中, A ^ t \hat{A}_t A^t t t t时刻的优势函数估计值。 r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta)=\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)是用来控制新旧策略的差异,若差异到则会增加更新幅度,反之则降低更新幅度。约束条件则是新旧策略函数的KL散度,该约束会控制新旧策略的差距不会太大。但是,求解这个带约束的优化问题实现复杂且计算量大。

​ 理论上证明TRPO在实践中,建议使用惩罚项而不是约束,即转换为无约束优化问题。
maximize θ E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t − β KL [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] \mathop{\text{maximize}}_{\theta}\quad\hat{\mathbb{E}}_t\Big[\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t-\beta\text{KL}[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]\Big] maximizeθE^t[πθold(atst)πθ(atst)A^tβKL[πθold(st),πθ(st)]]
其中, β \beta β是超参数。TRPO使用硬约束而不是惩罚项,是因为很难选择单个 β \beta β在所有不同问题上均表现良好。实验也表明,简单选择固定的惩罚系数 β \beta β并用SGD优化惩罚目标是不够的,需要额外的修改。

二、Clipped Surrogate Objective

​ 由于 r t ( θ ) = π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) r_t(\theta)=\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst),显然 r t ( θ o l d ) = 1 r_t(\theta_{old})=1 rt(θold)=1。TRPO最大化”代理“目标函数:
L CPI ( θ ) = E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t ] = E ^ t [ r t ( θ ) A ^ t ] L^{\text{CPI}}(\theta)=\hat{\mathbb{E}}_t\Big[\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t\Big]=\hat{\mathbb{E}}_t[r_t(\theta)\hat{A}_t] LCPI(θ)=E^t[πθold(atst)πθ(atst)A^t]=E^t[rt(θ)A^t]
在没有约束的情况下,最大化 L CPI L^{\text{CPI}} LCPI有可能会大幅度更新策略;因此,需要修改目标函数来惩罚 r t ( θ ) r_t(\theta) rt(θ)远离1。

​ 因此提出目标函数
L CLIP ( θ ) = E ^ t [ min ⁡ ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ] L^{\text{CLIP}}(\theta)=\hat{\mathbb{E}}_t\Big[\min(r_t(\theta)\hat{A}_t,\text{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat{A}_t\Big] LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t]
ϵ \epsilon ϵ截断超参数,通常设置为0.2。 clip() \text{clip()} clip()代表截断函数,负责将 r t r_t rt限制在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon,1+\epsilon] [1ϵ,1+ϵ],以保证收敛性。最后,使用无截断和截断目标函数的最小值,从而形成未截断目标函数的下界。

​ 优势函数A可以分为正负两种情况。若优势函数为正,当 r t > 1 + ϵ r_t>1+\epsilon rt>1+ϵ时,将不提供额外的奖励;若优势函数为负,当 r t < 1 − ϵ r_t<1-\epsilon rt<1ϵ时,同样不提供额外的奖励,这样就能限制新旧策略的差异。
在这里插入图片描述

三、自适应KL惩罚系数

​ 另一种代替或者补充clipped surrogate objective的方案是使用KL散度惩罚,并调整惩罚系数,每次策略更新时使得KL散度 d targ d_{\text{targ}} dtarg达到某个目标值。在作者的实验中,KL惩罚的表现要差于clipped surrogate objective,但其可以作为重要的baseline。

​ 在每次策略更新中执行下面的步骤:

  • 利用若干个minibatch SGD的epochs,优化KL惩罚目标
    L KLPEN ( θ ) = E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t − β KL [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] L^{\text{KLPEN}}(\theta)=\hat{\mathbb{E}}_t\Big[\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t-\beta\text{KL}[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]\Big] LKLPEN(θ)=E^t[πθold(atst)πθ(atst)A^tβKL[πθold(st),πθ(st)]]

  • 计算 d = E ^ t [ KL [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] d=\hat{\mathbb{E}}_t[\text{KL}[\pi_{\theta_{old}}(\cdot|s_t),\pi_{\theta}(\cdot|s_t)]] d=E^t[KL[πθold(st),πθ(st)]]

    d < d targ / 1.5 , β ← β / 2 d<d_{\text{targ}}/1.5,\beta\leftarrow\beta/2 d<dtarg/1.5,ββ/2

    d > d targ × 1.5 , β ← β × 2 d>d_{\text{targ}}\times1.5,\beta\leftarrow\beta\times 2 d>dtarg×1.5,ββ×2

​ 更新后的 β \beta β用于下一次的策略更新。

四、完整算法

在这里插入图片描述

​ 前面推导的surrogate损失函数能够在典型的策略梯度上简单改动即可实现。大多数的优势函数都使用一个可学习的状态价值函数 V ( s ) V(s) V(s)。若策略网络和价值网络共享神经网络架构,那么需要使用一个结合了策略函数和值函数误差项的损失函数。目标函数可以进一步添加熵正则来确保充分的探索。合并这些项,就能够获得下面的目标函数:
L CLIP+VF+S ( θ ) = E ^ t [ L t CLIP ( θ ) − c 1 L t VF ( θ ) + c 2 S [ π θ ] ( s t ) ] L^{\text{CLIP+VF+S}}(\theta)=\hat{\mathbb{E}}_t[L_t^{\text{CLIP}}(\theta)-c_1L_t^{\text{VF}}(\theta)+c_2S[\pi_{\theta}](s_t)] LCLIP+VF+S(θ)=E^t[LtCLIP(θ)c1LtVF(θ)+c2S[πθ](st)]
其中, c 1 c_1 c1 c 2 c_2 c2是控制各个项比例的超参数, S S S是熵正则项, L t SF L^{\text{SF}}_t LtSF是均方误差损失 ( V θ ( s t ) − V t targ ) 2 (V_{\theta}(s_t)-V_t^{\text{targ}})^2 (Vθ(st)Vttarg)2

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

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

相关文章

Java@RequestParam注解和@RequestBody注解接收参数

目录 Java后端接收数据 第一章、后端不写任何注解情况下接收参数1.1&#xff09;后端不写注解postman发出get请求1.2&#xff09;后端不写注解postman发出post请求 第二章、后端写RequestParam注解接收参数2.1&#xff09;postman发出post请求2.2&#xff09;postman发出get请求…

docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…

【计算机网络】网络层——IP协议

目录 一. 基本概念 二. 协议报文格式 三. 网段划分 1. 第一次划分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公网IP 2. DHCP协议 3. 路由器 4. NAT技术 内网穿透(NAT穿透) 五. 路由转发 路由表生成算法 结束语 一. 基本概念 IP指网络互连协议…

android内存管理机制概览

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关概念3.1 垃圾回收3.2 应用内存的分配与回…

Linux与Bash 编程——Linux文件处理命令-L1

目录&#xff1a; linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版&#xff1a;Linux与Windows比较&#xff1a;Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件&#xff1a;mobaxterm的使用&#xff1a;使用电脑命令行连接&#xff1a;sshd的…

一篇讲透:箭头函数、普通函数有什么区别

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

10-让Java性能提升的JIT深度剖析

文章目录 JVM的语言无关性解释执行与JITC1、C2与Graal编译器C1编译器C2编译器 分层编译(了解即可)热点代码热点探测方法调用计数器回边计数器 编译优化技术方法内联锁消除标量替换逃逸分析技术逃逸分析的原理逃逸分析 JVM的语言无关性 跨语言&#xff08;语言无关性&#xff0…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计&#xff0c;从下向上依次为&#xff1a;内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开&#xff0c;在多设备部署场景下&#xff0c;支持根据实际需求裁剪某些非必要的组件…

平衡二叉树的构建(递归

目录 1.概念&#xff1a;2.特点&#xff1a;3.构建方法&#xff1a;4.代码&#xff1a;小结&#xff1a; 1.概念&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;也称为AVL树&#xff0c;是一种二叉树&#xff0c;它满足每个节点的左子树和右…

BDD - Python Behave Runner Script

BDD - Python Behave Runner Script 引言Runner Scriptsubprocess.run 调用 Behave 命令行调用 Behave 提供的 API behave_main 引言 通过终端命令执行 Behave 测试用例&#xff0c;有时 IDE 重启了&#xff0c;还得重新敲一遍命令&#xff0c;很是麻烦&#xff0c;说实话我都…

单例模式(C++实现)

RAII运用 只能在栈上创建对象 只能在堆上创建的对象 单例模式 设计模式 懒汉模式 解决线程安全 优化 饿汉模式 饿汉和懒汉的区别 线程安全与STL与其他锁

Hadoop入门学习笔记——四、MapReduce的框架配置和YARN的部署

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 四、MapReduce的框架配置和YARN的部署4.1. 配置MapReduce…

微擎模块 出现Error: template source ‘common/message’ is not exist!解决方法

今天有会员反馈微课堂分销中心打不开&#xff0c;错误提示模板找不到&#xff1a;Error: template source ‘common/message’ is not exist!&#xff0c;看了下这模板应该微擎框架通用的&#xff0c;进公众号会员管理-会员中心网址居然也打不开&#xff0c;提示一样的错误&…

【hacker送书第11期】Python数据分析从入门到精通

探索数据世界&#xff0c;揭示未来趋势 《Python数据分析从入门到精通》是你掌握Python数据分析的理想选择。本书深入讲解核心工具如pandas、matplotlib和numpy&#xff0c;助您轻松处理和理解复杂数据。 通过matplotlib、seaborn和创新的pyecharts&#xff0c;本书呈现生动直…

5g消息-5G时代短信升级-富媒体智能交互-互联网新入口

在5G时代&#xff0c;运营商和各大手机厂商都在积极推进5G消息的商用&#xff0c;基于短信入口的富媒体消息应用在近两年得到快速发展&#xff0c;并在企业端形成了广泛应用。 作为5G时代的数字原生应用&#xff0c;5G消息支持用户通过文字、图片、音频、视频、位置等富媒体方式…

GIT具体配置步骤详解

GIT配置具体步骤如下 SDK 使用 Repo 工具管理&#xff0c;拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workf…

SpringBoot集成opencc4j实现繁体中文转为简体中文

背景 繁体中文转为简体中文的需求非常常见&#xff0c;特别是在中文语境下的文本处理和翻译应用中。有很多现成的工具和库可以实现这个功能&#xff0c;比如 OpenCC 、 HanLP 等。从网上下载的 MySQL 版诗词数据库中的诗词数据都是繁体字&#xff0c;这里使用 SpringBoot 集成…

Apache Flink 进阶教程(七):网络流控及反压剖析

目录 前言 网络流控的概念与背景 为什么需要网络流控 网络流控的实现&#xff1a;静态限速 网络流控的实现&#xff1a;动态反馈/自动反压 案例一&#xff1a;Storm 反压实现 案例二&#xff1a;Spark Streaming 反压实现 疑问&#xff1a;为什么 Flink&#xff08;bef…

物联网产品设计,聊聊设备OTA的升级

物联网产品设计部分的OTA设备固件是一个非常重要的部分&#xff0c;能够实现升级用户服务、保障系统安全等功能。 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样…

unity HoloLens2开发,使用Vuforia识别实体 触发交互(二)(有dome)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、打包到HoloLens二、Vuforia相关1.配置识别框2.制作一个半透明识别框&#xff1a;3.设置如下4.问题 四 HoloLens2 问题总结 前言 我使用的utniy 版本&#xff1a;Unity 2021.3…