文章目录
蒙特卡洛方法Monte Carlo method
内容梳理:
本章主要介绍了RL中的另一种解决问题的方法MC方法,在阅读本章时要搞清楚MC和DP的区别以及两者之间的优缺点。同时还介绍了on-policy的MC方法,然后针对其存在的问题提出了off-policy的MC方法。借鉴GPI的思想,实现MC的方法主要分为两步,策略评估和策略提升。围绕策略评估也讲解了关于off-policy的MC评估方法以及两种重要性采样及其增量式实现。最后提出了off-policy MC控制方法寻找最优策略。
前言
在机器学习以及深度学习等这些领域内,大部分情况下都是通过数据驱动的,因此提到学习,必须考虑一个问题就是数据/经验要从哪里获取。对于DP方法我们通过模型就可以知道所有可能的转移分布,从而能够在理论上找到解析解。但是如果没有完整的模型,那么我们的数据又从何而来。一种方式是从实际经验中进行学习,比如真实的环境之中,另一种是从仿真环境当中获取,实际上在这种情况下也是需要一定的模型的。比如mujoco、bullet、ode等仿真引擎实际上都是有模型的,只是对于我们使用者来说这些模型无需我们了解,我们只需要利用他们产生一定的经验数据即可。把这种仅仅依靠经验来学习的方法叫做蒙特卡洛方法,简称MC。MC方法是基于采样回报均值来估计状态/动作值函数,并且其更新往往在一个episode结束后才能进行,不同于DP的单步更新方式。
蒙特卡洛预测
对于一个给定的策略,蒙特卡洛方法如何来学习状态价值函数。回顾之前的内容我们可以看到,状态的价值就是从这个状态开始的期望回报,(期望的累积未来折扣奖励)。一个简单的方法就是对经验中的所有的这个状态的回报求平均。随着更多的回报被观测到,这个均值就会收敛到期望值,也就是期望回报。这是蒙特卡洛方法的核心思想。
现在我们要估计 v π ( s ) v_\pi(s) vπ(s),表示的是在策略 π \pi π下s的值,根据采样的思想我们就可以根据策略选择动作,然后把一些经过状态s的episode记录下来,计算其中状态s的回报均值即可。但是在一个episode中同一个状态可能会出现多次也有可能不出现,每出现一次我们叫做一次visit,因此到底是记一次还是每出现一次都要记一次。这就是first-visit MC和every-visit MC方法。
first-visit MC方法是只计算首次出现,every-visit MC方法是计算每次出现的状态s。这两种方式都可以收敛到真实值,但是目前来说first-visit MC使用广泛,是无偏估计,估计的标准差为 1 / n 1/\sqrt{n} 1/n,n表示的是s在episode中出现的次数。本章主要介绍first-visit MC,every-visit MC在后面的值函数近似和资格迹进行扩展。
first-visit MC伪代码:
-
首先为每个状态初始化了一个list,list中每一个元素都是一次累积回报。
-
序号①根据策略 π \pi π生成相关的经验轨迹
-
序号③计算累积回报,并且通过增量式的方式来计算
-
如果我们估计的状态 s t s_t st在轨迹当中,就把根据③计算得到的累积回报放入最开始为该状态初始化的list中去,(注:看序号②的循环条件是按时间步长逆序来的,因为我们采用的是first-visit MC方法,所以如果后续又遇到状态 s t s_t st,那么计算得到其对应的累积回报之后就要替换掉之前放入列表中的累计回报值。总之,在状态 s t s_t st对应的list中存放的一定是这个状态第一次出现时得到的累积回报。对于every-visit MC就不用进行判断了。)
-
序号⑥对每个状态对应的list----Return( s t s_t st)求均值即可当作是对该状态的价值的估计。
-
重复序号③-⑤,遍历完一条轨迹上的每个状态。
-
重复序号①-⑥,在新的采样轨迹上再次完成上述操作即可。
举例:21点游戏
来自:https://zhuanlan.zhihu.com/c_1060499676423471104
二十一点是俱乐部有名的纸牌游戏。游戏获胜规则是:纸牌的点数之和尽量大且不超过 21 点。花牌的点数为 10, ace (就是A)的点数可以是 1 或者 11. 我们考虑每一个玩家和庄家独立的竞争。游戏开始庄家和玩家各发 2 张牌。庄家的牌一张向上一张向下。如果玩家的点数刚好是 21 点(一张 ace 和 10 点),称为黑杰克 (natural)。这种情况下玩家赢,除非庄家也是 21 点,形成平局。如果玩家没有 21 点,他可以要求更多的牌(hits),一张一张的直到停牌 (natural) 或者超过 21 点 (goes bust)。如果超过 21 点,玩家就输了;如果玩家选择停牌,那么轮到庄家。庄家根据固定的策略 (点数之和大于 14 停牌, 否则继续要牌)要求要牌或者停牌。如果庄家超过 21 点,那么玩家赢;否则结果的输赢或者平局取决于最后谁的点数更接近于 21。
对于这个游戏每一局是一个episode。输、赢、平局对应的回报分别是-1、 +1 和 0.玩家的行为包括要牌或者停牌,状态依赖于玩家的牌和庄家翻开的牌。玩家的决策基于 3 个变量:目前牌数目和(12-21,至于为什么是从12点开始的。我是这么理解的,当手上牌的点数只和小于12的时候,不需要什么决策,肯定是继续要牌啊。因为不要牌的唯一考量是是怕超过21点,go bust就输了。但是试想手上现在有11点。再来一张牌,最多可能是11点,就是一张ace。你可能说这不就是22点,玩完了。但是别忘了ace也可以作为1点,你完全可以这个时候把它当成1点,不久化险为夷了吗。所以说12点一下都是安全的,因此决策状态从12点开始),庄家翻开的牌(10种可能)以及是否有 用作11点 的 ace。总共构成了 200 ( 10 ∗ 10 ∗ 2 10*10*2 10∗10∗2 )个状态。
注意在这个问题中的 first-visit 和 every-visit MC 是一样的,因为在一局游戏中不可能出现两个相同的状态(要么继续要牌,一旦有新的牌,状态就变了。要么停牌,对方要牌。所以每一步都有变量,不可能出现一样的状态)。图 展示状态值函数的估计。对于 ace 作为 11 点时的情况更加不确定和没有规律这是因为这些状态不是很普遍。经过 500.000 局之后获得值函数的近似解。
虽然在21点这个游戏中我们有任务的完整模型,但是依然无法应用DP方法,这是因为计算其概率p很困难,但是MC方法可以不依赖于四参数dynamic模型。
MC方法的backup diagram:通过backup diagram可以反映出值函数的更新方式。对于MC来说,因为其更新总是基于一个采样的episode来说的:
从中可以看出MC和DP的不同之处在于:DP通过期望的方式进行更新,根节点会有多个分支,MC仅有一条分支;DP是自举的,更新依赖于下一状态的估计值,MC不用,MC对每个状态值的估计是独立的;MC实际上是一条从始到终的轨迹,只用sample更新,但是DP方法则需要在每个状态上考虑所有的后续状态,且只包含one-step transitions。
MC方法的优势:①单个状态的值估计的计算复杂度与状态数量是独立的,所以可以只处理我们感兴趣的装填②可以从仿真或真实环境中学习得到经验数据③不需要完整的环境模型,只需要生成状态序列就可。有些情况下尽管可以对环境进行完全建模,但是还需要知道采取动作之后的下一个状态的转移概率分布。④其基于均值的估计方法是无偏估计。
动作价值的蒙特卡洛估计
如果模型不可用,那么预测动作价值更有用而不是预测状态价值。在有模型的情况下,仅仅使用状态价值就可以决定策略。如果模型不可用,仅使用状态价值是不够的,必须清楚的估计每个动作的价值才可以得到相应的策略。
上一节使用MC方法来估计状态值函数,根据之前的学习我们知道,在已经模型的情况下利用状态价值函数求最优策略时需要进行如此计算:
,
尽管我们可以使用MC来估计状态价值函数,但是模型是未知的,所以策略还是无法得到。因此MC方法主要是用来估计
q
∗
q_*
q∗.
对于动作价值的策略估计问题实际上是去估计 q π ( s , a ) q_\pi(s,a) qπ(s,a)在状态s下采取动作a所获得的期望返回。其实用MC方法来估计动作价值函数与用MC方法估计状态值函数是一样的,过程都是先采样轨迹,然后求均值。只是操作对象不同,对于MC估计动作值函数要操作的对象是状态-动作对,记录某个状态动作对之后的累积回报,然后求均值。同时也涉及到first-visit和every-visit。采用MC方法估计动作价值函数,估计量为|S|*|A|。
尽管有了用MC估计动作价值的方法,但是依然存在一个问题就是,在估计动作时可能会出现某些状态对应的某些动作从来不会被访问或出现。假设我们的策略 π \pi π是一个确定性策略,这意味着在一个特定的状态s下只有一个动作 a = π ( s ) a=\pi(s) a=π(s)被选择到,对于 a ≠ π ( s ) a\neq\pi(s) a=π(s)的情况可能永远无法被选择到。也就是说,得不到在状态s下其他动作的反馈,这对我们策略的选择有很大影响。该问题称作持续性探索maintaining exploration。
解决这个问题的办法就是在每次采样轨迹的初始状态动作对以非零的概率覆盖到整个状态动作空间上去。这样可以保证这些状态动作对会出现,尽管没有被访问,而且只要episode的次数足够多,最终状态动作值也会收敛。这种方法叫做exploring starts探索性开端。
exploring starts的方法在仿真中大部分是可行的,但是在实际情况要通过实际交互收集样本,这种情况未必满足。因此还有一种方法就是考虑采用随机策略,保证所有的状态动作对都能够以非零的概率被选择到。
蒙特卡洛控制
我们的目标是如何利用MC来求解最优策略。可以借鉴GPI的思想,通过策略评估、策略提升,不断地迭代直到收敛到最优策略。不同之处在于估计值函数的方法不同,DP中使用的是贝尔曼方程,这里使用的是MC方法。
基于MC的策略迭代示意图:
值函数的估计是通过MC方法来实现的,如果可以采样无限个episodes,并且每个episode都满足exploration starts,借助MC方法就可以精确的估计出策略及其对应的动作价值函数。策略提升是让新的策略相对于当前值函数的贪婪策略,
之所以可以采用greedy进行策略提升是因为:
满足策略提升定理的条件,说明新的策略是一个更好的策略或者和原来一样好的策略。
当前MC策略迭代方法有两个前提,一个是任务可进行无限多的episodes,另一个是每个episode都必须结合exploring starts。为了得到一个切实可行的策略,必须想办法去掉这两个策略。本节我们先解决第一个假设。
针对第一种假设有两种解决方法,参考DP的policy iteration和value iteration:①对策略评估不追求精确收敛,当值函数落在收敛值得一个误差范围内即可。对于收敛到一个范围内需要足够多得步数即可。②不做完整的策略评估,执行若干步甚至一步评估,类似GPI和值迭代。
MC with ES(exploring starts)算法MCES的伪代码:
注意事项:这个算法也是first-visit的;其次该算法中对于Q的计算可以改为增量式的表达方式,通过增加一个状态动作对的计数变量N即可。
无exploring starts的MC控制
上一节我们解决了MCES的第一个假设,这一节解决第二个假设,想办法去掉ES。
首先了解一些rl的概念:
on-policy:在线策略,指的是做决策的策略和被evaluate和improvement的策略是一样的。进行决策的策略叫做behavior policy
off-policy:离线策略,指的是做决策的策略和被evaluate和improvement的策略不是同一个策略。
soft-policy:soft-policy指的是策略能够以大于0的概率取得所有的状态动作对,即 π ( a ∣ s ) > 0 \pi(a|s)>0 π(a∣s)>0,且随着时间推移策略会逐渐趋向于一个最优的贪心策略。比如之前谈论过的ε-greedy策略就是soft-policy。
ε-soft policy:满足所有 π ( a ∣ s ) \pi(a|s) π(a∣s)≥ε/|A(s)|的策略
ε-greedy policy:大多数选择具有最大估计值函数的动作,但是也会以ε的概率选择所有动作(包含最优动作)。所以每个非贪婪动作被选择的概率是ε/|A(s)|,贪婪动作被选择的概率是1-ε+ε/|A(s)|,为什么这里会多了一项ε/|A(s)|,这是因为随机选择的动作中也包含贪婪动作。
所以这几种策略的关系如下:
ε-greedy policy是ε-soft policy中最接近贪婪的策略。因为ε-soft policy的要求是满足所有 π ( a ∣ s ) \pi(a|s) π(a∣s)≥ε/|A(s)|的策略,其实非贪婪策略的概率还可以再大一点,这样贪婪的概率就会小一点,但是ε-greedy policy给非贪婪策略的概率只有ε/|A(s)|,所以说它很贪婪。
基于on-policy的without ES的first-visit MC方法也是在GPI框架下的,其算法伪代码如下:
初始使用的不是确定性策略而是ε-soft policy,策略提升使用的是ε-greedy policy。这里行为选择的策略是一个随机的策略,所以相应的解决了exploring starts问题。下一步就是要证明ε-greedy 策略提升的确可以得到一个更好的策略,从而可以收敛到最优策略。
proof:依然借助策略提升定理,只要对于新的策略满足 q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s,\pi^{'}(s))\geq v_{\pi}(s) qπ(s,π′(s))≥vπ(s)即可。
π ′ \pi^{'} π′实际上是一个随机策略;我们看红色框内的表达式:
amazing,这说明:
可以理解为是q(s,a)的加权求和,那么它一定是小于q(s,a)的最大值的,所以不等式成立。
接着继续对式子拆项整理可得:
证毕。
上面已经证明新的策略是一个更好的策略,但是怎么说明是最优的呢?这里的最优也仅仅是在ε-soft policy是最优的。
假设 v ∗ v_* v∗和 π ∗ \pi_* π∗表示的是最优的值函数,如下:
可以理解为是ε-soft policy对应的最优贝尔曼方程。
我们使用策略提升,倘若提升到一定地步时,策略无法再进一步改善,也就是策略提升定理中的不等式变为等式,说明此时策略是最优的,这个时候:
这两个方程一模一样,且都只有唯一解,所以说 v ∗ = π ∗ v_*=\pi_* v∗=π∗,即说明策略收敛到最优。
基于重要性采样的离线策略预测
所有的学习都面临一个困境就是,算法本身希望学习到一个最优策略,但是在学习到最优策略之前必须借助一些非最优策略探索一些行为。因此如何在保证探索的情况下也能学到最优策略,或者说如何根据探索性的策略获得一个最优策略。on-policy采用了一个比较折中的方法,不直接学习最优策略的值函数,而是通过学习一个可以进行探索的策略的值函数,随着时间的推移,最终收敛更新到该探索策略的最优值。就像上一节我们得到的实际上是ε-soft 策略中的最优值。另一个解决方案就是使用两个策略,一个是我们要学习的最优策略,另一个是用来产生行为的探索策略,这个要学习的策略叫做target policy,进行探索的策略叫做行为策略behavior policy。(有点类似DQN DDPG的双网络结构的原理)因此整个学习过程中所用的数据和目标策略无关,这种学习是off-policy learning。
on-policy和off-policy的比较:
on-policy的方法比较直观简单,用target policy来产生数据,然后再利用其产生的策略更新自身的策略。但是这样一来导致样本效率很低,早期产生的数据更容易被抛弃,只有最新的策略及其产生的数据参与更新。
off-policy的target policy和behavior policy是不一样的,为了便于理解通常需要引入一些额外的概念,比如重要性采样。这里我们把target policy定义为 π \pi π,把behavior policy定义为b。同时off-policy的方差更大并且收敛很慢。但是off-policy通用性更强。我们可以使用任何policy来产生数据样本,无需关心要求解的策略,这样就可以获得大量的数据。on-policy实际上可以看作是target policy=behavior policy的off-policy的特例。
off-policy预测
考虑对off-policy情况下的策略进行估计,假设target policy为为 π \pi π,behavior policy为b,两个策略相同但是都是固定不变的,假设策略为 π \pi π中所有动作选择的可能都在b中也可能被选择到,这个假设叫做coverage收敛假设。target policy往往是确定的,behavior policy往往是随机的。
几乎所有的off-policy都会用到important sampling重要性采样。这一技术是使用其他分布的采样值来估计一个分布的期望值。对于off-policy learning,通过target policy和behavior policy产生的采样轨迹的概率比值对回报进行加权,这个概率比称作重要性采样比importantance-sampling ratio。一条轨迹 A t , S t + 1 , A t + 1... S T A_t,S_t+1,A_t+1...S_T At,St+1,At+1...ST,在策略 π \pi π下发生的概率是:
上面的结论表明一条轨迹发生的概率等于轨迹上每一个状态动作对发生的概率乘以相邻状态的转移概率。
有了上述这个表达式我们就可以求出不同策略下采样产生同一条轨迹的概率比:
查看上式还可以得到一个有趣的结论就是两条轨迹的概率比和环境模型的转移概率p是无关的。
有了该比例因子就可以把behavior policy得到的回报值纠正为target policy的期望回报。
其中 :
现在我们已经得到了一个off-policy MC方法,为了方便表示我们将每个episode顺序连接起来,时间下标连续。比如第一个episode在t=100步时结束,那么下一个episode开始时的起始步长数就是101,这样我们就可以使用t来唯一的标记特定的episode的特定step。
我们用 ȷ ( s ) \jmath(s) ȷ(s)表示状态s被访问时对应的时间步长数。也就是状态s在多个episode中出现的位置。一个状态也有可能在一个episode中出现很多次,但是我们仅仅使用第一次访问到s的时刻,first-visit。 ȷ ( s ) \jmath(s) ȷ(s)表示在一个episode中状态s被首次访问到对应的时间步长。T(t)表示时间t后首个终止状态对应的步长数。 G t G_t Gt表示从t到T(t)的累积回报。所以 { G t } t ∈ ȷ ( s ) \left\{G_t\right\}_{t\in\jmath(s)} {Gt}t∈ȷ(s)是所有样本轨迹的回报值, { ρ t : T ( t ) − 1 } t ∈ ȷ ( s ) \left\{\rho_{t:T(t)-1}\right\}_{t\in\jmath(s)} {ρt:T(t)−1}t∈ȷ(s)是对应于每个 G t G_t Gt的重要性采样因子。所以为了获得 v π ( s ) v_\pi(s) vπ(s)需要两个步骤:①获得转移概率比得到比例因子②求均值
求均值有两种方法:
①
②
第一种求均值的方法是常规重要性采样方法,第二种方法是加权重要性采样方法。
如果分母为0,那么定义式也为0.加权的方式和常规的重要性采样区别在于分母。加权的方式满足 G t G_t Gt所有系数和为1.
上述两种重要性采样方法的区别:
从偏差bias和方差variance两个方面来考虑。首先考虑对于first-visit的情况,结论是:常规重要性采样式无偏的,但是会有较大的方差,而加权重要性采样是有偏的,但是方差很小。举例说明:倘若只有一个观察值,即状态s只出现一次,那么加权求和的结果就是这个观察值本身,因此这个方法的值函数是 v b ( s ) v_b(s) vb(s)并不 v π ( s ) v_\pi(s) vπ(s),是根据行为策略估计得到的,有偏估计。相反的,对于常规性采样来讲是无偏估计的,但是由于采样比的原因其方差可能会很大。假设ration是10,那么根据ratio的表达式的含义就可以认为该轨迹在target policy下比behavior policy出现的可能性高10倍,相应的回报会被放大10倍,导致方差很大。而加权重要性采样的方法是有界的,也就是加权因子最大不超过1。实际应用中一般采用加权重要性采样方法,但是常规重要性采样方法更容易应用到近似算法种,后续讲解。
对于every-visit来说,这两种方法都是有偏但是方差都会收敛到0。实际情况下使用every-visit更多,因为无需关注某个状态是否被访问过。
增量式实现
所有基于采样均值的方法都有两种实现方式,一种是先得到所有采样数据,最后一次性求平均得到估计值函数,这种方法是批方法也是off-line方法。另一种是每得到一条采样轨迹就更新一次,称作是增量式方法或者online方法。由于离线策略采用了重要性采样的技巧,形式上有所不同,因此在进行增量更新的时候也有所不同。上一节中我们提到离线策略有两种不同的采样方法,常规重要性采样和加权重要性采样。因此对应的增量实现也分两种情况考虑。
常规重要性采样的增量式实现:
对于off-policy的方法,通过重要性采样的方法来纠正行为策略采样带来的偏差,对于常规重要性采样方法就是在正常回报的基础上乘以相应的缩放因子,然后求均值即可。(参考第2章)常规重要性采样的增量式实现,其更新公式如下:
加权重要性采样的增量式实现:
首先看一下加权重要性采样的公式:
把加权因子简写为
W
k
W_k
Wk,得到
然后我们用 C n = ∑ i = 1 n W i C_{n}=\sum_{i=1}^{n}W_{i} Cn=∑i=1nWi表示分母。
由此就可以写成迭代形式:
其中:
证明很简单:
注:尽管我们的推导过程都是基于离线策略的,但是同样也适用于在线策略,此时只需要让target policy和behavior policy保持一致即可,对应的权重W始终为1。
完整的off-policy增量式MC策略评估算法:
off-policy的MC控制
之前我们介绍了使用MC方法估计off-policy的值函数,这是一个预测问题,这一节介绍了MC控制问题,实际上就是求解最优策略。一般的我们遵循广义策略迭代的思想,通过交替的值函数估计和策略提升使得最终收敛到最优策略。GPI包括两个步骤,策略评估和策略提升,策略评估我们使用上一节的算法即可。策略提升使用贪婪的确定性策略。target policy一般是关于当前值的greedy policy,而behavior policy一般选择ε-soft policy,保证所有的状态动作对可以被visit到。
算法的伪代码如下:
需要注意的几个地方:首先我们得behavior policy是ε-soft的,比如我们常使用的ε-greedy。其次由于 π \pi π是一个确定性策略(我们的目标策略target policy),所以只有当满足 这个条件时才有意义,当不相等时就跳出当前episode,因为在离线策略中有converge 假设。如果目标策略能够取得某个动作,那么行为策略取得该动作的概率必须大于0,也就是行为策略中必须包含目标策略中能够取得的行为。另外,由于我们的目标策略是确定性策略,所以权重更新公式的分子变为1。
*discounting-aware importance sample
这部分内容目前可只做了解,可阅读该blog
https://blog.csdn.net/u013695457/article/details/88927275
*per-decision importance sample
这部分内容目前可只做了解,可阅读该blog
https://blog.csdn.net/u013695457/article/details/88927275
总结
本章首先要搞清楚MC和DP的区别以及两者之间的优缺点。MC方法不需要环境模型,直接通过与环境交互产生的经验数据进行学习;其次MC不自举,也就是说每个状态是相互独立的,这样我们可以只关注我们感兴趣的状态。为了得到可用的MC算法,我们借鉴GPI思想设计MC算法。
保持足够的探索是MC应该考虑的一个问题,MCES在仿真的时候可能有用,但是在实际情况就难以应用。因此提出了without ES的MC方法。但是所采用的是on-policy方法,这就必须保证策略一直是soft的,所以最后得到的最优策略实际上是针对soft策略的最优策略。
所以我们再次考虑使用off-policy的MC方法,因为off-policy的target-policy和behavior-policy可以是不一致的,可以用一个随机的行为函数去评估一个确定性的目标函数。这就涉及到重要性采样的问题,利用重要性采样可以把行为策略的反馈转换为目标策略的反馈。这里提到了两种重要性采样方法,分别是常规重要性采样方法和加权重要性采样方法,并且都可以以增量式的方式来实现。要注意这两种重要性采样方式的特点。
最后提出了基于off-policy的MC控制方式,帮助agent找到最优的策略。