这是PG的基础篇,在深度强化学习系列中,有结合例子和监督学习的深刻理解PG的进阶篇。

一、前言

之前我们讨论的所有问题都是先学习action value,再根据所得的action value 来选择action(无论是根据greedy policy选择使得action value最大的action ,还是根据 ϵ \epsilon ϵ-greedy policy以 1 − ϵ 1-\epsilon 1−ϵ的概率选择使得action value最大的action ,action的选择都离不开action value 的计算)。即没有action value的估计值就无法进行action选择,也就没有Policy,这类方法被称为value-based methods。但我们难道不可以直接产生不依赖于action value的policy吗?当然可以,这类直接生成action的方法就是policy-based methods。他们的关系如下:

  • value-based方法,需要计算价值函数(value function),根据自己认为的高价值选择行为(action)的方法,如Q Learning, sara, 之后会提到的Deep Q Network(DQN)。
  • policy-based方法,不需要根据value function选择action,可以直接得出policy的方法,如PG。
  • 图中第三类方法结合了上述两者,即计算value function,但不直接根据value function选择action,action 由policy-based方法得到。

本章用性能函数 J ( θ ) J(\theta) J(θ)的梯度来计算policy 参数 θ \theta θ:

该方法旨在求出使得 J ( θ ) J(\theta) J(θ)最大的policy 参数 θ \theta θ。这种方法被称为Policy Gradient。在episode case中, J ( θ ) J(\theta) J(θ)为start state value,在continuing case中, J ( θ ) J(\theta) J(θ)为第10章第4节提到的average reward rate。

二、Policy Approximate and its Advantage

在Policy Gradient(PG)中,Policy可以用任何参数表示成任意形式,只要 π ( a ∣ s , θ ) \pi(a|s,\theta) π(a∣s,θ)与 θ \theta θ一一对应,且 ∇ θ π ( a ∣ s , θ ) \nabla_\theta \pi(a|s,\theta) ∇θ​π(a∣s,θ)存在且有限。实际运用中,为了保证一定的探索性(Exploration),通常假设policy 是不确定的(即对所有s,a, θ \theta θ而言都有 θ π ( a ∣ s , θ ) ∈ ( 0 , 1 ) \theta \pi(a|s,\theta) \in (0,1) θπ(a∣s,θ)∈(0,1))。此处,我们先介绍离散动作空间的参数化,并说明这种方法比value-based方法好在哪里。连续空间的PG在第8节介绍。

当 action space 离散且不太大时,一般对每个state-action pair 都有一个带参数的性能函数 h ( s , a , θ ) ∈ R h(s,a,\theta) \in R h(s,a,θ)∈R。**性能函数值越大,对应的action被选择的可能性也越大。**例如,根据exponential softmax distribution:

其中 e x p ( x ) = e x , e ≈ 2.71818 exp(x) = e^x, e\approx2.71818 exp(x)=ex,e≈2.71818为自然对数,注意,这需要每一个state对应的所有action probabilities的和为1。性能函数的表达形式比较随意,可以是之前提到的所有函数逼近器。如可以有深层神经网络构成,此时 θ \theta θ表示网络的所有权重(如第16章中将说到的AlphaGo);也可以是特征量的线性函数:

用(13.2)式选择action的明显优点就是可以获得一个deterministic policy,而不是根据 ϵ \epsilon ϵ-greedy 从action value中选择action(这样有 ϵ \epsilon ϵ的概率会选到一个随机action)。讲到这里,细心的你应该发现了一个问题,这 “性能函数值越大,对应的action被选择的可能性也越大” 是不是和value function选择 action 很像,那为啥不直接用value function作为性能函数呢?

那很自然可以想到根据 action value用 softmax选择action, action-value估计值最终会收敛到对应的true values(通常是不同的有限数,可以转化为0到1之间的概率),因此通常会获得一个确定的策略(deterministic policy)。如果softmax包含一个随着时间降温的温度参数,那么可以得到一个deterministic policy, 但在实际运用时,很难在没有true action value的先验知识时,选择衰减规律或初始化温度参数。

而性能函数不一样,他们不会收敛到一个确定性的值,另外他们会趋向于生成optimal stochastic policy。如果optimal policy是deterministic的,那么optimal action对应的性能函数将远大于suboptimal actions对应的性能函数。

上述解释了policy-based方法和value-based方法在生成policy上的差异:一个随机,一个确定。那么还有什么不同呢?


