强化学习(RLAI)读书笔记第八章表格方法的规划与学习

第八章:Planning and Learning with Tabular Methods

本章为需要环境的model-based强化学习方法(如DP和启发式搜索)和不需要环境的model-free方法(比如MC和TD)提供一个统一的论述框架。基于模型的方法依赖规划(planning)而无模型的强化学习方法依赖学习(learning)。这两种方式有很多不同也有很多相似点。特别的是这两种方法都是以计算值函数为核心。更近一点的说两种方法都是靠未来的事件来计算当前值函数的更新目标。这一章的目标是把规划和学习的方法进行整合。

8.1 Models and Planning

模型(model)是指一个agent可以用来预测环境对于动作的反应的所有部分。有一些模型会产出所有可能性以及他们的概率,这种叫做分布模型(distribution model)。另一种是每次根据概率值采样产生一种可能性,这种叫做采样模型(sample model)。比如在动态规划中假设的模型就是一个分布模型。分布模型比采样模型强的地方在于分布模型也总是可以来产生采样。但是很多应用中获取采样模型会更方便。

模型可以用来模仿或仿真真实经验。给定一个初始状态和动作,采样模型可以产出一个可能的状态转移而分布模型可以产出所有可能的状态转移和他们发生的概率。而给定一个初始状态和策略,采样模型可以直接产出一个整个的episode而分布模型可以产出所有可能的episode以及他们发生的概率。所有的例子中模型都是用来模仿环境来产生仿真经验的。

规划(Planning)这个词在这里是指把模型作为输入通过与模型环境的交互产生或者改进一个策略的计算过程。在人工智能中有两种方式来进行规划。一种叫做状态空间规划(state-space planning),指的是从状态空间中搜索出一个最优的策略或者到达目标的最优路径,也就是本书包含的方法。另一种叫做计划空间规划(plan-space planning),也就是在计划空间中搜索最优。比如进化算法和partial-order planning。本书只考虑前一种。

本章要描述的统一框架是指所有的状态空间计划算法都共享一种架构,同样适用于本书讲到的学习算法。这个框架有两个基本点,一是搜有的状态空间规划都通过计算值函数作为一个优化策略的关键中间步骤,第二是通仿真经验来计算更新或者是backup操作。框架图如下:

动态规划算法就很适配这个框架。这一章将会介绍其他一些符合这个框架的状态空间搜索算法。学习算法和规划算法的核心都是通过backing-up更新操作来估计值函数。区别在于规划算法使用的是模型产生的仿真数据而学习算法是使用环境产生的真实数据。而他们都符合这个框架也就代表他们之间的很多算法可以直接通用。学习算法只需要使用经验数据作为输入,因此他们通常能够同时用在仿真数据和真实数据上。比如下面介绍了一个简单的基于一步表格Q-learning算法以及从采样模型产生的样本上的例子,这个方法叫做random-sample one-step tabular Q-planning,和一步表格Q-learning算法收敛条件相同。

除了这个框架之外,本章的第二个主题是规划算法在小的增量式步骤中的优势。这个优势使得规划算法能够在任何时间点中断或重定向,这是能够高效组合规划算法以及学习算法的关键要求。

8.2 Dyna: Integrated Planning, Acting, and Learning

因为规划是通过在线与环境交互的,一些有趣的情景会发生。和环境交互获得的新信息可能会改变模型从而与规划算法交流。决策和模型的学习都是非常消耗计算力的操作,因此需要将当前算力分配给这两个部分。首先来定义一个简单的整合了在线规划agent需要的所有函数的框架Dyna-Q。

