加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 动态 > 正文

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

发布时间:2016-03-13 01:32:11 所属栏目:动态 来源:雷锋网
导读:AlphaGo的棋局,与人工智能有关,与人生无关。

在Simulation开始之前,把从根一直到sL的所有的(s,a)增加virtual loss,这样可以防止(准确的说应该是尽量不要,原文用的词语是discourage,当然如果其它走法也都有线程在模拟,那也是可以的)其它搜索线程探索相同的路径。

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

上面的给(s,a)增加virtual 的loss,那么根据上面选择的公式,就不太会选中它了。

当模拟结束了,需要把这个virtual loss去掉,同时加上这次Simulation的得分。

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

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

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

最终算出Q(s,a):

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

Expansion(图b)

当一条边(s,a)的访问次数Nr(s,a)【提个小问题,为什么是Nr(s,a)而不是Nv(s,a)?】超过一个阈值Nthr时会把这条边的局面(其实就是走一下这个走法)s’=f(s,a)加到搜索树里。

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

由于计算P(a|s’)需要在GPU中利用SL Policy Network计算,比较慢,所以先给它一个place-holder的值,等到GPU那边算完了再更新。

这个place-holder的值使用和rollout policy类似的一个tree policy计算出来的(用的模型了rollout policy一样,不过特征稍微丰富一些,后面会在表格中看到),在GPU算出真的P(a|s’)之前的selection都是先用这个place-holder值,所以也不能估计的太差。因此AlphaGO用了一个比rollout feature多一些的模型。

Expansion的阈值Nthr会动态调整,目的是使得计算Policy Network的GPU能够跟上CPU的速度。

Distributed APV-MCTS算法

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

整个搜索树都存在Master上,它只负责Selection和Place-Holder先验的计算以及各种统计量的更新。叶子节点发到CPU集群进行rollout计算,发到GPU集群进行Policy和Value Network的计算。

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

AlphaGo并没有想常见的围棋那样使用AMAF或者RAVE启发,因为这些策略并没有什么用处,此外也没有使用开局库,动态贴目(dynamic komi)等。

Rollout Policy

使用了两大类pattern,一种是response的pattern,也就是上一步走法附近的pattern(一般围棋很多走法都是为了“应付”对手的走子);另一种就是非response的pattern,也就是将要走的那个走法附近的pattern。具体使用的特征见下表。Rollout Policy比较简单,每个CPU线程每秒可以从空的局面(开局)模拟1000个对局。

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

横线之上的feature用来rollout,所有的feature用来计算place-holder先验概率。

Symmetries

前面在讲Search Algorithm讲过了。

SL Policy Network

SL Policy Network使用了29.4 million局面来训练,这些局面来自KGS 6d-9d 的16万个对局。使用了前1million用来测试,后面的28.4million用来训练。此外进行了旋转和镜像,把一个局面变成8个局面。使用随机梯度下降算法训练,训练的mini-batch大小是16。使用了50个GPU的DistBelief(并没有使用最新的Tensorflow),花了3周的时间来训练了340million次训练步骤(每个mini-batch算一个步骤?)

RL Policy Network

每次用并行的进行n个游戏,使用当前版本(参数)的Policy Network和之前的某一个版本的Policy Network。当前版本的初始值来自SL Policy Network。然后用 Policy Gradient来更新参数,这算一次迭代,经过500次迭代之后,就认为得到一个新的版本把它加到Pool里用来和当前版本对弈。使用这种方法训练,使用50个GPU,n=128,10,000次对弈,一天可以训练完成RL Policy Network。

Value Network

前面说了,训练的关键是要自己模拟对弈然后随机选择局面而不是直接使用KGS的对局库来避免overfitting。

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

随机选择一个time-step U~unif{1,450}

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

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

然后用RL Policy Network模拟对弈到游戏结束

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

被作为一个训练数据加到训练集合里。

这个数据是

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

的一个无偏估计。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读