AlphaGo 的“前世今生”

2024-05-09 07:01

1. AlphaGo 的“前世今生”

 1996 年 2 月,在美国费城举行了一项别开生面的国际象棋比赛,报名参加比赛者包括了“深蓝”计算机 和 当时世界棋王 卡斯帕罗夫。
   比赛最后一天,世界棋王卡斯帕罗夫对垒“深蓝”计算机。在这场人机对弈的6局比赛中,棋王卡斯帕罗夫以 4:2 战胜计算机“深蓝”,获得 40 万美元高额奖金。人胜计算机,首次国际象棋人机大战落下帷幕。比赛在 2 月 17 日结束。其後研究小组把深蓝加以改良。
   次年,也就是1997 年 5 月 11 日,在人与计算机之间挑战赛的历史上可以说是历史性的一天。
                                           计算机在正常时限的比赛中首次击败了等级分排名世界第一的棋手。加里·卡斯帕罗夫以 2.5:3.5 (1胜2负3平)输给 IBM 的计算机程序 “深蓝”。机器的胜利标志着国际象棋历史的新时代。
                                           其中,比赛的转折点出现在第二局。
   卡斯帕罗夫第一局获胜,感觉很好。但在第二局中,双方却打得不可开交。在第 36 步棋时,电脑的做法让卡斯帕罗夫不寒而栗。在当时的情况下,几乎所有顶尖国际象棋程序都会攻击卡斯帕罗夫暴露在外的皇后,但深蓝却走出了一步更为狡猾的棋,最终的效果也更好。这令卡斯帕罗夫对电脑另眼相看。
   对卡斯帕罗夫和所有旁观者来说,深蓝突然不再像电脑一样下棋(它顶住诱惑,没有攻击皇后),反而采取了只有最聪明的人类大师级选手才有可能使用的策略。通过在卡斯帕罗夫面前深藏不漏,IBM成功让人类低估了它的水平。
   他的斗志和体力在随后3局被拖垮,在决胜局中,仅  19  步就宣布放弃。
   后来,IBM拒绝了卡斯帕罗夫的再战请求,拆卸了“深蓝”。卡斯帕罗夫虽然后来多次挑战电脑战平,却无法找“深蓝”“复仇”,留下永久的遗憾。
   在今天看来,“深蓝”还算不上智能,它主要依靠强大的计算能力穷举所有路数来选择最佳策略:“深蓝”靠硬算可以预判 12 步,卡斯帕罗夫可以预判 10 步,两者高下立现。
                                           在 AlphaGo 诞生之前,计算机在除围棋之外,几乎所有棋类游戏上战胜了人类,唯独围棋没有被攻克,为什么呢?
                                           围棋游戏只有两个非常简单的规则,而其复杂性却是难以想象的,一共有 10 的 170 次方种可能性,这个数字之大,以至于用当今世界最强大的计算系统,算几十年也算不完,是没有办法穷举出围棋所有的可能结果的。所以,计算机需要一种更加聪明的方法。
   直到 2016 年,AlphaGo 第一版发表在了 Nature 自然杂志上,这可是牛逼得不要不要的期刊。
                                           而刚过去一年,Google DeepMind 又在 Nature 上发表了一篇 AlphaGo 的改进版——AlphaGo Zero,同样的围棋 AI,竟然在自然杂志上发了两次!可见他们的实力!
   AlphaGo 战胜过欧洲冠军樊麾,韩国九段棋手李世石,而后又赢了世界冠军柯洁,种种迹象表明,人类已经失守最拿手的围棋了。这些围棋高手一个个都表示 AlphaGo 走到了他们想不到的地方,战胜了人类的生物极限。那 AlphaGo 又是怎么在策略上战胜人类的呢?很简单,它会做计划。
   阿尔法狗(AlphaGo)是通过两个不同神经网络合作来改进下棋。这就像有两个导师,每个都是多层神经网络。它们从多层启发式二维过滤器开始,去处理围棋棋盘的定位,就像图片分类器网络处理图片一样。经过过滤,13 个完全连接的神经网络层产生对它们看到的局面判断。这些层能够做分类和逻辑推理。
   这些网络通过反复训练来检查结果,再去校对调整参数,去让下次执行更好。这个处理器有大量的随机性元素,所以人们是不可能精确知道网络是如何“思考”的,但更多的训练后能让它进化到更好。
                                            导师1号:策略网络(Policy network) 
                                           AlphaGo 的第一个神经网络大脑是“策略网络(Policy Network)”,观察棋盘布局企图找到最佳的下一步。事实上,它预测每一个合法下一步的最佳概率,那么最前面猜测的就是那个概率最高的。这可以理解成“落子选择器”。
   AlphaGo 团队首先利用几万局专业棋手对局的棋谱来训练系统,得到初步的“策略网络”。训练“策略网络”时,采用“深度学习”算法,基于全局特征和深度卷积网络 (CNN) 来训练,其主要作用是给定当前盘面状态作为输入,输出下一步棋在棋盘其它空地上的落子概率。
                                           接下来,AlphaGo 采用左右互搏的模式,不同版本的 AlphaGo 相互之间下了 3000 万盘棋,利用人工智能中的“深度增强学习”算法,利用每盘棋的胜负来学习,不断优化和升级“策略网络”,同时建立了一个可以对当前局面估计白棋和黑棋胜率的“价值网络”。
    导师2号:价值网络(Value network) 
                                           AlphaGo 的第二个大脑相对于落子选择器是回答另一个问题。不是去猜测具体下一步,它预测每一个棋手赢棋的可能,在给定棋子位置情况下。这个局面评估器就是 “价值网络(Value Network)” ,通过整体局面判断来辅助落子选择器。
                                           然后,AlphaGo 通过吸收人类 几千年 来优秀的棋谱,不断学习优化 策略网络 和 价值网络,从而战胜了欧洲冠军樊麾,韩国九段棋手李世石,而后又赢了世界冠军柯洁。
   实际对局时,AlphaGo 通过“蒙特卡罗树搜索”来管理整个对弈的搜索过程。
                                           首先,通过“策略网络”,AlphaGo 可以优先搜索本方最有可能落子的点(通常低于10个)。对每种可能再通过“估值网络”评估胜率,分析需要更进一步展开搜索和演算的局面。综合这几种工具,辅以超级强大的并行运算能力,AlphaGo 在推演棋局变化和寻找妙招方面的能力,已经远超人类棋手。
   根据资料,最高配置的 AlphaGo 分布式版本,配置了 1920 个 CPU 和 280 个 GPU,同时可以跑 64 个搜索线程,这样的计算速度就好像有几十个九段高手同时在想棋,还有几十个三段棋手帮着把一些难以判断的局面直接下到最后,拿出结论,某一位人类棋手要与对抗,确实难以企及。
   但是,这并不是重点。
   终于说到重点了~~
   Zero 英文意思是:零。除了围棋最基本规则(棋盘的几何学定义,轮流落子规则,终局输赢计算,打劫等),它就是一张白纸。放弃参考任何人类棋谱,完全自我学习。
                                           如果你和一个有人类老师的 AlphaGo 交手,那可能还会在它背后看到人类下棋的影子。但是 AlphaGo Zero,完全是一个无师自通的家伙,和它下棋,你可能闻到很浓烈的机械味。但从另一方面想,这样的 AlphaGo 打破了数千年来人类下棋思维的限制,探索了人类想不到的下棋境界,学会了一个崭新的下棋方式。
   仅仅经过  3  天的训练后,这套系统已经可以击败 AlphaGo Lee,也就是击败韩国顶尖棋手李世石的那套系统,而且比分高达100:0。经过 40 天训练后,它总计运行了大约 2900 万次自我对弈,使得 AlphaGo Zero 击败 AlphaGo Master,也就是击败世界冠军柯洁的系统,比分为 89:11。要知道职业围棋选手一生中的正式比赛也就一千多局, 而 AlphaGo Zero 却进行了 2900 万次对局。
                                           在技术层面来说,AlphaGo Zero 使用的不再是之前提到的两套神经网络系统,而是将它们融合成一个神经网络系统,这样做能更有效利用资源,学习效果更好。其关键在于采用了新的  Reinforcement Learning(强化学习) ,并给该算法带了新的发展。
                                           而且,它不再仅仅使用 GPU,转而添加了自家的专门为机器学习打造的 TPU,而且使用的硬件个数也在逐步降低,然而学习的效果却不断上升。在短短 40 天没有老师教的训练中,AlphaGo Zero 超越了他所有的前辈,在这个时候,我相信它真正做到了在围棋场上无人能敌了。
   最后,正如 AlphaGo 之父 David Silver 所说,一个无师自通 AlphaGo 的产生,并不仅仅意味着我们的 AI 能在围棋场上战胜人类,放眼未来,它还意味着,在更多方面,我们能用这样的 AI 创造出更多人类历史上的新篇章。
   围棋场上,无论谁赢,最终获胜的都是人类自己。