在一个规划的agent里,真实经验至少有两个作用:一是用来改进环境模型,二是通过强化学习算法直接进行值函数的更新。前一个功能叫做model-learning,后一个叫做direct reinforcement learning(direct RL)。他们的关系如右图。真实经验通过模型来改进值函数或者策略的方式叫做indirect reinforcement learning。两种方法都有各自的优缺点。间接的方法能够更充分利用有限的真实经验因此在更短的迭代次数里能获得更好的策略。另一方面直接的方法更加简洁而且不会收到模型偏差的影响。Dyna-Q框架包含了右图中的所有部分,包括规划,行动和模型学习以及直接RL,而且他们是同时进行的。模型学习的方法是基于表的而且是确定性的模型。在规划算法中,算法只会采样那些之前以及经历过的状态动作对,因此不会有问题。

Dyna类型的整体框架如下图,Dyna-Q只是它的一个例子。中间的一列代表环境与智能体的交互从而产生真实的序列。左边的箭头表示的是从真实的经验中改进值函数和策略的直接RL,右边的箭头是基于模型的处理过程。从真实经验中建立的环境模型给出仿真的经验。search control代表的是为模型产生的仿真经验选择起始状态和动作的过程。最后,在仿真经验中直接应用学习算法,把仿真的经验当做真实经验使用从而进行规划。一般来说强化学习算法都可以应用在仿真经验和真实经验中。学习和规划的有很多的相同点,唯一的不同是经验的来源。

理论上说,规划、行为、模型学习和直接RL是同时发生的。Dyna-Q的算法伪代码如下:

在Dyna-Q中,规划和学习是使用完全相同的算法。因为规划也是增量式的过程,所以把它们组合起来很容易。规划的过程一般是在后台完成,模型学习也是一样。随着模型的改变,规划算法会逐渐计算出一个不同的行为方式来适应模型。

练习8.1 不能。虽然n步自举的方法也可以进行一定的远距离更新,但是相比于Dyna-Q中的规划来说,更新值函数的速度还是慢很多。因为n步自举依然是每一个状态只计算一次,而Dyna-Q中每一个状态都进行了多步的规划与更新值函数。

8.3 When the Model Is Wrong

因为环境是动态变化的而且仅仅有一部分状态被访问过,或者是因为环境进行了变化或者因为模型是从没有被良好学习的值函数来得到的,因此模型很有可能是错误的。因此有时候规划过程会产生一个次优的策略。有时候规划产生的次优的策略也会快速导致对模型偏差的发现与修正。

而更困难的情形是当环境变得比以前更好的时候,因为之前正确的策略不会再进行优化。这种情形下模型的错误有可能很长时间甚至永远都不会被察觉。这个问题可以看成是另一种explore与exploit的矛盾。在规划算法中,exploration代表的是尝试那些能够改进模型的动作,而exploitation表示选择当前模型下最优的动作。我们希望agent能够发现环境中的变动,但是这样会很大地降低性能。和以前一样这个问题没有完美的解决方案,但是简单的启发搜索是很有效的。

Dyna-Q+算法就使用了启发算法来解决这个问题。这个算法记录了每个状态动作对上次访问到现在经过了多少时间步骤,对于越长时间没有访问的状态动作对,就表示这个动作对的转移有可能改变也就是模型在此处错误的概率就越大。因此为每个动作对的转移返回的反馈都增加一项额外奖励,用来估计算法来尝试这些很久没有被访问的状态动作转移。

练习8.2  因为增加了额外的奖励值

练习8.3 因为最优的路径在后来会经常被访问因此增加额外的奖励效果很小,而在非最优的路径进行访问又只会得到更少的反馈,所以增加鼓励探索的额外奖励效果比一开始见小了。

练习8.4 模型改为每个状态动作对有多个下一状态动作对,计算他们的概率然后产生仿真数据。更新Q值的时候使用期望形式。增加额外的奖励来鼓励探索。

8.4 Prioritized Sweeping

上节介绍的Dyna的agent是随机等概率的从以往访问过的状态动作对中选择下一个产生仿真经验的起始状态。但是这样往往不是最好的选择,如果规划能够重点关注某些状态转移和更新会更好。在很多更大型的问题里,状态空间的数量太大,因此如果不能集中经历更新那些重要的状态可能就会非常低效。

