为了说明强化学习的一般概念并将其与其他方法进行对比,我们接下来将更详细地考虑一个单一的例子。
考虑一下我们比较熟悉的孩子们的三连棋游戏。两名玩家轮流在一个三乘三的棋盘上比赛。一个玩家画X符号和另一个玩家画O符号,直到一个玩家通过在水平,垂直或对角线上连续放置三个标记来获胜,作为X玩家,他获胜的局面如下图所示。
如果棋盘填满了,两名玩家都没有连续三子,那么比赛就是平局。因为熟练的玩家可以玩得非常好并且不会失败。让我们假设我们正在与一个不太熟练的玩家对战,对手的某一步棋子可能是错误的,这样我们就能轻松获胜。事实上,就目前而言,在我们的考虑中,无论是平局还是失败对我们都是同样不利的。那么我们如何构建一个能够在比赛中发现对手的不完美落子,并且学会最大化获胜机会的球员?
虽然这是一个简单的问题,但是也不能轻易地通过经典技术,以令人满意的方式解决。例如,对于经典的“极小极大问题”,来自博弈论的解决方案在这里是不正确的,因为它假定了对手玩的特定方式。例如,极小极大玩家永远不会达到可能会使自己输掉比赛的游戏状态,即使事实上他总是因为对手犯了错误,而从该状态获胜。用于顺序决策问题的经典优化方法,例如动态编程,可以为任何对手计算最优解,但需要输入该对手的完整规范策略,包括对手在每个棋盘状态下进行每次移动的概率。让我们假设这个信息不是先验地提供给这个问题,因为它不适用于实际的旨趣的绝大多数问题。另一方面,可以根据经验估计这样的信息,在这种情况下,通过与对手玩许多场游戏。关于在这个问题上,首先可以做的最好的事情是建立学习对手行为的模型,达到某种程度的置信度,然后应用动态编程来计算给定近似的对手模型的最优解。 最后,这与我们在本书后面讨论的一些强化学习方法没有什么不同。
应用于这个问题的先进的方法是,直接搜索一个很有可能赢得对手的策略空间。在这里,策略是一个规则,告诉玩家面对游戏的每个状态做出什么样的动作—三乘三棋盘上Xs和Os的每种可能走子。对于所考虑的每个策略,可以通过与对手玩一些游戏来获得其获胜概率的估计。然后,该评估将指导下一步考虑哪些策略。一种典型的进化版方法是在策略空间中使用爬山法,相继生成和评估策略,以试图获得渐进式改进。或者,也许可以使用遗传式算法来维护和评估一系列策略。我们可以应用数百种不同的优化方法。
以下是一个使用价值函数方法来解决三连棋问题的方法。首先,我们建立一个数字表,每个编号代表一个可能的游戏状态。每个编号对应的都是我们从该状态获胜的概率的最新估计。我们将此估计视为状态值,整个表是学习值函数。如果我们从A获胜的概率的当前估计高于来自B的概率,那么状态A具有比状态B更高的值,或者被认为比状态B更好。假设我们总是画X,那么对于连续三个X的所有状态,获胜的概率是1,因为我们已经赢了。类似地,对于连续三个O或者所有位置均被填充,“正确的概率为0,因为我们无法从中获胜。我们将所有其他状态的初始值设置为0.5,表示猜测我们有50%的获胜机会。
我们与对手进行了很多比赛。为了选择我们的动作,我们检查了我们可能的每一个移动(棋盘上的每个空白区域)都会产生的状态,并在表格中查找它们的当前值。大多数时候,我们贪婪地选择动作,选择导致具有最大价值的状态的移动,即具有最高的估计获胜概率。 然而,偶尔我们也会从其他动作中随机选择。这些被称为探索性动作,因为它们使我们看到我们可能永远不会看到的状态。在游戏中制作和考虑的一系列动作可以如下图所示。
三连棋一系列动作图
实线代表比赛期间的动作; 虚线表示我们(我们的强化学习者)考虑但未做出的动作。我们的第二步是一个探索性的举动,这意味着对手的举动,导致e*的举动得分更高。探索性移动不会导致任何学习,但是我们的其他每个移动都会导致更新,如弯曲箭头所示,其中估计值从树后部向上移动到较早的节点,如文中详述的那样。
在我们落子的同时,在比赛期间我们会改变我们所处的状态的价值。我们试图让他们更准确地估计获胜的可能性。为了做到这一点,我们在每次贪婪移动到移动前的状态之后“备份”状态的值,如上图中的箭头所示。更确切地说,早期状态的值和更新后的当前值更为接近,这可以通过将早期状态的一小部分值移动到后一状态值中来完成。如果我们让 表示贪婪移动之前的状态,表示移动之后的状态, 然后,对 的估计值的更新,表示为,可写为
其中是称为步长参数的小正分数,它影响学习速度。 该更新规则是时序差分学习方法的示例,之所以这么命名,是因为它是基于两个不同时刻的估计之间的差 改变的。
上述方法在此任务上表现良好。例如,如果步长参数随着时间的推移而适当减小,然后该方法对于任何固定的对手,收敛于在给定玩家最佳游戏的情况下从每个状态获胜的真实概率。此外,随后采取的行动(探索性动作除外)实际上是针对这个(不完美的)对手的最佳动作。换句话说,该方法收敛于针对该对手玩游戏的最佳策略。如果stepize参数没有随着时间的推移一直变为零,那么这个玩家也可以通过慢慢改变他们的游戏方式来很好地对抗对手。
这个例子说明了进化方法和学习价值函数的方法之间的差异。为了评估策略,进化方法使得策略固定并且针对性地和对手玩许多游戏,或者使用对手的模型模拟许多游戏。胜利的频率给出了对该策略获胜的概率的无偏估计,并且可用于指导下一个策略选择。但是每次策略更改都是在许多游戏之后进行的,并且只使用每个游戏的最终结果:在游戏期间发生的事情被忽略。例如,如果玩家获胜,那么游戏中的所有动作都会被授予信用,而不管具体移动对获胜至关重要。甚至可以归功于从未发生过的动作!相反,允许评估各个状态。最后,进化和价值函数方法都在搜索策略空间,但学习价值函数会利用游戏过程中可用的信息。这个简单的例子说明了强化学习方法的一些关键特征。首先,强调在与环境交互时学习,在这种情况下与对手玩家交互。其次,有一个明确的目标,正确的行为需要计划或远见,考虑到一个人选择的延迟效应。例如,简单的强化学习玩家将会学习为“目光短浅”的对手设置多步移动陷阱。强化学习解决方案的一个显着特点是,它可以在不使用对手模型的情况下实现规划和前瞻的效果,并且无需对未来状态和动作的可能序列进行明确搜索。
虽然这个例子说明了强化学习的一些关键特征,但它很简单,相比较它真正的价值,它可能给人一种强化学习有限的印象。虽然三连棋游戏是一个双人游戏,但强化学习也适用于没有外部对手的情况,即在与自然对抗的情况下。强化学习也不仅限于那种离散动作状态集,例如单独的三连棋游戏,仅在每个情节(回合)结束时奖励。当行为无限期地持续并且可以随时接收各种大小的奖励时,它也是适用的。强化学习也适用于甚至不分解为离散时间步骤的问题,如三连棋游戏。一般原则也适用于连续时间问题,虽然理论变得更加复杂,我们在这种介绍性内容中省略了它。
三连棋游戏具有相对较小的有限状态集,而当状态集非常大或甚至无限时,可以使用强化学习。例如,Gerry Tesauro(1992,1995)将上述算法与人工神经网络相结合,学习玩步步高,其具有大约1020个状态。有了这么多的状态,就不可能体验到超过其中一小部分的状态。Tesauro的程序学得比以前的任何程序都要好得多,而且现在的程序水平也是如此,相当于世界上最好的人类球员(见第16章)。神经网络为程序提供了从其经验中概括的能力,以便在新的状态中,它根据网络确定从其保存的过去面临的类似状态信息来选择移动。强化学习系统在如此大型状态集的问题中如何运作,与它从过去的经验中得出的适当概括密切相关。 正是在这个角色中,我们最需要有强化学习的监督学习方法。 神经网络和深度学习(第9.7节)并不是唯一或最好的方法。
在这个三连棋游戏的例子中,学习开始时没有超出游戏规则的先验知识,但强化学习绝不需要学习“白板说”的学习观点和智慧。相反,先验信息可以通过各种方式纳入强化学习,这对于有效学习至关重要。在三连棋游戏示例中我们也可以访问真实状态,而当部分状态隐藏时,或者当学习者看起来不同的状态相同时,也可以应用强化学习。
最后,三连棋玩家能够向前看并知道每个可能的动作所导致的状态。要做到这一点,它必须拥有一个游戏模型,使其能够预见其环境如何随着它可能永远不会发生的动作而变化。 许多问题都是这样的,但在其他问题上,甚至缺乏行动效果的短期模型。在任何一种情况下都可以应用强化学习。不需要任何模型,但如果模型可用或可以学习,则可以轻松使用模型(第8章)。
另一方面,有强化学习方法根本不需要任何环境模型。无模型系统甚至无法考虑其环境如何响应单一操作而发生变化。在这个意义上,对于对手来说,三连棋游戏玩家是一种模式游戏:它没有任何类型的对手模型。 因为模型必须合理准确才有用,所以当解决问题的真正瓶颈是难以构建足够精确的环境模型时,无模型方法可以优于更复杂的方法。无模型方法也是基于模型的方法的重要构建块。在我们将无模型方法用作更复杂的基于模型的方法的组件之前,我们在本书中将前几个章节用于讨论它们。
强化学习可以在系统中的高级和低级使用。虽然三连棋游戏玩家只学习游戏的基本动作,但没有什么可以防止强化学习在更高层次上工作,其中每个动作本身可能是应用可能复杂的问题解决方法。在分层学习系统中,强化学习可以在几个层面上同时工作。
练习1.1:自我发挥假设上面描述的强化学习算法不是与随机对手比赛,而是与双方对抗,双方都是学习。在这种情况下你认为会发生什么?是否会学习到不同的选择行动的策略?
练习1.2:对称性由于对称性,许多三连棋位置看起来不同但实际上是相同的。我们如何修改上述学习过程以利用这一点?这种变化会以何种方式改善学习过程?现在再想一想。 假设对手没有利用对称性。在那种情况下,我们应该吗?那么,对称的等价位置应该是真的吗?必然具有相同的价值?
练习1.3:贪婪的游戏规则假设强化学习玩家是贪婪的,也就是说,它总是发挥作用,使其达到最佳评分的位置。 它可能会比一个不使用贪婪的游戏规则的玩家学会更好或更差吗?可能会出现什么问题?
练习1.4:从探索中学习假设在所有动作(包括探索性动作)之后发生了学习更新。如果步长参数随时间适当减小(但不是探索的趋势),那么状态值将收敛到一组概率。当我们这样做时,计算出的两组概率是什么,当我们不这样做时,从探索性的动作中学习?假设我们继续做出探索性的动作,哪一组概率可能更好学习?哪会赢得更多?
练习1.5:你能想到其他改善强化学习者的方法吗? 你能想出更好的方法来解决所提出的三连棋游戏问题吗?