AlphaGo 的“前世今生”

2. 前世今生,带你了解AlphaGo的发展历程

     01    阿尔法围棋(AlphaGo)是一款围棋人工智能程序,由位于英国伦敦的谷歌(Google)旗下DeepMind公司的戴维·西尔弗、艾佳·黄和戴密斯·哈萨比斯与他们的团队开发,这个程序利用“价值网络”去计算局面,用“策略网络”去选择下子。
    AlphaGo的主要设计者:
    大卫·席尔瓦 (David Silver),剑桥大学计算机科学学士,硕士,加拿大阿尔伯塔大学计算机科学博士。现为伦敦大学学院讲师及Google DeepMind研究员。
       黄士杰(Aja Huang),台湾交通大学计算机科学学士,台湾师范大学计算机科学硕士和博士,加拿大阿尔伯塔大学计算机科学博士后。现为Google DeepMind研究员。
       阿尔法围棋(AlphaGo)是通过两个不同神经网络“大脑”合作来改进下棋。这些大脑是多层神经网络跟那些Google图片搜索引擎识别图片在结构上是相似的。它们从多层启发式二维过滤器开始,去处理围棋棋盘的定位,就像图片分类器网络处理图片一样。经过过滤,13 个完全连接的神经网络层产生对它们看到的局面判断。这些层能够做分类和逻辑推理。
    这些网络通过反复训练来检查结果,再去校对调整参数,去让下次执行更好。这个处理器有大量的随机性元素,所以人们是不可能精确知道网络是如何“思考”的,但更多的训练后能让它进化到更好。
       第一大脑:落子选择器 (Move Picker)
    阿尔法围棋(AlphaGo)的第一个神经网络大脑是“监督学习的策略网络(Policy Network)” ,观察棋盘布局企图找到最佳的下一步。事实上,它预测每一个合法下一步的最佳概率,那么最前面猜测的就是那个概率最高的。这可以理解成“落子选择器”。
    第二大脑:棋局评估器 (Position Evaluator)
    阿尔法围棋(AlphaGo)的第二个大脑相对于落子选择器是回答另一个问题。不是去猜测具体下一步,它预测每一个棋手赢棋的可能,在给定棋子位置情况下。这“局面评估器”就是“价值网络(Value Network)”,通过整体局面判断来辅助落子选择器。这个判断仅仅是大概的,但对于阅读速度提高很有帮助。通过分类潜在的未来局面的“好”与“坏”,AlphaGo能够决定是否通过特殊变种去深入阅读。如果局面评估器说这个特殊变种不行,那么AI就跳过阅读在这一条线上的任何更多落子。
    2015年10月阿尔法围棋以5:0完胜欧洲围棋冠军、职业二段选手樊麾。2016年3月挑战世界围棋冠军、职业九段选手李世石。根据日程安排,5盘棋将分别于3月9日、10日、12日、13日和15日举行,即使一方率先取得3胜,也会下满5盘。最后以4:1结束了这场“战争”。
    2016年3月27日,AlphaGo确认挑战《星际争霸2》。2016年12月29日晚起,一个注册为“master”、标注为韩国九段的“网络棋手”接连“踢馆”弈城网和野狐网。 2016年12月29日晚起到2017年1月4日晚,master对战人类顶尖高手的战绩是60胜0负。最后一盘前,大师透露,“他”就是阿尔法围棋(AlphaGo)。
    2017年5月23日-27日柯洁与围棋人工智能AlphaGo在“中国乌镇·围棋峰会”展开对弈。三局比赛,分别于5月23、25、27日进行。
    在未来,Alpha Go将和医疗、机器人等进行结合,更好的服务人类。
      

