主页 > 传奇私服页游 >

Facebook田渊栋:传奇sf页游深度学习如何进行游戏推理?

undefined

给出一个关键局面时,判断它们的值,到底是白优还是黑优。

undefined

嘉宾介绍:田渊栋,Facebook 人工智能研究院研究员,Facebook 围棋 AI 程序 DarkForest 首席工程师及第一作者,卡耐基梅隆大学机器人研究所博士,曾担任 Google 无人驾驶团队软件工程师,并获得国际计算机视觉大会(ICCV)马尔奖荣誉提名。

首先有一个当前状态,从这个当前状态出发,我们会做一些搜索。就像我刚才所说的,计算机不可能穷尽所有的决策情况,因此在某些节点时需要停下来计算一下当前的状况,并用这个结论反过来指导最优的策略。现在基本上所有游戏智能都是这么做的。

这两点让它成为一个很好的研究平台。游戏其实有很多种,在这里我们分为两类,即:

多个AI间如何沟通协作;

今天非常荣幸能来地平线科技做分享。我将简单介绍一下深度学习在游戏领域的进展,结合最近的一些热点新闻,比如说像CMU的Poker Player战胜了世界上最强的扑克高手,大家也一定很好奇这是怎么回事,当然也会结合我们目前所做的一些工作。

所以它与Alpha-beta Pruning不一样的地方是,没有界定它的深度是多少,,就从0开始,让它自动生长,长出来后我们会发现很多路线是不会搜索的,可能往下走几步就不走了,因为它发现这几步非常糟糕,就不会走下去;而有些招法非常有意思,就会挖得非常深,在某些特定招法下可能往下挖五六十步,都是有可能的。最后算法会选探索次数最多的节点作为下一步的棋。

当然具体到游戏里就各有巧妙不同,主要根据不同的action数目,游戏所采用的技术也不同。比如跳棋游戏每步的决策比较少,国象稍微多一些,这样我们可以用传统的Alpha-Beta Pruning再加逐步加深的搜索法。在这个办法里面,每一次向下搜索,是要考虑到所有的决策的。这是很多国际象棋AI采用的方法,这个方法因为是深度优先搜索,内存占用很小。

那么计算机是怎么做的呢?计算机其实是通过以下的方式来进行游戏决策。

undefined

以上,我们可以总结成下面两句关键点:

undefined

然后你会发现,AlphaGo的能力变得很强,这个图表最右栏有个叫ELO Ranking的东西(雷锋网按:Elo Ranking是一种用于计算对抗比赛中对手双方技能水平的方法,由Arpad Elo创建),这决定了围棋的棋艺有多强。右边本来是2400,现在变成快2900,中间差了500分,500分基本上相当于两个子的差距。本来是业余高段的水平,现在变成了职业初段的水平。当然,现在应该要比以前牛很多很多,我这里讲的只是公开出来的一些例子。

undefined

我们在这个工作中用了Actor-Critic模型,不仅输出策略函数还输出值函数,两个函数是共享大量参数的。 这个模型我这里就讲一些直观上的理解。

最近,我们也用了比较相似的框架做了First Person Shooter Game,当时做的是Doom,这是比较复古的一个游戏。就是在一个虚拟环境里用上下左右键操纵,然后看到敌人就开枪,最后看分数是多少。

Policy network,决定下一步怎么走;

undefined

undefined

大家知道,AlphaGo用的神经网络分为策略网络和值网络,主要能实现以下功能:

CMU Poker bot没有用深度学习。他们用到了End-game solver,因为德扑一局时间比较短,可能就几个回合就结束了,所以你可以从下往上构建游戏树。这样的好处是,最下面节点游戏树的状态是比较容易算出来的,用这个反过来指导设计上面的游戏树。另外他也用了蒙特卡罗方法,标准的CFR在每次迭代的时候,要把整个游戏树都搜一遍,这个对于稍微复杂一点的游戏来说是不可接受的,因为是指数级的复杂度,所以用蒙特卡罗方法,每次选一些节点去更新它上面的策略。还有一点就是,一般来说我们在做游戏的时候往往会想到怎么去利用对方的弱点,但其实不是这样的。更好的方法是,我尽量让别人发现我的弱点,然后据此我可以去改进它,变得越来越强。用术语来讲,就是去算一下对手的最优应对(Best response),让对手来利用你的弱点,然后用这个反过来提高自己的水平。

如果你要用强化学习的方法来做,没有激励机制怎么办,这种情况下去训练一个机器人,它不知道怎么做才能提高自己的水平。但是人类似乎就可以找到自己的目标;

“无限注”就是你每次下注的时候不一定是之前的整数倍,可以是任意数。那么有限注德扑就是每次下注的时候,是成倍数地下,“有限注”的问题已经在两三年以前就解决了,当时是发了一篇Science文章。那篇文章其实本应该会跟AlphaGO一样受到很大瞩目,但是不知道为什么,当时并没有。

undefined

AlphaGo快速走子(Fast Rollout)可以做到2微秒,同时也有比较好的精确度。

我在这简单介绍下 Alpha-beta Pruning。假设玩家需要对下一步做出判断,需要搜索它的特征,一旦发现对方在某一分支有很好的应招,那么这条路就不用再搜索了,因为对方这个应招会让你这个分支的最优解劣于另一个分支的最差解。这就是它的一个简单思想概括。

我先介绍一下AlphaGo是怎么做的,之后说一下我们是怎么做的。

随机走那一步之后,得到了当前棋局,然后用更准确的通过强化学习增强的策略网络(RL network)去计算之后的应对,得到最后的输赢。这样就得到了当前状态到输赢之间的一个样本点,用这些样本点去训练策略网络。

在虚拟环境中训练出一个AI,要如何应用于现实生活;

阅读本文的人还阅读: