陈经:从人机大战前两局推测AlphaGo算法的重大进展
来源:观察者网
2016-03-12 08:36
2016年3月10日人机大战第二局,AlphaGo执黑211手中盘胜李世石。对于不懂围棋的围观群众,这意味着机器以5:0获胜的前景确认,可能会转而关注人工智能进步对社会的影响。对棋迷特别是职业棋手来说,会更关注第二局中AlphaGo在围棋技艺上带来的震撼,这个震撼比第一局更大。
先用一段文学性的描述概括前两局:
在围棋这个令许多人沉醉的迷失大陆上,忽然半空中浮现了一个既令人恐惧,又令人兴奋的带着魔幻主义色彩的怪物。离得还远看不太清的时候,职业高手群体作为人类护法,把AlphaGo当作一个有趣的小妖怪,准备用自己明显更高的法力去吊打它。第一局过后,人们发现这小妖扛过了大法师的主动挑战,第102手趁法师没有防备忽然出手偷袭,获得了胜利。人们称赞这小妖法力可以啊,但并不认为它有多强大,而是认为大法师发挥不佳。第二局,人类大法师平心静气地开局,小妖更多地主动出招主导了棋局的进程。事实说明AlphaGo不是小妖,而是大魔王。它的着数与人类很不相同,下出了人们从未见过的次序与招数,但却自成体系。大魔王的着法并非天衣无缝,一次主动出击甚至被抓到了明显破绽,却靠着弥漫在全局的邪气维持着局面。后半盘,大魔王的威力开始显现出来,差距越拉越大,在人类的眼中终于完成了从小妖到魔王的形象转变。职业棋手们现在已经普遍悲观,认为整个大陆都将被魔王统治,只有柯洁、孟泰龄等少数人还想着进行最后的抵抗。还有一些企图抓住最后一根稻草,相信大魔王有“不会打劫”的死穴,盼望着最后三局出现奇迹。
下面用几个图介绍一下AlphaGo带有魔性的着法。
开局AlphaGo第13手脱先就让所有人大吃一惊。15手这么早刺一下,都是没人下过的招。虽然难以论定好坏,但AlphaGo从魔界过来的作派已经初露端倪了。
黑37是让所有职业高手都难以置信的创新招手。人类理论说,三路和四路是地势平衡线,四路尖冲三路常见。AlphaGo却五路尖冲四路,没有人敢想。而且这招并不是胡下,四周有配合,得到了聂老等布局高手的赞许。仔细品味,为什么三路四路的地势平衡线就是定死的?如果有配合,为什么平衡线不能上移到四路五路?白R4R5R6这个头非常硬,本来就是不应该去围地的形状,再加上黑S14扳白为了护住“四路大空”要应,等于黑先手护角。这几个理由加起来,地势线真的可能就上移了。
白80打入,黑81手却悠然地封住白棋联络自身。这实在是很难想到的方向,这么紧急的地方不去攻打入的那子,却到这里自补。但是细细品味,却会发现这是好招,是一种间接攻击。也许AlphaGo模拟了几百万个局面,认为有了81的自补,白就动不出什么东西。这无疑是一种非常高级的思路。
李世石白120手凶悍出手。黑棋121扳123连125淡定得不得了,白似乎获利极大。但是黑再127扳住,赫然发现黑这里围了不少地,而且整体厚了很多,122那里的最后一个毛病没有了,下面就轮到黑对中间白棋发起令人胆寒的魔性攻击了。
感性完了,我们还是回到技术性的探讨。从2015年10月AlphaGo与樊麾的对局来看,虽然AlphaGo正式比赛是5:0,但以高手的标准,五局中它的招数平平无奇,毫无魔性。是下得象人,比以前的程序强太多了,不会抽风。但并没有真正震慑到人,人们还发现了它不少明显的漏洞与不精确的地方,前面我写文章分析介绍了(http://www.guancha.cn/chenjing/2016_02_01_349900.shtml)。而且五局非正式对局樊麾也胜了2局。考虑到樊麾心理失衡表现大打折扣,可以认为这时单机版的AlphaGo和他正常的棋力差不多,分布式版本的高一些。谷歌论文也说了单机版AlphaGo的等级分和樊麾差不多,2900多分,差李世石600分。
2016年1月28日论文在《自然》上发表了,棋谱公布了,3月挑战李世石的计划也宣布了。在当天WeiqiTV立即推出的谈话节目中,刘星透露不久前樊麾来北京时喝大了,又因为保密协议不能说,只是反复说出大事了,要变天了。如果AlphaGo只是和樊麾差不多的实力,这只能说是人工智能界值得庆祝的大事,对围棋界却不是变天性质的大事。这还是个好事,帮围棋打响世界知名度。如果机器总是胜不了人类高手,这对围棋发展到全球是一个绝佳机会。这是孟泰龄等职业棋手看到的机会,也是我内心的期盼。由于樊麾加入了谷歌团队,他显然知道了更多的东西,知道了AlphaGo的实力突破。可以认为,在2015年12月左右,谷歌团队取得了显著的算法突破。
3月9日人机大战第一局开战前,就有一个谷歌工程师传出来的流言,说内部评估李世石胜率为0,AlphaGo三天就完成了一次进化,对上一个版本的胜率达到了100%!现在看来这很可能是真的。后来流言又变成,每三天完成一次进化,对上一个版本达到100%。这应该不成立。谷歌放出的内部消息意思应该是,取得了算法突破,搞了一次学习进化,AlphaGo用三天时间进化完成后,对胜樊麾的那个版本胜率100%。
所有围棋AI不断开发提升实力的过程中,都存在瓶颈。例如之前最强的程序Zen,2011年在KGS上就很厉害了,打到了5D。但之后三四年虽然不断调整代码开发,实力进展却很小。只有在最近引入了深度学习后,才再次突破站稳了7D。之前围棋AI的主要开发工作是写程序代码,怎么用代码写一个走子策略,写出蒙特卡洛搜索(MCTS)算法的代码,怎么优化代码,怎么加进一些代码消除bug。这种工作还是比较依赖人的具体代码工作的,主要是人在那动脑子想。主要框架定了以后,不断改进调试就到顶了,再想有所突破就难了。表现出来就是代码改了这里,那里就不好了,顾此失彼。想加进一些改进的思想,大的加不了,小的越来越琐碎,加了也不一定有大用。
那么AlphaGo的瓶颈是什么?从谷歌论文来看,与Zen等上一代程序很不相同。这里我们要再次描述一下AlphaGo的算法框架。
AlphaGo的核心程序代码有两部分。一部分是MCTS算法代码、快速走子策略中一些和围棋专业知识相关的代码。更重要的部分是策略网络、价值网络等几个多层神经网络中,那几百万个节点与更多联结边的“系数”。AlphaGo的开发者并不是从头开始的,两个并列第一作者David Silver和Aja Huang都是之前研究了围棋算法多年的,整个团队有约15-20人的业界顶级专家。但我相信,要让他们去调整MCTS代码,加一些代码去消除bug,去提升最终的程序表现实力,他们也很快就会工作很烦却进展不大,这是代码开发中常有的事。程序算法框架定下来了,从2015年10月到2016年3月,五个月时间作出重大改变基本不可能。
但是,那几百万几千万个神经网络中的“系数”却是很容易变动的。你可以随便去改那些系数,如果表现不好大不了回到原来的。要是找到了新办法,搞个三天时间的训练学习,大批大批地改系数,说不定就取得好的效果,再实践检验下就知道有没有用了。实践检验很简单,就是和没改系数之前的版本下,胜率大跃进,就成功了。这时团队的开发工作,就不是在那改代码了,而是想“新的训练方法”。当然这也不容易,按谷歌论文的说法,你得有一套训练的“流水线”。想把这个流水线建起来,那就是砸钱,要把各类专家都配齐了,还得有一堆高性能机器。
比如短时间暴力生成3000万个自我对局,这得多少高性能机子同时对下?还有“深度学习”,输入的是10万个甚至更多的棋局,然后用高性能机器训练出一个节点特别多的多层神经网络。还有“强化学习”,意思差不多如下。比如你要改进策略网络,就有一个初始的“策略网络”。策略网络的结构是不会变的,变的是上面的系数。然后你用什么方法变一下系数,就相当于变出了一个新的策略网络。然后让新旧两个网络对下,从结果看你刚才变的是好是坏,再决定继续怎么变。这么反复弄下去,就会弄出一个对旧网络胜率很高的,新的策略网络。总之就是让机器self-play,左右互搏,看结果来变系数。这都是需要一堆高性能机器一起做的,不然根本没有时间完成训练。
但是对谷歌这样有实力的公司,“这都不是事”。一旦把流水线建起来了,那个爽就没法说了。现在整个团队的开发工作简直进入了另一个境界。不是去改代码了。改来改去调bug,谁知道进度怎么样,这就是走入死路了。主要开发工作就是去高层次地想,还有什么新的训练方法?感觉靠谱就去试,流水线一开,成千上万台高性能机器在那暴力运算,self-play热火朝天。一计不成再生二计,盘算的都是类似于上帝的事,怎么让一堆机器帮你办底层的事,团队核心就负责想大招。
当然这流水线研发也会有瓶颈。谷歌论文中就说了,他们用KGS的高段对局者的10万局棋谱,深度学习训练出了一个“初始策略网络”SL,然后又用“强化学习”对着它不断“强化”,最后出了一个“强化策略网络”RL。RL和SL对下,胜率高达80%。但是在整个AlphaGo中,把SL替换成RL,和别人下,等级分表现反而更差!原因论文上也有提及,可能是RL过于强调对SL的胜率,训练得钻牛角尖了,对别人反而不如SL好,因为SL是很多人的棋招训练出来的,各种情况都见识过。但是RL也不是没有用处,用RL自己下,可以生成3000万个高质量棋局,用来训练价值网络效果好。
我当时就注意到这个了,所以认为AlphaGo可能水平到了瓶颈了,再怎么暴力堆数据,堆更多棋局,可能就象RL不如SL一样,提高不了水平。也因为对整个程序训练机制理解不够深,在仔细看棋谱后对AlphaGo的算法缺陷印象更深,从而作出了“AlphaGo还不如人类顶尖高手,但有胜机”的判断。
但我们回过头看,这个瓶颈其实并不严重,比起Zen这类程序代码调整死去活来没有进步的境地,AlphaGo就算有瓶颈,情况也好多了。谷歌开发者都是业界顶级牛人,肯定能想出一些新训练方法。比如想个妙招,改用不同的“强化学习”训练方法,加点小变化。这回从SL强化学习完了,学出个RL-Plus。然后拿RL-Plus换掉SL,变出个新版AlphaGo一试,哇,等级分高了200,大招见效了!又赶紧用RL-Plus在一堆机器对下,生成3000万个质量更高的棋局,用它们深度学习,训练出了新的价值网络V-PLus。然后什么都不变,新版的RL-Plus + V-Plus,对旧版的RL+V,对战400局,全胜!这下就搞定了,几个工程师碰杯庆祝,等级分一算,知道李世石机会为0了。
这个流水线非常厉害。谷歌甚至放出了激动人心的消息,不再用人类棋局训练策略网络!也就是说,让AlphaGo从零知识开始,从胡乱扔子棋力最差的策略网络开始,不断刷流水线,通过强化学习、self-play、深度学习更新几个神经网络。这样肯定会比较慢,说不定要几个月时间才训练好。但是一旦训练好了,这就是真正没有和人学过任何东西,全靠自己对下几十亿局训练出来的,没有受过人“污染”的机器智能!这个纯种AlphaGo可能出手就和人完全不一样,也许一开始就下的是天元、五五之类的怪招,直到中后盘才和人类棋手以及现在的AlphaGo走得差不多。这种自己在山洞里练习出来的东西,会不会比人强,甚至比现在这个学了人走法的AlphaGo强,会是特别有意思的事。不懂围棋的人可能很难理解,为什么这特别有意思,但真的是很浪漫很狂野的一个事,非常激动人心。
谷歌论文出来以后,专家的解读也出来了,我也仔细读了。一开始以为,都是以前见过的东西,就是各个环节都做得不错,下本钱加在一起细化优化了,所以弄出一个棋力大跃进,战胜了人类低水平职业棋手。但再要进步,似乎得发明“新技术”,再来一个创新,才能棋力进步追上顶级职业棋手过招。
然而这是一个错觉。就MCTS,策略网络,价值网络等等技术环节而言,别人都做过。但是搞出工业级的流水线,没有人做过!流水线本身才是最大的创新!这个流水线诞生以后,潜力无穷,极易取得突破。开发者们一定玩得开心死了。
我大约想明白了谷歌围棋算法的秘密,最厉害的就是这个神经网络训练的流水线。技术不是新的,但是量变到质变,暴力堆数据的各个环节打通以后,就产生了无穷的威力,一举在短时间内破解了围棋这个人工智能的核心问题。
作者简介:笔名陈经,香港科技大学计算机科学硕士,中国科学技术大学科技与战略风云学会研究员,棋力新浪围棋6D。21世纪初开始有独特原创性的经济研究。2003年的《经济版图中的发展中国家》预言中国将不断产业升级,挑战发达国家。2006年著有《中国的“官办经济”》。
致谢:感谢中国科学技术大学科技与战略风云学会会长袁岚峰博士(@中科大胡不归 )与其他会员的宝贵意见。
讨论:袁岚峰认为,DeepMind调整系数的办法可能是遗传算法。即先产生大量的初代种群,然后把它们组合起来并加上随机变异产生下一代种群,通过互相对弈选择优胜者,再进行下一代组合、变异、选择,如此循环。这是当代科学研究中全局搜索的常用算法。
本文系观察者网独家稿件,文章内容纯属作者个人观点,不代表平台观点,未经授权,不得转载,否则将追究法律责任。关注观察者网微信guanchacn,每日阅读趣味文章。