3. 到底是什么让AlphaGo变得如此成功

AlphaGo这个系统主要由几个部分组成:
走棋网络(Policy Network),给定当前局面,预测/采样下一步的走棋。
快速走子(Fast rollout),目标和1一样,但在适当牺牲走棋质量的条件下,速度要比1快1000倍。
估值网络(Value Network),给定当前局面,估计是白胜还是黑胜。
蒙特卡罗树搜索(Monte Carlo Tree Search,MCTS),把以上这三个部分连起来,形成一个完整的系统。
我们的DarkForest和AlphaGo同样是用4搭建的系统。DarkForest较AlphaGo而言,在训练时加强了1,而少了2和3,然后以开源软件Pachi的缺省策略 (default policy)部分替代了2的功能。以下介绍下各部分。
1、走棋网络
走棋网络把当前局面作为输入,预测/采样下一步的走棋。它的预测不只给出最强的一手,而是对棋盘上所有可能的下一着给一个分数。棋盘上有361个点,它就给出361个数,好招的分数比坏招要高。
DarkForest在这部分有创新,通过在训练时预测三步而非一步,提高了策略输出的质量,和他们在使用增强学习进行自我对局后得到的走棋网络(RL network)的效果相当。当然,他们并没有在最后的系统中使用增强学习后的网络,而是用了直接通过训练学习到的网络(SL network),理由是RL network输出的走棋缺乏变化,对搜索不利。

