真正的头号玩家——游戏AI


从雅达利游戏机到如今的手游,电子游戏已经走过了数十年的发展史,从青少年的“毒品”变成了社会主流的新娱乐。去年以来,《绝地求生》席卷了国内,似乎人人口中都念叨着“吃鸡”两个字。此后相关的手游也层出不穷,但玩家们逐渐发现在低段位下,似乎一局中大部分都是AI机器人。它们枪法差反应迟钝,看起来就是给玩家“送快递”的。但这些或者处处阻挠玩家,或者与玩家并肩作战而无所不在的AI,恰恰是游戏中真正的“头号玩家”。它们的发展伴随机器学习的进步,是人工智能在虚拟世界中的直接应用。如果把棋类也看做是游戏,那么前两年出现的AlphaGo则代表了游戏AI在未来的无限可能。

在早期的游戏中,比如《超级玛丽》、《魂斗罗》等,AI控制的怪物遵循着固定的行为模式。玩家可以先观察清楚它们的逻辑,再据此做出选择。此时游戏AI其实就是“脚本”,执行着一次性或者循环的指定行为,跟其他的游戏背景环境也没有太大区别。此后,为了给玩家增加更多的变数,“事件”被引入了。AI开始观察环境或玩家,当出现了一定条件时,AI会改变自己的行为逻辑。典型的例子比如1987年的《合金装备》,其中的游戏AI原本处于巡逻模式,当遭遇玩家后会表示惊吓并进行报警。在后来的《帝国时代》、《星际争霸》、《魔兽争霸》系列的地图编辑器中,事件也作为一个关键功能,可以让玩家自己DIY出复杂的剧情。比如《帝国时代2》中,就有大神甚至制作了总计120张地图的完整三国剧情。


              


为了进一步复杂AI的逻辑,“状态机”又出现了。游戏单位会拥有多种状态,每种状态下表示出不同的行为,再通过一定的规则在各状态间进行切换。一些足球游戏中,明显能感觉到AI会在比分落后、时间不多时疯狂上抢。这是因为AI存有上百种队伍状态,根据比分、时间、球的位置、球队的不同,AI的状态和球队打法都会不一样。在战术层面上AI使用的是“状态机”,而在个体球员层面上选择就更为复杂,需要使用“决策树”。决策树是机器学习中的常用算法,通过递次判断输入数据中各特征的值来进行输出。足球的球员AI是因为影响因素太多,比如球的距离、敌方距离、队友距离、边界距离等,用状态机来表示的话状态太多,故使用决策树来对这些特征逐一判断。比如防守时,球的距离太远就盯人,球的距离很近敌方也很近又在禁区时就解围。

上述的“脚本”、“事件”、“状态机”、“决策树”构成了绝大部分的游戏AI,游戏中你有时会觉得这样的AI已经很聪明了,需要不停使用SL大法才能过关。但严格说起来它们还不算人工智能,并不具备真正的学习能力,实际上你对抗的是游戏程序员。而真正能让AI变的无可匹敌,让AlphaGo得以击败人类的,是“强化学习”。强化学习说白了就跟训练宠物似的,AI做的对就奖赏,做错了就惩罚。所谓对与错的判断标准,可以是能否击败玩家,能否获得高的分数等。而奖赏与惩罚,也就是增加或者削减此前行为的权值。游戏中使用“强化学习”的还不多,有《黑与白》、《最高指挥官》等。貌似知名的《红色警戒3》中AI也会根据玩家前几局的常用战术进行针对,但是否使用了强化学习并不确定。

                         


在深度学习出现后,Deepmind团队(后加入Google)将其与强化学习结合起来,构建了深度强化学习,并以此来训练AI玩经典的雅达利游戏,获得了比人类更好的成绩。所谓深度强化学习,也就是先使用深度卷积神经网络来对当前的游戏图像进行识别,自动提取出所需信息,再根据这些信息进行强化学习。在此基础上,DeepMind开发了围棋程序AlphaGo,先后战胜了李世石与柯洁。围棋可谓中国的传统国技,是一个规则简单、状态数却近乎无穷的游戏。对于19*19的棋盘,共有361个点,每个点可以有白子、黑子、无子3种状态,故棋盘有3^361种情况,约等于10^172。因此,无法靠搜索或保存每一种情况来编写AI

