先聊点轻松的话题,讲讲阿尔法狗(AlphaGo)这个名称的由来。网上已经有了介绍,我这里再稍微展开作一下详细解释:首先,alpha是希腊字母表里的头一个字母α,就像中文里面“甲乙丙丁”里的“甲”字一样,表示最牛的意思。比如天文学里就用希腊字母给星座里的星星按照亮度进行排序。alpha代表最亮的星,beta 代表第二亮的星,以此类推。举个例子,距离地球最近的恒星比邻星,也就是半人马座阿尔法,英文写作Alpha Centauri,代表半人马座里最亮的一颗星。再比如织女星,正式称谓是Alpha Lyrae,也就是天琴座最亮的恒星的意思。至于go,则是因为日语里面把围棋叫做“碁”,读“go”的音,所以英语里面围棋称为go。历史上日本对于围棋在西方世界的推广可谓不遗余力,功不可没。最先把围棋介绍给西方的是日本人,大部分英语围棋书籍也是由日本人编写的。而且,近代日本围棋水平长期位居世界第一。自然而然,很多围棋术语在英语里面也都直接取自日文发音。比如
(汉语) | (英语) |
段 | dan |
定式 | joseki |
贴目 | komi |
读秒 | byoyomi |
打劫 | ko |
先手 | sente |
打吃 | atari |
模样 | moyo |
手筋 | tesuji |
搞笑的是三三在英语里也叫做san-san,这不是从汉语发音借用过去的哟,而是因为日文里面“三”的发音是sang(桑),跟汉语挺像,纯属巧合。另外,go这个英文翻译其实不太地道,因为容易跟走路的“go”混淆。曾经有人建议写作“goe”,末尾的“e”不发音,这看上去更符合英语里的名词拼写习惯。但是,约定俗成,go这个词就一直沿用下来了。总而言之,AlphaGo隐含的意思就是围棋第一高手。看到这里,就明白了为什么这个软件取名叫AlphaGo了吧。其实是一个很文青也很自负的名字。
再讲讲围棋AI的发展历程。任何事情的发展,都有量变到质变的过程。阿狗的横空出世并不是个孤立的事件,而是踩在前人肩膀之上。我记忆里面,最早接触电脑围棋大概在二十年前,一个名叫陈志行的退休教授写了一个电脑程序叫“手谈”,我可以让它十几个子。那时就留下印象觉得围棋程序的实力太弱。之后,电脑围棋发展缓慢,直到2008年左右,我去波特兰参加那年的北美围棋大会,欣赏到了电脑程序MoGo跟韩国棋手金明完九段的表演赛,金让九子,结果电脑获胜。那时才隐隐感觉软件的实力有了长足的进步。接下去的几年,AI加快了演化的速度。我从网上找出了过去十年里各年度AI挑战职业棋手取得的最好成绩,见下表。以此大致可以看出围棋AI发展的历史走向。
年份   | 电脑程序    | 职业棋手段位  | 让子数 |
2008 | MoGo | 九段 | 9 |
2009 | MoGo | 九段 | 7 |
2010 | MoGoTW | 五段 | 7 |
2011 | Zen | 九段 | 6 |
2012 | Zen | 九段 | 4 |
2013 | CrazyStone | 九段 | 4 |
2014 | CrazyStone | 九段 | 4 |
2015 | AlphaGo | 二段 | 0 |
2016 | AlphaGo | 九段 | 0 |
由图可见,从2008年到2012年这四年间是围棋AI的井喷期,实力以每年一子的速度迅速上升,2012年达到了职业九段让4子的水平。但是也就在那一年电脑围棋遇到了技术瓶颈,连续三年水平没有得到明显提升。一直到2015年十月阿狗的那次破茧而出,电脑程序一下子达到了跟职业棋手平起平坐的水平。从表中可以看出阿狗的横空出世对围棋AI的发展具有里程碑的意义。
围棋的复杂在于它变化的多样性。我们可以用概率理论大致估算一下围棋下法的各种可能。围棋的棋盘十九道纵线加十九道横线,共有361个交叉点。终局时每个点的状态有三种可能:黑子,白子,无子。根据摆列组合,总共的可能性是3的361次方,大致相当于1.7乘以10的172次方。另外终局时的棋谱不能完全反映行棋过程里的落子次序,也无法反映过程中间的提子和打劫。这部分要加上。当然,由于棋盘的对称性,严格计算的话还需要把其中对称重复的减去。不管怎样加减,最后的结果肯定要比霍金估计的宇宙间粒子总数10的80次方大很多很多。另一种简单估算法是:第一步棋落子时有361个选点,第二步因为在剩下的360个交叉点里面选择,有360种可能,第三步是359,之后依次递减。这样最后的可能性是361乘以360乘以359..... 也就是361的阶乘,我试着用Matlab计算,发现算不出来,因为结果已经超过了系统上限。这个上限大概是10的310次方。从电脑的角度来讲,当前运行速度最快的超级计算机已经达到了每秒10亿亿次浮点计算,即10的17次方。即便这样,让它一直运算算到天荒地老直到宇宙寿命的终结之日,也根本不可能穷尽围棋变化的所有可能。
既然如此,让人有点悲观,仿佛此题无解。那么,围棋人工智能究竟是如何实现的呢?里面的道理千头万绪,关键之处是如何选点,即通过某种方式筛选落点位置,保留某些点而把剩余点排除在外,以减少计算总量。也就是说必须剪枝。早期的剪枝是通过穷举法,试图通过对当前所有可能落点的分析找出几个方案。因为选点的数量过于庞大,对于每一个选点无法做出细致分析,导致长期以来电脑围棋的水平无法提升。后来有人在剪枝过程中引入了蒙特卡洛法,通俗来讲就是通过形势判断随机选取着点进行分析,估算出最后的胜率,从而找出最有效的着法。当然,随机法的运用过程里存在很多盲点,必须配合其它方法才会有效。比如双方大块棋子缠绕在一起相互攻杀的时候很可能只此一手。那么就必须进行传统意义上的逻辑分析,找出这唯一的一手。这时候如果采取蒙特卡洛法就会事与愿违。不管怎样,随机搜索的引入令电脑围棋水平有了巨大的提升。但即便如此,AI的水平跟职业棋手相比尚有很大差距。那么,阿狗究竟是如何做到质的飞跃呢?
书面上正式的说法是阿狗采用了一种叫做卷积神经网络的深度学习算法,引入了价值网络和策略网络两套系统对棋子落点进行综合评估,听得人云里雾里。按我的理解,这些都不是最主要的。最根本的技术突破是引入了图像识别!因为很明显阿狗的运算过程使用了大量的GPU。众所周知,GPU是图像处理器。也就是说阿狗团队通过输入海量的人类棋谱制作成图库后对当前局面进行图像分析,找出最佳落点位置。就跟人脸识别一样,通过对人脸的扫描,从数据库里找出与之最匹配的图像,借鉴以往人类棋手以及阿狗自我对局时面临类似局面的着法,大幅度减少了待选的落点数目,比如说减少到十个点。然后对其中每一个点进行相关分析,比如价值判断、死活判断,等等。当然,必须要演算后续手段。假设每一步棋都有10种不同的后续着法,那么如果要计算30步棋,总共的可能性是10的30次方,考虑到并不是每一步棋都有十种可能的后续着法,其中有几步是只此一手,那么也许最终只需要分析其中的10的20次方甚至15次方情形。按照当今处理器的运算速度,应该可以做到。阿狗团队有能力调用海量的云端服务器对每一步棋进行深入分析。还有一种可能是,每一个局面找出比较多的参考选点,比如20个或者30个,根据图像处理和对比赋予每个选点不同的概率,对低概率的选点做浅层分析,只算到后续的几步,而对高概率的选点做深度分析,算到后续的几十步甚至上百步等。总之,通过图像处理对落子点进行剪枝是阿狗如此成功的关键。这只是我个人的理解。
十年前,我在自己的网页上写到:“围棋是计算机尚未攻克的堡垒,我认为在未来的三百年之内,电脑软件在分先的平等对局里绝不可能战胜任何职业棋手。”豪言壮语,信心满满。五年前,日本的天顶围棋(zenith,简称zen)推出新版后惊艳无比,几乎一夜间将电脑围棋的水平推上了一个新台阶。虽然距离职业水平还有相当距离,但是我发现下不过它,当时深受震动。既然能够战胜业余高手,距离职业水准还远吗?于是我只好把个人网页上写的“三百年”偷偷改成了“一百年”,当然心有不甘。直到去年年初,当阿狗战胜职业棋手樊麾的爆炸性新闻见诸各网站的时候,我终于承认:是我错了,完全低估了人工智能的发展速度。当天就从网页上撤下了那段豪言壮语。哎,不是我不明白,这世界变化快。
最后,预祝这次活动取得成功吧。期待阿狗发挥瑰丽的想象下出一些天马行空的棋,比如布局点天元之类石破天惊的着法,在世人面前展现围棋的博大精深。同时也期待人类能够赢下一局。毕竟,电脑再怎么强大,也无法穷举所有的变化,肯定有漏算的情形发生。去年我在波士顿北美围棋大会上,有幸跟deepmind团队进行了零距离交流。我问黄士杰:阿狗在跟李世石的第四盘里出现的算法漏洞是否已经得到解决?黄博士给予了肯定的回答。但是,我私底下相信:这个bug可能永远无法真正得到修复。期待柯洁凭借他的直觉、灵气、智慧和锲而不舍的毅力,在物华天宝人杰地灵的浙江水乡,再现神之一手!
(写于2017年)