8.基于表格方法的规划和学习planning and learning--阅读笔记【Reinforcement Learning An Introduction 2nd】

基于表格方法的规划和学习planning and learning with tabular methods

内容简要梳理:
本章主要讲解了如何结合规划、学习和决策,实际上该书中主要侧重于规划。了解planning和learning的区别。
对于planning来说需要一个model,model可以是随机model、分布model或者采样model。要理解各种model之间的作用。然后提出了一个dyna的融合规划、决策和学习的统一框架。比如dyna-q,dyna-q+算法。规划有两种规划空间。rl更侧重于状态空间规划state-space planning。优先遍历侧重于更新最近值发生变化的状态的先前状态。轨迹采样侧重于更新agent最有可能访问到的状态。可以使得我们忽略掉那些不相关的状态。RTDP就是一个代表算法。
随后又提出了决策时规划算法decision-time planning,典型的代表有启发式搜索、rollout算法、蒙特卡洛树搜索。

前言

前面的章节中介绍了model-based的方法,比如DP、启发式搜索方法。model-free的典型代表就是MC、TD。model-based的方法更依赖于planning,model-free的方法更强调learning。但是两者也有很多类似的地方,其核心都是计算价值函数,也都依赖于backup操作来更新值函数。本章将介绍一类统一的框架,把model-based和model-free的方法统一结合起来。

模型和规划

模型:所谓模型指的是智能体可以用来预测环境对动作的反应的所有部分。也就是说,给出一个状态和行为,它能够给出下一个状态和回报的一个预测。如果模型是随机的,那么就有好几个可能的后续状态;分布模型distributions models会给出所有后续状态的可能性及其对应的概率大小;采样模型sample models只给出一个可能。比如,抛掷一堆骰子,随机事件表示为掷出骰子的点数之和;分布模型会给出所有可能的点数和以及发生的概率;采样模型会根据概率分布产生一个单独的结构,相当于做了一次试验。
DP中的模型 p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s,rs,a)是一个分布模型。分布模型比采样模型更强大,采样模型的采样是基于分布模型的概率分布采样得到的。因此有了分布模型就一定可以得到采样模型。通常来说,分布模型并不容易获得。相反采样模型非常直观,比如掷骰子,很容易得到一个采样值,但是想要得到整个准确的分布模型是非常繁琐的,且容易出错。实际上我们所使用的仿真环境基本上都是一个采样模型。
模型可以用来仿真数据,无论是分布式模型还是采样模型,区别仅在于分布模型会仿真出某个状态开始的所有可能的episode及其对应的概率,但是采样模型只能得到一个episode。模型被用来仿真环境并且产生仿真的经验simulated experience。
规划:这里的意思是把model作为输入,通过与模型环境的交互产生或改进一个策略的计算过程。在ai中有两种方式进行规划。

  • 状态空间规划state-space planning:从状态空间中搜索出一个最优策略或到达目标的最优路径。
  • 计划空间规划plan-space planning:在计划空间中搜索最优,比如进化算法。

目前我们只考虑第一种state-space planning。
state-space planning的基本思想是,通过值函数来提升策略,并且通过仿真经验数据来执行更新操作或者通过backup操作计算值函数。 流程如下:
image
DP算法符合上述框架。本章也会介绍一些其他符合这个框架的state-space搜索算法。learning算法和planning算法的核心都是通过backup更新操作来估计值函数,区别在于planning算法使用的是model产生的仿真数据而learning算法使用的是环境产生的真实数据。 学习算法只需要使用经验数据作为输入,因为通常情况下能够同时用在仿真数据和真实数据上。下面介绍了一种基于one-step tabular Q-learning算法以及从采样model产生的样本的例子:
image
本章除了研究统一的框架,还分析了planning中采用small incremental steps增量式方法的优势,大大降低了计算量并且能够更好的解决大规模问题。

Dyna:综合规划、决策和学习的框架

本节学习的dyna框架,融合规划、决策和学习,在线的进行规划学习。