为了了解AlphaGo的算法,我们先来反思自己是如何下棋的:首先是开局,记住一些固定的套路,并根据对手的开局进行固定的应对;接下来是中盘,这时候的变化太多,经常得自己在心里推演一下,“我这么下,对方会怎么下,我又再如何应对...”;甚至有时情况太复杂,我们推算几步之后还是无法确定这么下好不好,只能再凭感觉(棋感)来判定好坏;根据推算的结果和所剩时间,决定就这么落子,或者再来推演其它的下法;最后到了终盘时,能下的位置已经不多了,也许可以直接推算到比赛结束,完全不用依靠感觉了。AlphaGo的算法就恰恰完全重现了这一套思路,可以算是对人类下棋方式的彻底模仿。只不过因为电脑的计算能力优势,AlphaGo可以比人类算的更远,从而在中盘奠定胜利。

                   


AlphaGo首先依靠一个卷积神经网络,把当前的棋盘和过去几步的落子等信息输入进去,输出应该下在哪里。这个决定落子的网络被称为“策略网络”,其网络参数由人类的棋谱训练得到。由于人类的常见定式可能就那么几十种,策略网络能很好的学会如何开局。中盘时,AlphaGo依靠“蒙特卡洛树”结合策略网络来进行推演,即:先依靠策略网络下几步,再根据之后的局面是好是坏,来修改这几步的权值;如此反复推演成千上万次,并在接下来的推演中综合策略网络的结果、各个位置的权值和推演次数来综合决定下一次尝试哪几步。以机器学习的思想来看,需要这么做本质上是因为策略网络不够强大(训练用棋谱不够多),因而无法完全用“判别式模型”(完全依靠训练数据生成模型)直接解决问题。加上下棋时允许机器有一定的思考时间,故可以结合“生成式模型”的思想(模型的生成需要测试数据)。那么在下了几步之后,又如何判断局面是好是坏呢?AlphaGo使用了两种方法:“价值网络”和“快速走子”,分别代表着棋感与推算到底。代表棋感的价值网络,也是一个卷积神经网络,结构其实和策略网络一模一样,就是在其基础上又多使用了自我对弈的棋谱作为输入(强化学习)。之所以策略网络没有使用自我对弈,可能是想保留人类的开局定式。而代表推算到底的“快速走子”,也是在策略网络的基础上进行简化,提升了网络的运行速度,从而可以快速的一直模拟到对局结束,再直接用输赢结果作为反馈。最终的局面判断,则是价值网络与快速走子各进行1/2加权的综合结果。

可以看到,AlphaGo就像“要你命3000”一样是个大杂烩,其结合了“策略网络”、“蒙特卡洛树”、“价值网络”和“快速走子”四种方法,包含“深度学习”、“判别式模型”、“生成式模型”、“强化学习”和“推演到底”五种思想。但上面也提到了,价值网络和快速走子其实都是由策略网络变化而来,那么能不能把它们合并呢?AlphaGo的下个版本AlphaGo Master正是这么做的——用价值网络代替了策略网络,并删掉了快速走子,完全用价值网络来预估局势。同时用最新的Resnet来构建价值网络,并以AlphaGo的自我对局来对价值网络进行训练,从而大大提升了网络的精确度。如此改进后的AlphaGo Master在对战平台上横扫了人类顶尖选手,并在乌镇以3:0完胜柯洁。但DeepMind并没有停下,他们继续把网络的输入也精简到只有棋盘和此前几步的落子信息,并完全去掉了人类棋谱,从零开始只通过纯自我对弈来训练网络!后来的结果我们都知道了,AlphaGo Zero由此诞生,3天走过人类千年围棋史,40天击败了AlphaGo Master,震撼了整个机器学习界。


                          


