2018年8月10日星期五

AlphaGo与人类的恩怨情仇(一):世纪难题

漫画《棋魂》中,塔矢亮与进藤光初次见面时,不知天高地厚的小光要求与小亮分先对局。其时,小亮已经接近职业水平,而小光,甚至都没有下过一盘棋。小光所倚仗的,是一个真正的“鬼”才——佐为。棋盘上,虽然小光执棋子的手势和初学者一样,处于下风的却是小亮。小亮以为他只是遇到了一个普通的强大对手,直到小光落下这一手棋——


这时,小亮才发觉,他的对手是在高处俯视着自己。这不是一场同一重量级的战斗,这只是一盘指导棋。

在《棋魂》的这一话于《少年Jump》上刊载后17年,所有的职业棋手也感受到了小亮的绝望。这一次,俯瞰众生的鬼才换成了AlphaGo。

在李世乭以1:4的比分输给AlphaGo之后,多数人,包括很多职业棋手都认为,AlphaGo已经完成了对人类的超越,并且以AlphaGo强大的学习能力,李世乭很可能是最后一个曾经战胜AlphaGo的人。

这场人类与人工智能的漫长对决,是在此落下帷幕,还是余音绕梁,三日不绝?下文将展开论述我的观点。一家之言,欢迎讨论,不足之处也请各位多包涵。
一、灵感与汗水

围棋是世界上最复杂的游戏之一。所谓“一着不慎,满盘皆输”,每一步棋都可能左右全局的结果。一般来说,一手棋的决策分两步走。第一步,“搜寻”:凭经验或感觉给出几个候选的点;第二步,“判断”:分别对这几个点做形式判断,并进行比较。这两步,说来容易,但要做到笑傲众生的水平,对于天赋和勤勉的要求,不亚于一个优秀数学家所需要的。
刚学棋的小明第一次坐在棋盘前,不由得抓耳挠腮:棋盘这么大,第一步棋应该下在哪里。
学棋两年,小明的棋力已有小成。一次比赛,面对强手,小明祭出序盘“飞刀”。对手不假思索,按照常规思路行棋,不知不觉落入圈套。小明借此成功逆袭。
十年后,小明已贵为世界冠军。在一场重要比赛中,小明因形式不利而置大龙生死于不顾,以致其陷入绝境,似乎大龙已经必死无疑。在读秒声的催促下,小明竟灵光一现,在“不可能”的位置找到了己方大龙的唯一出路,成功逆转。
以上所述,是不同水平的棋手在棋盘上面对的“搜寻”情景。从初学者成长为职业棋手,需要先学会基本的布局理论、掌握基本的死活、对杀常识,然后熟记数百个定式及掌握其主要分支(飞刀)、练习数万死活题,同时在大量对局中磨练。有些外行据此认为,围棋只是复杂一点的“体力劳动”。对于这一观点,下图小明同学白1这一招抵得上千言万语。


图中右上的形状,在任何一本死活题的书中都不曾出现。实战白棋这一招的位置,也属于一般“搜寻”思路下的盲点。但小明同学在短时间内看到了这一招,一举扭转乾坤。

“体力劳动”让天赋平平者能够成为业余高手,但山巅最美的风景只属于天才。

我们再说“判断”。判断很难吗?在中国象棋或者国际象棋中,形势判断对于程序来说并非难事:只需观察双方子力的差距就可以大致判断出形式的好坏。当年战胜卡斯帕罗夫的“深蓝”,其形式判断算法大致就是如此,非常简洁。而围棋的形势判断是个真正的难题。围棋的胜负由终局时双方控制地盘的多寡决定。然而棋局进行到一半,双方的地盘都尚未封闭,怎么判断形势呢?

职业棋手采用的算法是估算双方的目数(地盘大小)差距。那如果地盘的边界没有完全确定怎么办呢?如果有先手官子就判给先手方,如果是双方后手官子就算一人一半。如果有一些模糊的地方,比如说一块厚势折算成几目呢?这时候就只能凭经验感觉了。职业棋手之间微妙的水平差异,很多时候也体现在模糊判断能力上。


