2016年3月,AlphaGo与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜,震惊世界;2017年5月,AlphaGo与排名世界第一的世界围棋冠军柯洁对战,以3比0的总比分获胜,再次震惊世界。围棋界公认AlphaGo的围棋能力已经远远超过了人类职业围棋的顶尖水平了,那么AlphaGo为什么这么厉害,它的算法原理是什么呢,下面结合在互联网上看到的一些文章,整理思路进行浅析。
一、非AI时代的计算机下棋程序基本做法
在信息完整的情况下,在棋局的每一步,计算机可以使用穷举法,自己与自己下棋(self-play),尝试每一个选择,模拟所有可能的完整战局,观察结果,然后选出最佳走法。
这种方法在五子棋、象棋中还可行,但由于围棋的下子地方很多,各种下棋组合非常的大,穷举法的计算量极其庞大,计算机很难在有效地时间里穷举出最佳走法。
案例:
1997年的“深蓝”计算机战胜了人类的国际象棋冠军卡斯帕罗夫,但是没有人会认为“深蓝”真正拥有了人工智能,这是因为国际象棋的每一步都是可见的。在一个确定性的棋局下,仅有有限个走法,而在这有限个走法中必然有一个最优的,那么一个基本的想法就是对棋局进行预测,遍历(穷举)每一种走法直到一方胜出,然后回退计算每一个可能赢的概率,最后使用概率最高的作为最优的走法。“深蓝”就是这么做的,暴力穷举所有的步子,然后找最优的步子。虽然赢了人类,但没有智能,因为整个算法完全就是按人工设计的一个算法,体现不出智能之处。
计算机下围棋,理论上也是可以暴力破解的,但是问题就在于围棋的可走的步子太多了,以至于按目前的计算性能根本做不到暴力破解。而另外一种方式,是使用蒙特卡洛树搜索的方法,蒙特卡洛算法通过某种“实验”的方法,得到一个随机变量的估计,从而得到一个问题的解。这种实验可以是计算机的模拟,那蒙特卡洛树搜索怎么模拟的。算法会找两个围棋傻子(计算机),他们只知道那里可以下棋(空白处,和非打劫刚提子处),他们最终下到终局。好了,这就可以判断谁赢了。算法就通过模拟M(M>>N)盘,看黑赢的概率。可以看到这明显的不合理,因为每步是乱下的,有些棋根本就不可能。