value-based的特点:

  • 这类方法通常会获得一个确定的策略(deterministic policy),但很多问题中的最优策略是随机策略(stochastic policy)。(如石头剪刀布游戏,如果确定的策略对应着总出石头,随机策略对应随机出石头、剪刀或布,那么随机策略更容易获胜)
  • value function 的微小变化对策略的影响很大,可能直接决定了这个action是否被选取
  • 在连续或高维度动作空间不适用。 因为这类算法的本质是连续化了value function,但动作空间仍然是离散的。对于连续动作空间问题,虽然可以将动作空间离散化处理,但离散间距的选取不易确定。过大的离散间距会导致算法取不到最优action,会在这附近徘徊,过小的离散间距会使得action的维度增大,会和高维度动作空间一样导致维度灾难,影响算法的速度。

Policy-based method 克服了上述问题,可以用于连续或高维度动作空间,且可以生成stochastic policy。

三、The Policy Gradient Theorem

了解了policy-based方法的优点,那么现在来聊聊具体实现的事情吧!下面来说一下,在episode case 和 continuing case中,性能函数 J ( θ ) J(\theta) J(θ)的一般表达。

在episode case中,通常定义 J ( θ ) J(\theta) J(θ)为一个episode下start state的value,为了简化表达,假设每个episode从某一特定state s 0 s_0 s0​开始,则

其中, v π θ v_{\pi_\theta} vπθ​​是 π θ \pi_\theta πθ​的true value function, π θ \pi_\theta πθ​是由 θ \theta θ决定的Policy,假设no discounting ( γ = 1 \gamma = 1 γ=1)。

对函数逼近而言,朝着确保policy提升的方向改变policy parameter是有挑战的。问题在于性能函数取决于action 选择和state distribution,这两者都受到policy parameter的影响。 给定一个state,policy parameter对action和reward的影响可以直接根据参数表达式计算出来。但policy 对state distribution 的影响是关于环境的函数,通常是未知的。 那么我们如何根据Policy parameter 求解性能函数的Gradient呢?

幸运的是,Policy Gradient Theorem可以回答这个问题:

其中,gradient是关于 θ \theta θ偏导数的列向量, π \pi π是参数向量 θ \theta θ对应的policy。符号表示“与…成比例”。在episode case中,比例系数是episode的平均长度,在continuing case中,比例系数为1,即二者等价, μ \mu μ是 π \pi π下的on-policy distribution。PG定理证明如下:

四、REINFORCE:Monte Carlo Policy Gradient

下面介绍第一个PG方法,回忆SGD公式(13.1)需要获得一系列采样数据,这些sample gradient的期望值和actual gradient成比例。这些sample gradient只需要和gradient成比例就行,因为所有的比例系数都可以纳入 α \alpha α中。PG定理给了gradient成比例的确切表达式,那么接下来就是如何获得这些采样数据。PG定理的右侧是在policy π \pi π下state出现的频率和state的乘积累加和。当遵循policy π \pi π时,有

给出一个action 的概率 π ( a ∣ s t , θ ) \pi(a|s_t,\theta) π(a∣st​,θ),假设选择了 a = A t a=A_t a=At​则 π ( a ∣ s t , θ ) = 1 \pi(a|s_t,\theta)=1 π(a∣st​,θ)=1,对 a ≠ A t a\neq A_t a̸​=At​ 则 π ( a ∣ s t , θ ) = 0 \pi(a|s_t,\theta)=0 π(a∣st​,θ)=0:

代入(13.1):

这就是REINFORCE算法,这种更新方式每次增量都与 G t G_t Gt​和一个向量(选择action的概率梯度和选择action的概率之比)乘积成比例,该向量是增强重复选择 A t A_t At​的方向:选最高的return 对应的action或最多次被选中的action。

由于REINFORCE算法需要一个episode结束后才更新参数,所以是MC(蒙特卡罗)方法,伪代码如下:

∇ θ π ( A t ∣ S t , θ t ) π ( A t ∣ S t , θ t ) \frac{\nabla_\theta\pi(A_t|S_t,\theta_t)}{\pi(A_t|S_t,\theta_t)} π(At​∣St​,θt​)∇θ​π(At​∣St​,θt​)​是REINFORCE中唯一出现policy parameter的地方,通常叫做eligibility vector,常记作 ∇ θ l n π ( A t ∣ S t , θ t ) ( ∇ l n x = ∇ x x ) \nabla_\theta ln\pi(A_t|S_t,\theta_t)(\nabla lnx=\frac{\nabla x}{x}) ∇θ​lnπ(At​∣St​,θt​)(∇lnx=x∇x​)。作为一个SGD方法,REINFORCE理论上收敛。

五、REINFORCE with Baseline

(13.5)中的PG可以增加一个action value的baseline(基准),

其中, b ( s ) b(s) b(s)可以是任意函数,甚至是随机变量,只要与a无关都行,该等式成立的原因如下:

(13.8)的带baseline 的PG算法,可以根据上一节的方式生成更新公式:

由于baseline的均值为0,则上式是REINFORCE的严格泛化,虽然baseline的期望值对更新无影响,但对更新的方差影响很大。很自然会以state value的估计值 v ^ ( s t , w ) \hat v(s_t,\mathbf w) v^(st​,w)作为baseliine,其中 w \mathbf w w是前几章中的方法学习到的权重参数,因为REINFORCE是MC方法,所有也可以用MC方法来学习 w \mathbf w w,REINFORCE with baseline的伪代码如下:

六、Actor–Critic Methods

尽管REINFORCE-with-baseline方法同时学习了state-value函数,但不是actor-critic方法,因为state-value function只用于baseline,而不是critic。

REINFORCE-with-baseline 是无偏的,但是会收敛到一个局部最小值,但和所有的MC方法一样,学习速度慢,方差大,不方便用于连续或在线问题。之前说TD方法可以消除这些隐患,multi-step方法可以选择bootstrapping的程度,为了利用这些优势,采用AC结构,PG为Actor,bootstrapping为critic。

首先,考虑one-step AC ,即PG与TD(0),Sarsa(0)和Q-learning方法结合,one-step方法的特点在于是online且incremental,避免了复杂的eligibility trace。他们是一种独特的eligibility trace方法,one-step AC方法如下:

通常用semi-gradient TD(0)求解,算法伪代码如下:

七、Policy Gradient for Continuing Problems

前几节我们介绍了episode case下的PG方法,接下来我们来看continuing case下的PG。10.3中(本系列第十章第四小节),我们介绍了连续问题的average rate reward:

其中, μ \mu μ是policy π \pi π下的steady-state distribution , μ ( s ) = l i m t → ∞ P r { S t = s ∣ A 0 : t ∼ π } \mu(s) = lim_{t_\to\infty}Pr\{S_t =s|A_{0:t}\sim\pi\} μ(s)=limt→​∞​Pr{St​=s∣A0:t​∼π}假设其存在且依赖于 S 0 S_0 S0​(ergodicity assumption)。注意这是一个稳态分布下的值,当在policy π \pi π下选择action时,会保持在同一个distribution:

定义 v π ( s ) = E π [ G t ∣ S t = s ] v_\pi(s) = E_\pi[G_t|S_t=s] vπ​(s)=Eπ​[Gt​∣St​=s], q π ( s , a ) = E [ G t ∣ S t = s , A t = a ] q_\pi(s,a)=E[G_t|S_t=s,A_t=a] qπ​(s,a)=E[Gt​∣St​=s,At​=a].其中:

episode case中的PG定理(13.5)在continuing case 中仍然是对的。证明如下框图所示。forward 和 backward view 等式保持不变,AC算法伪代码如下:

八、Policy Parameterization for Continuous Actions

Policy-based methods 提供了一种处理较大action space甚至continuous spaces的有效方法。不通过计算所学的每个action 的概率,此处我们学习概率分布。举个例子,action set可能是实数,根据Gaussian distribution (正态分布)选择action。

正态分布的概率密度函数通常表示如下:

其中, μ \mu μ和 σ \sigma σ 是正态分布的均值和均方差,此处 π ≈ 3.14159 \pi \approx 3.14159 π≈3.14159。 p ( x ) p(x) p(x)是概率密度,不是概率,可以大于1, p ( x ) p(x) p(x)下x轴之上图形的面积为1。

为了生成policy parameterization,可以将policy定义为real-valued scalar action 下的正态分布概率密度,其中,均值和均方差都是policy paramater 的函数,如下:

其中 μ : S × R d ′ → R \mu:S \times R_d' \to R μ:S×Rd′​→R, σ : S × R d ′ → R + \sigma:S \times R_d' \to R^+ σ:S×Rd′​→R+是两个带参数的函数逼近器。为了完成这个例子,我们需要找到这些逼近器的形式。此处,我们将policy parameter向量分为两部分 θ = [ θ μ , θ σ ] T \mathbf \theta = [\mathbf \theta_\mu,\mathbf \theta_\sigma]^T θ=[θμ​,θσ​]T,一部分用于逼近均值,另一部分用于逼近均方差。均值可以是一个线性逼近,均方差必须是正值,最好是线性函数的指数形式,因此:

其中, x μ ( s ) \mathbf x_\mu(s) xμ​(s) 和 x σ ( s ) \mathbf x_\sigma(s) xσ​(s)是state的特征向量。有了这些定义,所有本章讨论的算法都可以用来学习如何选择real-valued actions。

九、总结