有意思的是在AlphaGo为了速度上的考虑,只用了宽度为192的网络,而并没有使用最好的宽度为384的网络(见图2(a)),所以要是GPU更快一点(或者更多一点),AlphaGo肯定是会变得更强的。
所谓的0.1秒走一步,就是纯粹用这样的网络,下出有最高置信度的合法着法。这种做法一点也没有做搜索,但是大局观非常强,不会陷入局部战斗中,说它建模了“棋感”一点也没有错。我们把DarkForest的走棋网络直接放上KGS就有3d的水平,让所有人都惊叹了下。
可以说,这一波围棋AI的突破,主要得益于走棋网络的突破。这个在以前是不可想像的,以前用的是基于规则,或者基于局部形状再加上简单线性分类器训练的走子生成法,需要慢慢调参数年,才有进步。
当然,只用走棋网络问题也很多,就我们在DarkForest上看到的来说,会不顾大小无谓争劫,会无谓脱先,不顾局部死活,对杀出错,等等。有点像高手不经认真思考的随手棋。因为走棋网络没有价值判断功能,只是凭“直觉”在下棋,只有在加了搜索之后,电脑才有价值判断的能力。
2、快速走子
那有了走棋网络,为什么还要做快速走子呢?有两个原因,首先走棋网络的运行速度是比较慢的,AlphaGo说是3毫秒,我们这里也差不多,而快速走子能做到几微秒级别,差了1000倍。所以在走棋网络没有返回的时候让CPU不闲着先搜索起来是很重要的,等到网络返回更好的着法后,再更新对应的着法信息。
其次,快速走子可以用来评估盘面。由于天文数字般的可能局面数,围棋的搜索是毫无希望走到底的,搜索到一定程度就要对现有局面做个估分。在没有估值网络的时候,不像国象可以通过算棋子的分数来对盘面做比较精确的估值,围棋盘面的估计得要通过模拟走子来进行,从当前盘面一路走到底,不考虑岔路地算出胜负,然后把胜负值作为当前盘面价值的一个估计。
这里有个需要权衡的地方:在同等时间下,模拟走子的质量高,单次估值精度高但走子速度慢;模拟走子速度快乃至使用随机走子,虽然单次估值精度低,但可以多模拟几次算平均值,效果未必不好。所以说,如果有一个质量高又速度快的走子策略,那对于棋力的提高是非常有帮助的。
为了达到这个目标,神经网络的模型就显得太慢,还是要用传统的局部特征匹配(local pattern matching)加线性回归(logistic regression)的方法,这办法虽然不新但非常好使,几乎所有的广告推荐,竞价排名,新闻排序,都是用的它。
与更为传统的基于规则的方案相比,它在吸纳了众多高手对局之后就具备了用梯度下降法自动调参的能力,所以性能提高起来会更快更省心。AlphaGo用这个办法达到了2微秒的走子速度和24.2%的走子准确率。24.2%的意思是说它的最好预测和围棋高手的下子有0.242的概率是重合的,相比之下,走棋网络在GPU上用2毫秒能达到57%的准确率。这里,我们就看到了走子速度和精度的权衡。

和训练深度学习模型不同,快速走子用到了局部特征匹配,自然需要一些围棋的领域知识来选择局部特征。对此AlphaGo只提供了局部特征的数目(见Extended Table 4),而没有说明特征的具体细节。我最近也实验了他们的办法,达到了25.1%的准确率和4-5微秒的走子速度,然而全系统整合下来并没有复现他们的水平。
我感觉上24.2%并不能完全概括他们快速走子的棋力,因为只要走错关键的一步,局面判断就完全错误了;而图2(b)更能体现他们快速走子对盘面形势估计的精确度,要能达到他们图2(b)这样的水准,比简单地匹配24.2%要做更多的工作,而他们并未在文章中强调这一点。

在AlphaGo有了快速走子之后,不需要走棋网络和估值网络,不借助任何深度学习和GPU的帮助,不使用增强学习,在单机上就已经达到了3d的水平(见Extended Table 7倒数第二行),这是相当厉害的了。任何使用传统方法在单机上达到这个水平的围棋程序,都需要花费数年的时间。在AlphaGo之前,Aja Huang曾经自己写过非常不错的围棋程序,在这方面相信是有很多的积累的。
3、估值网络

