文 观察者网专栏作者 陈经
► 风云学会副会长,《中国的官办经济》
早在2016年3月AlphaGo挑战围棋成功之后,就传出Deepmind下一步计划是在星际争霸上打败人类。
人工智能开发者研究算法很喜欢用计算机游戏。一是研究目标清楚,游戏目标定义得很完善,科研有时最重要的是提出问题。二是最近流行的深度学习需要极多的训练样本,人类的线上高水平比赛很多能够提供足够的样本。三是问题足够难,进展如何通过人机对战、线上测试一清二楚,而不是研究者自说自话。
围棋是“完全信息博弈”(局面摆明,理论上有确定结论)游戏里最复杂的一个,又很有艺术性。在围棋上战胜人类,就实现了Deepmind负责人哈萨比斯的说法,机器自我对弈不断自我学习的方法可以解决一切基于推理的棋类游戏。
这个自学习的框架,能否在“非完全信息博弈”上打败人类,令人非常有兴趣,同时又极有学术价值。星际争霸是一个很合适的测试对象。星际争霸最常见的是两个玩家对战,各自从一个基地开始发展,没有兵力在附近就看不见对方的动作,对方在干什么自己不知道,因此是“非完全信息博弈”。
1998年暴雪公司推出的星际争霸,经过数次升级到“母巢之战”版本,终于成为一款平衡性极好的即时战略游戏,人族、神族、虫族三家兵种与科技特色极为鲜明。在不少玩家的心中,星际争霸具有独特的地位,对战起来战略非常复杂,而且富于变化经常有创新。
韩国人在曹熏铉与李昌镐称霸世界棋坛后掀起了围棋热潮,会下围棋的人比例极高。同样,韩国人也非常热爱星际争霸,将它变成了一项“国技”,创立了职业联赛,出现了许多高水平的职业选手,在WCG(世界电子竞技大赛)上多年来一直是垄断地位,竞技水平比其它国家选手高出一大截。
韩国选手发明了很多新战术,如“拖把流”、“宇宙天空流”、“神教流”,不断将星际争霸游戏水平推向新的高峰。玩家们普遍认为,历史最强选手应该是人称“教主”的人族选手李永浩(网名Flash)。因为Flash的统治力,玩家们认为虽然星际争霸已经很平衡,但在顶尖水平人族应该稍有优势,神族最吃亏。
星际争霸历史最强选手,最终兵器、教主Flash,职业生涯胜率唯一超过70%(图片来源:见水印)
星际争霸有个很大的问题,操作实在是太复杂。除了复杂的对战策略,职业选手们还得有象抽风一样的手速,APM(每分钟操作)经常上400。对战双方一边要采矿挖气开分基地发展经济、科技、兵工厂,还得去多线作战,作战时微操很重要。
虫族的“拖把流”就是说前方打得再激烈,还得抽空在后方不断增补农民挖矿发展,这样虫族利用出兵快兵力前仆后继的优势,弥补了单兵战力的不足,“补农”做的不好的对手后期就败下阵来。
这样发展下去,身体反应的对抗越来越激烈。韩国职业选手基本都非常年轻,手速反应跟不上就被淘汰,而且有可能产生职业病。开发商暴雪公司2010年推出了操作简单一些的星际争霸2,2016年韩国星际争霸1联赛停办,可能都与此有关。
能够说明星际争霸复杂性的,除了多线操作,还有“侦察”。有一定水平的玩家都会在很早就从本方基地派出一个农民去探路寻找对方基地(虫族还会让漂浮的房子去碰运气),跑到对方基地侦察对方的发展动向。如果发展方向被针对了,失败可能就非常大了。
例如对方在发展空中力量,自己却没有作好防空准备;或者对方放弃经济短期堆积兵力猛扑过来,自己却农民过多兵力不足防御工事不够,钱多还被打死。侦察经常有运气因素,如猜错探路方向,很长时间才找到对方基地,反应时间不足吃了亏。所以即使强如教主,胜率也只有70%。
通过以上描述,我们能感觉到星际争霸从AI研发角度看,是一个比围棋复杂得多的游戏。围棋就是去推理出胜率高的选点,而星际争霸要决定很多的行动策略,科技与经济发展方向、侦察之后针锋相对、战斗的方向与时机、作战单元的微操。
例如高水平选手都会hit and run(打了就跑)的骚扰战术,甚至上升到战略层面,如人族的雷车提速骚扰,如何应对很烦人。除了“信息不完全”这个特性,星际争霸的博弈决策种类也特别多。
而各类决策的影响也长短不一,有的决策要过很长时间才能体现重要性,水平不高的甚至看不懂。同时,与围棋AI相比,星际争霸的AI具有更高的实用价值,如果开发成功,军事指挥等决策事务引入人工智能就是很快的事了。
星际争霸职业解说黄旭东在微博上无礼回应古力,认为星际争霸对电脑太难
正因为如此,星际争霸职业选手对AlphaGo征服围棋后转向星际并不服气,职业解说黄旭东在2016年3月与古力九段发生争执。围棋的推理深度极深,电脑算法能解决围棋非常令人震惊了。
特别是AlphaGo取得突破后短短一年多就迅速战胜李世石、柯洁等所有人类最顶尖选手,这个发展速度让人印象深刻。AlphaGo的算法原理能不能用在星际争霸上让AI的竞技能力取得突破,并不容易回答。
2017年8月10日,Deepmind与暴雪公布了星际争霸2的AI开发接口,合作发了论文《星际争霸2:对强化学习新的挑战》,对这个问题作出了初步的探索。可以看出来,星际争霸的复杂度可能超过了Deepmind的想象,他们的进展并不太大。
这也部分揭示了,Deepmind发明的“让机器自己玩游戏不断进步”的流水线开发方法存在一定局限性。同时,这并不是说人工智能就对星际争霸没有办法了,更厉害的学习框架也许可以开发出来,Deepmind与暴雪为此准备了完善的研发环境,意义很大。
Deepmind让AlphaGo不断自我对弈提高棋力,既不去主动写代码告诉机器怎么下棋,也不去干预机器的自我学习过程。主要的开发就是设计好各类机器学习的过程,找到新的训练方法提升效率,这是一个很高明的选择。
AlphaGo算法负责人席尔瓦说,人类棋谱的作用,就是提供一个初始的棋力,之后就再没有人类棋谱输入了,AlphaGo学习自己的棋谱提升棋力。而腾讯的绝艺开发方法不太一样,具备了很高棋力以后积极地与顶尖棋手不断实战测试,发现问题后针对棋谱改代码调试升级。
绝艺的开发方法多少有些急功近利,近期显得无法突破瓶颈,在2017年8月16、17日的首届中信证券杯智能围棋赛中先后负于台湾的CGI与日本的DeepZenGo,出乎预料地连决赛都没有进。
绝艺的失利有偶然性,CGI与DeepZenGo也不是太稳定,夺冠的DeepZenGo预赛中输给了绝艺。这说明高水平围棋AI的开发并不简单,容易进入瓶颈,棋界都在等AlphaGo的新论文公布。
因为这个思想,Deepmind坚持让机器自我学习不断打星际争霸去提升实力,认为这种方法潜力更大。主动去编程让AI具备相当的实力,这样前期进展快,但提升潜力不大。机器的学习有两种,一种是从0知识开始,一种是参考人类的比赛录像。这两种办法,Deepmind都在星际争霸2上进行了实践,那么结果如何?
从0知识开始让AI自我学习是Deepmind的拿手好戏。在开发AlphaGo之前,Deepmind就有一篇2015年的《自然》文章《Human-level control through deep reinforcement learning》,描述如何在“打砖块”等Atari开发的经典小游戏中,从0知识开始自我学习达到超过人类的游戏水平。
开发人员负责给AI定好神经网络结构,AI通过海量试玩,分析游戏结果(如分数)改变神经网络系数提高分数回报。可以猜测,Deepmind希望用海量的自我对战,引导星际争霸AI的神经网络结构去自己发展出越来越复杂的战略与战术,甚至与人类玩家抗衡。
Deepmind也这样对星际争霸2建立了几种神经网络架构,一种训练是用比赛胜负结果作为“回报”去调整网络系数,另一种是用比赛过程中报告的分数(如钱数、农民数、兵的个数)作为回报。训练的对手是暴雪内置的AI,这种AI是用主动编程的方法做出来的,前期如何发展,什么时候对玩家发动一波进攻都是写好的。它的目的是让玩家学习操作,玩得开心,不是为了搞出厉害的AI展示算法能力。
暴雪的内置AI有十个级别,最厉害的三个是作弊的,AI能得到额外的资源和视野,Deepmind用的是最容易的那个级别。比赛是人族对人族,如果30分钟没有打完,就是和局。
结果是令人崩溃的!Deepmind训练出来的神经网络没有一局能打胜,甚至没有一个能打得象回事。表现“最好”的一种神经网络,它“学会”了将人族建筑飘到空中游动躲避攻击(但就没法搞生产了),然后生存大于30分钟拖成和局。如果是用过程中的分数作为训练目标(它和比赛胜负是有关联的),这些神经网络们不约而同收敛到了一个策略:让农民拼命采矿,其它什么也不干,对手来了就任人宰杀。
暴雪的内置AI是很差的,有些玩家声称能一家打六七个AI,因为AI的策略太简单。这个结果等于是说,Deepmind并没有做出有操作意义的AI,而是将以前机器从0知识开始不断试玩Atari小游戏的成功方法跑了一下。
结论是,星际争霸远比小游戏复杂,过去的神经网络结构和训练方法是远远不够的。由于外界对Deepmind的预期很高,这次它报告的结果可能会让人意想不到,虽然Deepmind自己说这不令人意外。
为了探索神经网络自学习框架对星际争霸的作用,Deepmind还设计了七个迷你游戏,等于是相当于Atari小游戏难度的子任务。这七个迷你游戏跑出了一些有意义的结果。
图为四个迷你游戏。第一个是“移动到光标处”,玩家要反复操作一个人族士兵到达指定地点,成功一次加1分,不停做追求高分。第二个是不断操作两个士兵收集散落的水晶。第三个是持续生产水晶矿和气矿。
第四个是生产士兵,玩家需要先造出兵营才能造兵。可以看出,这都是很简单的生产型任务。还有三个战斗型小游戏,分别是3个人族士兵打虫族小狗、9个人族士兵打4只虫族蟑螂、人族士兵打虫族小狗和自爆虫,虫族兵种会不断冒出来,打死的越多分越高。对这些小任务,Deepmind让一个业余玩家和一个职业选手来多次玩,获得分数统计用于比较。
Deepmind从0知识开始训练AI玩这些小游戏,最后取得的能力是:“移动到光标处”AI做得比职业玩家好,因为机器操作快;“收集散落水晶”和业余玩家差不多;“打小狗”比业余玩家稍好;“打蟑螂”比业余玩家好一些,弱于职业玩家;“打小狗和自爆虫”比业余玩家差不少。
可以看出,这些小游戏AI算是会玩,但从0知识开始训练,基本就是业余水平。令人震惊的是“采矿采气”这种简单任务,AI比业余选手还要差很多,而“生产士兵”AI就等于不会,造不出几个兵。
这可能是因为,想多采矿采气,需要一点“策略”,花一点钱生产农民(职业的还会让农民分散开缩短回基地距离提高开采效率),这AI没人指点就不太会。而“生产士兵”需要的策略就更多,先要多生产农民采矿,然后要造出兵营,还要多个兵营,“步骤”这么多,AI完全学不会。
这说明,从0知识开始训练,改变神经网络结构玩游戏这个方法,只能解决有限的一些小游戏。对星际争霸这种复杂的策略游戏,纯自学连简单任务都做不好,更不要说和人对打,连最弱的内置AI也打不过。
星际争霸操作类型很多,单一动作与最终回报因果关系不明,多种操作为了全局战略服务,机器从0开始自我学习很可能是走不通的,领会不到游戏的精要之处。
AlphaGo之前有一个很有意思的计划,从0知识开始自我学习出一个不受人类棋谱“污染”的围棋AI,如果能训练出来,这个AI会如何下棋非常有意思。
但可以猜测这个计划不成功,五月与柯洁的人机大战中没有提到。这种AI从随机乱下开始训练,可能陷入了某种瓶颈中出不来了,就如“生产士兵”小游戏一样,没有办法达到较高水平。
人类高手的棋谱是有意义的,每一招即使不是最佳选择也很有逻辑,让AlphaGo的行棋选择有了逻辑基础,在这个基础上AlphaGo再深入地判断几个选择的好坏。
如果没有人类提供初始基础,AlphaGo自我训练很可能“Garbage in, Garbage out”无法持续提升。就象有些小孩很聪明也很努力学习,但如果没有明师指点学习方向,也不知道如何发挥聪明才智。
Deepmind这次也尝试了向人类学习如何打星际。AlphaGo有两个神经网络,分别是用于预测棋手选择的“策略网络”,以及预测局面胜负的“价值网络”。Deepmind也用人类星际争霸2的对战回放(replay)训练了两个网络,一个是“策略网络”用来学习在当前局面下人会怎么操作,一个“价值网络”用来预测当前谁胜谁负。
理论上来说,可以用这两个网络让AI来打星际,选择一个获胜概率大的操作来执行。用这种办法,Deepmind在“生产士兵”小游戏上有了突破,比之前的自学习方法多生产了不少人族士兵(应该还是不如人类玩家)。用“策略网络”与暴雪内置AI对打,也比之前的表现“好多了”。
之前根本就不能叫对打,最多只是自己的建筑飘起来逃跑,而向人类选手学习操作之后,AI能以较高的概率造出战斗部队了(这需要多个步骤,对AI并不简单,也有一定概率造不出来),甚至平均能造出七八个兵(在被消灭之前)。总的来说,神经网络学习人类操作以后,AI可以有一定机会摸到“造兵反抗”的正确方向,好过之前的“束手无策”或者“逃跑主义”,但也不太像是有主意的样子。
不管是从0开始自己玩学习,还是向人类选手学习操作,Deepmind的星际争霸AI最大的麻烦是,不知道自己要干什么。AlphaGo知道自己要优化每一步的胜率,它明确知道自己要干什么,一直这么做就能击败最强的人类选手。
而星际争霸不是这样,开局AI需要多生产矿,然后要改变目标去造兵营,同时还有一堆不同的事要去做,这些“小目标”和最终获胜的“大目标”是什么关系,AI是很糊涂的。
虽然Deepmind取得的进展令人震惊的小,但要看到,它还是坚持机器学习的战略方向,坚决不用人去写代码解决问题。如果把代码写死,很容易就能写出不错的采矿造兵策略,比暴雪的内置AI强也不难。但这不是Deepmind的思想精髓,而是过去的老办法。Deepmind认为,要让机器具备学习能力,可以给它数据,不停找各种办法教它“学习”,但不能直接下命令让机器怎么做。
为此,Deepmind与暴雪公布了几十万局人类选手在战网的对战录像,并研发了一个对AI研发者很方便的开发环境SC2LE。全球研发者都可以用这些资源去研究星际争霸2的AI了,比过去要方便多了。这个意义不可小视,一个好的研发环境往往能促使大批好的研发成果出来,因为会有更多研发者加入进来(之前因为麻烦做不了)。
Deepmind挑战星际争霸的进展就是这些。对于人类选手的拥护者,这是极好的消息,Deepmind过去成功的机器学习方法,这次看来碰到了很厚的墙,短时间内应该不可能有星际争霸AI象AlphaGo那样自我对练后忽然跑出来天下无敌。
Deepmind应该是感觉到这个项目短期无望,所以将平台开放,希望全球研发者一起来想办法。而之前AlphaGo看到突破的希望后,Deepmind扩大研发团队加强保密,搞了一个哄动全球的大新闻。
可以预计,会有不少星际争霸的机器学习研究进展出来。如更多的迷你游戏类型被尝试,改善神经网络结构向人类学习操作后抵抗时间更长。但这类“小进展”一段时间内只会让人类玩家会心一笑,对AI的能力给个很低评价。
如果能通过机器学习的办法打败暴雪的内置AI,对研发者而言都会是极大的进展。真正让业界震动的革命性算法进步不可预期,也许能出来,也许长期出不来,但一定不是现在这些方法的拼凑组合。
其实Deepmind并不是最早开始挑战星际争霸的研究机构,这次提供的研发平台也不是最早的。2009年就有业余开发者做出了BWAPI,是对星际争霸1的。用这个接口,人们就可以开发AI来打星际争霸了。
之前是没有办法的,开发者不太可能直接读取屏幕像素去分析各种单元,再操作鼠标键盘点击屏幕,会被界面开发烦死。有了BWAPI,各类星际争霸AI迅速出来不少。
加拿大纽芬兰纪念大学计算机科学系副教授 Dave Churchill(图片来源于网络)
从2010年开始,加拿大纽芬兰纪念大学计算机科学系副教授Dave Churchill等人组织了AIIDE(人工智能与交互式数字娱乐年度会议)星际争霸比赛,这是每年最重要的星际争霸AI赛事之一,取得好名次的AI会与人类选手进行对抗。
这些AI的水平肯定超过暴雪的内置AI,如果说与人类选手对战,目前还得靠它们,Deepmind的AI看来一时指望不上。但是这些AI基本是用主动编程实现对战策略,有点象是AlphaGo出现之前围棋AI的格局。
虫族小狗受到坦克攻击时的极限操作:其余小狗全部跳开
之前有一个热门视频,AI控制的虫族100条小狗咬爆了人族的20辆坦克。人类选手绝对不可能实现这个操控,它需要一只小狗受到坦克攻击的时候,边上的小狗全部跳开,免得被炮弹作用范围内的溅射杀死,这需要的手速超过了人类极限。
从理论上说,AI在微操上有很大优势。如果双方拉开阵势按电脑预设的方式对打,电脑的微操优势将让人类难于应付。但是这多少有些“欺负人”,有点象编程钻游戏规则的空子。
可以预计,真正的星际争霸AI学术研究,会对AI的APM作出限制,免得研究走入死胡同。Deepmind就设定AI的APM不超过180。
但即使AI有微操优势,也还是打不过星际争霸人类选手。电脑的经济与科技发展“运营”可以很精准一点时间都不浪费,发展出足够兵力,就出门与人类选手摆阵对战,这样按“套路”打电脑可能有优势。
但人类选手根本不给电脑正面摆阵战斗的机会,而是各种花招往上招呼。人类可以早期突袭,可以派兵骚扰杀农民打了就跑,可以空投对方基地捣乱,可以派隐形兵力让对方挨打了还不知道发生了什么。
这样不断给对方制造压力,电脑就显得无力应对了,因为要应对这些骚扰需要写非常多的程序,很快就超出了编程人员的能力。实战中电脑就会傻傻的吃了亏也不知道,根本无法实现积攒兵力大规模团战的设想。
而且对战非常需要侦察,人类很容易分析出电脑的发展方向作出针对性安排。电脑想要侦察人类的动向却非常复杂,很需要随机应变,显性地写代码几乎不可能做到。
一旦人类在侦察上占优,就可以抓住电脑的弱点作出针对性的骚扰,电脑没有防空人类就派空军,没有防隐形就派隐形兵种去打,电脑几乎难以应对。可以预计,想让电脑拥有“即时反应”的应变能力,如果是显性地编程去做,涉及的代码量是海量的,开发难度极大。而且即使勉强开发出来了,也很快就会被高水平的人类对手发现漏洞。
2010年AIIDE首届AI星际争霸赛,加州大学伯克利分校的Overmind在四轮比赛后夺冠,之后与参加过WCG的人类选手Oriol进行了对战,AI太弱完全不是对手。
2015年AIIDE,前三名的AI与俄罗斯神族高手Djem5对战,AI仍然显得很愚蠢。虽然AI一次也没有获胜,AIIDE坚持请准职业水平的高手来测试,正如UEC杯计算机围棋赛,获胜的围棋AI有机会接受职业棋手指导(在让子情况下有机会获胜,但星际争霸无法让子)。
目前星际争霸的AI有机会战胜D级甚至C级的人类玩家,但问题是,人类玩家能迅速改变策略找到AI的漏洞。对于如何战胜人类顶级玩家,编程实现AI策略的开发者目前并没有方向。
丰富的策略与随机应变正是星际争霸的游戏精髓,人类用编程的办法应该没有出路,正如围棋AI用代码编程实现高手思想不可能成功。即使Deepmind目前的进展很小,从根本上来说,还是得让机器自我学习发展出随机应变的能力。
因此,星际争霸AI开发的两条路都还没有看到战胜人类的希望。机器自我学习这条路感觉机会要大一些,但从Deepmind的报告能看出,这条路刚起步就困难重重,无法完成一些最基本的任务。
机器学习挑战星际争霸的难度,应该是超过业界的想象了,也许接近强人工智能的难度。如果机器能打好星际争霸,很多日常决策事务都可以战胜人类了,人工智能的时代可能就真来了。