标签:
围棋人工智能蒙特卡罗uctzen |
分类: 知海拾贝 |
刚刚结束的LG杯围棋赛,中国选手时越为中国捧回了连续第五届的LG冠军奖杯,韩国的尴尬有点类似于中国的春兰杯了。
中国围棋的崛起让想起了围棋在另一个领域的崛起,那就是电脑围棋。几十年来,利用人工智能的成果,计算机在中国象棋、国际象棋、五子棋、将棋等各种智力游戏中击败了人类,唯独在围棋领域难有建树,甚至相差甚远。
16年前,获得电脑围棋的世界冠军程序《手谈》,棋力远在业余十级开外。当时我豪情万丈,想将博士论文押注在围棋软件上,未能得到导师的许可。自此,这一领域一直是悬挂在我心中的一个梦想。
近些年很少关注围棋,当我前不久再来看这个领域的时候,发现已经出现了天翻地覆的变化。2012年,天顶的围棋(Zen,禅)受四子击败赫赫有名的九段高手武宫正树,让世人为之震撼!围棋人工智能领域发生了裂变,促成这一裂变的是一种新的算法得以应用:UCT。
自从Zobrist在1970年设计出第一个可与人对弈的程序以来,至今已有四十多年的历史。计算机围棋的难点之一,在于缺乏好的局面评估函数,使其不能跟国际象棋一样,运用设计良好的局面评估函数、搜索树以及优秀的剪枝法,而获得不错的棋力;早期的计算机围棋大多模拟人类的思考模式,借鉴一些经验法则,以静态的评估为主,而动态的搜寻则仅用于局部的、目标明确的棋串攻杀,较少的全局搜寻。这种出发点本身就决定了,电脑围棋不可能超过人类。因为:
1)围棋的技能、经验法则等难以被全部整理,造成电脑围棋只能拥有人类的部分智能;
2)加入搜索算法以穷尽各种可能变化,理论上可以超过人类,但由于围棋的状态空间无比庞大,达到10172,完全无法实现。
3)如果只搜索有限深度,则需要运用局面评估函数,而早期的局面评估函数也是利用部分人类知识,不可能同时满足准确和快速这两个要求。
正因为如此,早期的世界冠军围棋程序棋力有限,尽管以差不多每年一个子的棋力在增长,但要实现与业余高手的对局还是相差太远。
然而,随着基于蒙特卡罗的UCT(Upper Confidence bounds applied to Trees) 搜索方法的出现,以UCT为基础的围棋程序MoGo也逐渐在一些非正式的比赛中崭露头角。2006年,基于UCT算法的电脑围棋软件疯狂的石头(Crazy Stone)取得了电脑游戏大赛九路围棋的冠军。2007年6月,第12届计算机奥林匹克于阿姆斯特丹举行,上届冠军GNU Go(传统算法的代表)、亚军GO Intellect以及Crazy Stone等程序均有参赛,MoGo在强敌环伺之下,以全胜战绩夺得了19路围棋项目的金牌,Crazy Stone也拿到了第二名,GNU Go退居第三。这象征UCT的成功,也代表一个崭新的局面的到来。自此,基于UCT算法的围棋软件得到空前认可,最终一统天下。2009年,天顶的围棋(Zen,禅)取得电脑围棋软件19路围棋的冠军,其后一直蝉联冠军。
蒙特卡罗算法其实很早就开始在围棋上进行研究,只是效果还没有显示出来故而未引起足够的重视。什么是蒙特卡罗算法?在围棋上应用,打个比方,就是随机落子下棋,直到终局,经过大量的随机模拟下棋,来判断某一手棋的胜率或某个局面的优劣。这种思考方式与人类的思考模式是完全不同的,但却很适合电脑来完成。将蒙特卡罗算法方法应用于围棋,其核心的思想是,在于通过统计大量模拟棋局的结果,进行局面的优劣判断。亦即将蒙特卡罗方法作为局面评估函数,以决定着手的好坏。
有了评估函数,就可以开展博弈树的搜索。而如何减少博弈树的分支,即减少蒙特卡洛模拟的次数,就成了一个大问题。UCT算法就是UCB在搜索树上的应用。而UCB本来是为了解决赌场里的老虎机问题而产生的。有很多台老虎机,每台老虎机投币后,拉动拉杆就可以得知是否赢钱。每台老虎机可能有不同的收益率,玩家如何获得最大总收益?基于信心上限的UCB模型可以实现高度有效的剪枝,从而避免搜索空间爆炸。
我很惊叹这些模型与算法的设计,基于专家系统的精妙设计不能取得好的成绩,而随机乱下却可以实现质的突破,这就是结构的威力。在很多领域都有类似的例子,几乎可以上升到一种哲学思想。其实,想想我们这个世界,也是如此,无比精妙,但最基础的却是一些基本粒子的随机组合。带给我们的启示是,有时候极力追求一样东西,不是最佳的选择,往往无为而为,不求而求,才是大道。
网上有Zen的免费版本下载。即便是这个免费版本,在个人电脑上运行,我和其最高棋力分先,也是输多赢少。其中最大的区别在于,我杀气的算力不够,一不小心就会被屠龙。而Zen的劣势也很明显,越是不利局面它的棋力越弱,此外,由于引入了蒙特卡罗模拟以及UCB,基于概率的选择也会让它下出一些臭手。当然,Zen的正式版,尤其是在高性能计算机上时,棋力会远超过我,达到业余五段水平。