rl是基于交互的学习方式,交互无非是为了获得经验数据,所以说rl是基于经验的学习方法。在一个planning agent中,真实经验有两个作用,一个是用其直接估计值函数并提高策略,这个过程叫做直接强化学习,direct RL.另外一个作用就是可以进行模型学习,model learning,从而可以提高模型的精度。通过经验学习模型,然后进行planning从而更新/提升值函数/policy的过程叫做间接强化学习,indirect RL.其过程图如下:
image

直接RL和间接RL方法都各有自己的优缺点。间接RL能够充分的利用经验从而减少和环境的交互。当然,直接RL也更简单,并且不会受到model偏差的影响。 (书中的作者认为不应该过分的夸大两者之间的差别,反而应该更注意他们之间的相似之处。)

Dyna-Q包含了上面图示的所有的内容:planning、acting、model-learning和directRL。planning的方法就是之前提到的random-sample one-step tabular Q-planning方法;直接rl使用Qlearning方法one-step tabular Q-learning;学习模型就是就是把所有的转移动作对 ( S t , A t , R t + 1 , S t + 1 ) (S_t,A_t,R_{t+1},S_{t+1}) (St,At,Rt+1,St+1)存储起来。也就是说,model-learning是进行存储,planning是从存储的数据里面拿数据,然后再使用Q-learning。
整个dyna-Q的学习框图如下:
image
planning、acting、model-learning和direct RL在Dyna智能体中同步进行,acting、model-learning和direct RL的计算代价都较小,每个step的剩余时间都可以用来planning,我们假设剩余时间能完成n次planing,从而有如下算法伪代码。如果是serial计算机(时间片调度),则我们需要指定每个time step中的运算order。
image

example:dyna maze
我们把dyan-q 算法应用在gridworld迷宫问题上,然后与q-learning对比。
image
为什么含有planning的agent比不含planning的agent要快很多。如下图所示,第一个图是n为0,也就是不进行planning,第二个图是n为50,agent通过planning自动向前传播了很多steps,大大加速了学习速度。
image

当模型是错的

结合planning和learning可以有效的提高学习效率,但是planning依赖于学习的环境model。如果学习的model不准确会怎样。
很多情况下model都会有错,比如:环境是随机的,只观察到有限的样本,我们对环境的认知仅仅依赖于我们所观察到的样本,而实际上并不是。如果我们使用函数近似来学习model,可能因为泛化问题导致model不准确;如果因为model改变,而我们还没有察觉这种变化,比如突然再env中加一个障碍物,这时env的model就发生改变。
看下述例子:

example1:blocking maze阻塞迷宫
image
针对此迷宫问题,agent试图从s走到目标g的一条最短路径。起初迷宫右侧有一个出口,因此agent可以找到一条最短路径。之后,这个出口被封死,改为在左侧。这种变化自然而然的会引起model发生变化。分别用dyna-q+(后面讲)和dyan-q方法学习该任务,学习结果如上曲线图。1000步之前,两个算法都找到了最优路径,但是变化后有一段时间没有增加,此时agent正处于懵的状态,但是之后agent都发现了这个变化,并且又学习到了新的策略。

example2:捷径迷宫
最初时,一条捷径是从左侧开始;后来环境发生变化,在右侧也开了一个出口,此时最优路径就变成了最右侧的路径。此时的学习曲线如下:
image
对于dyna-q来说,尽管环境发生变化,但是依然保持之前的趋势,也就是说这个算法没有意识到环境发生了变化。而dyna-q+可以捕捉到这个变化,从而获得了更大的回报。