本章阐述了value-based methods和policy-based methods的优缺点,引入了性能函数 J ( θ ) J(\mathbf \theta) J(θ),介绍了PG定理,并详细介绍了episode case下的PG方法:REINFORCE 、REINFORCE-with-baseline(减小偏差,但方差较大)。介绍了结合PG 和value-based methods的Actor{Critic Methods,以及 continuing case下的PG。

David Silver 课程
Reinforcement Learning: an introduction

强化学习系列(十三):Policy Gradient Methods相关推荐

  1. 强化学习系列之Policy Gradient算法

    一. 背景 1.1 基础组成部分 强化学习里面包含三个部件:Actor,environment,reward function Actor : 表示角色,是能够被玩家控制的. Policy of Ac ...

  2. 强化学习系列文章(二十三):AirSim Python API图像与图像处理

    强化学习系列文章(二十三):AirSim Python API图像与图像处理 参考网址:https://microsoft.github.io/AirSim/image_apis/#segmentat ...

  3. 深度强化学习系列(14): A3C算法原理及Tensorflow实现

    在DQN.DDPG算法中均用到了一个非常重要的思想经验回放,而使用经验回放的一个重要原因就是打乱数据之间的相关性,使得强化学习的序列满足独立同分布. 本文首先从Google于ICML2016顶会上发的 ...

  4. 强化学习系列之翻译OpenAI用户手册(一)

    强化学习系列文章 第一章 强化学习入门 第二章 翻译OpenAI用户手册(一) 第三章 翻译OpenAI用户手册(二) 第四章 翻译OpenAI用户手册(三) 目录 用户手册 1.简介 1.1 这是什 ...

  5. 深度强化学习系列: 最全深度强化学习资料

    关于这项工作: 本工作是一项由深度强化学习实验室(Deep Reinforcement Learning Laboratory, DeepRL-Lab)发起的项目. 文章同步于Github仓库: ht ...

  6. 强化学习系列文章(二十七):VPG+Beta分布在CartPoleContinuous环境中的应用

    强化学习系列文章(二十七):VPG+Beta分布在CartPoleContinuous环境中的应用 在第七篇笔记(https://blog.csdn.net/hhy_csdn/article/deta ...

  7. 强化学习系列(五):蒙特卡罗方法(Monte Carlo)

    一.前言 在强化学习系列(四):动态规划中,我们介绍了采用DP (动态规划)方法求解environment model 已知的MDP(马尔科夫决策过程),那么当environment model信息不 ...

  8. 强化学习系列(一):强化学习简介

    一.强化学习是什么? 首先,我们思考一下学习本身,当一个婴儿在玩耍时可能会挥舞双手,左看右看,没有人来指导他的行为,但是他和外界直接通过了感官进行连接.感知给他传递了外界的各种信息,包括知识等.学习的 ...

  9. ChatGPT 使用 强化学习:Proximal Policy Optimization算法(详细图解)

    ChatGPT 使用 强化学习:Proximal Policy Optimization算法 强化学习中的PPO(Proximal Policy Optimization)算法是一种高效的策略优化方法 ...

最新文章

  1. 【Android Protobuf 序列化】Protobuf 性能测试 ( fastjson 序列化与反序列化 | gson 序列化与反序列化 | 三种序列化与反序列化性能对比 )
  2. Nginx卡在登录页面不断跳转如何解决?(登不进登录页面)ip_hash机制(还是没解决)
  3. 正则表达式收藏(五)之微软的正则
  4. C语言【字符串数组交叉输出】
  5. 【转】细说.NET 中的多线程 (一 概念)
  6. 系统新模块增加需要哪些步骤_在1769系统里使用MVI69MCM的有福了
  7. 万能套用PS分层模板,不怕老板捉急!
  8. 判断相等_C语言判断字符串是否为回文
  9. IDEA Unmapped Spring configuration files found.
  10. js判断undefined nan等
  11. jquery 常用组件的小代码
  12. C#笔记(一):类型,泛型,集合
  13. Android TV CTS 测试认证汇总
  14. AMOS软件介绍开篇;草堂君给数据分析学习者的几点建议
  15. 相机下载_SonyPMCARE, 反向工程索尼PlayMemories相机应用
  16. java中文转英文_Java中文转换为英文拼音
  17. 【strlen函数的使用及strlen函数的三种模拟实现】· C语言详解库函数篇(一)
  18. UI导航栏设计规范及注意事项有哪些?
  19. SpringBoot利用Aop打印入参出参日志
  20. 虚拟现实是计算机软件么,虚拟现实技术对于电脑软件、硬件的配置要求有哪些?...

热门文章

  1. 记录:tensoflow改错TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Te
  2. 如何让2007Office兼容低版本的文档?
  3. service中调用摄像头在无页面显示的情况下进行录像
  4. 有语音的计算机玩法,用了6年的华为,才知道语音助手有这么多的玩法
  5. pytorch中矩阵计算的一些方法|CSDN创作打卡
  6. 不定数量的多重循环简单实现
  7. Linux 网络wifi操作常用命令,查看WiFi密码
  8. 计算机用户文件夹怎么重命名,用户文件夹怎么改名
  9. 从Big Dog到Spot Mini:波士顿动力「四足机器人」进化史概览
  10. html 页面自动滚动,js监听html页面的上下滚动事件方法