对于如图所示的中盘阶段末期的局面,职业棋手一般能在一到两分钟内大致判断出双方地盘的差距,并据此决定接下来的策略是保守或是激进。这样的判断速度和准确度,和“搜索”能力的训练一样,背后也是数千盘对局积累下来的经验。

不过,“数地盘”式的判断也常有失灵之时。除了模糊判断可能带来的误差以外,对于某一块地盘归属的错判也是经常发生的。李世乭-AlphaGo五番棋第一局中,职业棋手们就在局中集体给我们演示了一次这样的错判。


这是棋局进行到第101手时的局面。李世乭在棋盘上落下的这一手确保了右上黑棋的安全。由于AlphaGo在左下步伐紊乱,黑棋收获颇丰。沉浸在乐观情绪中的职业棋手们一致判断黑棋明显优势。直观上来看,此局面的判断并不复杂:黑方下边一块确定的目数,基本可以和白方全局确定的目数+厚味抗衡;黑方额外多出右边红框里的地盘,意味着黑棋盘面(即不计贴目)领先15目左右。然而,当时没有人想到,右边红框范围内看上去已经万无一失属于黑棋的地盘,即将被AlphaGo掏空。

敏锐如柯洁者,第一时间看到了白棋在R10(图中绿圈)打入的手段。不过,柯洁当时的说法是,这是落后一方孤注一掷的手法。局后回顾,才发现此处黑棋已无法全身而退,而AlphaGo对此早已成竹在胸。从DeepMind公布的数据来看,AlphaGo认为此局面下白方的胜率超过75%,这意味着AlphaGo对R10打入之后的变化充满信心。棋局的走向证明了AlphaGo判断的正确,而职业棋手的直觉在此处集体失灵。

那么,AlphaGo凭什么认为自己有75%胜率呢?我们在下一节讨论围棋程序如何进行“搜寻”和“判断”。

二、曲折之路

史前时代的围棋程序,在判断与搜寻这两方面都相当原始。

一个围棋程序,想要学会像人类一样判断形势,其实是很难的:模糊判断并没有一套固定的法则,自然也就难以算法化。经常在网络对弈的棋友们应该对弈城、野狐等平台上的“形势判断”功能非常熟悉。初学者乃至有一定棋力的棋手或许会依赖这一功能,然而中高段的棋友大概经常看着程序不靠谱的判断摇头叹气,或是一笑而过。


某对弈平台,“形式判断”功能在一局棋中盘阶段末期的判断。程序判定黑白两色的方块分别为双方的“地盘”。该判断算法,形式上是对人类棋手判断方式的拙劣模仿。其实此时双方差距甚小,程序却给出了黑棋盘面领先19目(扣除贴目后,黑棋仍领先12.5目)的判断。

判断虽难,至少我们还有现成的、能够算法化的流程可用。搜寻呢?其实人类棋手从不用“搜寻”二字,而是用“棋感”、“大局观”等抽象的概念。顾名思义,棋感、大局观,非“机器”所能掌握。不仅如此,对于上世纪的围棋程序,棋感、大局观都是奢侈品——它们甚至都不会一些基本的围棋技巧。程序“手谈”的作者陈志行曾说,他那个年代的程序,连小飞被穿断的棋型都不能应付。


如图,黑方△两子呈“日”字排列,围棋术语称“小飞”。当白方同时占据1位和2位时,黑方△两子的联系就会被隔断,使得形势恶化。为此,当白方走在1位时,黑方通常应该在2位应一招,防止被穿断。陈志行教会了“手谈”这一招,而其它程序不会,于是“手谈”在九十年代大杀四方。然而,陈志行终其一生,也没能让“手谈”突破自己的“九子关”。陈志行本人勉强算个业余高手,而被陈志行让九子而不能获胜的“手谈”,实力可想而知。