上面的问题实际上也是展示出探索和利用之间的问题。在planning中,探索就是尝试新的行为来改善model利用就是基于当前的model表现得更好。我们希望agent能够探索env从而更好的发现env的变化。但是也不能探索太多,否则回报会减少。通常只是采用一些启发式的方法来平衡两者。
dyna-Q+的改变在哪些方面呢?从上面的例子我们可以看出,dyna-q+能够更好的发现环境的变化,这说明其探索会更多一点。dyna-q+增加了启发式搜索,是什么呢?对于一个状态动作对如果实际中很久没有被访问到那么其不确定性就会增加(回顾UCB)这些状态在env model发生变化的概率也就增加了。所以为了能够探索发现这些状态,应该增加这些状态被访问到的频率。如何实现呢?就是给其一个额外的回报奖励。假设原来一个转移得到的回报是r,加上额外的奖励就是 r + k τ r+k\sqrt{\tau} r+kτ ,k是比例因子,τ是两次访问之间的间隔,如果间隔时间越久,那么得到的额外奖励越大。但是这种方法引入的一个额外的代价就是需要记录每个状态对多久没有被访问到。

优先遍历/扫描 prioritized sweeping

dyna-q框架中有个model learning的模块,实际就是把experience存储起来,然后在planning的时候sample一些simulated experience。回顾一下上一节的阻塞迷宫的例子,可以看出planning的作用。在第二个episode时,状态值的更新如箭头所示。对于没有planning的情况,只有目标状态的前一个状态被更新了。如果在planning时我们随机抽取的状态不是这个状态,那么就白费力气了。如果我们能够沿着goal state目标状态倒着更新就可以了。但是问题是,不是所有的任务都有一个明确的目标状态,也有可能又很多个。比如下棋,赢得可能性有很多,因此会有很多种目标状态。分层强化学习HRL为了解决这个问题提出了子目标的概念,通过找一些子目标任务从而简化问题。
所以看来直接从goal state进行倒推是不具有可行性意义的更为普遍的方法是从任何值发生变化的状态开始倒推。状态值具有一般性,其次,某个状态值发生变化,从它周围向外扩散,自然也合情合理。这个思想叫做反向聚焦backward focusing
这种反向更新传播,会导致更新的状态数增长很多,但是我们没有必要对所有的状态都一视同仁。有时某个状态的改变可能对其他状态没有太大影响,也有可能只对某些状态产生一定的影响。以某个度量作为指标来决定更新优先级的方法叫做优先遍历。(值改变大小只是一种度量方式,实际的做法是,在程序上维护一个队列,队列按照每个状态动作对的值改变大小排序,队列顶端的状态被更新,就重新计算所有被更新状态的值变化大小,一旦这个变化超过设定的阈值就插入到队列中。)
优先遍历的伪代码:
image
(这里的队列和model的区别在于,model存储的信息是一个transition ( S , A , R , S ′ ) (S,A,R,S') (S,A,R,S)),队列存储的信息是状态动作对及其对应的优先级大小P:(S,A,P),其中 P = ∣ R + γ m a x a Q ( S ′ , a ) − Q ( S , A ) ∣ P=|R+\gamma \underset{a}{max}Q(S',a)-Q(S,A)| P=R+γamaxQ(S,a)Q(S,A).对于下述的迷宫问题,
image
从最终的曲线图可以看出,
image

在不同大小规模的迷宫问题上,基于prioritized sweeping的dyna-q方法能够更快的找到最优策略,通常这个速率高出5-10倍。

期望更新和采样更新

对于one-step值函数的更新大体上可以从三个角度划分:更新状态值还是动作值;直接估计最优策略的值还是给定策略的值;更新目标采用期望更新还是采样更新。
期望更新是考虑了所有可能发生的事件,采样更新则只考虑一种可能性。根据上述三个维度总共有8种组合,对应7个算法:
image

单步采样更新是为了解决分布模型未知的情况,采样必然会带来采样误差。直观的来看,期望更新可能会带来一个更好的估计,但是同时需要更多的计算资源。
以估计 q ∗ q_* q的例子展开,评估采样更新和期望更新。 p ^ ( s ′ , r ∣ s , a ) \widehat p(s',r|s,a) p (s,rs,a)表示估计的动力学model。
对于状态对(s,a)期望更新的表达式和采样更新的表达式分别为:
Q ( s , a ) ← ∑ s ′ , r p ^ ( s ′ , r ∣ s , a ) [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) ] Q ( s , a ) ← Q ( s , a ) + α [ R + γ max ⁡ a ′ Q ( S ′ , a ′ ) − Q ( s , a ) ] \begin{array}{l} Q(s, a) \leftarrow \sum_{s^{\prime}, r} \hat{p}\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime}\right)\right] \\ Q(s, a) \leftarrow Q(s, a)+\alpha\left[R+\gamma \max _{a^{\prime}} Q\left(S^{\prime}, a^{\prime}\right)-Q(s, a)\right] \end{array} Q(s,a)s,rp^(s,rs,a)[r+γmaxaQ(s,a)]Q(s,a)Q(s,a)+α[R+γmaxaQ(S,a)Q(s,a)]
用b表示分支因子branch factor,也就是满足 p ^ ( s ′ , r ∣ s , a ) > 0 \widehat p(s',r|s,a)>0 p (s,rs,a)>0的s’的个数。可以说期望更新的计算量是采样更新的b倍。
那么对于每个单元的计算力来说,是计算期望更新好还是投入b倍的计算力来计算采样更新呢?
如图为,画出了分支数b不同时,值函数的估计RMS误差与某个状态动作对的最大Q值操作数量之间的关系:
image
灰色线条是期望更新,起初误差设定为1,后续状态误差为0。彩色线条对应的是进行b倍的采样更新。一次期望更新需要进行b次计算,在1b的位置期望更新误差骤减,说明期望更新完成;对于采样更新来说,其误差是逐级递减的。

在实际问题中,后续states的值也是估计的,也是逐渐收敛的,固定步长sample update能更重视新近的更新。因此在大规模随机分支因子问题/有很多状态的问题中往往sample比expected要更优先考虑。

轨迹采样

实际上我们采样收集的样本是用来估计值函数或策略,具体该以什么方式得到这些采样点。本节将比较两种分布更新的方式。一种是来自DP中的经典方法,也就是遍历整个状态空间。这种方法有个问题是对于有些状态空间大的任务而言,是无法完成遍历的。遍历的方法对于每个状态是等同的。(尽管之前在第四章讲过,DP算法不需要完全遍历以及平等的对待所有状态,理论上是可以使用任何分配方式,但实际上一般还是用遍历)。第二种方法是根据某些分布来采样状态或状态动作对。可以是均匀采样等。另一种方法就是根据当前策略观察到的分布进行更新。这个方法能够简单的产生分布,算法可以直接仿真产生整个完整序列对状态或状态动作对进行值更新。这种产生经验和更新的方式叫做trajectory sampling。比如在策略 π \pi π下,在状态 S t S_t St下采样得到动作 A t A_t At,根据环境model得到奖励和下一状态,然后继续执行上述过程,得到一条trajectory。除了trajectory sampling,很难想出根据on-policy分布进行distributing updates的方法。这是因为:虽然如果我们有on-policy分布的明确形式,那么就能sweep所有的状态,并依据on-policy分布给update加权,但是这也会导致穷举sweeps的巨大计算。

实时动态规划

实时动态规划real-time dynamic planning(RTDP)是动态规划中值迭代算法一个在线策略轨迹采样的实现版本。

通过定义我们可以了解到,RTDP中值函数的更新形式和值迭代算法的更新方式是一样的。其次DP是基于期望的更新,RTDP中包含了sample,说明是以类似MC和TD方法的形式通过采样进行更新的。另外,on-policy的方法说明RTDP的目标策略和行为策略是一样的。

回顾值迭代:值迭代用来估计最优值函数。不同于策略迭代,值迭代直接收敛到最优策略和最优值函数。
v k + 1 ( s ) = max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] = max ⁡ a E s ′ , r ∼ p [ r + γ v k ( s ′ ) ] v_{k+1}(s)=\max _{a} \sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma v_{k}\left(s^{\prime}\right)\right]=\max _{a} \mathbb{E}_{s^{\prime}, r \sim p}\left[r+\gamma v_{k}\left(s^{\prime}\right)\right] vk+1(s)=amaxs,rp(s,rs,a)[r+γvk(s)]=amaxEs,rp[r+γvk(s)]
DP是已知model的,所以p可求;如果是进行采样,那么就根据当前采样的数据来求均值。