例子中按时我们或许从目标状态回退的搜索可能会更好。但是显然真实任务中我们不知道哪个是目标状态,但是可以从哪些状态值被显著改变的状态开始回退来进行更新。比如现在算法观察到了环境的一个变化,因此改变了某个状态的值函数。这可能会导致很多其它状态值的变化,但是只有更新那些能够直接转移到这个状态的状态的值才是有效的。因此不断地往前回推进行更新。这个想法被叫做规划计算的backward focusing。

从被更新的状态之前的状态进行更新的想法会导致很多状态动作对都需要被更新,但是它们也是有优先级的。可以根据它们的优先级来顺序更新,这个想法叫做prioritized sweeping。这个优先级可以使用一个每个状态动作对下一个状态的值函数变化程度表示。完整的算法如下:

把这个算法延伸到非确定性的环境中是很自然的。环境模型可以记录每个状态动作对下一个状态并且计数,并且每次规划过程中进行值更新的时候使用期望的形式就行。prioritized sweeping的一个限制是它需要使用期望更新,这在非确定性的环境中会浪费很多计算力在那些发生概率很小的状态转移上。而采样更新可以将整个的backing-up的计算过程打碎成一个个状态转移,这也就使得它能够重点关注那些比较重要的更新。seijen 和 sutton(2013)的论文采用了这个方法。这章介绍了回退法更新,还有别的集中更新状态的方法比如forward focusing。

8.5 Expected vs. Sample Updates

之前介绍了规划和学习算法的结合,下面的章节会介绍其中的一个个组成部分。本届介绍期望更新和采样更新的相对优缺点。

值更新有一些层面上的不同点,集中在一步更新上有三个层面的不同:一、是执行状态值更新还是状态动作对值更新;二、是通过评估最优策略还是任意一个策略;三、使用的是期望值更新还是采样值更新。这三个维度的不同产生了7种不同的算法,如右图所示。

在第六章介绍一步采样更新的时候把它当做期望更新的替代。在没有转移分布的时候,无法计算期望更新而可以进行采样更新。这里隐含的一点是说如果能计算期望更新那么就优先使用期望更新。但是虽然期望更新计算出了不会有采样误差的更新目标,但是这个算法同样需要更多的计算力,而计算力是有限的。在非确定性环境里这两种算法的区别非常大。期望更新的一大优势是它的计算是精确的,正确性依赖于下一状态值函数的正确性。而采样更新需要更少计算。如果有足够的计算时间,那么期望更新的值函数往往比采样更新更好,因为没有采样误差。但是如果没有足够的计算时间那么采样更新会被优先选择。在比较大型的问题中通常是没有足够的计算时间的。如果假设一个状态动作对可能会转移到b个新状态中,那么对于每个单元的计算力来说,是计算期望更新更好还是投入b倍的计算力来计算采样更新更好呢?

一个简单的实验表明,对于相对比较大的b来说,采样更新只需要采用一小部分期望更新需要的计算力就能够使得值函数的误差急剧减小。而实际的应用中采样更新的优势有可能会更大。采样更新在使得当前状态更新更加准确之后可能还会向前面的状态更新传递这个结果。

8.6 Trajectory Sampling

本节比较两种分配更新的方式。一种是经典的从动态规划中来的方法,也就是遍历整个的状态空间。这个方法是病态的因为有的问题里遍历整个状态空间是无法完成的。遍历的方法对待每一个状态都是等同的,分配相同的计算时间到每一个状态上面。而第四章介绍过,DP算法并不需要完全遍历以及平等的对待所有的状态。理论上可以使用任何更新的分配方式,但是实际上一般还是使用遍历。

第二种是根据某些分布来采样状态或者状态动作对。可以选择进行均匀采样,比如Dyna-Q算法,但是这回导致类似于遍历的问题。另一种更好的方法是根据当前策略观察到的分布来进行更新。这个方法的优点是可以很简单地产生分布。也就是说算法可以直接仿真产生整个的一个完整序列来对沿途的状态或者状态动作对进行值更新。这种产生经验和更新的方式叫做trajectory sampling。也很难想到比这种方法更有效的on-policy产生序列的方式。trajectory sampling的方法优雅而有效。