彻底征服围棋后,DeepMind开始向《星际争霸2》进军,这一决定令无数游戏玩家感到兴奋。《星际争霸》在1998年由大名鼎鼎的暴雪推出,奠定了如今火爆的电子竞技产业,被誉为“上帝借暴雪之手赐予玩家的神作”。因为它变化丰富,单位和机制众多,却又拥有“完美”的平衡性,当然星际的单位模型、配音和剧情也都堪称顶级。星际在韩国几乎是国民游戏,出现了众多顶级职业选手,特别是“Boxer”,其开创的“微操”概念让人们惊叹不已,极大的扩展了星际的复杂性和生命力。《星际争霸》的AI已经有很多了,它们战术打的有模有样,微操更是没话说(参见“悍马2000”),但大多都还是用脚本、状态机、决策树写成。20171031日,韩国选手stork(人称“总司令”)在世宗大学举办的对抗赛中轻松吊打了三大最强星际AI,包括Facebook开发的使用了机器学习的“Cherry Pi”,让人们看到星际确实比围棋难以征服的多。这主要是因为:1.众多的单位、属性、技能、规则、地图。2.战争迷雾,并且有幻象和隐形单位,建筑也可以取消建造。3.人族星轨、神族传兵、虫族虫洞等宏机制。4.Apm(每分钟操作数)限制,如果存在限制,则需详细计算每个操作的长短期收益。

《星际争霸2》本质上和《星际争霸》其实也区别不大,主要是单位的寻路更加智能化,部队也更容易聚团。星际2本来在国内一度陷入低谷,但依靠星际老男孩scboy7年来的坚持,如今看的人还是挺多的(因为想玩好比较难..)。scboy最早由黄旭东、MsJoyF91、周宁组成,特长是天南地北的海聊(相声),以真挚的情感唤起了8090初的集体记忆。后来黄旭东和F91等人又一步步牺牲自己成为了“谐星”,以“毒奶”和“智障”(又称“守护者”)著称,又吸引了很多9000后加入到星际2中。我很有幸见证了这一段欢乐而“伟大”的历史,细节先在此不表。DeepMind很清楚《星际争霸2》无法在短期内用AI征服,他们去年和暴雪共同发布了星际2AI研究环境SC2LE,并且DeepMind将其进一步封装成了PySC2,希望通过开放平台来加速星际2 AI的研究。PySC2基于python,使用资源数、人口数和数个游戏画面层等作为输入,与人类玩家获得的信息一样,各个画面层包括单位归属、单位血量、是否选中、地形高度等。而输出的指令包括框选、移动、攻击、建造、使用技能等,并且指令输出的频率受apm限制以保证公平性;另外每类指令又有相应参数要给定,总的可能指令数达到了10^8左右,远超过围棋(19*19)。为了降低任务的复杂性,DeepMind基于PySC2先尝试解决了7个小游戏,分别是坐标寻路、寻找收集矿物、寻找消灭跳虫、枪兵vs蟑螂、枪兵vs毒爆跳虫、采集矿物和瓦斯、建造枪兵,这相当于对一局比赛的常见情况做了分解。DeepMind在这些小游戏里得到了较高的得分,但显然这离完整的比赛还有相当距离。


                 


数十年来,人工智能科学家们努力分析和模仿人类的行为模式,并把成果应用在各类游戏中。虽说可以与人交流的网游充满魅力,也能让远方的朋友仿佛近在咫尺。但年少时,那些或简单或宏大的单机游戏,就像一个个神秘而别致的世界,其中的NPC或者让我们恨的咬牙切齿,或者充当引路人带我们探索世界,有许多角色令人难以忘怀。后来,我们逐渐清楚了他们的行为逻辑,知道他们只是按部就班不会改变,看起来其实傻乎乎的。但新的未来正在展开,古老的角色有望展现出全新的生命力。过去游戏AI的进步,就像人类中一个呱呱坠地的婴儿到学会了分辨物体学会了爬行,而如今,它们正要开始学习拼积木,去真正领悟创造力,《星际争霸2》正是下一个美妙而复杂的积木。当然,要等到AI真正与《星际争霸2》顶尖职业选手登上比赛舞台的那一天,相信还需要更多突破性的进步,就让我们共同期待吧



猜你喜欢

转载自blog.csdn.net/wlkdb/article/details/80722260