第四章DP中提到了关于更新次序的问题。有同步和异步更新的方式,同步更新的方式是先遍历一个sweep,得到所有要进行更新的状态动作对,然后一次性的执行更新。异步就是访问到哪个状态动作对,就更新哪个状态动作对。RTDP中采用的是异步更新的方式,因此状态值的更新可以以任意的方式和顺序进行。
image
如果trajectory可以只从某些状态开始,而且只关注对于一个给定的策略的预测问题。那么on-policy trajectory的方法能够让算法完全跳过某些基于当前策略从任何起始状态都不会到达的状态。这样就可以减少更新和计算量。对于控制问题,为了求解最优策略,即使这些访问不到的状态理论上需要被访问无限次才能达到收敛。为了解决这个问题,第五章那里提出了一个探索起始点exploring starts技术。但是对于RTDP来说,对于部分特定的任务,即使不访问这些不相关的状态,或者只访问状态空间中的一部分状态就可以保证收敛。这类型的任务就是具有终止状态的无折扣的episode任务。
对于满足以下几个条件而且任意选择起始状态,结束状态是目标状态的任务,RTDP算法能保证收敛到一个在相关状态上最优的策略。1.每个目标状态的初始值是0;2.至少有一个策略能够保证有一个目标状态从任意一个起始状态开始都能到达;3.对于转移到非目标状态的转移,反馈必须严格小于0;4.所有初始状态值必须大于或等于最优值函数(可以都设置为0).满足这些性质的任务是随机最优路径任务。用最小代价代替最大回报来构造上述问题。比如最小时间控制问题等等。
RTDP本质上还是一种DP方法,只不过是按照trajectory sampling方法选择更新状态动作对的值。因此更新公式按照DP那种求期望的方式。RTDP必须已知model。
RTDP的另一个优点是,在得到最优值函数 v ∗ v_* v的同时就得到了最优策略 π ∗ \pi_* π,因为RTDP中行为策略总是当前值函数的贪婪策略,对于传统DP的值迭代则不是。另外一个问题,传统值迭代的结束条件是相邻两次更新前后,所有状态值的变化小于某个阈值。(这不是必要的。回顾第4章的一个例子,值函数可能需要迭代很多轮才能收敛,但是策略实际上在第3轮迭代后就不变了,换句话说,迭代到第3轮就得到了最优策略。因此传统值迭代会浪费额外的运算量。RTDP则能尽早发现最优策略,因为其终止条件不是依赖于值函数,而是依赖于策略是不是稳定了。)
总的来说,RTDP采用了值迭代的更新方式和在线策略轨迹采样的采样方式来求解最优值函数和最优策略。使算法聚焦于和问题目标相关的子状态集中。更快的收敛到最优目标。