AlphaGo的估值网络可以说是锦上添花的部分,从Fig 2(b)和Extended Table 7来看,没有它AlphaGo也不会变得太弱,至少还是会在7d-8d的水平。少了估值网络,等级分少了480分,但是少了走棋网络,等级分就会少掉800至1000分。特别有意思的是,如果只用估值网络来评估局面(2177),那其效果还不及只用快速走子(2416),只有将两个合起来才有更大的提高。
我的猜测是,估值网络和快速走子对盘面估计是互补的,在棋局一开始时,大家下得比较和气,估值网络会比较重要;但在有复杂的死活或是对杀时,通过快速走子来估计盘面就变得更重要了。考虑到估值网络是整个系统中最难训练的部分(需要三千万局自我对局),我猜测它是最晚做出来并且最有可能能进一步提高的。
关于估值网络训练数据的生成,值得注意的是文章中的附录小字部分。与走棋网络不同,每一盘棋只取一个样本来训练以避免过拟合,不然对同一对局而言输入稍有不同而输出都相同,对训练是非常不利的。这就是为什么需要三千万局,而非三千万个盘面的原因。对于每局自我对局,取样本是很有讲究的,先用SL network保证走棋的多样性,然后随机走子,取盘面,然后用更精确的RL network走到底以得到最正确的胜负估计。当然这样做的效果比用单一网络相比好多少,我不好说。
一个让我吃惊的地方是,他们完全没有做任何局部死活/对杀分析,纯粹是用暴力训练法训练出一个相当不错的估值网络。这在一定程度上说明深度卷积网络(DCNN)有自动将问题分解成子问题,并分别解决的能力。
另外,我猜测他们在取训练样本时,判定最终胜负用的是中国规则。所以说三月和李世石对局的时候也要求用中国规则,不然如果换成别的规则,就需要重新训练估值网络(虽然我估计结果差距不会太大)。至于为什么一开始就用的中国规则,我的猜测是编程非常方便(我在写DarkForest的时候也是这样觉得的)。
4、蒙特卡罗树搜索
这部分基本用的是传统方法,没有太多可以评论的,他们用的是带先验的UCT,即先考虑DCNN认为比较好的着法,然后等到每个着法探索次数多了,选择更相信探索得来的胜率值。而DarkForest则直接选了DCNN推荐的前3或是前5的着法进行搜索。我初步试验下来效果差不多,当然他们的办法更灵活些,在允许使用大量搜索次数的情况下,他们的办法可以找到一些DCNN认为不好但却对局面至关重要的着法。
一个有趣的地方是在每次搜索到叶子节点时,没有立即展开叶子节点,而是等到访问次数到达一定数目(40)才展开,这样避免产生太多的分支,分散搜索的注意力,也能节省GPU的宝贵资源,同时在展开时,对叶节点的盘面估值会更准确些。除此之外,他们也用了一些技巧,以在搜索一开始时,避免多个线程同时搜索一路变化,这部分我们在DarkForest中也注意到了,并且做了改进。
5、总结
总的来说,这整篇文章是一个系统性的工作,而不是一两个小点有了突破就能达到的胜利。在成功背后,是作者们,特别是两位第一作者David Silver和Aja Huang,在博士阶段及毕业以后五年以上的积累,非一朝一夕所能完成的。他们能做出AlphaGo并享有现在的荣誉,是实至名归的。
从以上分析也可以看出,与之前的围棋系统相比,AlphaGo较少依赖围棋的领域知识,但还远未达到通用系统的程度。职业棋手可以在看过了寥寥几局之后明白对手的风格并采取相应策略,一位资深游戏玩家也可以在玩一个新游戏几次后很快上手,但到目前为止,人工智能系统要达到人类水平,还是需要大量样本的训练的。可以说,没有千年来众多棋手在围棋上的积累,就没有围棋AI的今天。

到底是什么让AlphaGo变得如此成功

4. AlphaGo 具体是怎么思考的

——一、"思维"的概念 ——"思维"是指人的"意识"对于客观事物的间接反映,"思维"是指"意识"通过其它媒介的作用认识客观事物,借助于已有的知识和经验和已知的条件推测未知的事物。
"思维"的概括性表现在对一类事物非本质属性的摒弃和对其共同本质特征。

5. AlphaGo为什么这么厉害

