最强通用棋类AI,AlphaZero强化学习算法解读

双语原文链接:AlphaZero, a novel Reinforcement Learning Algorithm, in JavaScript
在本篇博文中,你将会了解并实现AlphaZero。AlphaZero是一个令人大开眼界且超乎寻常的强化学习 算法 ,它以绝对的优势战胜了多名围棋以及国际象棋冠军。本文将会带你使用AlphaZero来解决一个益智小游戏并将其部署成一个纯 Java Script构建的Web应用。
AlphaZero最关键也是最令人诧异的一点,就是其能够在不依赖于外部先验知识的情况下在棋盘类游戏中获得超越人类的表现。AlphaZero通过自我博弈汲取经验知识来不断精通游戏。
我们会借助于Github上由Surag Nair开发的一个“简化后的、高度灵活的、经过注释的且易于理解的” Python 版AlphaZero来进行该项目。
你大可以先去这里玩一玩这个游戏。而Web应用以及具体的JavaScript实现代码可以在这里获取得到。这份代码是从该Python实现中移植过来的。
https://carlos-aguayo.github.io/alphazero/
有关AlphaZero的原理,你可以阅读这篇由 Silver,David等人 撰写的论文: “ Mastering the game of Go without human knowledge ” nature 550.7676 (2017): 354–359 .
Dots and Boxes小游戏
Dots and Boxes是一个常见的儿童益智游戏,不过其具有令人讶异的复杂度。
该游戏中,两名玩家轮流在两个相邻点之间放置一条水平或垂直线。如果某个 1×1 的小正方形的 4 条边都被连上了,那么补齐这个小方块的一方就获得 1 分,得分的玩家被奖励多走一步,再连一条线。当棋盘已满时,游戏结束,并且得分最高的玩家获胜。
人工智能与棋盘游戏
机器是否能够产生智能,我们已经为此思考了很久很久。那么,该如何验证机器具有智能呢?一个常用方法就是玩棋盘游戏,比如国际象棋,看看其是否具有超人的能力,甚至击败世界冠军。
1957年,Herbert Simon预言计算机系统能够在十年内击败国际象棋冠军。虽说实际上花的时间长了点,但是在1997年5月,计算机击败了当时的国际象棋冠军——Garry Kasparov。
(译者注:战胜Kasparov的机器被命名为DeepBlue,意为“深蓝”)
尽管这一里程碑事件意义非凡,但人们仍可以争论这一计算机系统是否“智能”。
这一类计算机系统由以下三个组件构成:
1. 人为定义的评价函数;
2. 博弈树搜索 算法 ;
3. 极为强悍的硬件设备。
评价函数会将棋盘盘面作为输入并输出该盘面的“价值”。高价值表示当前玩家处于非常有利的位置。例如,在国际象棋棋盘上,玩家即将进行“将死”时就会对应一个非常高的值。
博弈树搜索算法在 所有 可能的走棋中进行搜索,寻找那些能够确保得到高价值棋盘盘面的路径。对于那些已经明知不可能有效的路径可以直接放弃搜索,从而使算法变得更有效率。这就是 Alpha-beta剪枝 的作用。
最后,搭配上异常强悍的硬件,你就将拥有一台能够打败国际象棋世界冠军的机器。
问题在哪儿? 经验丰富的棋手 人为地精心调制 这些评价函数 。这些计算机系统还依赖于一本本记录着最佳走棋的开局棋谱。游戏中局,还会用到通过研究大师们的博弈而精心构造的评价函数。这些函数还会经由象棋大师们进一步的优化调整。
例如,我们完全就可以为 Dots and Boxes 构造一个评价函数。一个合理而直接的选择就是做一个得分的比较。得分的正向差值越大,游戏盘面就对我们越有利。大多数情况下,这是可行的。然而,在Dots and Boxes 中,就像许多其他棋盘类游戏一样,最佳的走法可能需要牺牲短期利益来换取长期利益。在Dots and Boxes 游戏中,有时最好不要急于得分并获得额外先手,相反,要迫使对手走某一步棋。因此,我们必须考虑大量复杂场景并精心调制评价函数!
击败Kasparov的评价函数需要识别多达8000个盘面特征!而且其中绝大多数都是手动描述并调整的!
所以,倒也不是贬低这个击败国际象棋世界冠军重要里程碑的意思,只是,需要顶级玩家来定义这些计算机的行为并手动调整如此多的变量实在是有够折腾人的。
AlphaZero是什么?为何它如此令人心潮澎湃?
AlphaZero是首个能够在国际象棋、围棋等游戏中达到超越人类水平、击败世界冠军的计算机系统,且它仅依赖于游戏规则,无需任何人类先验知识。
仅凭给定的游戏规则,AlphaZero即可进行自我博弈。逐步习得游戏策略与技巧,很快即可获得超人的表现。
像DeepBlue这样的系统会需要国际象棋专家的协助,而AlphaZero却是凭借自我博弈来变强大的。不单单是在国际象棋上,哪怕是围棋,AlphaZero同样表现出超越人类的强大统治力。考虑到围棋相较于其他棋盘游戏更大的博弈空间等因素,对计算机来说,围棋是个极为复杂的游戏。
人类从几千年来数百万次的博弈中方才积累了诸如围棋和国际象棋等游戏的技艺,而AlphaZero,一个仅使用游戏规则信息的 算法 ,却能够在几天时间内重新寻获这些知识并发现新的游戏策略。
甚至还有一部关于它的纪录片。
AlphaZero是怎么做到仅凭自我博弈就习得技艺的呢?
回想一下,像DeepBlue那样依赖于人为定义的“评价函数”的系统会把棋盘的盘面状态作为输入,再输出该状态的“价值”。
如今,对于 深度学习 模型来说,输入一张照片然后识别出照片里是猫还是狗简直简单到爆了。那么有个想法就是,把棋盘盘面作为一个深度学习模型的输入并且训练它,让它预测这样的盘面布置是会输还是会赢。
但是,要训练一个机器学习模型,就需要数据,海量的数据。从哪儿能得到那么多棋局博弈的数据呢?很简单,我们就让电脑自己跟自己下着玩儿,生成一堆棋局,然后再把它们做成一个数据集用来训练。
AlphaZero的训练 算法
这个算法简单明了:
1. 让计算机自我博弈数局,记录每一步走棋。一旦胜负已分,就给之前的每一步走棋打上标签——棋面最终是“赢”或是“输”。如此一来,我们就获得了一个可以用于神经网络(Neural Network,NN)训练的数据集,让该网络学会判断给定棋面是“赢面”还是“输面”;
2. 复制这个神经网络。用上一步得到的数据集训练该克隆网络;
3. 让克隆网络与原始神经网络互相博弈;
4. 上一步中获胜的网络留下,败者弃之;
5. 重复第1步。
呼哈,就像是魔法似的,经过多轮迭代后,你就将获得一个世界级模型。这个模型在短短4小时内便超越了最强大的计算机象棋程序。
AlphaZero的组件
AlphaZero由两部分构成。我们已经提及了第一部分,就是神经网络。第二部分则是“蒙特卡洛树搜索(Monte Carlo Tree Search)”,或者简称MCTS。
1. 神经网络(NN) 。以棋面作为输入,输出该棋面的“价值”,外加所有可能走法的概率分布。
2. 蒙特卡洛树搜索(MCTS) 。理想情况下,使用神经网络就足以选择下一步走法了。不过,我们仍然希望考虑尽可能多的棋面,并确保我们的的确确选择了最好的走法。MTCS和Minimax一样,是一种可以帮助我们寻找可能棋面的算法。与Minimax不同的是,MTCS能够帮助我们更加高效地搜寻博弈树。
让我们深入细节,看一看下一步走棋究竟是如何得到的
我们不妨先看看AlphaZero在决定下一步走棋(竞技模式)时具体干了什么,然后再去探究它的训练过程,这样可以帮助我们更容易地理解AlphaZero。
神经网络在分类这件事儿上表现得异常出色,例如区分猫跟狗。所以这里的想法很简单直接,神经网络能学会区分棋局输赢的类别吗?更具体地来说,就是让神经网络预测一个表示棋局输赢概率的数值。此外,它还将输出所有可能走法的概率分布,来表示我们下一步应该如何决策。
神经网络将博弈状态作为输入并输出一个输赢概率数值以及所有可能走法的概率分布。对于Dots and boxes这个小游戏来说,游戏状态由三个元素表示:首先,某一条线是否已被占用,这可以用一个含有0与1的数组来表示,如果玩家已经画了某条线,则置其为1,否则为0;第二,当前的走法是否是空过;第三,双方玩家的得分。我们可以用这三个元素来表示所有需要的信息,用其计算当前盘面的价值并预测下一步的走法。
让我们分析一下下图中的博弈情形,该轮轮到蓝色玩家走。蓝色方有两个选择,按照图中上面的走法来画线就会输,按照下面的走法就会赢。