不过这个方法是否有效呢?感觉上看这种方法比均匀采样更好。书的第二部分会讲到on-policy的方法在function approximation的时候有很大优势。只关注on-policy产生的分布有好处,比如会避开那些无效的状态空间。但是也有坏处因为这样会一遍遍的遍历那些已经访问了太多次的状态。我们设计了一个实验来验证这个效果。例子中表明,根据on-policy方法产生的采样在一开始时会带来更快的规划但是长期来看会变得很迟钝。特别是分叉参数比较小而时间步骤比较长的时候这个特点更加明显。

这些例子的结果表明在短期内,根据on-policy得到的采样分布能够帮助算法关注那些在初始状态周围的状态。在长期来看,关注这些采样分布的状态有可能会效果较差因为这些状态已经有了比较正确的值。这些例子的结果可能不是总结性的但是也同样表明了使用根据on-policy来得到的采样分布给比较大规模的问题能够带来很大的好处。

8.7 Real-time Dynamic Programming

Real-time dynamic programming或者叫RTDP是动态规划算法中Value Iteration算法的on-policy trajectory-sampling的版本。因为和传统需要遍历状态的DP算法关系很近,所以能够更加明显地表现出on-policy trajectory-sampling的优点。RTDP算法是一种异步算法,因此状态值的更新可以使以任意的方式和顺序进行。

如果trajectory可以只从某些特定的状态开始,而且只关注对于一个给定策略的预测问题,那么on-policy trajectory的方法能够让算法完全跳过某些当前策略从任何起始状态都不会到达的状态。对于一个control问题来说,目标是找到一个最优策略而不是评估当前策略。而可能会存在某些任何最优策略从任何起始状态都不会到达的状态,所以也不需要为这些状态找到最优动作。我们需要的是optimal partial policy,也就是一个在相关的状态上最优但是对于不相关的状态可以使任意动作或者是未定义动作的最优策略。

但是能够找到这个最优部分策略的on-policy trajectory控制算法,比如Sarsa算法,是需要能够遍历所有的状态动作对无限次的,无论状态是否是相关的。这对于RTDP算法来说也是一样。这和评估的问题不一样,如果需要收敛到最优的策略,那么就不能够在任何状态或者状态动作对上停止更新。对于RTDP算法最有趣的结果是,对于某些满足特定合理条件的问题来说,RTDP算法不需要遍历所有的状态无限次,甚至不需要遍历某些状态就能够找到在相关状态中最优的策略。在实际产生的经验或者仿真经验中,RTDP算法选择贪婪的动作而且对所有当前状态执行期望值更新。而且也可以在每一步骤中任意的更新一些状态,比如每次都更新当前状态的后几个状态。

对于满足以下几个条件而且任意选择起始状态结束状态是目标状态的任务,RTDP算法能保证收敛到一个在相关状态上最优的策略。这些条件是:一、每个目标状态的初始值是0;二、至少有一个策略能够保证有一个目标状态从任意一个起始状态开始都能够到达;三、对于转移到非目标状态的转移,反馈必须严格小于0;四、所有初始状态值必须大于或者等于最优值函数(可以都设为0)。拥有这些特点的任务叫做stochastic optimal path problems,这个问题是通过最小化费而不是最大反馈来表示的。

RTDP算法的另一个优点是随着值函数趋近于最优值函数,agent用来产生trajectory的策略也趋近于最优策略。因为它总是与当前值函数保持贪心。传统的value iteration方法可能会导致最优的策略比最优的值函数早很多产生。

传统的value iteration算法更新所有的状态值函数,而RTDP算法只会重点关注那些和问题目标比较相关的状态。RTDP算法通常只需要基于遍历方法的value iteration方法的一半计算力就可以达到最优。