AlphaGo为什么这么厉害
AlphaGo这个系统主要由几个部分组成:
走棋网络(Policy Network),给定当前局面,预测/采样下一步的走棋。
快速走子(Fast rollout),目标和1一样,但在适当牺牲走棋质量的条件下,速度要比1快1000倍。
估值网络(Value Network),给定当前局面,估计是白胜还是黑胜。
蒙特卡罗树搜索(Monte Carlo Tree Search,MCTS),把以上这三个部分连起来,形成一个完整的系统。
我们的DarkForest和AlphaGo同样是用4搭建的系统。DarkForest较AlphaGo而言,在训练时加强了1,而少了2和3,然后以开源软件Pachi的缺省策略 (default policy)部分替代了2的功能。以下介绍下各部分。
1、走棋网络
走棋网络把当前局面作为输入,预测/采样下一步的走棋。它的预测不只给出最强的一手,而是对棋盘上所有可能的下一着给一个分数。棋盘上有361个点,它就给出361个数,好招的分数比坏招要高。
DarkForest在这部分有创新,通过在训练时预测三步而非一步,提高了策略输出的质量,和他们在使用增强学习进行自我对局后得到的走棋网络(RL network)的效果相当。当然,他们并没有在最后的系统中使用增强学习后的网络,而是用了直接通过训练学习到的网络(SL network),理由是RL network输出的走棋缺乏变化,对搜索不利。

有意思的是在AlphaGo为了速度上的考虑,只用了宽度为192的网络,而并没有使用最好的宽度为384的网络(见图2(a)),所以要是GPU更快一点(或者更多一点),AlphaGo肯定是会变得更强的。
所谓的0.1秒走一步,就是纯粹用这样的网络,下出有最高置信度的合法着法。这种做法一点也没有做搜索,但是大局观非常强,不会陷入局部战斗中,说它建模了“棋感”一点也没有错。我们把DarkForest的走棋网络直接放上KGS就有3d的水平,让所有人都惊叹了下。
可以说,这一波围棋AI的突破,主要得益于走棋网络的突破。这个在以前是不可想像的,以前用的是基于规则,或者基于局部形状再加上简单线性分类器训练的走子生成法,需要慢慢调参数年,才有进步。
当然,只用走棋网络问题也很多,就我们在DarkForest上看到的来说,会不顾大小无谓争劫,会无谓脱先,不顾局部死活,对杀出错,等等。有点像高手不经认真思考的随手棋。因为走棋网络没有价值判断功能,只是凭“直觉”在下棋,只有在加了搜索之后,电脑才有价值判断的能力。
2、快速走子
那有了走棋网络,为什么还要做快速走子呢?有两个原因,首先走棋网络的运行速度是比较慢的,AlphaGo说是3毫秒,我们这里也差不多,而快速走子能做到几微秒级别,差了1000倍。所以在走棋网络没有返回的时候让CPU不闲着先搜索起来是很重要的,等到网络返回更好的着法后,再更新对应的着法信息。
其次,快速走子可以用来评估盘面。由于天文数字般的可能局面数,围棋的搜索是毫无希望走到底的,搜索到一定程度就要对现有局面做个估分。在没有估值网络的时候,不像国象可以通过算棋子的分数来对盘面做比较精确的估值,围棋盘面的估计得要通过模拟走子来进行,从当前盘面一路走到底,不考虑岔路地算出胜负,然后把胜负值作为当前盘面价值的一个估计。
这里有个需要权衡的地方:在同等时间下,模拟走子的质量高,单次估值精度高但走子速度慢;模拟走子速度快乃至使用随机走子,虽然单次估值精度低,但可以多模拟几次算平均值,效果未必不好。所以说,如果有一个质量高又速度快的走子策略,那对于棋力的提高是非常有帮助的。
为了达到这个目标,神经网络的模型就显得太慢,还是要用传统的局部特征匹配(local pattern matching)加线性回归(logistic regression)的方法,这办法虽然不新但非常好使,几乎所有的广告推荐,竞价排名,新闻排序,都是用的它。
与更为传统的基于规则的方案相比,它在吸纳了众多高手对局之后就具备了用梯度下降法自动调参的能力,所以性能提高起来会更快更省心。AlphaGo用这个办法达到了2微秒的走子速度和24.2%的走子准确率。24.2%的意思是说它的最好预测和围棋高手的下子有0.242的概率是重合的,相比之下,走棋网络在GPU上用2毫秒能达到57%的准确率。这里,我们就看到了走子速度和精度的权衡。

和训练深度学习模型不同,快速走子用到了局部特征匹配,自然需要一些围棋的领域知识来选择局部特征。对此AlphaGo只提供了局部特征的数目(见Extended Table 4),而没有说明特征的具体细节。我最近也实验了他们的办法,达到了25.1%的准确率和4-5微秒的走子速度,然而全系统整合下来并没有复现他们的水平。
我感觉上24.2%并不能完全概括他们快速走子的棋力,因为只要走错关键的一步,局面判断就完全错误了;而图2(b)更能体现他们快速走子对盘面形势估计的精确度,要能达到他们图2(b)这样的水准,比简单地匹配24.2%要做更多的工作,而他们并未在文章中强调这一点。

