强化学习是一个通过奖惩来学习正确行为的机制. 家族中有很多种不一样的成员, 有学习奖惩值, 根据自己认为的高价值选行为, 比如 Q learning, Deep Q Network(value based), 也有不通过分析奖励值, 直接输出行为的方法, Policy Gradients (policy based). 甚至我们可以为 Policy Gradients 加上一个神经网络来输出预测的动作,基于策略的方法对应的优点和缺点。最大的优点就是在状态无限多时,or连续时,基于值的是没法构建这么大的Q矩阵的,这时候直接估计策略调整策略是一种目前可行的选择。

Policy Gradients 做出的东西有很多有意思的成果,比如动态杠杆举物平衡,人模型行走等。

具体而言,别人总结基于策略有以下优缺点:

基于策略学习的优缺点

优点:

1. 基于策略的学习可能会具有更好的收敛性,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善;但是上讲提到有些价值函数在后期会一直围绕最优价值函数持续小的震荡而不收敛。

2. 在对于那些拥有高维度或连续状态空间来说,使用基于价值函数的学习在得到价值函数后,制定策略时,需要比较各种行为对应的价值大小,这样如果行为空间维度较高或者是连续的,则从中比较得出一个有最大价值函数的行为这个过程就比较难了,这时候使用基于策略的学习就高效的多。

3. 能够学到一些随机策略,下文举了一个很好的例子;但是基于价值函数的学习通常是学不到随机策略的。

4. 有时候计算价值函数非常复杂。比如当小球从从空中某个位置落下你需要左右移动接住时,计算小球在某一个位置时采取什么行为的价值是很难得;但是基于策略就简单许多,你只需要朝着小球落地的方向移动修改策略就行。

缺点:

原始的、未经改善(Naive)的基于策略的学习有时候效率不够高,有时候还有较高的变异性(方差,Variance)。因为基于价值函数的策略决定每次都是推促个体去选择一个最大价值的行为;但是基于策略的,更多的时候策略的选择时仅会在策略某一参数梯度上移动一点点,使得整个的学习比较平滑,因此不够高效。有时候计算朝着梯度方向改变的增量也会有较高的变异性(方差),以至于拖累了整个算法速度,但是通过一些修饰,可以改进。

在具体解决问题时,需要评估问题的特点来决定是主要使用基于价值的学习还是基于策略的学习。

一个论文上提到应用随机策略的好的例子如下:

随机策略有时是更优策略

比如我们用某一个格子的某个方向是否有墙挡住这些特征来描述格子状态(也就是四面墙是否通),也就是作为格子世界状态空间的特征时,就会发生灰色格子状态一样的情况,这就是状态重名(Aliased)。

在下图的格子世界中,个体需要避免碰到骷髅而尽可能找到钱袋子。在上方的5个格子组成的“长廊”中,当以某些对个体来说较容易观测的特征来描述状态空间时,灰色的两个格子将会是无法区分的。

假设我们需要经过图5迷宫中的一些方格拿到钱袋,采用基于值的方法在确定的状态下将得到确定的反馈,因此在使用这种方法决定灰色(状态)方格的下一步动作(左或右)是确定的,即总是向左或向右,而这可能会导致落入错误的循环中(左一白格和左二灰格)而无法拿到钱袋。(基于值就可能永远循环)也许有人要质疑这时的状态不应用一个方格而是迷宫中的所有方格表示,但是考虑如果我们身处一个巨大的迷宫无法获得整个迷宫的布局信息,如果在相同的可感知的状态下总是做出固定的判断的话,仍然会导致在某个局部原地打转。事实上很多实际问题特别是对弈类问题都有类似的特征,即需要在貌似相同的状态下应用不同的动作,例如围棋中的开局。

