2016年3月13日,人机大战第四局李世石执白180手中盘胜AlphaGo。说这一胜是人类历史上最重要的一胜也不为过,就不多说了。从围棋技术与算法上来说,最重要的意义是,我们终于看到了一张AlphaGo的败局谱,明确知道AlphaGo有重大bug,前三局过后看似威力无比的机器,发起疯狗症竟然会走出那么可笑的招法。
现在终于知道,为什么谷歌只公布了与樊麾的五盘正式对局的棋谱,却不公布非正式对局里二盘败局的棋谱。哪怕一盘败局的全谱泄露出来,人类稍作调查就会知道如何对付它。李世石接到谷歌的邀请,只考虑3分钟没提什么条件就应战了。从人类与机器斗争的角度看,这真不折不扣是《三体》中描述的有碍于人类生存的“傲慢”。不夸张地说,只要李世石要求谷歌公布一张AlphaGo的败局谱,这次人机大战的胜利者就非常可能改写。但也不能怪李世石,估计所有职业棋手都想不到,这是人类的共性。我们要感谢李世石,终于用生命一般的抗争在第四局逼出了真相。
1996年国际象棋第一次人机大战,卡斯帕罗夫就谨慎得多。他提出先由助手和IBM的机器下测试棋,正式比赛时卡斯帕罗夫以4:2获胜。这是因为国际象棋程序当时已经发展多年,显示了不低的实力。而围棋程序也是发展了多年,虽然取得了几次重大进步,人的感觉仍然是职业棋手让五六子的水平。樊麾的失利是一个重要信 号,但从人类情绪来看,越是不懂围棋技术的人越敢预测机器的胜利。棋迷与职业棋手更了解自己这边的“强大实力”,更了解围棋作为一个算法问题的复杂度,傲慢没有减少。
第四局李世石获胜的关键,赛前我就在上一篇文章中作出了非常接近实战进程的预测:开放式接触战,利用机器“不喜欢打劫”的特性,让机器犯昏。
李世石这第78手在人类看来,其实还是有漏洞的,仔细拆解会发现这并不是最佳着手,黑棋应对了白不行。但是这招非常神奇地引发了机器的bug。为什么会有bug,难有定论,我认为最可能是AlphaGo的价值网络出问题了(观察者注:关于AlphaGo的价值网络,田渊栋的这篇《AlphaGo的分析》做了很好的科普,作者为前谷歌工程师,Facebook智能围棋 darkforest 的负责人和第一作者)。
如图至第82手。80和82都是必然的,所以叫78为神之一手。其实AlphaGo这时走B位,据职业棋手分析,空里没有什么棋。如果白M13扑,黑可以 提掉78一子,白L13再打吃,黑粘在78位。下面白吃不掉63这个子。对人来说变化并不复杂。观战棋手猜测李世石预想的变化图是这样的:
如果AlphaGo走1位,那白只好2位先手接回一子,再4位先手切断,在外面做出一片形势,局势还能维持。
而AlphaGo却走了实战的83手,后面一连串招法都特别糊涂的样。所以犯错是从83手开始的。Deepmind负责人哈萨比斯说从79到85手,机器都以为自己胜率高达70%,到第87手才发现不对劲,一步棋评分就急剧下降了。降到多少没有说,但肯定是个很低的分,所以才后面一连串搞笑的棋。这些搞笑的棋本身到是不难解释,为了偷得可怜的一点胜率,它觉得别的招都不如你打吃看不见。Zen之类的MCTS程序落后了乱下很常见。我们要解释,为什么AlphaGo下了错误的83。
这个局面特别复杂,把整个棋盘中间都卷进去了,可以说根本不是地块划分的问题。决定性因素就是怎么出棋,出多大的棋,出劫的话怎么造对自己有利的劫。从AlphaGo的算法来看,它会从当前这个局面进行搜索展开,对叶子节点给出判断。一半是靠价值网络,一半是靠“快速走子策略”走到终局。
价值网络的意思是,它静态地看整个盘面,用一个多层的神经网络直接算,就报告这个局面谁会胜。虽然它能“深度学习”到很多隐藏的概念,我们很难想象,在一个火药桶一样的盘面上,一个静态的不搜索的神经网络居然可以判断清楚最终的胜负。这种复杂局面,我断定价值网络的判断误差是极大的。也许价值网络在各种叶子节点粗粗地一看,黑棋在中间以多打少似乎应该是形势一片大好。这应该不难理解,无论谷歌怎么拿几亿个局面训练价值网络,我也不相信它能判断清楚。
那么AlphaGo在叶子节点还有一半的机会,就是“快速走子”你一招我一招不停直到终局。这个快速走子策略的实力还不错,速度比策略网络快1000倍的情况下,单只靠这个策略就有KGS的3D实力,做得其实很好了。但我们再想想,这么复杂的盘面,两个KGS的3D在那下到终局,你信得过它们的模拟质量?黑死还是白死估计就是随机的了。如果让两个真实的人类3D在这个局面下,黑好白好确实可能等于扔硬币。
如果“快速走子终局”给的结果是随机,基本就是价值网络在那主导判断了。它要是有系统性的错误偏向,误以为黑形势一片大好,那可能一大堆叶子节点都有类似错误,因为盘面很相似。所以综合起来,AlphaGo的MCTS模块,让价值网络在那高兴,下了83和85还是继续高兴,胜率还是70%。终于在白下了86,黑87后,价值网络发生了“跳变”,这里出现了棋块特征的本质变化,一大片类似叶子节点的价值网络判断都倒转过来,于是只一手,胜率就从70%跳到30%之类的悲惨数字了。
这是我的猜测,只能尽量地往合理上靠,最终如何希望Deepmind能给出分析。但是显然,复杂的对杀盘面会对价值网络造成严重困扰,这应该是AlphaGo体系架构中一个不太好消除的命门。同时复杂的对杀盘面,又让“快速走子策略”模仿精度下降。要是两个3D在那下和平棋终局,你占10目我占9目,错进错出最后一平均是可能把局面好坏概率性模拟清楚。但要是50-50%机会的大对杀,就和其它地方无关了,模拟到最后也提供不了什么有效信息。
AlphaGo搜索中的两个武器都失灵了,就只有依靠“策略网络”提供的各个候选点的概率了。同样的原因,这个策略网络只是一个静态评估,复杂盘面各处头绪很多,各种要点多得是,看上去的好点到处都是。我不相信策略网络就那么凑巧对真正的好点给出高的概率。
可以非常合理的认为,对于复杂的、头绪很多的对杀盘面,AlphaGo所有的搜索武器都会失灵,容易做出错误选择!三大搜索武器“策略网络”、“价值网络”、“快速走子终局数子”,全都失灵!(观察者注:关于AlphaGo三大利器,田渊栋的这篇《AlphaGo的分析》做了很好的科普,作者为前谷歌工程师,Facebook智能围棋 darkforest 的负责人和第一作者)
都失灵了,不管你怎么调参数拼凑一个MCTS架构,最后也还是失灵。这就是AlphaGo的命门!
让我们人类开心的是,这并不是很难实现的!我和Zen下过,水平不够怎么也下不过它。要么局部被它杀死,要么圈地大局观搞不过。但是下多了,慢慢也琢磨出来了办法。就不要怕它,这里开一片头绪,那里开一片,留着不动。然后各种头绪慢慢凑一起,这里的选择会影响那里。这种情况下Zen就昏了,它的搜索武器其实比AlphaGo更差,更是全都失灵了。我虽然也昏,但就死盯着某一个“阴谋”,设计一条路线图就够了,不去搜索那么多乱七八糟的。最后哈哈,Zen上当了,我阴谋得逞,吃了一大片终于赢了。其实我的水平真的远不如Zen,各个局面手段和大局明显不如。
那么对李世石这样的职业高手来说,复杂盘面更不是个事了。职业高手能理清楚复杂盘面的推理逻辑,用清楚的变化图给出杀招。这正是体现大高手水平的地方。
因此我大胆推测,AlphaGo其实没有那么可怕。所有MCTS为基础的程序都有的大漏洞,它一样有,而且从算法角度没有什么好办法解决!这是算法原理决定的,不是写程序代码错了几行的小bug。
如果职业高手们了解了AlphaGo的漏洞,就不要客气搞什么棋理圈地,直接就上去跟它杀!但不要在局部乱杀,不是说“在此决一胜负”,如李世石第一局开始的杀法,不对。要这里留点味道,那里留些头绪,最后这些乱子凑到一起去,一定把AlphaGo弄昏头。(观察者小编:这里一点,那里一丝,留有余味。人类的暧昧啊,阿尔法狗暂时还学不会)
因此,除了“不喜欢打劫”以外,AlphaGo还不喜欢复杂的盘面。所以前三局中它表现得特别喜欢定型,有手段就使出来,减少头绪。这是它的搜索特性决定的。
分析清楚以后就可以肯定,AlphaGo的漏洞不小。开始人类不了解它,看它下得象模象样,还时不时有好招,被它吓到了,没有找到它的命门。它是有几招绝活玩得不错,封闭局面算得不错,圈地运动搞得不错,几百万次算到终局去人不可能玩得过。选点也很靠谱,算得快算得准。在它擅长的领域和它打,当然就不是对手,哪怕是人类最高水平的也不行。但复杂盘面是人类的天生优势,这不是MCTS那几招搞得定的,需要人类高手制造头绪归纳头绪的逻辑能力。
AlphaGo的缺陷被测试出来以后,人类高手将可能对机器取得压倒性的胜利。当然人类高手需要改变下法,不要和自己人下那样讲棋理数着目下。碰到机器就要搅,越复杂越好。不是一处变化多手数多那种复杂,而是搅出的头绪越多越好。
这还没有提到打劫的能力,这更是人类高手胜过机器的地方。机器可以用控制流避开劫争,但这终究不是办法。如果人想通了,自己不要虚,大胆引入劫争分支,机器总是避劫原理上就不合于棋道。当然这个分析起来更复杂。
综上所述,如果高水平围棋程序还是基于MCTS架构的,都会有难以解决的大缺陷。我对人类高手一段时间内压制机器充满信心!