位置: 主页 > 热门BT页游 >

深挖围棋AI技术:alphaGo在下一盘什么棋?(上)

所以我个人的观点是3月份要战胜李世石还是难度比较大的。

MCTS+DCNN

Tree Policy: 走法首先通过DCNN排序,然后按顺序选择,除非累计的概率超过0.8或者超过一定次数的top走法。Expansion使用的UCT算法。

然后第U步棋从合法的走法中随机选择

根据SL Policy Network走1,2,… , U-1步棋

最强的AlphaGo使用了64个搜索线程,1920个CPU的集群和280个GPU的机器(其实也就二十多台机器)

Policy Network我们通过之前的介绍以及了解到了,它的作用是Tree Policy时候的Node Selection。(rollout阶段不能使用Policy Network,因为DCNN的计算速度相对于Simulation来说太慢,所以AlphaGo又训练了一个简单的Rollout Policy,它基于一些local的pattern之类的feature训练了一个线性的softmax)。

首先每个节点表示一个局面,每一条边表示局面+一个合法的走法(s,a)。每条边保存Q(s,a),表示MCTS当前累计的reward,N(s,a)表示这条边的访问次数,P(s,a)表示先验概率。

具体的做法是当前版本跟之前的某一个版本(把之前所有版本都保留和不是用最近的一个可以避免overfitting)对弈,对弈的走法是根据Policy Network来选择的,然后根据结果调整参数。这个公式用自然语言来描述就是最终得分z_t(获胜或者失败),在t时刻局面是s_t我选择了走法a_t,P(a_t|s_t)表示局面s_t时选择走法a_t的概率,就像神经网络的反向传播算法一样,损失z_t(或者收益)是要由这个走法来负责的。我们调整参数的目的就是让这个概率变小。再通俗一点说就是,比如第一步我们的模型说必须走马(概率是1),那么如果最终输棋,我们复盘时可能会觉得下次走马的概率应该少一点,所以我们调整参数让走马的概率小一点(就是这个梯度)。

比如为了争胜,我们可能走一些冒险的策略,这个策略下如果对手走到最佳的走法我们可能会输。但是由于局面复杂,稍有不慎可能就会走错,那么我们的目的就达到了。

此外,当GPU算完value的得分后也要更新:

所以大部分研究都是用CNN来预测一个局面下最好的走法。【预测走法比估值一个局面容易,如果我们能够准确估值局面,那么最佳走法就是从走之后的局面中选择对自己最有利的走法。或者用我们做问答系统常用的比喻,预测走法是搜索引擎,局面评估是问答系统。搜索引擎只要把好的排前面就行了(甚至不一定要求排在第一,排在第一页也就差不多了),而问答不仅要把好的排前面,而且还要知道这个最“好”的结果是否足够“好”,因为排序的好是相对“好”,问答的好必须是绝对的“好”,是唯一正确答案】。

初始化统计量:Nv(s’,a)=0, Nr(s’,a)=0, Wv(s’,a)=0, Wr(s’,a)=0, P(s’,a)=P(a|s’)

另外他们还做了实验,证明Clark那些用来保证symmetry的tricky并没有什么卵用,直接简单粗暴的把数据做symmetric变换后训练就行了。

Van Der Werf等(2003)

最早用CNN(当然还有用其它机器学习方法)来预测走法是2003年Van Der Werf等人的工作,他们用了很多手工构造的feature和预处理方法,他们取得了25%的预测准确率。没有细看论文,在2006年Deep Learning火之前,所以估计网络的层次很浅。

这可能就是现实世界和人工智能的差别了。有些事情,机器永远也不会懂,比如人生。

Distributed APV-MCTS算法

一台Master机器执行主搜索(搜索树的部分),一个CPU集群进行rollout的异步计算,一个GPU集群进行Policy和Value Network的异步计算。

Selection(图a)

从根节点开始使用下面的公式选择a直到叶子节点。

最终,AlphaGo选择访问次数最多的走法而不是得分最高的,因为后者对野点(outlier)比较敏感。走完一步之后,之前搜索过的这部分的子树的统计量直接用到下一轮的搜索中,不属于这步走法的子树直接扔掉。另外AlphaGo也实现了Ponder,也就是对手在思考的时候它也进行思考。它思考选择的走法是比较“可疑”的点——最大访问次数不是最高得分的走法。AlphaGo的时间控制会把思考时间尽量留在中局,此外AlphaGo也会投降——当它发现赢的概率低于10%,也就是 MAXaQ(s,a) < -0.8。

从上面的分析可以看出:DCNN给出的走法大局观还是不错的,这正是传统的方法很难解决的问题。局部的作战更多靠计算,MCTS会有帮助。但是我个人觉得MCTS搜索到结束,没有必要。一个局部的计算也许可以用传统的alpha-beta搜索来解决,比如征子的计算,要看6线有没有对手的棋子,另外即使有对手的棋子,也要看位置的高低,这样的计算DCNN是没法解决的,需要靠计算。

AlphaGo生成了3千万局面,也就是3千万次模拟对弈,模拟的方法如下:

为了与Maddison的工作比较,这里只用了标准的features,比较的也是未来1步棋的准确率,可以发现这个方法还是有效的(不过我个人觉得作者应该自己复现Maddison的结果而不是直接用他的结果)

darkforest: 标准的feature,一步的预测,使用KGS数据

比赛用的k=192,文章也做了一些实验对比k=128,256,384的情况。

最后这个Value Network使用了50个GPU训练了一周,使用的mini-batch大小是32。

深度学习为什么最近这么火,其中一个重要的原因就是不需要(太多)提取feature。

Policy/Value Network使用的Features

其实和前面Tian的差不太多,多了两个征子相关的feature,另外增加了一个常量1和常量0的plane。

SL Policy Network & Rollout Policy的训练

这个和之前介绍的差不了太多。AlphaGo相比之前多了Rollout Policy,之前的Rollout Policy大多是使用手工编制的pattern,而AlphaGo用训练Policy Network相同的数据训练了一个简单的模型来做Rollout。

Default Policy:参考的Pachi的tree policy,有3*3的pattern,对手打吃的点(opponent atari point),点眼的检测(detection of nakade points)等。

热门文章
最新文章
Copyright © 2011-2018 超变态网页游戏 版权所有