在决策时规划

规划有两种方式,一种是利用我们之前提到的dyna框架,在这个框架之中我们进行规划,是基于我们得到的经验数据然后进行model learning,接着再进行planning从而更新/提升值函数/策略。然后每一步动作的选择是基于我们更新后的值函数或策略。这种方式中,规划是通过改善值函数来间接影响当前的动作选择。而且值函数的更新,往往会影响多个状态,不仅是当前的状态 S t S_t St.这种规划方式不关注当前的状态,而且可以以任意时刻在后台进行规划更新。
另一种规划方式就是用来直接选择当前的行为。也就是跳过了值函数的更新。在当前状态下根据planning得到一个动作,然后执行这个动作就进入到下一个状态中去。这种规划是针对于当前状态的,会评估不同动作导致的后果。这种规划就叫做决策时规划。decision-time planning

决策时规划比较专注于当前的动作和状态选择,因此一旦规划出结果之后,这个更新可以被抛弃。书中给出的理由是状态太多,不太可能遇到同样的状态,存起来没有意义。决策时规划对于不需要立即响应的应用很有用。如果动作实时性要求很高,第一种方式更好。

启发式搜索

启发式搜索中,每遇到一个状态就可能会出现很多后续的状态,那么这些状态和后续的分支会构成一个树。值函数的估计会用在搜索树的叶子节点并不断backup直到当前状态,(搜索树上的back up操作类似于最大化excepted update),然后就可以根据这些值选择一个最好的动作,然后丢弃所有刚才计算的backup值。