策略梯度正是为了解决状态量过大或者状态量完全决定策略需要引入随机而产生的,它的秘密武器就是随机(Stochastic)。首先随机能提供非确定的结果,但这种非确定的结果并不是完全的随意而是服从某种概率分布的随机,策略梯度不计算奖励(reward)而是使用概率选择动作,这样就避免了因为计算奖励而维护状态表。 策略梯度的基本原理是通过反馈调整策略,具体来说就是在得到正向奖励时,增加相应的动作的概率;得到负向的奖励时,降低相应动作的概率。下面左图中的绿点表示获得正向奖励的动作,右图表示更新后的策略,可以发现产生正向奖励的区域的概率都增加了(离圆心的距离更近)。

策略梯度policy Gradient算法理解

策略梯度算法是强化学习里面一种典型基于策略优化的算法,它隐式地估计价值,并直接根据经验调整策略。policy Gradient并非自我策略迭代,这种策略梯度的算法归类于策略优化算法中,而不是以迭代为基础的动态规划算法。

Policy Gradient不通过误差反向传播,它通过观测信息根据行为直接进行反向传播,利用reward奖励直接对选择行为的可能性进行增强和减弱,好的行为会被增加下一次被选中的概率,不好的行为会被减弱下次被选中的概率。

算法的简化版如下:

log(Policy(s,a))*V 中的 log(Policy(s,a)) 表示在 状态 s 对所选动作 a 的吃惊度, 如果 Policy(s,a)概率越小, 反向的 log(Policy(s,a)) (即 -log(P)) 反而越大. 如果在 Policy(s,a) 很小的情况下, 拿到了一个 大的 R, 也就是 大的 V, 那 -log(Policy(s, a))*V 就更大, 表示更吃惊, (我选了一个不常选的动作, 却发现原来它能得到了一个好的 reward, 那我就得对我这次的参数进行一个大幅修改). 这就是 log(Policy)*V 的物理意义。

表示每次更新以 1轮游戏内容作为标准进行迭代,每次动作调整一次。

下面来更加深化理解梯度策略:

本质上策略梯度是尝试使用参数θ逼近拟合状态值函数(经常是神经网络)Vπ(s)和状态动作值函数Qπ(s,a)可以理解为我们使用比如神经网络的的function来逼近拟合状态值函数Vπ(s)和状态动作值函数Qπ(s,a)的分布。

Vθ(s)≈Vπ(s)

Qθ(s,a)≈Qπ(s,a)

并且将策略Policy参数化为πθ(s,a)=P(a|s,θ),使用model-free的方法,不借助与agent做决策而是将agent丢入不确定的动态环境下,不提供动态环境的信息,让agent自己瞎溜达根据所获得的策略信息更新参数。

于是问题就变成了如何优化参数θ,使模型work。 而优化首先需要找出目标函数。

那优化策略的最终目的是什么?尽可能获得更多的奖励。我们设计一个目标函数来衡量策略的好坏,针对不同的问题类型,这里有三个目标函数可以选择:

1. Start value:在能够产生完整Episode的环境下,也就是在个体可以到达终止状态时,我们可以用这样一个值来衡量整个策略的优劣:从某状态s1算起知道终止状态个体获得的累计奖励。这个值称为start value. 这个数值的意思是说:如果个体总是从某个状态s1开始,或者以一定的概率分布从s1开始,那么从该状态开始到Episode结束个体将会得到怎样的最终奖励。这个时候算法真正关心的是:找到一个策略,当把个体放在这个状态s1让它执行当前的策略,能够获得start value的奖励。这样我们的目标就变成最大化这个start value:

2. Average Value:对于连续环境条件,不存在一个开始状态,这个时候可以使用 average value。意思是 考虑我们个体在某时刻处在某状态下的概率,也就是个体在该时刻的状态分布,针对每个可能的状态计算从该时刻开始一直持续与环境交互下去能够得到的奖励,按该时刻各状态的概率分布求和:

注:  是在当前策略下马尔科夫链的关于状态的一个静态分布。

3. Average reward per time-step:又或者我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励安概率求和得到

