(PPO)近端策略优化学习记录

2023-11-06

(PPO)近端策略优化学习记录

proximal policy optimization (PPO)是策略梯度方法家族的一员,在PPO被提出来之前,它的哥哥(trust region policy optimization)TRPO先被提出,在介绍PPO之前我们先回顾一下TRPO的相关概念。

TRPO

在TRPO方法中,置信域的概念被应用。假设我们有一个需要优化的函数J( θ \theta θ), 但是直接对这个函数进行优化很难,我们可以假设在一个置信域内能够使用另外的一个函数L( θ ∣ θ n o w \theta|\theta_{now} θθnow),( θ n o w \theta_{now} θnow为现在参数的值)来替换原函数,从而将原本的优化目标变成新的函数,方便优化的进行。

整个置信域方法的框架可以分为两步

  • 做近似,在置信域内用L( θ ∣ θ n o w \theta|\theta_{now} θθnow)近似原本的函数J( θ \theta θ)
  • 最大化,在置信域内求 θ ∗ \theta^* θ使得L( θ ∣ θ n o w \theta|\theta_{now} θθnow)有最大值

我们可以将置信域的方法应用到策略优化里面。在TRPO里我们要最大化的目标函数J( θ \theta θ)
J ( θ ) = E S [ E A ∼ π ( ⋅ ∣ S ; θ now  ) [ π ( A ∣ S ; θ ) π ( A ∣ S ; θ now  ) ⋅ Q π ( S , A ) ] ] J(\boldsymbol{\theta})=\mathbb{E}_{S}\left[\mathbb{E}_{A \sim \pi\left(\cdot \mid S ; \boldsymbol{\theta}_{\text {now }}\right)}\left[\frac{\pi(A \mid S ; \boldsymbol{\theta})}{\pi\left(A \mid S ; \boldsymbol{\theta}_{\text {now }}\right)} \cdot Q_{\pi}(S, A)\right]\right] J(θ)=ES[EAπ(S;θnow )[π(AS;θnow )π(AS;θ)Qπ(S,A)]]
在OpenAI的PPO那篇论文中没有用 Q π ( S , A ) Q_{\pi}(S, A) Qπ(S,A)而是用了 A π ( s , a ) A_{\pi}(s, a) Aπ(s,a)来代替,其中 A π ( s , a ) = Q π ( s , a ) − V π ( s ) A_{\pi}(s, a)=Q_{\pi}(s, a)-V_{\pi}(s) Aπ(s,a)=Qπ(s,a)Vπ(s),称作advantage function,用于评估动作的好坏。

可能有些人会对这里的目标函数有些疑惑,后续会讲解这个是怎么来的。

第一步,做近似( u t = r t + γ ⋅ r t + 1 + γ 2 ⋅ r t + 2 + ⋯ + γ n − t ⋅ r n u_{t}=r_{t}+\gamma \cdot r_{t+1}+\gamma^{2} \cdot r_{t+2}+\cdots+\gamma^{n-t} \cdot r_{n} ut=rt+γrt+1+γ2rt+2++γntrn)
L ~ ( θ ∣ θ now  ) = 1 n ∑ t = 1 n π ( a t ∣ s t ; θ ) π ( a t ∣ s t ; θ now  ) ⋅ u t \tilde{L}\left(\boldsymbol{\theta} \mid \boldsymbol{\theta}_{\text {now }}\right)=\frac{1}{n} \sum_{t=1}^{n} \frac{\pi\left(a_{t} \mid s_{t} ; \boldsymbol{\theta}\right)}{\pi\left(a_{t} \mid s_{t} ; \boldsymbol{\theta}_{\text {now }}\right)} \cdot u_{t} L~(θθnow )=n1t=1nπ(atst;θnow )π(atst;θ)ut
第二步,最大化
θ new  = argmax ⁡ θ L ~ ( θ ∣ θ now  ) ;  s.t.  ∥ θ − θ now  ∥ 2 ≤ Δ \theta_{\text {new }}=\underset{\theta}{\operatorname{argmax}} \tilde{L}\left(\theta \mid \theta_{\text {now }}\right) ; \quad \text { s.t. }\left\|\theta-\theta_{\text {now }}\right\|_{2} \leq \Delta θnew =θargmaxL~(θθnow ); s.t. θθnow 2Δ
在第二步中,我们需要求解一个带约束优化问题,而带约束优化问题的求解往往比较复杂,用梯度方法求解可能不太方便。PPO的提出则解决了这个问题

