作为人类,我们在阅读句子时会毫不费力地考虑所有这些情况,但对于计算机而言,这并不是那么容易。现代的深度学习技术可以有效地处理您提供的信息。但是,您查找所有相关信息并将其提供给计算机的能力有限,而游戏回避了这个问题。它们发生在人工的宇宙中,在规则中已经阐明了您做出决定所需的所有信息。
游戏特别适合强化学习。回想一下,强化学习需要反复运行你的程序,并评估它完成任务的程度。想象一下你在用强化学习来训练机器人在建筑物周围移动。在对控制系统进行微调之前,你需要冒着机器人从楼梯上掉下来或撞翻你的家具的危险。另一种选择是一个让计算机可以操作的模拟环境,这样可以排除一个未经训练的机器人在现实世界中运行的风险,但是这样会产生新的问题。首先,你必须投资开发一个详细的计算机模拟环境,这是非常重要的。第二,你的模拟总是不完全准确的。
另一方面,在游戏中,你所需要做的就是让你的AI运行起来。如果它在学习的时候输了几十万场比赛,那又怎么样?在强化学习中,游戏对于严瑾的研究非常重要。许多前沿算法首先在Atari视频游戏(如Breakout)上得到了运用。
要清楚的是,你可以成功地将强化学习应用于解决物理世界中的问题。许多研究人员和工程师都这样做了。但是从游戏一开始,就解决了创造一个真实的训练环境的问题,并让你专注于强化的机制和原则。
在这一章中,我们介绍了围棋游戏的规则。然后,我们将会介绍高水平的,引入深度学习棋盘游戏AI的结构。最后,在整个开发过程中,我们将介绍如何评估您的游戏AI发展进步的效果。
2.2-2.4都是围棋规则,我就不翻了
2.5 我们能够教给机器什么?
不管你是在编程做围棋还是井字棋都没关系,大多数棋盘游戏AI都有着相似的整体结构。在本节中,我们提供了该结构的高级概述和AI需要解决的特定问题。依赖于游戏,最好的解决方案可能涉及游戏特定的逻辑或机器学习,又或者两者兼而有之。
2.5.1 布局阶段选择落子
在围棋的布局阶段,很难评估一个特定的落子,因为游戏的剩余部分有大量的变化。国际象棋和围棋AI都经常使用一本布局书:从人类专业棋手对局中获得的关于布局方面的数据库。为了要构建这种AI,您需要从水平很高的玩家的对弈中去收集对局记录,然后再去分析对局记录,寻找常见的盘面。在任何常见的盘面下,如果对下一个落子有强烈的共识-----比如说,一到两个落子占了后续落子的80%,那么你就应该把这些落子添加到布局书中,这样机器人就可以在下棋时去查阅这些书。如果任何早期的局面在布局书中有出现,那么AI就会寻找到人类专业棋手的落子。
在国际象棋和跳棋中,随着游戏的进行,棋子会从棋盘上移走,同时这些AI包含了类似的游戏结束的数据库:当棋盘上只剩下几块时,就可以预先计算所有的变化,但这种技术不适用于围棋,因为它从开始到结束一直是往棋盘上填子。
2.5.2 搜索棋盘状态
棋盘游戏AI背后的核心思想是树搜索。可以想想人类是如何玩一个战略游戏的。首先,我们考虑下一轮可能采取的行动,然后我们就要考虑一下我们的对手可能会如何回应,然后再计划我们将如何回应,等等。我们需要尽可能地去读出一个变化去判断结果是否好,接着我们回溯去看看其他的变化是否更好。
这紧密地描述了树搜索算法是如何在游戏AI中使用的。当然,人类只能在头脑中立即得到一些变化,而电脑可以在没有问题的情况下运行数百万。人类用直觉来弥补他们缺乏原始计算能力的缺陷,经验丰富的围棋高手在思考一些难局上的发挥令人惊叹
最终,拥有高超的原始计算能力的AI在国际象棋中取得胜利。但是,在围棋领域,AI却有一个有趣的转变,要能与顶尖人类玩家竞争,得把人类的直觉带到计算机上
2.5.3 减少考虑的落子数目
在游戏的树搜索中,一个回合可能走的落子点是分支因子。
在国际象棋中,平均分支因子大约是30。在对局开始时,每个玩家都有20个合法的移动选项;随着棋局的进行,数字会逐渐增加。在这个尺度上,对于每个可能的落子点去找出接下来4到5步的变化是可以做到的。一个国际象棋引擎将读出远比这更深的变化。
相比之下,围棋中的分支因子是巨大的。在比赛的第一步,就有361个合法落子点,随着棋局的进行,数量会缓慢减少,其平均分支因子约为250。往下探索紧紧四步就需要评估近40亿个位置,因此缩小可能性的数量是至关重要的。表2.1比较了国际象棋和围棋的棋子几步后的可能落子点数目
在围棋中,基于规则去选择落子的方法在对弈中表现一般,因为要写出可靠地识别棋盘最重要区域的规则是极其困难的。但是深度学习完全适合解决这个问题,你可以应用监督学习去训练一台计算机来模仿一个人类围棋玩家。
你可以使用一个拥有人类高手对局记录的庞大数据集,其中在线游戏服务器就是一个很好的资源,在你的电脑上可以复盘所有的对局,并从中提取每个棋盘盘面和接下来的落子,这就是你的训练集。当用一个合适的深度神经网络,就可以更好地预测人类的移动,其精度超过50%。你可以创建一个只预测人类落子的AI,而这种AI就已经可以是一个不能轻视的对手。但是当你把落子预测算法和树搜索结合起来时,AI就能展现出真正的实力:其预测的落子会给你一个排好的分支列表让你去搜索。
2.5.4.对游戏状态的评估
分支因子会限制一个AI往前探测的深度。如果你能得到通向游戏结束的所有可能途径序列,那么你就会知道谁会赢,而这样就很容易决定这是否是一个好的序列。但对于任何比井字棋更复杂的游戏都不适用:可能的变化数量太多了。在某些时候,你必须要停下来去选择一个你已经搜索过但并未搜索完全的序列。这样做之后,你会给最终的棋局盘面打一个分数。在你所分析的所有变化中,你将会选择有最佳终局得分的位置进行落子。需要指出的是如何计算分数实现盘面评估将是一个棘手的问题。
在国际象棋AI中,盘面评估是基于逻辑的,而这对棋手来说是有意义的。你可以开始于像这样的简单规则:如果你吃了我的棋子,我就可以吃掉你的车,那将对我有好处的。顶级的国际象棋引擎的逻辑远不止于此,还会考虑到棋盘上的棋子在哪里结束以及什么棋子将会阻碍移动的规则。
在围棋中,盘面评估可能比落子选择更加困难。围棋游戏的目标是能够占领更多的地盘,但令人惊讶的是地盘几乎难以计数:地盘边界往往十分模糊,直到快结束时,点目起不到多大作用;有时一直到游戏结束时可能只有几次点目。这是人类高超直觉的另一个体现。
深度学习在这里也会有重大突破。适合落子选择的神经网络也可以被训练来评估棋盘盘面。而不是训练一个神经网络来预测下一步会是什么或者去预测谁会赢。你可以设计网络将其预测表示成概率,这样就给了您一个分数去评估当前的棋盘盘面。
2.6.如何衡量你的围棋AI的棋力
当你的围棋AI开始运行时,你自然会想要知道它到底有多强。大多数围棋玩家都熟悉传统的日本等级系统,所以你想利用这种系统去衡量你的机器人的棋力,而衡量它水平的唯一方法就是通过与其他对手对弈;你可以以此为目的与其他围棋AI或人类玩家对弈。
2.6.1.传统围棋等级
围棋玩家一般使用传统的日本等级制度,玩家中的初学者为级,高水平的为段。段,又分为业余段位和职业段位。最强的级是1级,数字越大越弱,而段则是数字越大越强。对于业余棋手来说,传统上,段位最高的是7段。业余棋手可以从他们的区域围棋协会中获得等级,同时在线服务器也将为它们的在线玩家评级。表2.2显示了等级的排列
业余等级是根据两位棋手之间的棋力差所需的让子数来计算的。例如,如果爱丽丝2级,鲍勃5级,爱丽丝通常会给鲍勃让三子,使他们有平等的机会获胜。
专业级别就有点不同:它们更像是头衔。一个地区的围棋协将顶尖棋手进行排名,而这排名都是基于主要赛事的结果,并且这种排名终身持有的。业余水平和职业水平是不可直接比较的,但你可以假设任何一个有职业排名的职业棋手水平至少能达到业余7段的水平,而顶级职业选手明显比这种水平强。
2.6.2 衡量你的围棋AI
估计你的围棋AI的一个简单的方法就是与已知棋力的围棋AI相对抗。如GNUGo和Pachi那样的开源围棋引擎,就提供了很好的基准。GNU Go在5级左右的水平,而Pachi在1段左右。所以,如果你让你的围棋与GNUGo对抗100次,它如果赢得了大约50场比赛,你可以得出结论,你的围棋AI的水平也在5级左右。
为了获得更精确的等级,您可以让您的AI在带有评级系统的公共Go服务器上对弈,几十场比赛之后应该就可以得到一个合理的估计。
2.7 总结
- 游戏是人工智能研究的一个热门课题,因为它们具有已知规则
- 如今最强的围棋人工智能依靠的是机器学习而不是游戏特有的知识。部分原因是围棋具有大量可能的变化,而基于规则的围棋AI并不强大。
- 你可以在围棋中应用深度学习的两个地方是落子选择和盘面评估。
- 落子选择需要缩小在特定的棋盘盘面需要考虑的落子可能性数目。没有好的落子选择,你的围棋AI将有非常多的分支要去搜索。
- 盘面评估是估计哪方领先多少的问题。没有好的盘面评估,你的围棋AI将没有能力选择一个好的变化。
- 你可以通过对抗已知棋力的可用AI来测你的AI棋力,如GNUGo或Pachi
请发表评论