作者:棋禅一味微信号 2019-03-19
本文转载自微信公众号:棋禅一味,作者何云波
人物档案:刘知青,男,生于1966年。1989年毕业于清华大学计算机系,1994年12月毕业于美国纽约大学计算机科学系,获博士学位。现任北京邮电大学教授,北邮九鼎计算机围棋研究所所长,主要研究方向:函数化程序语言、操作系统。同时致力于围棋人工智能研究。其研制的计算机围棋程序多次获全国计算机围棋大赛的冠军。著有《计算机围棋基础》《对面千里》等。
一、求学生涯
何云波(以下简称何):做围棋口述史,不光是在棋界,做学术的、经商的、普通的棋迷都有不同的人生于围棋经历,然后会有不同的视角。刘教授,正好你是做计算机围棋的,代表了围棋的一个重要方面,所谓古老文化与现代科技的联姻。请问你小时候是什么时候开始学的棋?
刘知青(以下简称刘):我学棋学得很晚,是在清华读大学的时候学的,我在清华读的计算机科学与技术专业。我是1966年出生在北京的,大学是1984级的,也就是聂卫平擂台赛的时候。我从小对象棋有兴趣,小时候三四岁时,有次去我姥姥家玩,到了中午饭的时候大人看这个孩子还没回来,所以就全家去找我,怎么也找不到。最后发现我在大人堆里面,看大人们下象棋。也没人教,但我对下棋这种事还是挺有兴趣的。象棋跟我父亲下过,跟我邻居下过。
我妈妈在军队里做无线电通讯的,当时他们的指导员也爱下象棋,就跟我下。当时可能也就是刚上学。他输在我手里了,就非常恼火。小时候我也没顾及到社会上很多处世的道理,但大人的话就会觉得失面子。所以我下得还挺好的。但一直只接触到象棋,因为毕竟受自己生活面的限制。后来也打过桥牌,高中的时候开始打的,跟班里同学一起打。那些同学后来大学以后代表中国区参加过世界级的比赛,可能他们家庭里也有点桥牌的背景,所以桥牌打得非常好。
到了大学以后,可能有擂台赛的影响,更主要是因为班里面有个同学是下围棋的。现在看上去他水平不是很高,也就是业余初段的水平,但是当时对于我们从不下围棋的人来说已经高不可攀了。我就是从那时候开始喜欢围棋的。我们当时除了这个人以外,也有一两个人也会围棋。最后有了一定的风气,可能有五六个人在下棋,甚至有外班的人也在学。水平也是参差不齐,有的人明显要差一点,我也能让他们九个子之类的,不过我跟业余初段的人还是有差距的。当然,当时也偶尔在打桥牌,因为当时桥牌是个风气,但我主要的时间是在围棋上面了。
何:你读书那个时候,清华大学的围棋风气浓吗?
刘:总体来说还可以,学校整体的气氛还是比较宽松的。当时是80年代中期,社会的气氛还是积极向上的。当然,到了1989年是另外一个转折了。清华大学是读5年,我们时间上比较充裕。清华曾经是6年的,后来到了我们的时候是5年,最后改成4年了。因为早期没有研究生的教育,可能学校就认为既然上了清华了,就多学习一两年。在清华会有很多的机会,学到课程之外的东西。我当时也接触到了比如文学、历史、艺术等,包括围棋。
何:你做计算机研究是从什么时候开始的?
刘:我回到北京以后才开始的,1995年1月拿到博士。然后我又去了AT&T贝尔实验室做了研究员,在新泽西,离纽约不远,40分钟的车程,去那边待过两年半。后来还是想着去学校里面,因为得了博士,有一点点野心和目标了,还是希望做一些学术上的工作,我就申请到了印第安纳的普渡大学去教书,教的计算机与信息科学,那个地方在美国的中部了,相对来说比较保守,学校也没有纽约大学那么好。围棋也是时断时续地在下。回国是在2002年底2003年初的时候,回来就去北邮了。
二、计算机围棋研究
何:那你是什么时候开始做计算机围棋研究的?
刘:是我回到北邮以后。我曾经做的研究是比较传统的计算机科学的领域。我的博士论文是做的一个程序员,挺高级的一个程序员。在欧美有大量的程序员存在着,每个语言有自己不同的功能特点,程序云可以说是计算机发展的一个支柱,从一开始比较低级的汇编语言、机器语言到高端的语言,是一种人对于计算机指令的表示方式,我们还有编译的一个工作,编译就是把一种语言翻译为另外一种语言,一般是翻译为计算机直接能够明白的语言。我做的还是比较底层的工作,从博士的论文到后面的研究都是做这些工作。
回到北邮以后,其一由于技术的发展,这个东西成为经典而不是最新的课题,其二国内的环境也不太允许你做这样一件事情。正好那时北邮在做富士通杯的围棋比赛,他们知道我也下围棋,也需要一些北邮的老师来参与这个活动。有一些日本的朋友、棋院的朋友过来,北邮都是由体育部去组织安排这些事情,但是还是希望有会下围棋的人来招待这些人。他们就把我请去了,也就见到了林金桐校长,他知道我是美国回来的,就觉得会不一样,就问我是不是愿意做计算机围棋。他见到我之前曾经问过另外一个人,叫许峰雄,他是“深蓝”的主要的设计者。反正这个事情没有谈成,具体的原因我就不知道了。后来我遇到过许峰雄,他在微软的时候还试图去解一解围棋的问题,他的方式还是与他早期的象棋的方式是一致的,就是用马力计算的方式,它是一个全面的搜索,用了大量的硬件加速器来支持这个计算。但是最后没有成功。他见到我就劝我,我们一起做计算机围棋好不好?我没有当时立即答应他,因为做围棋是有风险的。当然,由校长支持肯定是好的,但是这个任务太大了,以致于一个校长无法完全支持。
后来棋院的院长华老跟我讲了个例子,微软的比尔·盖茨是下围棋的,如果能够下围棋,那么也就能跟用户更好地交互(interaction),他就托微软亚洲研究院的院长张亚勤(张亚勤是业余6段,也是美国的博士)找到中国棋院,说微软可以给钱,能不能找中国的技术团队去做这件事情。具体数目没有讲,但是我觉得是不少的一笔钱。最后是找到了清华的老师来做,但清华的老师拒绝了。第一,太难了;第二,有各种各样的压力,比如发表论文,评职称等等。虽然做这个东西目前有经费支持,但是很可能未来的十年二十年都会浪费了。
我在美国读博士的时候,我们系有个教授在指导一个学生写计算机围棋的程序,我也没看到他们写成什么样子。另外有个教授做过围棋复杂度的研究,围棋不管是从空间上来说还是时间上来说都是一个非常难的问题,他们对此做了数学上的证明。对于围棋的工作,在西方学术界的重要性我是清晰地看到了,它难的地方我也是知道的。我后来做了个权衡,我觉得还是可以做的,原因有几点:2005年的时候我已经是正教授了;第二就是有校长的支持,还有一笔钱,大概三四十万的研究经费;当然,更重要的是,这个项目是有意义的,而且我对围棋还是挺感兴趣的。
何:你们那个计算机围棋研究所叫九鼎,是吧?
刘:对。应该是2005年11月,就成立了北邮九鼎计算机围棋研究所。三十万的经费其实是台州的九鼎房地产公司提供的,学校没有给经费。据后来的消息说这个公司已经破产了。当时三十万也还可以,但也不是特别多。棋院的人也比较支持,他们都支持但所有人都觉得这东西挺难的。
正好2006年的时候一个新的技术出现了,就是2006年到AlphaGo出现之前的蒙特卡洛。蒙特卡洛之前的这个方法,他们叫做专家系统,陈志行的“手谈”就是一个代表,就是把围棋的规则、知识、经验用代码的方式输进去,所有的都要人工输进去。当然,水平越高输进去的准确度会更高些,陈志行的水平还是很高的,我觉得应该有业余六段的水平,在当时所有涉及计算机围棋的人里面是最高的。他是学化学出身的,跟化学是没有关系,但是他喜欢做计算化学,他在退休之前用计算机一直在做一些化学的分析。当时美国人英国人也是采取的完全一样的方法。这里面有一些基本的东西,比如影响函数,就像扔一颗石子在湖里面,会有水波逐渐地扩散出去,这个波的高低会有一个衰减,离中心近的就高一点,往外就逐渐有个衰减过程,那么衰减多少有一个参数来定。那棋子在棋盘上也可以这么看,每放一个棋子,会对周围产生影响。对于任何一个点,是所有棋子对它影响的一个核,比如你认为白子是正的影响,那么黑子就是负的影响,如果一个子正好在白子和黑子之间,那么黑和白正好抵消。如果周边都是白的,那么就会正得很厉害。大概就是这么一个基本思想,这个70年代时候就有了。
后来俞斌来我这读本科的时候,他的毕业论文就是做计算机围棋这么一个程序。方法也是一样的,把他的围棋知识转化为代码。到了毕业的时候也没有完全写完,因为那时候他已经是国家围棋队的总教练,他在旅行的飞机上面和酒店里面才可以写。他说他可以写得比“手谈”还好,因为他的水平要比陈志行的水平要高,所以他对围棋的理解更深一些。但是他又说了,他看到了这种方法的一个本质的弱点,他不可能超出某一个天花板。现在蒙特卡洛这种方法已经完全超出了专家系统这种方法了。我们用的也是蒙特卡洛的方法。
何:你们当时做计算机围棋研究,除了蒙特卡洛的方法,还运用了一些什么方法?
刘:首先蒙特卡洛是一个核心的方法,我下了一步棋以后,有一个新的盘面了,最终有什么样的胜率,那么它就给了一个很强的数学基础做支撑。
何:原来都说围棋里面最难的就是需要做选择的太多,要用那种穷举法是不可能的。你们是怎么解决这个问题的?
刘:穷举法是永远不可能的,刚刚说的蒙特卡洛就是给了你一个方式来评估一个盘面是好还是不好。虽然它未必是准确的,但要比没有要强得多。当然这个事情出来的时候,陈志行还在,我还专门去中山大学拜访过他。有几个原因,一是他是早期做这个事情的专家,同时我们开始做这个事情最早都是由我来组织邀请的。他也知道这个事情,但很怀疑这个事情,就是说通过随机方法能够解决人这么多经验都解决不了的问题。但是现在看来,现在这些东西也是AlphaGo的一个核心基础。光有这个还不够,第二个技术突破是叫做UCB的一种方法。我们可以看到这么一个问题,你可以想像下,就是在赌场里,推很多的角子机可以拉一下,拉一下总会给个回报,回报有可能是0,也可能是掉出几块钱来,你拉一个角子机并不需要钱。现在有N个角子机,围棋里面有三百多个角子机,每一个落子点代表一个角子机,你在这个地方落子了,表示这个角子机给我的回报很高。所谓角子机就是用硬币来驱动的,扔一个硬币进去,拉一下就能掉硬币出来。如果我面对多个角子机的时候,你不知道哪个好,假设我们认为里面有一个完全不同的机制,也就是说下这个点跟下另外一个点完全没有关系,它们最后给你胜负的回报是不一致的,那我怎么去选出来回报最高的那个角子机。也就是说围棋里面有这么多点,我选什么点落子胜率是最高的。这个本质是完全一样的。第一,你要探索一下,因为你对它们都未知;其二,你要利用已知的回报的结果,比如这个地方拉了五下了,有四次都掉出一块钱来了,那变拉了一下掉出一块钱来,下次要拉哪个?当然,我是先拉只掉一次的,因为我要探索它情况是什么,现在它的胜率还很高。但如果这边拉了五次掉了四次,那边拉了一次没掉出来,我是不是要拉它一下,下次还要不要试它。我愿意拉五次这边,因为回报是80%。可能也愿意拉一下只拉了一次的,因为它还存在很多未知,也有可能它会很高。那么它就有个算法,去平衡这种矛盾。最后的结果它会趋向胜率比较高的,同时它会照顾一下我们拉的次数比较低的,因为还有未知因素,还想去测一测。
何:你们用的这些程序最大的弱点是什么?
刘:比如刚才说的蒙特卡洛这个评估,给我一个当前盘面,我要随机地做出一个终局,然后来判断输赢,我就可以做一个统计,比如80%黑赢。问题就是说从这个地方到后面的这个过程中,完全做随机的肯定是有问题的。比如说,我正好有个直四,你点了我一下子,我肯定要把我的眼护住,然后做成两个眼,我几乎没有什么可能不去做这件事情。但是如果是随机的话,你点了我,我可能就不做这件事情,甚至我在边上下一个子,变成直三了,完了你一点中间就把我吃死了。这种意外是存在的,但是实际对弈是没有这种可能的。还有做蒙特卡洛评估的时候,有这么一个规则,你打吃了我,我应该粘上,不让你吃掉。但是有的时候有这种例外,就是你打吃了我,我首先要把你吃掉,而不是我先填我自己,因为我填上的时候就等于填了我的眼,我吃了你以后把我的眼保留住了。反正里面有一系列的围棋知识需要放进去。所以,实质上所谓的蒙特卡洛评估它有一定的随机性,但是需要把围棋的知识也输入到里面,要做大量的手工的输入工作,才能让评估做得准。
(未完待续) |