PPO

在PPO的求解里面,将原本的约束优化变成了无约束优化,方便了算法的制定。将原本的优化问题变成了下面的形式
maximize ⁡ θ E ^ t [ π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A ^ t − β KL ⁡ [ π θ o l d ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] \underset{\theta}{\operatorname{maximize}} \hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{\mathrm{old}}}\left(a_{t} \mid s_{t}\right)} \hat{A}_{t}-\beta \operatorname{KL}\left[\pi_{\theta_{\mathrm{old}}}\left(\cdot \mid s_{t}\right), \pi_{\theta}\left(\cdot \mid s_{t}\right)\right]\right] θmaximizeE^t[πθold(atst)πθ(atst)A^tβKL[πθold(st),πθ(st)]]
将原本的约束项取消,变成了有点类似于惩罚项,加到了目标函数的后面。目的是让更新的策略和旧的策略相差不要过大。没有了约束项能够更加方便地使用梯度方法来求解。同时在PPO的目标函数中也出现了
π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) \frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{\mathrm{old}}}\left(a_{t} \mid s_{t}\right)} πθold(atst)πθ(atst)
这个和重要性采样有着关系。PPO是一个 on policy的算法,而相比于off policy能够从经验池中进行经验回放,on policy的算法往往需要一更新参数就要重新采集数据,导致需要花费大量时间采集数据。事实上我们也可以使用重要性采样,从而提高PPO的数据使用效率。

重要性采样

From EasyRL:

假设你有一个函数 f(x),你要计算从 p 这个分布采样 x,再把 x 带到 f 里面,得到 f(x)。你要该怎么计算这个 f(x) 的期望值?假设你不能对 p 这个分布做积分的话,那你可以从 p 这个分布去采样一些数据 x i x^i xi。把 x i x^i xi代到 f(x)里面,然后取它的平均值,就可以近似 f(x)的期望值。

现在有另外一个问题,我们没有办法从 p 这个分布里面采样数据。假设我们不能从 p 采样数据,只能从另外一个分布 q 去采样数据,q 可以是任何分布。
∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \int \mathrm{f}(\mathrm{x}) \mathrm{p}(\mathrm{x}) \mathrm{d} \mathrm{x}=\int \mathrm{f}(\mathrm{x}) \frac{\mathrm{p}(\mathrm{x})}{\mathrm{q}(\mathrm{x})} \mathrm{q}(\mathrm{x}) \mathrm{d} \mathrm{x}=\mathrm{E}_{\mathrm{x} \sim \mathrm{q}}\left[\mathrm{f}(\mathrm{x}) \frac{\mathrm{p}(\mathrm{x})}{\mathrm{q}(\mathrm{x})}\right] f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]

我们可以对原本的公式做上面的变换,我们就可以写成对 q 里面所采样出来的 x取期望值。我们从 q 里面采样 x,然后再去计算 f ( x ) p ( x ) q ( x ) f(x) \frac{p(x)}{q(x)} f(x)q(x)p(x),再去取期望值。所以就算我们不能从 p 里面去采样数据,只要能够从 q 里面去采样数据,然后代入上式,你就可以计算从 p 这个分布采样 x代入 f以后所算出来的期望值。