也就是常用的目标函数,根据不同的任务需求选取更适合的函数。在之后的优化手法大致相同,后面主要以第一个函数作为目标函数。

强化学习的目标就是找到一个参数θ   ,使得这一条马尔科夫链所获得的期望rewards最大,即找到一个最优的策略.

那么我们怎么去评估强化学习的目标函数呢?

看上面图中的  ,一种方法就是从策略 πθ 中采样(Sample)多条马尔科夫链,使用平均奖励来近似.

另一种方法就是直接求导(direct policy differentiation),

通常使用梯度下降法通过最大化J(θ)来确定θ的取值。定义策略梯度为:

记一条马尔科夫链的奖励和为  , 所以根据期望的定义,目标函数可以写为:

补充小知识:一个函数的导数等于函数与它的对数函数的导数的乘积!(可以用来使式子简化)

对目标函数 进行求导得到:

(第一步使用了:积分的导数等于导数的积分,最后一步使用了期望的定义)

这里的  表示从策略 π中采样多条马尔科夫链,可以表示成更具体的概率相乘的形式,并两边取对数得到:

注意上面取对数后右边三项,第一项表示初始状态,第二项表示马尔科夫链中所有actions的对数概率和,第三项表示状态转移,第一项和第三项与 θ  无关,对θ   求导为0,只剩下第二项,因此目标函数对 θ  的导数可以写成如下:

观察一下最后的目标函数对 θ的导数的式子,它表示从策略 π中采样多条马尔科夫链,后面第一项表示马尔科夫链中actions的对数概率的导数和,第二项表示马尔科夫链的奖励和.(视频中说的是trajectory,我觉得可以使用马尔科夫链来理解)

我们可以通过采样(sample)的方法来近似求解目标函数的导数,

根据强化学习算法的框架,

可以设计出一个策略梯度的强化学习算法,首先是采样(sample),然后评估奖励,计算策略梯度,更新参数,使用梯度上升算法优化策略函数.算法伪代码如下:

对比监督学习中常用的最大似然,就形式上来看策略梯度多了一项,这些奖励和赋予了策略梯度一定的权重,有些可能是正的,有些可能是负的;从最后优化结果上看,最大似然会maximum the probability of all your data,而策略梯度会减少某些sample的概率,增大其他一些sample的概率,所以策略梯度相当于评价了哪些策略是好的,哪些策略是不好的,并且使好的策略以更高的概率出现!

策略梯度定理详细推导过程如下

对于Score function:

可以根据自己需求定义策略形式,举两个例子来解释Score function 函数:

  • Softmax策略

Softmax策略是针对一些具有离散的行为常用的一个策略。我们希望有平滑的参数化的策略来决策:针对每一个离散的行为,应该以什么样的概率来执行它。

为此,我们把行为看成是多个特征在一定权重下的线性代数和:

而我们采取某一具体行为的概率与e的该值次幂成正比:

举个例子:假设我们在玩一个Atari类游戏,我们想知道应该朝左还是朝右移动。Softmax策略如何做呢?结合下图来解释:

先为个体能够观测到的状态信息选定一些特征假设现在有f1-f5共5个特征,这些特征可以是人为选取的,也可以是算法计算得到的(例如可以是把观测状态信息作为输入送入神经网络得到的隐藏层数据)。向左走与其中的某些特征联系比较紧,向右走与另外一些特征关系比较紧,图中两个行为与每个特征都有联系,这种联系的紧密程度就用参数θ表示,参数θ不是一个值,而是针对每一个特征行为对都有一个具体的数值,因此它可以看成是一个矩阵,现在当环境以每个特征不同强度的形式展现在个体面前时,个体会针对向左、向右两个行为同时计算其带权重的线性代数和,假设算得向左的值为5,向右的为6。向左(右)这个行为发生的概率就与 成正比。Softmax策略下Score函数的值容易计算,可以写成如下的形式:

上式中,等号右边第一部分是采取某行为的Score,第二部分是当前状态的期望分值。拿回刚才的例子来说,这个期望就是5和6的分别乘以其概率的和:

因此,向左走的Score值是-0.73(5 - 5.73),向右走的Score值是0.27(6 - 5.73),说明向左走比随机行为的价值要低,向右走比随机行为的价值要高。假如此时个体选择了向左走并且得到了一个正的即时奖励,个体将要提高向左这一行为被采样的概率,也就是提高向左走的分值。那么确定向左走分值的参数如何调整呢?根据每一个参数对应的输入(也就是特征值)的大小做相应的调整,特征值为正,参数值增大;特征值为负,参数值减小。

  • 高斯策略

与Softmax策略不同的是,高斯策略常应用于连续行为空间,打个比方:如果控制机器人行走,要调整流经控制某个电机的电流值,而这是一个连续的取值。

使用高斯策略时,我们通常对于均值有一个参数化的表示,同样可以是一些特征的线性代数和:

方差可以是固定值,也可以用参数化表示。

行为对应于一个具体的数值,该数值从以μ(s)为均值、σ为标准差的高斯分布中随机采样产生:

对应的Score函数是:

其形式也相对简单。下图是引自Karpathy一篇博文的直观解释:

图解翻译:使用score function估计梯度的可视化。左:高斯分布下的一些采样(蓝点),针对每一个蓝点也画出了根据高斯分布均值得到的概率对数的梯度。箭头指示的方向是能够增加该采样点采样概率的分布的均值(对于高斯分布来说,是等值线的中心点)移动的方向;中:大多数采样点对应的score function值是-1,除了一小块区域是+1(score function可以是任意、并且不要求可微的标量函数),此时箭头用不同颜色表示,在随后的更新中,我们将要把所有绿色的值和负的红色值进行平均来更新分布参数(均值);右:参数更新后,绿色箭头的方向和红色箭头的反方向推动了行程均值朝着左下方移动的新的高斯分布,从这个新分布的采样将会按照预期有一个较高的score。

Baseline

我们的策略梯度公式有个问题:不管哪个时间段,我们都要用策略的梯度乘以所有时刻回报值得总和,这样的设计显然不合理。理论上 t 时刻的决策最多只能影响 t 时刻之后的所有回报,与之前的回报无关,所以我们的公式应该改写成:

另一方面,我们知道总体回报可以理解为最大似然法中的权重,这个权重会带来两个问题:

如果序列得到的回报数值较大,那么对应的参数更新也较大,这样我们的优化可能会出现一定波动,这些波动很可能影响优化效果。

一些强化学习问题中,环境给予的回报始终为正,那么无论决策怎么样,累计的长期回报始终为正数。也就是说会增强所有策略,这与我们的初衷不符。

为了解决上述问题,我们可以调整权重的数值和范围,一个简单的方法是让所给出的长期累计汇报减去一个偏移量,这个偏移量被称为 Baseline,我们用变量 b 表示:

个偏移量可以设计为同一个起始点不同序列在同一时刻的长期回报的均值:

经过这样的处理,所有时刻权重的均值变为0,就会同时存在权重为正或负的动作,权重的绝对值也得到了一定的缩小。而且很容易计算出这样一个结论:加入这个偏移量并不会使原本的计算值变得有偏,但会是分布趋于收敛

---基于多篇他人理解进行的整合和理解