8.8 Planning at Decision Time

规划可以通过两种形式。一种是本章到目前为止所讲的,使用规划算法在模型中得到的仿真经验上进行优化策略和值函数的方式。在为当前状态选择动作的时候,规划算法已经对当前的很多状态值函数造成了影响。这种规划算法并不是关注当前状态,我们把这种叫做background planning。

另一种方式是每次遇到一个新的状态时就进行规划算法,从而产生一个当前状态的动作。最简单也是最退化的方式是当只提供状态值时,对基于模型预测的每个动作的下一个状态值函数进行比较从而选择一个最优动作。一般来说规划会看的更远几步。不想前一种方式,这个形式的规划算法更加关注某些特定状态。这种叫做decision-time planning。

这两种规划算法的形式,一是使用仿真的经验来逐渐改进策略和值函数,另一个是根据仿真经验为当前状态选择一个动作,可以很自然地进行融合。但是他们一般是分开研究。就算是规划算法是仅仅在决策时运行,我们依然可以把它看为使用仿真经验来更新值函数以及策略。只不过值和策略值与当前状态和动作选择有关,而且一般是在选择了当前动作之后就进行抛弃。在很多应用中这不算是一个大的损失,因为很长时间内我们都不会返回同一个状态。一般来说可能想要融合以下两点,既要关注当前状态又要存下规划算法的结果为了以后重复这个状态时直接返回结果。decision-time planning在不需要立即反应的任务中很有用,如果每次采取动作的间隔很小,那么就要使用background planning来立即把规划的结果更新到值函数中去。

8.9 Heuristic Search

人工智能中最经典的状态空间规划方法是一个decision-time的规划算法,叫做启发式搜索。启发式搜索中,对于遇到的每个状态都会考虑接下来的几个状态。值函数的估计会用在搜索树的叶子结点并不断回传,和书中讲的其它函数值计算的方法一样。计算到在当前状态值函数处为止。计算完了之后就会得到当前状态的最优动作,然后这些值函数会被丢弃。

在传统的启发式搜索算法中,并不会通过改变值函数估计的方式去存储backed-up计算的值。但考虑允许使用backed-up计算值或者其它方法的计算值来改变当前的值函数也是很自然的。某种程度上我们都已经使用了这个方法,比如greedy,\epsilon-greedy算法和UCB方法都是一种启发式搜索,只不过规模比较小。因此启发式搜索算法可以看作是在一步贪心策略算法之上的延伸 。

更深的搜索是为了得到更好的动作。如果有一个完全的模型和不完全的动作值函数,那么进行更深的搜索一般会得到更好的策略。另一方面更深的搜索意味着更多的计算量,通常导致更慢的反应时间。

我们同样不能忽略启发式搜索关注更新的最明显的方式,那就是关注当前状态。启发式搜索的有效性很大程度上依赖于它对于当前状态以后有可能发生的状态的关注和搜索。正是因为这种对于存储和计算资源的集中才导致了启发式搜索能够这么有效。

对更新的分布可以通过相似的方式换成对当前状态和它有可能的未来状态的关注。启发式搜索的过程可以当初下图的形式,并且自下而上进行值的计算。如果更新过程被这种形式组织而且使用了表格的表现形式,那么更新的过程会和这种深度优先的启发式搜索一样。所有的状态空间搜索都能被看成这种把很多单独的一步更新的形式拼合起来的方式。所以更深的搜索对于性能的提高不是由于使用了多步更新。而是因为对于更新状态和动作以及对马上将要发生的状态的关注和集中资源。

8.10 Rollout Algorithms

rollout算法是一种从当前状态开始,基于应用在仿真序列上的蒙特卡洛控制的一种decision-time规划算法。这个算法通过平均从当前状态开始采取某个动作以后在某个策略下的仿真序列的反馈值来计算每个动作的值函数估计。当平均计算出的动作值到达一定的可信度的时候,就选择执行估计值最大的那个动作。

