AlphaGo中剪枝原理理解和应用实战

AlphaGo中剪枝原理理解和应用实战

 

一、Alphago学习总结

谷歌AlphaGo通过蒙特卡洛树(MCTS)搜索算法和两个深度神经网络合作完成下棋,相对于传统的棋类软件,如:深蓝计算机,对所有可能结果建立搜索树,采用暴力搜索的方式,计算量非常的大,两个深度神经网络—策略网(policy network)和 估值网络(Value网络)的作用是合作“挑选”出比较有前途的棋步,降低搜索树的空间复杂性,从而将计算量控制在可以完成的范围内。策略网络主要用来生成落子策略,负责指挥计算机搜索出更像人类高手落子的位置,提出几种可行的下子方法。策略网络不知道自己下的这步棋的好坏,这个时候估值网络会评估每个可行性方法,评估整个盘面的情况,给出一个“胜率”,这些值反馈到蒙特卡洛树算法中,进行上述过程的反复推演,在“胜率”最高的地方继续推演,抛弃一些胜率低的路线。

谷歌AlphaGo将深度学习方法引入到蒙特卡洛树搜索中,策略网络用于评估可能的下子点,从众多的可下子点中选择若干个认为最好的可下子点,这样就极大地缩小了蒙特卡洛树搜索中扩展节点的范围。另一个为估值网络,可以对给定的棋局进行估值,在模拟过程中,不需要模拟到棋局结束就可以利用估值网络判断棋局是否有利。这样就可以在规定的时间内,实现更多的搜索和模拟,从而达到提高围棋程序下棋水平的目的。除此之外,AlphaGo还把增强学习引入到计算机围棋中,通过不断的自我学习,提高了其下棋水平。

谷歌的Alphago中剪枝是发生在深度学习的策略网洛和估值网络中,对这两个网络进行修剪,将网络中不重要的参数去掉,减少网络模型的参数,让网络变得更轻量,计算速度更快。

 

二、蒙特卡洛算法

蒙特卡洛算法并不是一种算法的名称,而是对一类随机算法的特性的概括,随机算法,在采样不全时,通常不能保证找到最优解。随机算法分为两类:

  1. 蒙特卡罗算法:采样越多,越近似最优解
  2. 拉斯维加斯算法:采样越多,越有机会找到最优解

2.1 算法理解举例

假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡洛算法——尽量找好的,但不保证是最好的

而拉斯维加斯算法,则是另一种情况。假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯的——尽量找最好的,但不保证能找到

这两类随机算法之间的选择,往往受到问题的局限。如果问题要求在有限采样内,必须给出一个解,但不要求是最优解,那就要用蒙特卡洛算法。反之,如果问题要求必须给出最优解,但对采样没有限制,那就要用拉斯维加斯算法。对于机器围棋程序而言,因为每一步棋的运算时间、堆栈空间都是有限的,而且不要求最优解,所以采用的是蒙特卡洛算法。

机器下棋算法的本质是搜索树,在有限的时间内必须遍历很宽的树,只能牺牲“深度”,也就是说不采用暴力搜索遍历所有树,只是随机采样,像人类一样考虑后面下的几步会带来的局面效果,而舍弃那些当前并不怎么好的下子方式,采用当前这一步最优的下子方法。

 

2.2 围棋中的蒙特卡洛算法

对于当前棋局,随机地模拟双方走步,直到分出胜负为止。通过多次模拟,计算每个可下棋点的获胜概率,选取获胜概率最大的点走棋。在围棋程序中使用蒙特卡洛树搜索的方法,边模拟边建立一个搜索树,选择最大化效益的节点进行扩展,父节点可以共享子节点的模拟结果,以提高搜索的效率。基本原理如下:

  1.  选择:以当前棋局为根节点,自上而下地选择一个落子点。
  2.  扩展:向选定的节点添加一个或多个子节点。
  3.  模拟:对扩展出的节点用蒙特卡洛方法进行模拟。
  4.  回传:根据模拟结果依次向上更新祖先节点的估计值。

                                              

 

                                                                                          图1

AlphaGo将深度学习方法引入到蒙特卡洛树搜索中,两个深度学习网络,一个为策略网络,用于评估可能的下子点,从众多的可下子点中选择若干个认为最好的可下子点进行扩展,这样就极大地缩小了蒙特卡洛树搜索中扩展节点的范围。另一个为估值网络,可以对给定的棋局进行估值,在模拟过程中,不需要模拟到棋局结束就可以利用估值网络判断棋局是否有利。这样就可以在规定的时间内,实现更多的搜索和模拟,从而达到提高围棋程序下棋水平的目的。

 

三、剪枝

剪枝是提高搜索算法时空效率,使得算法在优越性上大大优化的技巧。有的时候暴力搜索(也叫爆搜)过不了时限的算法,通过各种剪枝+优化之后就能成功通过。

搜索树:

                                                                

 

对于这棵树来讲,以深度优先遍历为例,从1节点开始深搜,若要完全遍历,则需要搜索所有的节点。但是在解决实际问题的过程中,有一些点和它们的子节点显然不符合题意,压根就没必要进行搜索。那么我们就在算法中加入一个判断条件,使得这棵子树在搜索的时候不会被进入,以此优化时空复杂度。而这个优化的技巧非常像在树上砍冗余的枝条,所以起了一个名字叫做:剪枝。

 

3.1 α-β剪枝

深蓝在之前的中国象棋、日本将棋中采用的是α-β剪枝算法,剪枝的意思是对已经搜索过的状态对搜索进行剪枝,以提高搜索的

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值