策略梯度学习整合与理解相关推荐

  1. 强化学习(九)- 策略梯度方法 - 梯度上升,黑箱优化,REINFORCE算法及CartPole实例

    策略梯度方法 引言 9.1 策略近似和其优势 9.2 策略梯度定理 9.2.1 梯度上升和黑箱优化 9.2.2 策略梯度定理的证明 9.3 REINFORCE:蒙特卡洛策略梯度 9.3.1 轨迹上的R ...

  2. 策略梯度算法简明教程

    为什么需要策略梯度 基于值的强化学习方法一般是确定性的,给定一个状态就能计算出每种可能动作的奖励(确定值),但这种确定性的方法无法处理一些现实的问题,比如玩100把石头剪刀布的游戏,最好的解法是随机的 ...

  3. 【RL】策略梯度(VPG)与Actor-critic的思想与推导

    获取更多内容,请访问博主的个人博客 爱吃猫的小鱼干的Blog 一 RL学习什么 动作值函数(Q函数). 以Q-Learning.DQN为代表,这个系列的算法学习最优动作值函数 Q∗(s,a)Q^*(s ...

  4. 强化学习(Reinforcement Learning)之策略梯度(Policy Gradient)的一点点理解以及代码的对应解释

    一.策略梯度算法推导以及解释 1.1 背景 设πθ(s)\pi_{\theta }(s)πθ​(s)是一个有网络参数θ\thetaθ的actor,然后我们让这个actor和环境(environment ...

  5. 重温强化学习之策略梯度算法

    1.介绍 这里仍考虑无模型的方法:策略是从值函数中导出的,使用贪婪的方法导出最优策略,使用e贪婪策略导出行为策略,直接参数化策略                            考虑之前强化学习 ...

  6. 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法

     导读:这篇是1999 年Richard Sutton 在强化学习领域中的经典论文,论文证明了策略梯度定理和在用函数近似 Q 值时策略梯度定理依然成立,本论文奠定了后续以深度强化学习策略梯度方法的基石 ...

  7. 强化学习组队学习task03—— 策略梯度及 PPO 算法

    文章目录 一.策略梯度 1.策略梯度理论实现 R的梯度算法: 对于该公式的理解: 在计算完R的梯度后,我们就使用策略梯度对参数进行更新 2.策略梯度实现的小技巧 (1)添加一个基准值 (2)分配合适的 ...

  8. 《强化学习》中的第13章:策略梯度方法

    前言: 本次笔记对<强化学习(第二版)>第十三章进行概括性描述. 以下概括都是基于我个人的理解,可能有误,欢迎交流:piperliu@qq.com. 让时间回到最开始:第二章多臂赌博机.在 ...

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

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

最新文章

  1. WiFi安全那些事儿,整理推荐~
  2. Android中的定时器AlarmManager
  3. Nginx 实现 IP+项目名 访问
  4. tcl中的string trim使用时需要注意substring是一个集合
  5. SpringMVC接收json数组对象
  6. 布局技巧3:创建高效布局
  7. AzCopy – 上传/下载 Windows Azure Blob 文件
  8. 使用 jQuery Mobile 与 HTML5 开发 Web App (二) —— jQuery Mobile 基础
  9. shell输出毫秒_【Linux】shell: 获取时间间隔到毫秒、微秒级别
  10. Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG
  11. Java继承、封装、多态
  12. backup exec 安装时报‘Microsoft sql express安装失败
  13. java 内存文件_Java内存映射文件(Memory Mapped Files)
  14. 层次分析法、网络层次分析法、模煳层次分析法、双基点法
  15. Vue-amap 实现获取定位功能
  16. 数据科学家必须知道的10个深度学习架构
  17. ruby中的符号_Ruby中的凡人和不朽符号
  18. React属性与状态
  19. iOS开发之第三方分享QQ分享,史上最新最全第三方分享QQ方式实现
  20. 光功率P和振幅E的平方成正比关系

热门文章

  1. 梦幻西游2升级计算机,梦幻西游2官网3月1日维护公告 改名为梦幻西游电脑版
  2. 高效率开发APP中的常见问题
  3. I3D (inflated 3D)是什么?
  4. 迷你的'地图编辑器'
  5. Java 全角、半角特殊符号转换
  6. 人生中第一次面试-----字节跳动面试经验总结
  7. G723音频格式读入内存
  8. GPRS模块的使用Java串口操作(1)
  9. StaggeredGridView瀑布流,网格布局
  10. Acrobat Pro DC 2021 for Mac(专业PDF编辑软件)