第8章
用计算机方法进行规划和学习
在本章中,我们开发了强化学习方法的统一视图,这些方法需要环境模型,例如动态规划和启发式搜索,以及可以在没有模型的情况下使用的方法,例如蒙特卡罗和时间差分方法。这些分别称为基于模型和无模型的强化学习方法。基于模型的方法依赖于计划作为其主要组成部分,而无模型方法主要依赖于学习。虽然这两种方法之间存在着真正的差异,但也存在很大的相似之处。特别是,这两种方法的核心是价值函数的计算。此外,所有方法都基于展望未来事件,计算备份值,然后将其用作近似值函数的更新目标。在本书的前面,我们将Monte Carlo和时间差分方法作为不同的替代方法,然后展示了如何通过n步方法统一它们。我们在本章中的目标是基于模型和无模型方法的类似集成。在前面的章节中已经确定了这些不同之处,我们现在探讨它们可以混合的程度。
8.1模型和规划
通过环境模型,我们指代理可以用来预测环境如何响应其行为的任何事物。给定状态和动作,模型产生对结果下一状态和下一奖励的预测。如果模型是随机的,那么有几种可能的下一个状态和下一个奖励,每个都有一定的发生概率。一些模型描述了所有可能性及其概率;这些我们称之为distribution models。其他模型只产生一种可能性,根据概率进行采样;这些我们称之为样本模型。例如,考虑对十几个骰子的总和进行建模。distribution models将产生所有可能的总和及其发生的概率,而样本模型将产生根据该概率分布绘制的单个总和。在动态规划中假设的模型- MDP动力学的估计,p(s’,r | s,a)-是分布模型。第5章中二十一点示例中使用的模型类型是一个示例模型。分布模型比样本模型更强大,因为它们可以始终用于生产样本。但是,在许多应用中,获取样本模型比分发模型容易得多。十几个骰子就是一个简单的例子。编写一个计算机程序来模拟骰子卷并返回总和是很容易的,但是找出所有可能的总和及其概率更难又更容易出错。
模型可用于模拟或模拟体验。给定起始状态和动作,样本模型产生可能的转换,并且分布模型生成通过其发生概率加权的所有可能转变。给定起始状态和策略,样本模型可以产生整个剧集,并且分布模型可以生成所有可能的剧集及其概率。在任何一种情况下,我们都说模型用于模拟环境并产生模拟体验。
在不同的领域中,单词规划以几种不同的方式使用。我们使用该术语来指代将模型作为输入并生成或改进与建模环境交互的策略的任何计算过程:
在人工智能中,根据我们的定义,有两种不同的规划方法。状态空间规划,包括我们在本书中采用的方法,主要被视为通过状态空间搜索最优策略或目标的最佳路径。动作导致从状态到状态的转换,并且值函数在状态上计算。在我们所说的计划空间规划中,规划是通过计划空间进行搜索。运算符将一个计划转换为另一个计划,并在计划空间中定义值函数(如果有)。规划空间规划包括演化方法和“偏序规划”,这是人工智能中的一种常见规划,其中步骤的排序在规划的所有阶段都没有完全确定。计划空间方法难以有效地应用于强化学习中关注的随机序列决策问题,我们不再进一步考虑它们(但参见例如Russell和Norvig,2010)。
我们在本章中提出的统一观点是,所有的状态空间规划方法都有一个共同的结构,这种结构也存在于本书所介绍的学习方法中。本章的其余部分将开发此视图,但有两个基本思想:(1)所有状态空间规划方法都将计算价值函数作为改进策略的关键中间步骤,(2)它们计算价值函数通过应用于模拟体验的更新或备份操作。这种通用结构可以表示如下:
动态编程方法显然适合这种结构:它们扫描状态空间,为每个状态生成可能的转换分布。然后,每个分布用于计算备份值(更新目标)并更新状态的估计值。在本章中,我们认为各种其他状态空间规划方法也适合这种结构,各个方法只能在它们所做的更新类型,它们执行的顺序以及备份信息保留的持续时间。
以这种方式查看计划方法强调了它们与我们在本书中描述的学习方法的关系。学习和计划方法的核心是通过备份更新操作来估计价值函数。不同之处在于,规划使用模型生成的模拟经验,而学习方法则使用环境产生的实际经验。当然,这种差异导致了许多其他差异,例如,如何评估绩效以及如何灵活地产生经验。但是,共同的结构意味着许多想法和算法可以在规划和学习之间转移。特别地,在许多情况下,学习算法可以代替规划方法的密钥更新步骤。学习方法仅需要经验作为输入,并且在许多情况下,它们可以应用于模拟体验以及真实体验。下面的框显示了基于一步表格Q学习的规划方法和来自样本模型的随机样本的简单示例。这种方法,我们称之为随机样本一步表格Q-规划,在一步表格Q-学习收敛于真实环境的最优政策的条件下,收敛到模型的最优策略(每个状态-动作对必须在步骤1中无限次地选择,并且α必须随时间适当减小。
除了统一的规划和学习方法之外,本章的第二个主题是以小的渐进步骤进行规划的好处。这使计划能够在几乎没有浪费的计算的情况下随时中断或重定向,这似乎是有效地将计划与行为和学习模型混合的关键要求。如果问题太大而无法准确解决,即使在纯粹的计划问题上,以非常小的步骤进行规划也可能是最有效的方法。
8.2 Dyna:综合规划,表演和学习
当计划在线完成时,在与环境交互时,会出现许多有趣的问题。从交互中获得的新信息可能会改变模型,从而与规划相互作用。可能希望以某种方式定制规划过程以适应当前正在考虑或在不久的将来预期的状态或决定。如果决策制定和模型学习都是计算密集型过程,则可能需要在它们之间划分可用的计算资源。为了开始探索这些问题,我们在本节中介绍了Dyna-Q,这是一个集成了在线规划代理所需的主要功能的简单架构。每个函数都以简单,几乎无关紧要的形式出现在Dyna-Q中。在后面的章节中,我们详细介绍了实现每项功能的一些替代方法以及它们之间的交易。目前,我们只是为了说明这些想法并激发你的直觉。在规划代理中,实际体验至少有两个角色:它可以用于改进模型(使其更准确地匹配真实环境),并且可以用于直接改善价值功能和使用这些类型的策略我们在前面章节中已经讨论过强化学习方法。前者称为模型学习,后者称为直接强化学习(直接RL)。右图中总结了经验,模型,价值和政策之间可能存在的关系。每个箭头显示影响和推测改善的关系。请注意,经验如何通过模型直接或间接地改进价值功能和政策。后者,有时被称为间接强化学习,参与规划。
直接和间接方法都有优点和缺点。间接方法通常可以更充分地利用有限的经验,从而以更少的环境互动实现更好的政策。另一方面,直接方法更简单,并且不受模型设计中的偏差的影响。有些人认为间接方法总是优于直接方法,而另一些方法则认为直接方法是大多数人类和动物学习的原因。心理学和人工智能方面的相关辩论涉及认知的相对重要性,而不是试错学习和审议规划,而不是被动决策(参见第14章,从心理学的角度讨论其中的一些问题) 。我们的观点是,所有这些辩论中的替代方案之间的对比被夸大了,通过认识到这两方之间的相似性而不是反对它们,可以获得更多的洞察力。例如,在本书中,我们强调了动态规划和时间差异方法之间的深刻相似性,即使一个是为规划而另一个是为无模型学习而设计的。
Dyna-Q包括上图中显示的所有过程-计划,行为,模型学习和直接RL-所有持续发生的过程。规划方法是第161页的随机样本一步表格式Q规划方法。直接RL方法是一步表格式Q学习。模型学习方法也是基于表格的,并假设环境是确定性的。每次过渡St,At→Rt + 1,St + 1,模型记录在St的表条目中,在预测Rt + 1,St + 1将确定性地跟随。因此,如果使用之前经历过的状态-动作对查询模型,则它仅返回最后观察到的下一状态和下一个奖励作为其预测。在规划期间,Q规划算法仅从先前已经经历过的状态-动作对中随机采样(在步骤1中),因此永远不会使用它没有信息的对来查询模型。
Dyna代理的整体架构,其中Dyna-Q算法就是一个例子,如图8.1所示。中间栏代表了代理人与环境之间的基本互动,从而产生了真实体验的轨迹。图左侧的箭头表示根据实际经验进行的直接强化学习,以改善价值功能和政策。右边是基于模型的流程。该模型从实际经验中学习,并产生模拟经验。我们使用术语搜索控件来指代为模型生成的模拟体验选择起始状态和动作的过程。最后,通过将强化学习方法应用于模拟体验来实现规划,就像它们确实发生过一样。通常,与Dyna-Q一样,相同的强化学习方法既可用于从真实体验中学习,也可用于从模拟体验中进行规划。因此,强化学习方法是学习和计划的“最终共同路径”。学习和计划是深深融合的,因为他们分享几乎所有相同的机器,只是在他们的经验来源中进行分析。
从概念上讲,规划,行动,模型学习和直接RL在Dyna代理中同时并行地发生。但是,为了在串行计算机上具体化和实现,我们完全指定它们在一个时间步长内发生的顺序。在Dyna-Q中,表演,模型学习和直接RL过程几乎不需要计算,我们假设它们只消耗了一小部分时间。每个步骤中的剩余时间可用于规划过程,这本身就是计算密集型过程。让我们假设在执行,模型学习和直接RL之后的每个步骤中有时间来完成Q计划算法的n次迭代(步骤1-3)。在下面框中的Dyna-Q的伪代码算法中,Model(s,a)表示状态-动作对(s,a)的(预测的下一状态和奖励)的内容。直接强化学习,模型学习和计划分别通过步骤(d),(e)和(f)实施。如果省略(e)和(f),则剩余算法将是一步表格Q学习。
例8.1:Dyna Maze 考虑图8.2中插入的简单迷宫。在47个状态中的每个状态中,有四个动作,向上,向下,向右和向左,它们将代理确定性地带到相应的相邻状态,除非移动被障碍物或迷宫的边缘阻挡,在这种情况下,代理人不动。所有过渡的奖励都是零,除了那些进入目标状态的过程,它是+1。在达到目标状态(G)之后,代理返回到开始状态(S)以开始新的剧集。这是一个打折的,偶然的任务,γ= 0.95。
图8.2的主要部分显示了将Dyna-Q试剂应用于迷宫任务的实验的平均学习曲线。初始动作值为零,步长参数为α= 0.1,探测参数为ε= 0.1。当在动作中贪婪地选择时,关系随机被破坏。代理人的计划步骤数量,n不同,他们每个实际步骤执行。对于每个n,曲线显示代理在每一集中达到目标所采取的步数,平均超过30次重复实验。在每次重复中,随机数发生器的初始种子被保持,因此,第一集对于n的所有值都是完全相同的(约1700步),并且其数据未在图中显示。在第一集之后,所有n值的性能都得到改善,但是对于更大的值,更快速地回忆起来。回想一下n = 0代理是一个非规划代理,只使用直接强化学习(一步表格式Q学习)。这是迄今为止这个问题上最慢的代理,尽管事实上参数值(α和ε)为它进行了优化。非计划代理人花了大约25集来达到(ε-)最佳表现,而n = 5的代理人大约需要5集,而n = 50的代理人只花了3集。
图8.3显示了规划代理发现解决方案的速度比非规划代理快得多的原因。 显示了在第二集中途由n = 0和n = 50个代理人发现的政策。 如果没有计划(n = 0),每集只会为策略添加一个额外的步骤,因此到目前为止只学习了一步(最后一步)。 通过计划,在第一集中再次只学习一步,但是在第二集中,已经开发了一个广泛的策略,在该剧集结束时将几乎回到开始状态。 此策略由规划过程构建,而代理仍然在启动状态附近徘徊。 到第三集结束时,将找到完整的最优政策并获得完美的表现。
在Dyna-Q中,学习和规划是通过完全相同的算法完成的,根据真实的学习经验和模拟的计划经验进行操作。由于计划逐步进行,因此混合计划和行动是微不足道的。两者都尽可能快地进行。代理人总是被动并始终是审慎的,立即响应最新的感官信息,但总是在后台进行规划。背景中还有模型学习过程。随着新信息的获得,模型会更新以更好地匹配现实。随着模型的变化,正在进行的规划过程将逐渐计算出与新模型匹配的不同行为方式。
练习8.1图8.3中的非计划方法看起来特别差,因为它是一步法;使用多步引导的方法会做得更好。您是否认为第7章中的多步骤引导方法之一可以与Dyna方法一样好?解释为什么能或者为什么不能。
8.3当模型错误时
在上一节中介绍的迷宫示例中,模型中的更改相对适中。模型开始是空的,然后只填充完全正确的信息。一般来说,我们不能指望如此幸运。模型可能是不正确的,因为环境是随机的,并且只观察到有限数量的样本,或者因为模型是使用不完全推广的函数逼近来学习的,或者仅仅是因为环境已经改变并且尚未观察到其新行为。当模型不正确时,计划过程可能会计算次优策略。
在某些情况下,通过计划快速计算的次优策略会导致建模错误的发现和纠正。当模型在预测更大的奖励或更好的状态转换的意义上比实际可能时更容易发生这种情况。计划中的政策试图利用这些机会并在此过程中发现它们不存在。
例8.2:阻止迷宫 图8.4显示了一个迷宫示例,说明了这种相对较小的建模错误并从中恢复。最初,从开始到目标,到屏障右侧有一条短路径,如图的左上角所示。在1000个时间步之后,短路径被“阻挡”,并且沿着屏障的左侧打开更长的路径,如图的右上方所示。该图显示了Dyna-Q代理和增强型Dyna-Q +代理的平均累积奖励,将在稍后描述。图表的第一部分显示两个Dyna代理都在1000步内找到了短路径。当环境发生变化时,图表变得平坦,表明代理商没有获得奖励的时期,因为他们在屏障后面徘徊。然而,过了一段时间,他们能够找到新的开口和新的最佳行为。当环境变得比以前变得更好时,会出现更大的困难,但以前正确的政策并没有显示出改进。在这些情况下,如果有的话,可能无法长时间检测到建模错误。
例8.3:快捷方式迷宫
这种环境变化引起的问题由图8.5所示的迷宫示例说明。 最初,最佳路径是围绕屏障的左侧(左上)。 然而,在3000步之后,沿着右侧打开较短的路径,而不会干扰较长的路径(右上方)。 该图显示常规Dyna-Q代理从未切换到快捷方式。 事实上,它从未意识到它存在。 它的模型表示没有捷径,所以计划得越多,向右走并发现它的可能性就越小。 即使采用ε-greedy政策,代理人也不太可能采取如此多的探索性行动来发现捷径。
这里的一般问题是勘探和开发之间冲突的另一种形式。 在规划环境中,探索意味着尝试改进模型的行动,而挖掘意味着在给定当前模型的情况下以最佳方式行事。我们希望代理进行探索以查找环境中的更改,但不要太多,以至于性能会大大降低。与早期的勘探/开发冲突一样,可能没有完美和实用的解决方案,但简单的启发式方法往往是有效的。
解决了快捷方式迷宫的Dyna-Q+代理使用了一种这样的启发式方法。此代理程序会跟踪每个状态–动作对的自上次尝试与环境进行真正交互以来已经过了多少时间步长。经过的时间越长,这一对的动态变化的可能性就越大(我们可以推测),并且模型的概率是不正确的。为了鼓励测试长期未尝试的行为的行为,对涉及这些行为的模拟体验给出了特殊的“奖励奖励”。特别是,如果转换的建模奖励是r,并且没有在τ时间步骤中尝试转换,那么计划更新就好像转换产生r+k√τ的奖励,对于一些小k。这鼓励代理人继续测试所有可访问的状态转换,甚至找到很长的动作序列,以便进行这样的测试。当然所有这些测试都有它的成本,但在很多情况下,如在快捷迷宫中,这种类型计算好奇心非常值得额外探索。
练习8.2为什么具有探索奖励Dyna-Q +的Dyna代理在第一阶段以及阻塞和快捷实验的第二阶段表现更好?
练习8.3仔细检查图8.5可以发现Dyna-Q +和Dyna-Q之间的差异在实验的第一部分略有缩小。这是什么原因?
**练习8.4(编程)**上述探索奖金实际上改变了状态和动作的估计值。这有必要吗?假设奖金k√τ不是用于更新,而是仅用于行动选择。也就是说,假设所选择的动作始终是使Q(St,a)+k√τ(St,a)最大的动作。进行一个gridworld实验,测试并说明这种替代方法的优点和缺点。
练习8.5如何修改第164页上显示的表格式Dyna-Q算法来处理随机环境?这种修改如何在不断变化的环境中表现不佳,如本节所述?如何修改算法以处理随机环境和变化的环境?
8.4优先清扫
在前面部分中介绍的Dyna代理中,模拟转换是从所有先前经历过的对中随机均匀选择的状态-动作对开始的。但统一的选择通常不是最好的;如果模拟转换和更新集中在特定的状态动作对上,则计划可以更有效。例如,考虑在第一个迷宫任务的第二集中发生了什么(图8.3)。在第二集开始时,只有直接进入目标的状态-动作对具有正值;所有其他对的值仍为零。这意味着沿着几乎所有转换执行更新毫无意义,因为它们将代理从一个零值状态转移到另一个零值状态,因此更新将没有效果。只有在目标之前或之后转换到状态的更新才会更改任何值。如果统一生成模拟转换,那么在遇到其中一个有用转换之前,将会进行许多浪费的更新。随着规划的进展,有用更新的区域也会增长,但是如果能够集中精力进行最有效的计划,那么计划的效率仍然远远低于它。在作为我们真正目标的更大问题中,状态的数量如此之大,以至于没有重点的搜索效率极低。
这个例子表明,通过从目标状态向后工作,可以有效地集中搜索。当然,我们并不真的想使用任何特定于“目标状态”概念的方法。我们希望方法适用于一般奖励功能。目标状态只是一种特殊情况,便于刺激直觉。一般而言,我们希望不仅从目标状态而且从任何价值已发生变化的状态开展工作。假设在给定模型的情况下这些值最初是正确的,因为它们在发现目标之前处于迷宫示例中。现在假设代理发现环境中的变化并改变其一个状态的估计值,向上或向下。通常,这意味着还应该更改许多其他状态的值,但唯一有用的一步更新是直接导致其值已更改的一个状态的操作。如果更新了这些操作的值,则可以依次更改先前状态的值。如果是这样,那么导致它们的行为需要更新,然后它们的前任状态可能已经改变。通过这种方式,可以从价值发生变化的任意状态向后工作,执行有用的更新或终止传播。这个总体思路可能被称为计划计算的后向聚焦。
随着有用更新的前沿向后传播,它经常快速增长,产生许多可以有用地更新的状态-动作对。但并非所有这些都同样有用。一些状态的价值可能已经发生了很大变化,而其他状态的变化可能很小。那些已经发生了很大变化的前辈对也更有可能发生很大变化。在随机环境中,估计转移概率的变化也会导致变化大小的变化以及需要更新对的紧迫性。根据紧急程度的衡量标准对更新进行优先级排序是很自然的,并按优先级顺序执行。这是优先清扫背后的想法。维护每个状态-动作对的队列,如果更新,其估计值将变化为非平凡的,由变化的大小区分优先级。更新队列中的顶部对时,将计算其每个前任对上的效果。如果效果大于某个小阈值,则将该对插入具有新优先级的队列中(如果队列中存在该对的先前条目,则插入仅导致更高优先级条目保留在队列中)。通过这种方式,变化的效果可以有效地向后传播,直到静止。确定性环境的完整算法在下一页的框中给出。
例8.4:在迷宫上进行优先扫描已发现优先扫描可显着提高在迷宫任务中找到最佳解决方案的速度,通常为5到10倍。一个典型的例子显示在右边。这些数据用于一系列与图8.2所示结构完全相同的迷宫任务,只是它们的网格分辨率不同。优先扫描比未优先级的Dyna-Q保持了决定性的优势。两个系统每次环境互动最多n = 5次更新。改编自彭和威廉姆斯(1993)。
将优先扫描扩展到随机环境的扩展是直截了当的。通过保持每个状态 - 动作对经历的次数和下一个状态的计数来维持该模型。然后很自然地更新每一对,而不是像我们迄今为止使用的样本更新,但考虑到所有可能的下一个状态及其发生的概率,进行预期的更新。
例8.5 用于杆操纵的优先扫描
该任务的目的是在有限的矩形工作空间内围绕一些笨拙放置的障碍物操纵杆,以最少的步数到达目标位置。 杆可沿其长轴或垂直于该轴平移,或者可沿其中心的任一方向旋转。 每个运动的距离约为工作空间的1/20,旋转增量为10度。 转变是确定性的,并量化为20×20个位置之一。 右图显示了从优先扫描发现的障碍和从开始到目标的最短解决方案。 这个问题是确定性的,但有四个动作和14,400个潜在状态(其中一些由于障碍而无法到达)。 这个问题可能太大,无法用非优先级方法解决。 图重印自Moore和Atkeson(1993)。
优先扫描只是分配计算以提高计划效率的一种方式,可能不是最好的方法。优先扫描的限制之一是它使用预期的更新,这在随机环境中可能会浪费大量的低概率转换计算。正如我们在下一节中所示,尽管采样引入了方差,但在许多情况下,样本更新可以更接近真值函数,但计算量更少。样本更新可以获胜,因为它们将整体备份计算分解为更小的部分 - 与单个转换相对应的部分 - 然后使其能够更集中地集中在将产生最大影响的部分上。这个想法被认为是van Seijen和Sutton(2013)引入的“小备份”中的逻辑限制。这些是沿着单个转换的更新,例如样本更新,但是基于没有采样的转换概率,如预期的更新。通过选择完成小更新的顺序,可以大大提高规划效率,超越优先扫描的可能性。
我们在本章中建议,可以将所有类型的状态空间规划视为值更新的序列,仅在更新类型,预期或样本,大或小以及更新的顺序方面有所不同。在本节中,我们强调了后向聚焦,但这只是一种策略。例如,另一种方法是根据在当前政策下经常访问的状态可以轻松地达到状态来聚焦状态,这可能被称为前向聚焦。 Peng和Williams(1993)以及Barto,Bradtke和Singh(1995)已经探索了前向聚焦的版本,接下来几节中介绍的方法将其转化为极端形式。
8.5预期与样本更新
前面部分中的示例给出了组合学习和规划方法的可能性的一些概念。在本章的其余部分,我们分析了所涉及的一些组件思想,从预期和样本更新的相对优势开始。
本书的大部分内容都是关于不同类型的价值功能更新,我们已经考虑了很多种类。目前关注一步更新,它们主要沿三个二进制维度变化。前两个维度是它们是更新状态值还是操作值,以及它们是否估计最优策略或任意给定策略的值。这两个维度产生四类更新,用于近似四个值函数q*,v*,qπ和vπ。另一个二进制维度是考虑到可能发生的单个样本,考虑所有可能发生的事件或样本更新,更新是否是预期的更新。这三个二进制维度产生八种情况,其中七种对应于特定算法,如右图所示。 (第八种情况似乎与任何有用的更新都不对应。)这些一步更新中的任何一种都可用于规划方法。前面讨论的Dyna-Q代理使用q样本更新,但他们也可以使用q预期更新,或预期或样本qπ更新。 Dyna-AC系统使用vπ样本更新和学习策略结构(如第13章所述)。对于随机问题,优先扫描总是使用预期更新之一完成。
图8.6:本书中考虑的所有一步更新的备份图。
当我们在第6章介绍一步式样本更新时,我们将它们作为预期更新的替代品。在没有分布模型的情况下,无法进行预期的更新,但可以使用来自环境或样本模型的样本转换来完成样本更新。从这个角度来看,隐含的是,如果可能的话,预期的更新比样本更新更可取。但是他们呢?预期的更新肯定会产生更好的估计,因为它们不受采样误差的影响,但它们也需要更多的计算,而计算通常是计划中的限制资源。为了正确评估预期和样本更新的相对优点,我们必须控制其不同的计算要求。
具体来说,考虑近似q*的预期和样本更新,离散状态和动作的特殊情况,近似值函数Q的表查找表示,以及估计动态形式的模型,^p(s’,r | s,a)。状态-动作对s,a的预期更新是:
这些预期和样本更新之间的差异在环境是随机的程度上是显著的,具体地说,在给定状态和行动的情况下,许多可能的下一个状态可能以各种概率发生。如果只有一个下一个状态是可能的,那么上面给出的预期和样本更新是相同的(取α= 1)。如果有许多可能的下一个状态,则可能存在重大差异。支持预期更新的是它是精确计算,导致新的Q(s,a)的正确性仅受后继状态下Q(s’,a’)的正确性的限制。样本更新还受到采样错误的影响。另一方面,样本更新在计算上更便宜,因为它只考虑一个下一个状态,而不是所有可能的下一个状态。实际上,更新操作所需的计算通常由评估Q的状态-动作对的数量决定。对于特定的起始对,s,a,让 b是分支因子(即,^p(s’| s,a)> 0的可能的下一状态s’的数量)。然后,该对的预期更新需要大约样本更新的b倍。
如果有足够的时间来完成预期的更新,那么由于没有采样错误,所得到的估计通常优于b样本更新。但是,如果没有足够的时间来完成预期的更新,那么样本更新总是更可取的,因为它们至少在价值估计方面有一些改进,而且更新次数少于b。在许多状态-行动对的大问题中,我们经常处于后一种情况。有这么多的状态-行动对,所有这些对的预期更新将花费很长时间。在此之前,我们可能会在许多状态-动作对中进行一些样本更新,而不是在几对中预期更新。给定计算单位的单位,是否更好地投入到一些预期的更新或b倍的样本更新?
图8.7显示了分析结果,表明了这个问题的答案。它将估计误差显示为各种分支因子b的预期和样本更新的计算时间的函数。考虑的情况是所有b后继状态同样可能并且初始估计中的误差为1.下一状态的值被假定为正确,因此预期更新在完成时将误差减小到零。在这种情况下,样本更新根据√(b-1/ bt)减少误差,其中t是已经执行的样本更新的数量(假设样本平均值,即,α= 1 / t)。关键的观察结果是,对于中等大小的b,误差会随着b更新的一小部分而急剧下降。对于这些情况,许多状态-动作对可以使其值显着改善,在预期更新的效果的几个百分点内,同时单个状态-动作对可以进行预期的更新。
图8.7中显示的样本更新的优点可能是低估了真实效果。在实际问题中,后继状态的值将是自身更新的估计值。通过使估算更快更准确,样本更新将具有第二个优势,即从后继状态备份的值将更准确。这些结果表明,样本更新可能优于大型随机分支因子问题的预期更新,并且要解决的状态太多。
练习8.6上面的分析假设所有可能的下一个状态都可能同样发生。相反,假设分布是高度偏斜的,那么b状态中的一些比大多数状态更可能发生。这是否会加强或削弱样本更新超过预期更新的情况?给出你的答案。
8.6轨迹采样
在本节中,我们将比较两种分发更新的方法。来自动态编程的经典方法是在整个状态(或状态-动作)空间中执行扫描,每次扫描更新每个状态(或状态-动作对)一次。这对于大型任务来说是有问题的,因为可能没有时间来完成甚至一次扫描。在许多任务中,绝大多数状态都是无关紧要的,因为只有在非常糟糕的政策或非常低的概率下才能访问它们。彻底的扫描隐含地将相等的时间用于状态空间的所有部分,而不是集中在需要它的地方。正如我们在第4章中所讨论的那样,详尽的扫描以及它们所暗示的所有状态的平等处理不是动态规划的必要属性。原则上,更新可以以任何方式分发(为确保收敛,所有状态或状态-动作对必须在限制中无限次访问;尽管在下面的第8.7节中讨论了此例外),但是实际上经常使用彻底扫描。
第二种方法是根据某种分布从状态或状态-动作空间进行采样。人们可以像Dyna-Q代理一样均匀地进行采样,但这可能出现与穷举扫描相同的一些问题。更有吸引力的是根据on-policy分布来分发更新,即根据遵循当前策略时观察到的分布。这种分布的一个优点是它易于生成;一个人只是按照当前的政策与模型进行交互。在一个短暂的任务中,一个人在一个开始状态(或根据起始状态分布)开始并模拟直到终端状态。在一项持续的任务中,一个人从任何地方开始,只是不断模拟。在任何一种情况下,模型都会给出样本状态转换和奖励,并且当前策略会给出样本操作。换句话说,一个模拟明确个别轨迹,并在沿途遇到的状态或状态-动作对上执行更新。我们称这种方式产生经验并更新轨迹采样。
除了通过轨迹采样之外,很难想象根据策略上的分布来分配更新的任何有效方式。如果一个人明确表示了on-policy分布,那么就可以扫描所有状态,根据on-policy分布对每个状态的更新进行加权,但这会让我们再次得到穷举扫描的所有计算成本。可能有人可以从分布中对各个状态-动作对进行采样和更新,但即使这可以有效地完成,这将提供哪些优于模拟轨迹的好处?即使以明确的形式了解on-policy分配也不太可能。只要策略发生变化,分布就会发生变化,计算分布需要与完整的策略评估相媲美的计算。考虑到这些其他可能性使得轨迹采样看起来既高效又优雅。
更新的策略分发是否良好?直觉上它似乎是一个不错的选择,至少比均匀分布更好。例如,如果你正在学习下棋,你可以学习真实游戏中可能出现的位置,而不是棋子的随机位置。后者可能是有效的状态,但是能够准确地评估它们是评估真实游戏中的位置的不同技能。我们还将在第二部分中看到,当使用函数逼近时,策略上的分布具有显着的优势。无论是否使用函数逼近,人们都可能期望政策关注能够显着提高计划的速度。
专注于政策分配可能是有益的,因为它会导致空间中巨大的,无趣的部分被忽略,或者它可能是有害的,因为它会导致空间的相同旧部分一次又一次地更新。我们进行了一项小型实验,以根据经验评估效果。为了隔离更新分发的效果,我们使用完全一步预期的表格更新,如(8.1)所定义。在统一的情况下,我们循环遍历所有状态-动作对,更新每个状态,并且在on-policy情况下我们模拟剧集,所有剧集都以相同的状态开始,更新当前ε-greedy政策下发生的每个状态-动作对(ε= 0.1)。任务是无折扣的情节任务,随机生成如下。从每个| S |状态,两个动作是可能的,每个动作都导致b下一个状态中的一个,都是同样可能的,每个状态-动作对的b状态随机选择不同。对于所有状态 - 动作对,分支因子b是相同的。此外,在所有过渡中,有一个0.1概率转换到终端状态,结束了这一集。每个过渡的预期奖励是从具有均值0和方差1的高斯分布中选择的。在规划过程中的任何一点,人们都可以停止并详尽地计算vπ~(s0),即贪婪政策下的开始状态的真实值,给定当前的动作值函数Q,作为指示如何代理人会在一个新剧集中做贪婪行为(假设模型是正确的)。
图8.8:跨越状态空间均匀分布的更新的相对效率,而不是关注模拟的策略轨迹,每个轨迹都以相同的状态开始。 结果是随机生成的两种大小和各种分支因子的任务,b。
右图的上半部分显示了200个样本任务的平均结果,其中1000个状态和分支因子为1,3和10.所找到的策略的质量被绘制为完成的预期更新数量的函数。在所有情况下,根据on-policy分配进行抽样导致最初的规划更快,从长远来看延迟了规划。效果更强,更快规划的初始阶段更长,分支因子更小。在其他实验中,我们发现随着状态数量的增加,这些效应也变得更强。例如,图的下半部分显示了具有10,000个状态的任务的分支因子为1的结果。在这种情况下,on-policy关注的优势是大而持久。
所有这些结果都有意义。在短期内,根据政策分布进行抽样有助于关注接近起始状态后代的状态。如果有许多状态和一个小的分支因子,这个效果将是大而持久的。从长远来看,关注on-policy分配可能会受到影响,因为通常发生的状态都已经有了正确的价值。对它们进行采样是没用的,而采样其他状态实际上可能会执行一些有用的工作。这可能就是为什么从长远来看,详尽,不专心的方法会更好,至少对于小问题。这些结果并不是决定性的,因为它们仅用于以特定的,随机的方式产生的问题,但它们确实表明根据on-policy分布进行抽样对于大问题可能是一个很大的优势,特别是对于一个小子集的问题在on-policy分配下访问状态-行动空间。
练习8.7图8.8中的一些图形似乎在它们的早期部分是扇形的,特别是b = 1的上图和均匀分布。你认为这是为什么?所显示数据的哪些方面支持您的假设?
**练习8.8(编程)**复制实验,其结果显示在图8.8的下半部分,然后尝试相同的实验,但b = 3.讨论结果的含义。
8.7实时动态编程
实时动态编程(RTDP)是动态编程(DP)的值迭代算法的on-policy轨迹采样版本。由于它与传统的基于扫描的策略迭代密切相关,因此RTDP以特别清晰的方式说明了策略轨迹采样可以提供的一些优势。 RTDP通过(4.10)定义的预期表格值迭代更新来更新在实际或模拟轨迹中访问的状态值。它基本上是产生图8.8所示的on-policy结果的算法。
RTDP与传统DP之间的紧密联系使得通过适应现有理论得出一些理论结果成为可能。 RTDP是第4.5节中描述的异步DP算法的示例。异步DP算法不是根据状态集的系统扫描来组织的;他们以任何顺序更新状态值,使用其他任何可能的状态值。在RTDP中,更新顺序由在实际或模拟轨迹中访问的订单状态决定。
如果轨迹只能从指定的一组起始状态开始,并且如果您对给定策略的预测问题感兴趣,那么on-policy轨迹采样允许算法从任何一个与预测问题无关的初始状态完全跳过给定策略无法达到的状态。对于控制问题,其目标是找到最优策略而不是评估给定策略,可能存在任何启动状态的任何最优策略都无法达到的状态,并且不需要指定最佳操作对于这些无关的状态。所需要的是最优的部分策略,这意味着对于相关状态是最优的策略,但是对于不相关的状态可以指定任意动作,或者甚至是未定义的。
但是,通过政策轨迹采样控制方法(如Sarsa(第6.4节))找到这样一个最优的部分政策,通常需要访问所有状态-行动对-即使是那些结果不相关的-无限数量的倍。例如,这可以通过使用探索开始来完成(第5.3节)。对于RTDP也是如此:对于具有探索开始的情节任务,RTDP是异步值迭代算法,其收敛于折扣有限MDP的最优策略(以及在特定条件下的未折叠情况)。与预测问题的情况不同,如果对最优策略的收敛很重要,通常不可能停止更新任何状态或状态-动作对。
RTDP最有趣的结果是,对于满足合理条件的某些类型的问题,RTDP保证找到在相关状态下最优的策略,而无需经常无限地访问每个状态,或者甚至根本不访问某些状态。实际上,在某些问题中,只需要访问一小部分状态。对于具有非常大的、即使单个扫描也可能是不可行的状态集的问题,这可能是一个很大的优势。
该结果所持有的任务是具有吸收目标状态的MDP的未折现的情节任务,其产生零奖励,如第3.4节所述。在真实或模拟轨迹的每一步,RTDP选择贪婪动作(随机断开连接)并将期望值迭代更新操作应用于当前状态。它还可以在每一步更新任意其他状态集合的值;例如,它可以从当前状态更新在有限时域前瞻搜索中访问的状态的值。
对于这些问题,每一集开始于从一组起始状态中随机选择并以目标状态结束的状态,RTDP以概率1收敛到对所提供的所有相关状态最佳的策略:1)初始值每个目标状态为零,2)至少存在一个策略,保证从任何开始状态以概率1到达目标状态,3)从非目标状态转换的所有奖励严格为负,并且4)全部初始值等于或大于其最佳值(可以通过简单地将所有状态的初始值设置为零来满足)。 Barto,Bradtke和Singh(1995)通过将异步DP的结果与关于启发式搜索算法的结果(由于Korf(1990))称为学习实时A 的结果证明了这一结果。
具有这些属性的任务是随机最优路径问题的示例,其通常以成本最小化而不是像我们在此处所做的奖励最大化来表述。在我们的版本中最大化负回报等同于最小化从开始状态到目标状态的路径的成本。这种任务的例子是最小时间控制任务,其中达到目标所需的每个时间步骤产生-1的奖励,或者如第3.5节中的高尔夫示例之类的问题,其目标是以最少的击球击中洞。
例8.6:赛道上的RTDP 练习5.12(第111页)的赛道问题是一个随机最优路径问题。在示例赛道问题上比较RTDP和传统DP值迭代算法说明了在策略轨迹采样的一些优点。
回想一下练习,代理人必须学习如何在转弯处开车,如图5.5所示,并在赛道上尽快越过终点线。起始状态是起始线上的所有零速状态;目标状态是通过从赛道内部越过终点线可以在一个时间段内到达的所有状态。与练习5.12不同,这里对车速没有限制,因此状态设置可能是无限的。但是,可以通过任何策略从一组起始状态到达的状态集是有限的,并且可以被认为是问题的状态集。每集以随机选择的开始状态开始,并在汽车越过终点线时结束。每一步的奖励为-1,直到汽车越过终点线。如果汽车撞到轨道边界,则它将移回到随机启动状态,并且剧集继续。
类似于图5.5左侧的小型赛道的赛道有9,115个状态可以通过任何策略从启动状态到达,只有599个是相关的,这意味着它们可以通过一些最优策略从某个启动状态到达。 (相关州的数量是通过计算在为107集执行最佳行动时访问的州来估算的。)
下表比较了传统DP和RTDP解决此任务的问题。这些结果是超过25次运行的平均值,每次运行都以不同的随机数种子开始。在这种情况下,常规DP是使用状态集的穷举扫描的值迭代,其中值一次更新一个状态,这意味着每个状态的更新使用其他状态的最新值(这是Gauss-Seidel值迭代的版本,大约是Jacobi版本在这个问题上的快速性的两倍。见4.8节。)没有特别注意更新的顺序;其他排序可能会产生更快的收敛。两种方法的每次运行的初始值均为零。当扫描状态值的最大变化小于10-4时,判断DP已经收敛,并且当超过20集的越过终点线的平均时间似乎稳定在步骤的渐近数时,判断RTDP已收敛。 此版本的RTDP仅更新了每个步骤的当前状态值。
这两种方法都产生了平均14到15步之间的策略来越过终点线,但是RTDP只需要DP的大约一半的更新。这是RTDP的on-policy轨迹采样的结果。虽然每次扫描DP时每个状态的价值都会更新,但RTDP会针对较少的状态重点更新。在平均运行中,RTDP更新了98.45%的状态值不超过100次,80.51%的状态不超过10次;在平均运行中,大约290个状态的值根本没有更新。
RTDP的另一个优点是,当值函数接近最优值函数v时,代理用于生成轨迹的策略接近最优策略,因为它对于当前值函数总是贪婪的。这与传统值迭代的情况形成对比。实际上,当值函数在扫描中仅改变一小部分时,值迭代终止,这就是我们如何终止它以获得上表中的结果。此时,值函数非常接近v*,并且贪婪策略接近最优策略。但是,在值迭代终止之前很久,有关最新值函数的贪婪策略可能是最优的,或几乎是最优的。 (回想一下第4章,对于许多不同的值函数,最优策略可能是贪婪的,而不仅仅是v*。)在值迭代收敛之前检查最优策略的出现不是传统DP算法的一部分,并且要求相当多的额外计算。
在赛道示例中,通过在每次DP扫描后运行许多测试集,根据扫描结果贪婪地选择动作,可以估计DP计算中最早的点,其中近似的最佳评估函数足够好,因此相应的贪婪政策几乎是最优的。对于这个赛道,在15次价值迭代之后,或者在136,725次价值迭代更新之后,出现了接近最优的政策。这远远低于DP收敛到v*所需的252,784个更新,但仍然超过了所需的127,600个更新RTDP。
尽管这些模拟肯定不是RTDP与传统的基于扫描的值迭代的明确比较,但它们说明了在策略轨迹采样的一些优点。传统值迭代继续更新所有状态的值,而RTDP强烈关注与问题目标相关的状态子集。随着学习的继续,这种关注变得越来越窄。由于RTDP的收敛定理适用于模拟,我们知道RTDP最终只关注相关状态,即构成最佳路径的状态。 RTDP实现了近乎最优的控制,基于扫描的值迭代所需的计算量约为50%。
8.8决策时的计划
规划可以至少以两种方式使用。我们在本章中到目前为止所考虑的,以动态规划和Dyna为代表,是基于从模型(样本或分布模型)获得的模拟经验,使用计划逐步改进策略或价值函数。那么选择行动就是比较从我们迄今为止考虑的表格案例中的表格中获得的当前状态的行动值,或者通过评估我们在下面第二部分中考虑的近似方法中的数学表达式。在为任何当前状态St选择一个动作之前,规划已经在改进表条目或数学表达式方面发挥了作用,为多个状态选择动作所需,包括St.使用这种方式,计划不关注于当前状态。我们把用于这种方式的规划称为背景规划。
使用计划的另一种方法是在遇到每个新状态St之后开始并完成它,作为输出是单个动作At的选择的计算;在下一步计划中,计划重新开始,使用St+1生成At+1,依此类推。这种规划使用的最简单,几乎退化的例子是只有状态值可用时,通过比较每个动作的模型预测的下一个状态的值来选择一个动作(或通过比较后续状态的值,如同第1章中的tic-tac-toe示例。更一般地说,以这种方式使用的计划可能看起来比一步到位更深,并且评估行动选择导致许多不同的预测状态和奖励轨迹。与首次使用规划不同,此处的规划侧重于特定的州。我们称之为决策时间计划。
这两种思考规划的方式-使用模拟经验逐步改进政策或价值功能,或使用模拟经验为当前状态选择行动-可以以自然和有趣的方式融合在一起,但它们往往是分开研究,这是首先理解它们的好方法。现在让我们仔细看看决策时间计划。
即使只在决策时进行规划,我们仍然可以像在8.1节中那样查看它,从模拟经验到更新和价值,最终到政策。现在,值和策略特定于当前状态和可用的操作选择,以至于计划过程创建的值和策略通常在用于选择当前操作后被丢弃。在许多应用中,这并不是一个很大的损失,因为有很多状态,我们不太可能长期回到同一个状态。一般来说,人们可能想要两者兼顾:对当前状态进行焦点规划并存储计划结果,以便在以后再返回相同状态时更进一步。决策时间计划在不需要快速响应的应用程序中最有用。例如,在国际象棋游戏节目中,每次移动可以允许一秒钟或几分钟的计算,并且强计划可以在此时间内计划数十次移动。另一方面,如果低延迟动作选择是优先级,则通常更好的是在后台进行规划以计算可以快速应用于每个新遇到状态的策略。
8.9启发式搜索
人工智能中的经典状态空间规划方法是统称为启发式搜索的决策时间规划方法。在启发式搜索中,对于遇到的每个状态,考虑可能连续的大树。近似值函数应用于叶节点,然后备份到根节点的当前状态。搜索树中的备份与本书中讨论的maxes(v和q的更新)预期更新中的相同。备份在当前状态的状态操作节点处停止。一旦计算出这些节点的备份值,就选择它们中的最佳值作为当前操作,然后丢弃所有备份的值。
在传统的启发式搜索中,没有通过改变近似值函数来保存备份值。实际上,价值函数通常由人设计,并且不会因搜索而改变。但是,很自然地考虑允许使用启发式搜索期间计算的备份值或本书中提供的任何其他方法来随时间改进值函数。从某种意义上说,我们一直采用这种方法。我们的greedy,ε-greedy和UCB(第2.7节)动作选择方法与启发式搜索没有什么不同,虽然规模较小。例如,为了计算给定模型和状态值函数的贪婪行为,我们必须看从每个可能的操作到每个可能的下一个状态,考虑奖励和估计值,然后选择最佳操作。就像在传统的启发式搜索中一样,此过程计算可能操作的备份值,但不尝试因此,启发式搜索可以被视为超越一步的贪婪政策理念的延伸。
搜索深度超过一步的目的是获得更好的动作选择。如果一个人有一个完美的模型和一个不完美的动作-价值函数,那么实际上更深层次的搜索通常会产生更好的策略。当然,如果搜索一直到剧集的结尾,那么不完美的效果消除了价值函数,以这种方式确定的行动必须是最优的。如果搜索具有足够的深度k使得γk非常小,则动作将相应地接近最佳。另一方面,搜索越深,需要的计算越多,通常会导致响应时间变慢。 Tesauro的大师级步步高玩家TD-Gammon(第16.1节)提供了一个很好的例子。该系统使用TD学习通过许多自我游戏的游戏来学习一个afterstate值函数,使用一种启发式搜索形式来进行移动。作为一个模型,TD-Gammon使用了骰子概率概率的先验知识,并假设对手总是选择TD-Gammon认为最佳的动作。 Tesauro发现启发式搜索越深,TD-Gammon的移动越好,但每次移动所需的时间越长。步步高具有较大的分支因子,但必须在几秒钟内完成移动。只选择性地向前搜索几个步骤是可行的,但即便如此,搜索也会产生明显更好的动作选择。
我们不应忽视启发式搜索聚焦更新的最明显方式:当前状态。启发式搜索的大部分有效性是由于其搜索树紧紧关注可能紧跟当前状态的状态和动作。你可能会花更多的时间下棋而不是跳棋,但是当你玩跳棋时,考虑跳棋和你的特定跳棋位置,你可能的下一步动作和继任者位置是值得的。无论您如何选择操作,这些状态和操作都是更新的最高优先级,并且您最迫切希望您的近似值函数准确无误。您的计算不仅应该优先用于即将发生的事件,而且您的有限内存资源也应如此。例如,在国际象棋中,存在太多可能的位置来为它们中的每一个存储不同的值估计,但是基于启发式搜索的国际象棋程序可以容易地存储它们从单个位置向前看的数百万个位置的不同估计。记忆和计算资源对当前决策的高度关注可能是启发式搜索能够如此有效的原因。
可以以类似的方式更改更新的分布,以关注当前状态及其可能的后继者。作为一个限制性案例,我们可以使用启发式搜索的方法来构建搜索树,然后从下往上执行单独的一步更新,如图8.9所示。如果以这种方式对更新进行排序并使用表格表示,那么将实现与深度优先启发式搜索完全相同的整体更新。可以通过这种方式查看任何状态空间搜索,即将大量单个一步更新拼凑在一起。因此,通过更深入的搜索观察到的性能改进不是由于使用多步骤更新。相反,这是由于当前状态下游的状态和行动的更新集中和集中。通过投入大量与候选行动特别相关的计算,决策时间计划可以产生比依赖未聚焦更新可以产生的更好的决策。