树的叶子节点的值是近似值函数,然后向前备份直到当前的状态。一旦计算出每个结点的备份值,就可以选择一组好的备份值对应的动作作为当前的动作,然后丢弃所有当前备份值。
传统的启发式搜索中,没有通过修改估计值函数来保存backup值的部分,值函数完全是人工设计的,固定不变,实际上最好是可以引入一种值函数估计的自动提升机制。可以使用启发式搜索的backup值或本书介绍的其他方法。ε-greedy、greedy、UCB等实际上就是小规模启发的,基于model和状态值函数,搜索不同动作的即时回报和下个状态值,综合起来决策。这其实是在计算backup值,但并没有存储。所以启发式搜索可以看作是贪婪策略的多步扩展。
为什么不使用单步搜索目的就是为了得到更好的action选择。如果有一个完美的model和一个不准确的值函数,那么搜索越深就会得到更好的动作策略。模型是完美的意味着我们搜索的方向是对的,值函数不准确会影响我们备份值的计算,但是如果搜索得越多,这个影响就会越来越小,如果像MC那样搜索到episode得结尾,那么backup值是精确的。如果搜索到第k层,且 γ k \gamma^k γk足够小,那么得到的动作也就是接近最优的。另一个问题是,搜索越深,时间也就越长。

启发式搜索的一个特点就是只专注于当前的状态和最可能的后续的一些状态。 这样就可以把一些计算资源和内存资源优先用到我们当前的状态上,所以比较高效。

启发式搜索的一种情形:
image
通过自下向上的单步更新,1-10的每一步都是一个单步更新,通过拼接这些更新获得上一层的更新,最终得到根节点的值函数。这种更新次序就叫做深度优先启发式搜索。图中1,2,3对应更新的状态形成一个子树,更新4-10形成另一个子树,通过两个子树的更新,假设得到的action值分别是10和20,那么启发式搜索自然会在当前状态下选择值为20的action。

rollout算法

rollout算法是一种基于MC控制的决策时规划算法。 在决策时规划,那么就说明规划是针对当前状态的;基于MC说明了我们是利用MC来估计当前状态或行为的值进行规划。
为了估计一个给定策略的动作值函数,rollout算法利用MC采样得到很多从当前状态开始的仿真轨迹,然后分别用这些轨迹回报的均值来估计每个动作的值。规划算法会执行具有最高估计值的动作,该动作和环境交互,转移到下一个状态,再利用同样的方法规划出下一个状态的动作。如此重复下去就会得到一个完整的plan。