模仿人类的智慧困难重重,机器短期内无法在围棋上打败人类也就成为了当年的共识。1997年,一位电脑围棋研究者,John Tromp,曾与另一位研究者Darren Cook立下赌约。赌约的内容是,在2011年以前,能否有围棋程序分先击败John Tromp. John Tromp, 一位实力约为业余1级的爱好者,自信满满地为自己押下1000美元的赌注。就在同一年,国际象棋世界冠军卡斯帕罗夫被超级计算机“深蓝”击败。若不是MCTS(蒙特卡洛树搜索)算法的应用和改进,这本该是一场毫无悬念的赌局。

三、曙光,蒙特卡洛


MCTS算法图示,引自DeepMind发表在Nature上的论文。图中的四个步骤分别为a.选择,b.扩展, c.评估, d.反向传播。

早在1992年,就有围棋程序曾采用MCTS,但并没有起到显著效果。这也不难理解。单纯的随机模拟,对于围棋来说,是不可取的:一方面,一盘围棋的平均长度达200手,计算成本甚高;另一方面,纯随机模拟常常做出一些简单的误判。有个很邪恶的围棋术语,“一本道”。这个术语说的是,一步棋落下之后,接下来的变化只有唯一可能的分支,其它的分支都可以简单判定为不可行。最简单的例子,就是征子。追杀一方虽然需要十几个回合以后才能全歼对手,但技术上没有任何难度,即使初学者一般也不会出错。然而,一旦出错,全局形势立马是一百八十度的转弯。可想而知,纯随机模拟的程序多半还以为被追杀一方胜券在握,因为在绝大多数的模拟结果里,追杀一方早晚要犯一个错误。这样一来,模拟得到的胜率就不靠谱了。

征子。黑棋在过程中一步都不能错,方能全歼白棋,否则就是万劫不复。

MCTS初显神通,还是在2006年,它的一个改进版本,UCT被发明之后。UCT对MCTS的第一步,“选择”(参见上图),做出优化。优化的结果是,程序选择优先模拟那些已知更好的“下一步棋”,但也保留模拟尚未探索过的“下一步棋”的可能性。这在一定程度上治好了围棋程序的“选择困难症”。理论上来说,采用UCT算法的程序,只要给它足够长的时间,几乎一定能找到最优的那一步。

至于实践效果,我们说回John Tromp的赌局。2006-2010年间,采用UCT算法的MoGo, ManyFaces, CrazyStone, Zen等程序在两年内越过多道关卡,从k级水平一路攀升到业余有段水平。不过,John亦非坐以待毙。十五年过去,John从当年的业余1级长棋到业余2段,并且接近业余3段的水平。当年看上去几乎必然是一面倒的赌局,到了最后期限来临之时,居然变成了棋逢对手的决斗。2010年末,John以4-0横扫程序Many Faces of Go, 赢得1000美元的赌注。一年多以后,John与程序Zen再战,结果以1-3败北。对于John来说幸运的是,这第二次与程序的决斗,他根本就没有下注。

John Tromp (黑) - Zen (白) 片段。执白的Zen最终赢得本局,将比分改写为2-1.

同年,Zen在一盘受让四子的对局中战胜了世界冠军武宫正树九段。似乎计算机围棋超越人类的那个节点就在眼前。然而,毫无征兆地,围棋程序们陷入了瓶颈。MCTS的潜力似乎已被耗尽,而其它的研究成果,不过是细节上的涂涂改改,于大局无甚助益。2015年11月,连笑七段在让四子、五子的对局中战胜当年的冠军程序Dol Baram (亚军正是Zen), 直到让六子时才输给程序。赛后,连笑称,计算机程序想战胜职业棋手,还有很长的路要走。

2015年11月,除了一位提前知道真相、还挣扎在输棋的痛苦中的职业棋手,所有人还在梦中。

引文链接

“AlphaGo与人类的恩怨情仇” 全文系列:()()()()()()结束。

没有评论:

发表评论