在AlphaGo有了快速走子之后,不需要走棋网络和估值网络,不借助任何深度学习和GPU的帮助,不使用增强学习,在单机上就已经达到了3d的水平(见Extended Table 7倒数第二行),这是相当厉害的了。任何使用传统方法在单机上达到这个水平的围棋程序,都需要花费数年的时间。在AlphaGo之前,Aja Huang曾经自己写过非常不错的围棋程序,在这方面相信是有很多的积累的。
3、估值网络

AlphaGo的估值网络可以说是锦上添花的部分,从Fig 2(b)和Extended Table 7来看,没有它AlphaGo也不会变得太弱,至少还是会在7d-8d的水平。少了估值网络,等级分少了480分,但是少了走棋网络,等级分就会少掉800至1000分。特别有意思的是,如果只用估值网络来评估局面(2177),那其效果还不及只用快速走子(2416),只有将两个合起来才有更大的提高。
我的猜测是,估值网络和快速走子对盘面估计是互补的,在棋局一开始时,大家下得比较和气,估值网络会比较重要;但在有复杂的死活或是对杀时,通过快速走子来估计盘面就变得更重要了。考虑到估值网络是整个系统中最难训练的部分(需要三千万局自我对局),我猜测它是最晚做出来并且最有可能能进一步提高的。
关于估值网络训练数据的生成,值得注意的是文章中的附录小字部分。与走棋网络不同,每一盘棋只取一个样本来训练以避免过拟合,不然对同一对局而言输入稍有不同而输出都相同,对训练是非常不利的。这就是为什么需要三千万局,而非三千万个盘面的原因。对于每局自我对局,取样本是很有讲究的,先用SL network保证走棋的多样性,然后随机走子,取盘面,然后用更精确的RL network走到底以得到最正确的胜负估计。当然这样做的效果比用单一网络相比好多少,我不好说。
一个让我吃惊的地方是,他们完全没有做任何局部死活/对杀分析,纯粹是用暴力训练法训练出一个相当不错的估值网络。这在一定程度上说明深度卷积网络(DCNN)有自动将问题分解成子问题,并分别解决的能力。
另外,我猜测他们在取训练样本时,判定最终胜负用的是中国规则。所以说三月和李世石对局的时候也要求用中国规则,不然如果换成别的规则,就需要重新训练估值网络(虽然我估计结果差距不会太大)。至于为什么一开始就用的中国规则,我的猜测是编程非常方便(我在写DarkForest的时候也是这样觉得的)。
4、蒙特卡罗树搜索
这部分基本用的是传统方法,没有太多可以评论的,他们用的是带先验的UCT,即先考虑DCNN认为比较好的着法,然后等到每个着法探索次数多了,选择更相信探索得来的胜率值。而DarkForest则直接选了DCNN推荐的前3或是前5的着法进行搜索。我初步试验下来效果差不多,当然他们的办法更灵活些,在允许使用大量搜索次数的情况下,他们的办法可以找到一些DCNN认为不好但却对局面至关重要的着法。
一个有趣的地方是在每次搜索到叶子节点时,没有立即展开叶子节点,而是等到访问次数到达一定数目(40)才展开,这样避免产生太多的分支,分散搜索的注意力,也能节省GPU的宝贵资源,同时在展开时,对叶节点的盘面估值会更准确些。除此之外,他们也用了一些技巧,以在搜索一开始时,避免多个线程同时搜索一路变化,这部分我们在DarkForest中也注意到了,并且做了改进。
5、总结
总的来说,这整篇文章是一个系统性的工作,而不是一两个小点有了突破就能达到的胜利。在成功背后,是作者们,特别是两位第一作者David Silver和Aja Huang,在博士阶段及毕业以后五年以上的积累,非一朝一夕所能完成的。他们能做出AlphaGo并享有现在的荣誉,是实至名归的。
从以上分析也可以看出,与之前的围棋系统相比,AlphaGo较少依赖围棋的领域知识,但还远未达到通用系统的程度。职业棋手可以在看过了寥寥几局之后明白对手的风格并采取相应策略,一位资深游戏玩家也可以在玩一个新游戏几次后很快上手,但到目前为止,人工智能系统要达到人类水平,还是需要大量样本的训练的。可以说,没有千年来众多棋手在围棋上的积累,就没有围棋AI的今天。