在上面的公式中, p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)就称作重要性权重,目的是修正两个分布之间的差别。值得注意的是两个分布之间的差别不能太大,因为经过了变换之后,公式算出来的结果的方差和原来不同。这也就是为什么PPO算法中有一个关于新旧策略的KL散度的计算,当二者相差过大时重要性采样的效果可能不够好。也就是说我们需要更新新策略,但是又不能让它更新的太快。有了重要性采样这个工具之后我们就可以更高效地利用PPO算法中的数据了。具体表现为可以使用旧的策略采样 θ ′ \theta' θ得到很多的数据,然后多次更新 θ \theta θ,等 θ \theta θ更新了很多次之后,再重新用现在更新出来的参数进行数据的收集。只需要再乘上一个重要性权重就可以保证训练的效果。

PPO还有着第二种版本PPO_Clip,其思路也是限制新的策略和旧的策略不能够相差过大。
L C L I P ( θ ) = E ^ t [ min ⁡ ( r t ( θ ) A ^ t , clip ⁡ ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{C L I P}(\theta)=\hat{\mathbb{E}}_{t}\left[\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_{t}\right)\right] LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]
其中 E ^ t [ π θ ( a t ∣ s t ) π θ old  ( a t ∣ s t ) A ^ t ] = E ^ t [ r t ( θ ) A ^ t ] \hat{\mathbb{E}}_{t}\left[\frac{\pi_{\theta}\left(a_{t} \mid s_{t}\right)}{\pi_{\theta_{\text {old }}}\left(a_{t} \mid s_{t}\right)} \hat{A}_{t}\right]=\hat{\mathbb{E}}_{t}\left[r_{t}(\theta) \hat{A}_{t}\right] E^t[πθold (atst)πθ(atst)A^t]=E^t[rt(θ)A^t]。看起来有些复杂,其实很朴素。clip的意思是在括号里面有三项,如果第一项小于第二项的话,那就输出 1− ϵ \epsilon ϵ。第一项如果大于第三项的话,那就输出 1+ ϵ \epsilon ϵ ϵ \epsilon ϵ是一个超参数。

在这里插入图片描述

参考资料:

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

(PPO)近端策略优化学习记录 的相关文章