和第五章讲的蒙特卡洛算法不同的是,rollout算法不是为了估算出最优的动作值函数或者给定策略的值函数。而是产生为当前状态和某个rollout策略产生每个动作的蒙特卡洛估计。作为一个decision-time planning算法,rollout算法每次计算完这些值函数的估计之后都会将它们丢弃。所以rollout算法完成起来相对简单,因为不需要去采样每个状态动作对的结果,也不需要估计整个状态空间或者状态动作空间的值函数。rollout算法完成的过程类似于policy iteration或者value iteration。每次通过在当前状态上计算出每个动作的估计值,在产生仿真经验的后面的状态中都跟随rollout策略\pi而产生。因此在当前状态计算产生最优的动作之后后面跟随原定的策略,这就是一个新的最优策略,满足GPI收敛至最优的条件。

换句话说,rollout算法是为了优化当前的rollout策略而不是找到一个最优策略。在有些应用中,即使是rollout策略是完全随机的,算法也能够产生不错的效果。不过直觉上rollout初始策略越好,值函数估计就会越精准,而最后算法产出的策略也会越好。

这里也有一个经典的探索与利用的矛盾。因为对当前状态动作值函数的估计需要一定量的MC仿真产生的经验。而作为一个decision-time planning算法,rollout算法通常需要满足一定的时间限制。rollout算法计算量的问题可以通过一些手段来减轻:一,因为每个MC经验是互相独立的,因此每个MC经验可以在独立的处理器中并行产生。另一种方法是对MC经验序列进行截断,不是仿真到目标状态而是在某个中间状态停止,使用存储的状态值来进行值估计。第三是监视MC仿真过程,对不可能出现或者和已有情况很接近的序列进行提前剪枝。

我们不把rollout算法当做是learning算法因为我们并不会保存一个长期的值或者策略。不过这个算法也利用了强化学习算法的一些特点,意识使用类似MCcontrol算法的过程进行仿真交互,避免了遍历状态和对于状态分布的依赖,转而使用的是采样值而不是期望值。第二是利用了policy improvement的特点来根据当前值函数估计进行贪婪动作。

8.11 Monte Carlo Tree Search

Monte Carlo Tree Search(MCTS)算法是一个最近的取得惊人成就的decision-time planning算法。从基础来说,MCTS算法是一种上节讲的rollout算法,只不过添加了一种使用从MC仿真序列中累加值估计的方法来连续的指导仿真序列朝着更高反馈的序列进行。这个算法有很多变种,16.6节会讲解Alpha Go中使用的版本。

MCTS算法每次遇到一个新的状态都为它选择一个对应的动作。作为一个rollout算法,它的执行过程是一个迭代的过程。每次迭代都仿真产生从当前状态运行到中止状态的序列(或者知道discounting足够小)。算法的核心思想是连续地关注多个从当前状态延伸部分开始的一些仿真序列。这些延伸是之前一些仿真中取得较高评估值的序列的初始部分。MCTS不是必须保留值函数估计或者从当前动作选择到下一个选择的策略,不过很多实现方式都是保持一些下一步执行时有可能有用的值函数。

对于大部分的这类算法,仿真序列中的动作是通过使用一个简单的策略产生的。这种策略和简单些的rollout算法中一样也叫作rollout策略。就像其它网格MC算法一样,状态动作对的值是通过从当前动作开始的反馈值的平均来进行估计的。MC值估计值为某些部分的状态动作对保存,也就是那些在几步之内有可能会访问到的状态动作对。组成一个以当前状态为根节点的树,如下图所示。MCTS不断地通过增加根据仿真序列结果来看比较有可能被访问到的节点到这棵树上。每个仿真序列会穿过这个树然后从某个叶子结点延伸出去。在这个叶子结点之外的部分通过rollout策略进行指导动作,在树内部的状态有另外的策略。对于树内部的状态我们至少有部分动作的估计值,因此可以根据这些动作值和一个策略选择动作,这个策略叫做tree policy,能够平衡探索和利用。比如可以利用\epsilon-greedy算法或者UCB选择规则。