AlphaGo为什么这么厉害

6. alphago为什么那么厉害

AlphaGo依靠精确的专家评估系统(value network)、基于海量数据的深度神经网络(policy network),及传统的人工智能方法蒙特卡洛树搜索的组合,以及可以通过左右互搏提高自己的水平,这个真的是有的恐怖了有木有。 李世石九段固然厉害,可人类毕竟是动物,机器软件程序是无休止的工作,这一点也是客观因素了。 比赛已经结束了,李世石一比四不敌alphago。


关于今天alpha go的获胜,看到一个有趣而且可怕的观点: alphago的蒙特卡罗树遇弱则弱,遇强则强;胜率很大时,取胜可行解多,则AI会随意选择一个可行解,从而走出“俗手”;而双方均势时,取胜可行解少,就会打出力挽狂澜的神来之笔。所以如果AI走棋“失误”,就说明你已经输了。 这就是为什么今天在李世石使用罕见开局时,alpha go开始表现一般,而当后来李世石认真起来慢慢逆转却被alpha go中盘102手,108手和110手以神来之笔奠定胜负,最后胜负已定时alpha go 122手又打出小失误。 如果真是这样的,最后alpha go以4:1取胜也就不奇怪了。

仅胜利的一局可能是谷歌为了让alphago有世界排名而故意输的一局,因为如果一个棋手一直连胜,是没有世界排名的,输了一局才有排名,按照官方发布目前alphago排名世界第二,中国小将柯杰世界第一。

7. AlphaGo到底是怎么赢的?

阿尔法围棋(AlphaGo)为了应对围棋的复杂性,结合了监督学习和强化学习的优势。它通过训练形成一个策略网络(policy network),将棋盘上的局势作为输入信息,并对所有可行的落子位置生成一个概率分布。然后,训练出一个价值网络(value network)对自我对弈进行预测,以 -1(对手的绝对胜利)到1(AlphaGo的绝对胜利)的标准,预测所有可行落子位置的结果。这两个网络自身都十分强大,而阿尔法围棋将这两种网络整合进基于概率的蒙特卡罗树搜索(MCTS)中,实现了它真正的优势。新版的阿尔法围棋产生大量自我对弈棋局,为下一代版本提供了训练数据,此过程循环往复。在获取棋局信息后,阿尔法围棋会根据策略网络(policy network)探索哪个位置同时具备高潜在价值和高可能性,进而决定最佳落子位置。在分配的搜索时间结束时,模拟过程中被系统最频繁考察的位置将成为阿尔法围棋的最终选择。在经过先期的全盘探索和过程中对最佳落子的不断揣摩后,阿尔法围棋的搜索算法就能在其计算能力之上加入近似人类的直觉判断。


围棋

AlphaGo到底是怎么赢的?

8. 在现在AlphaGo的能力下,AlphaGo需要让几子人类顶尖棋手才能胜利?

每年晚报杯全国业余围棋锦标赛有个压轴戏,职业棋手与获得前六名的业余棋手进行对抗赛,30年来每年都在坚持,职业棋手与业余高手之间的对局格很难说明问题,在让两子的对局格中,业余高手基本能赢,尤其是现在的业余高手从小接受科班训练,只是后来在定段赛中未能过关、成为职业棋手,但他们的实力并不亚于职业棋手,因此,职业高手让两子对他们肯定有些累,不是说完全不可能,当年赵治勋还将小林觉、山城宏他们打至让两子的对局格,但这种可能性毕竟很小。从这些年的职业、业余对抗成绩来看,职业棋手让业余高手两子根本让不动。像胡煜清这样的业余高手,与职业棋手分先下都难分胜负,你现在要职业棋手让他两子,怎么下?
同样的道理,AlphaGo虽然厉害,但在对柯洁这样的职业高手时,如果让子下的话,那百分百地押柯洁赢。这次“人机大战”三番棋,第一局和第二局,柯洁与AlphaGo的差距的确存在,那这种差距是职业高手之间的差距,不是职业与业余之间的那种巨大差距,AlphaGo让先的话,双方还是好胜负,但让两子的话,AlphaGo不大可能能赢。让两子通常是职业与业余之间的差距,能说AlphaGo与柯洁之间的差距有那么大吗?
让先即执黑不贴目,等于让7目半,让两子还不仅仅是让15目这么简单,在棋盘上先放两子的威力相当于让30目,如果有人说AlphaGo可以让柯洁30目的话,那实在有些夸张。
AlphaGo确实厉害,深度学习深不可测,但个人认为,它与人类顶尖高手的水平差距应该在让先与让两子之间,让两子断无可能。