与MC控制方法不同的是,rollout不估计完整的最优动作值函数 q ∗ q_* q q π q_\pi qπ,而是在给定策略下用MC方法估计当前状态的action values,这个给定的policy是rollout policy。rollout算法只计算当前状态的动作值估计,使用过后就马上丢弃。使得算法对存储要求小,无需估计整个状态空间和状态-动作空间的值函数。
根据之前的策略提升理论,保持其他状态下的策略不变,只改变状态s下的策略,满足 q π ( s , a ′ ) ≥ v π ( s ) q_\pi(s,a')≥v_\pi(s) qπ(s,a)vπ(s),就可以得到更好的策略,这就是rollout的基本原理。类似one-step policy-iteration算法。rollout算法的目的不是找到最优策略,仅仅是提高rollout策略
有时即时rollout policy是随机的,但是仍能表现得很好,但是需要注意的是,rollout policy越好,MC估计的值越准确,那么rollout算法能够给出的策略也就越好。而这也是非常矛盾的,好的值估计需要更多的MC仿真,计算量大,但是rollout的计算时间不宽裕。
rollout算法的计算时间受几个因素的影响:当前状态下可能出现的动作数,也就是分支数;仿真轨迹的长度,轨迹越长,计算量越大;策略的执行时间;为了获得好的MC值估计需要的仿真轨迹数量。
通常的,为了解决上面的一些问题,可以采用以下的解决方式:由于MC采样的轨迹是相互独立的,因此可以并行的在多个进程中仿真轨迹,然后利用所有的仿真数据估计值函数;其次针对仿真轨迹太长的问题,可以使用截断的轨迹,然后在截断的位置用一个估计值替代。

蒙特卡洛树搜索

蒙特卡洛树搜索monte carlo tree search,MCTS。首先MCTS是一个决策时算法,其次也是一个rollout算法,不同之处在于MCTS中会部分的保存值函数,从而指导仿真产生更高的回报值的轨迹。
在遇到的每个状态执行MCTS选择动作,作为一种rollout算法,每次执行都是一个迭代过程,每次迭代都仿真产生从当前状态运行到中止状态的序列或者直到discounting 足够小。算法的核心思想是聚焦于从当前状态开始的多次仿真,扩展从之前仿真中找到的较高评估值的序列的部分。 MCTS不必存储值函数与策略,但是一般实现中都存储了。
通过上面的分析我们可以看出MCTS重要的一个过程就是如何扩展之前取得的较高评估值的序列的一部分。

MCTS的工作机理
MCTS中重要的过程就是采样轨迹,然后再基于采样的轨迹利用MC方法估计值函数,特别之处在于如何采样轨迹和进行值备份。如下图:
image

  • selection:在某个根节点也就是当前状态上,基于树中每个边上的动作值构建一个树策略,这个树策略会遍历树的每个节点选择叶子节点。树策略可以通过ε-greedy策略或UCB规则选择action。
  • expansion:在一轮迭代之后,我们通过执行一些没有被探索过的行为扩展当前树。这个扩展的子节点是从上一步选择的叶子节点开始的。
  • simulation:从新增加的子节点(如果没有新增,就从叶子节点选择)开始,利用rollout策略选择一个动作,仿真得到一个完整的episode。该episode在树结构上由树策略选择动作,树外由rollout policy选择动作。
  • backup:有了上面的episode,就可以基于MC来更新树结构中所有状态或动作的值。对于rollout策略访问的状态或动作值不予保存。从图中可以看到,直接利用仿真轨迹中得到的回报备份rollout策略开始的那个节点,对于rollout策略中间访问的state、action并没有保存。

每一轮迭代中MCTS重复上述4个步骤,尽可能的多的仿真出更多轨迹,直到在规划时间内用完或者计算资源耗尽。然后以仿真轨迹中的某些累积统计参数为准则来选择根节点的动作,这个准则可以是最大的动作值或者是最大访问频率的动作。这个动作是MCTS实际选择的动作。环境转移到一个新的状态时,再次执行MCTS,在这一次MCTS迭代中,我们可以重新构建一棵新的树,只包含当前一个根节点。但是一般的做法是保留上一次MCTS迭代后当前状态所有的后代节点。

MCTS的优势体现:MCTS是一种rollout算法,因此它得益于rollout算法的优点,即在线,增量式更新,基于采样的值函数估计和策略提升。MCTS保存树结构中的动作状态值,使得下一状态可以利用上一迭代的结果,而且使我们后续仿真的样本集中在那些之前获得高回报的状态空间上。以此节省计算,有效利用内存资源。MCTS避免了全局近似动作值函数的难题,同时保留利用过去经验指导探索的优势。

总结

本章主要讲解了如何结合规划、学习和决策,实际上该书中主要侧重于规划。
对于planning来说需要一个model,model可以是随机model、分布model或者采样model。然后提出了一个dyna的融合规划、决策和学习的统一框架。规划更侧重于状态空间规划state-space planning。优先遍历侧重于更新最近值发生变化的状态的先前状态。轨迹采样侧重于更新agent最有可能访问到的状态。可以使得我们忽略掉那些不相关的状态。RTDP就是一个代表算法。
随后又提出了决策时规划算法decision-time planning,典型的代表有启发式搜索、rollout算法、蒙特卡洛树搜索。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值