一个基础版本的MCTS算法的迭代包括以下一些步骤:

  1. 选择。从根节点开始,通过树策略基于树上节点的值函数来选择动作从而穿越树到达叶子结点。
  2. 延伸。在某些迭代中,树从被选中的叶子节点开始被添加能够从叶子结点使用非探索动作到达的一个或多个叶子结点。
  3. 仿真。从被选中的节点开始或者从新添加的节点开始,遵从rollout策略来仿真一个完整的序列。
  4. backup。仿真序列产生的反馈值通过返回上层来更新或者初始化在MCTS算法迭代过程中附着在树的边上的动作值。对于这个树之外的被rollout策略访问的动作和状态不会被保存值。上图也包括了从中止状态计算仿真序列值函数的过程。

MCTS不断地执行这四个过程知道没有多余时间或者其它计算资源耗尽。最后,根据这个树中的积累数据和某些机制从根节点选择一个动作。比如有可能选择值函数最大的动作或者最多访问次数的动作。到达一个新状态之后算法重新运行。有时候是直接从一个新的没有叶子结点的树的根节点开始,但很多时候会从之前的MCTS迭代中生成的树中的某个节点再次开始。除了哪个节点的子孙节点,树中其它的节点会被抛弃。

把MCTS算法和本书中讲的强化学习算法结合起来看就能够理解为什么它会取得如此惊人的效果。MCTS算法的基础是以及蒙特卡洛控制算法的一个decision-time 规划算法。这里的MC算法是利用前面介绍的rollout算法生成仿真。所以算法集合了在线形式、增量形式、采样值估计和策略迭代的多个特点。而且还在它的树的边上存储了强化学习算法计算出来的采样更新。这会让MC产生的序列集中在那些初始部分与之前仿真的高反馈序列相同的其它序列上。更进一步的是,通过延伸树的节点,MCTS有效的延伸了一个存储部分状态值函数的查找表,也就是把内存分配给了那些之前产生的高反馈序列的初始部分。于是MCTS避免了全局优化一个动作值函数的问题而且保留了使用过往经验指引探索的优势。

8.12 Summary

规划算法需要环境的模型。分布算法需要环境状态转移的概率分布,采样模型根据这些概率每次产生一个反馈值和状态转移。动态规划需要状态分布是因为它使用了期望更新。而采样模型是仿真与环境的交互需要的,而在仿真过程中像其它强化学习算法一样使用采样更新。采样模型的获得更加简单。

我们展示了规划最优动作和学习最优动作之间令人吃惊的亲近关系。所以学习和规划算法可以直接通过允许它们同时更新值函数来进行融合使用。而且,所有的学习算法都可以通过将真实经验改换为模型产生的仿真经验转移成规划算法。

同样把增量式规划算法与执行动作和模型学习整合起来也很直接。规划,执行和模型学习通过一种唤醒的模型交互,每个都互相产生对方需要用来更新自己的东西。没有其它的必须的交互过程。最自然的过程是并行的异步计算。如果进程必须共享计算资源,那么可以使用任意方便或者高效的方式来进行。

这一章我们接触了很多空间搜索规划算法的变化的维度。第一个维度是值更新的规模变化。另一个重要的维度是更新的分布,也就是搜索的关注点。使用优先搜索关注那些值函数最近更新的状态。on-policy序列采样关注那些在控制算法下容易访问到的状态。这样可以跳过某些不需要关注的状态。

规划可以关注那些相关的状态比如在交互过程中真正访问到的状态。这种方式最重要的形式就是在决策时的规划算法,也就是选择动作过程的一部分。传统的启发式搜索也是一个例子。另外的例子比如rollout算法和受益于在线增量采样值估计和策略优化的MCTS算法。

猜你喜欢

转载自blog.csdn.net/qq_25037903/article/details/82469170