随机推荐

  • mysql查询缓存打开、设置、参数查询、性能变量意思

    一般 我们会把 query cache type 设置为 ON 默认情况下应该是ONmysql gt select query cache type query cache type ON user name from users wher
  • 我是怎么做到副业月入过万的「全程干货」

    如果你们每天有3 4个小时的空余时间 选择一个好的副业 月入再多一万是没有问题的 当然 选择副业 避坑很重要 我们先来看下选择副业的几个标准 1 低成本 不能有太多的金钱投入 2 低风险 不能有赌博心理 千万不能随便放弃主业 3 受众广 有
  • 不登录,不用任何技术,一分钟下载网易云音乐

    最近在写 Python 爬虫 想爬取网易云的歌曲并下载或者保存 Url 到 MongoDB 发现了一个可以快速下载网易云歌曲的方式 不需要登录 也不需要什么技术 简单几步就可以网易云上的音乐 因此分享给你 希望对你有帮助 如果你有其他的方法
  • 集成学习思想

    一 集成学习 Ensemble Learning 集成学习的思想是将若干个学习器 分类器 回归器 组合之后产生一个新的学习器 集成学习的主要思想 1 Bagging 代表算法是随机森林 Random Forest 2 Boosting 代表
  • springboot 2.x 集成 drools 7.x

    简介 springboot 2 0 4 RELEASE 集成 drools 7 11 0 Final 1 项目结构 2 pom xml文件
  • 51单片机指令系统详解

    指令系统 微型机的功能是由指令系统体现的 所以 寻址方式和指令系统是衡量微型机的重要指标 MSC 51的指令系统一共有111条指令 包括单字节49条 双字节46条和三字节16条 按周期分 有单周期 双周期和三周期指令 在晶振频率为12MHZ
  • 【问题记录系列】java.lang.IndexOutBoundsException:Index: 1,Size:1

    java lang IndexOutBoundsException 1 问题背景 2 问题展示 图片 拍摄图 3 问题解决 图片 debug图一 debug图二 4 解决后的效果 1 问题背景 昨天写好的重置密码的接口 与前端联调的过程中
  • Python opencv 机器学习 7. KMeans k值聚类 两个特征

    import cv2 import numpy as np from matplotlib import pyplot as plt 只有一个特征 只由人们的身高决定T恤大小 x np random randint 25 50 25 2 生
  • No module named ‘chinesecalendar‘

    在学习python的时候又遇见了这个问题 我cmd里面执行 pip install chinesecalendar 命令 执行结果出现successfully说明安装成功了 然后我又在 jupyter里进行 pip install chin
  • 实践:SSDEEP相似度比较

    2020 06 03 其实一开始的时候 我是想看看 他们都是使用什么特征来进行比较 今天下午就想找一些相关的相似度比较的文章 看看有没有相关的实践 然后发现谷歌出来的大量结果都是论文 我是想找一些实际的代码 不过 通过调整关键词到mediu
  • ARM编译器常用的预定义宏

    ARM编译器预定义了许多宏 这些宏提供有关工具链版本号和编译器选项的信息 编译器版本 宏为 ARMCC VERSION 数字形式呈现 使用方法如下 rt kprintf Compiler Version u r n ARMCC VERSIO
  • kudu集群Tablet Server异常:Check failed: _s.ok() Bad status: Service unavailable: Cannot initialize clock

    背景 CDH 6 3 1集群上kudu实例Tablet Server异常无法启动 根据报错信息提示时钟同步问题无法启动Check failed s ok Bad status Service unavailable Cannot initi
  • 串口模拟器VSPD(附VSPD安装包)

    串口通讯想必做硬件开发和软件的人来说都相当了解 以前的电脑 基本标配都包含一个串口 但现在的电脑 基本都没有配置串口了 如果要使用串口的功能 基本就要用一个USB转串口的硬件模块 虚拟串口 虚拟 COM 端口 应该很多人都知道 也就是一种模
  • 设计模式_19 状态模式(含 UML图 和 C++代码)

    设计模式 19 状态模式 19 状态模式 19 1 概念 19 2 结构 19 3 实现 19 3 1 UML图 19 3 2 代码 19 3 3 测试结果 19 4 优缺点 19 4 1 优点 19 4 2 缺点 19 5 使用场景 re
  • Mapper文件注入问题

    Mapper文件注入问题 UserMapper that could not be found 原因分析 解决方案 程序正常运行 但是注入类爆红问题 原因分析 解决方法 UserMapper that could not be found
  • Redirecting functions in shared ELF libraries

    Redirecting functions in shared ELF libraries By Apriorit Inc Anthony Shoumikhin 2 Apr 2010 4 83 13 votes Download elf h
  • 电感的两种模式——DCM和CCM的区别

    DCM断续模式 电流从零开始上升的三角波 CCM连续模式 电流从某一非零值上升的侧梯形波 波形不同 在变压器的初级电流 CCM模式波形为梯形波 而DCM模式为三角波 在变压器的次级整流管波形上 CCM同样为梯形 而DCM模式还是三角波 本质
  • JDK安装以及环境变量配置(操作步骤)

    JDK安装以及环境变量配置 操作步骤 安装包 一 环境准备 Windows10 jdk1 8 0 131 二 下载并安装JDK 安装包下载 三 环境变量配置 1 右键桌面上 我的电脑 gt gt 属性 在弹出的页面上点击 高级系统设置 2
  • C++无穷的表示

    在C 中 有时候会遇到无穷的情形 如何表示无穷 首先 C 每种数据类型都有固定的位数 从而可以用数值位全1来表示最大数据 C 本身也定义了一些这样的常量来供使用 如最大无符号整型数据是UCHAR MAX 十进制数为255 1十六进制数为0x
  • (PPO)近端策略优化学习记录

    PPO 近端策略优化学习记录 proximal policy optimization PPO 是策略梯度方法家族的一员 在PPO被提出来之前 它的哥哥 trust region policy optimization TRPO先被提出 在