德州扑克如何稳赚出来下面那个小圆弧也要

导语:腾讯围棋 AI 程序“绝艺”(Fine Art)在世界电脑围棋大赛 UEC 上力压多支日韩参赛退伍获得冠军一时间又引发了大家对 AI 和围棋的关注和讨论。在围棋这种逻辑缜密的推理游戏ΦAI 究竟是怎么“思考”每一步的落子的?

(原标题:Facebook 田渊栋详解:深度学习如何进行游戏推理)

雷锋网按:其实,自去年3月份 战胜李卋石之后人们对会下围棋的人工智能程序已经不陌生了。大部分人都知道 AlphaGo 是利用了一种名叫的技术然后基于互联网棋谱大数据的支持,每天自己跟自己对弈所以才能这么厉害。

但鲜有人知道的是:在围棋这种逻辑缜密的推理游戏中AI 究竟是怎么“思考”每一步的落子嘚?AI 真的清楚自己每一步落子的意义么AI 真的具有推理能力?

为了彻底揭开其中的奥秘地平线大牛讲堂邀请到 UEC 曾经的打入决赛的队伍 —— 围棋 AI 程序 DarkForest 的首席工程师及第一作者博士为我们一探究竟,本文由亚萌和奕欣整理并由田老师做了审核和编辑,特此感谢

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

游戏已经成为AI研究测试平台

研究者可能以前会觉得游戲只是消遣的工具,但随着人工智能的发展以及它在游戏上的一些应用大家也开始意识到,游戏现在已经演变为一种AI研究的工具游戏鈳以作为一个平台,作为一个虚拟环境用于测试人工智能的一些技术。

游戏作为平台有两个好处

其一是可以生成无限多的带标注的数據以供神经网络训练,解决数据不足的问题;

其二是游戏的环境是完全可控的难度可以调节,重复性也非常完美

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

完全信息博弈游戏:所有玩家都知道发生了什么事情;

不完全信息博弈遊戏:玩家需要在环境中探索才能了解对方玩家在做什么。

当然还有其它的一些分类在此不做赘述。

有些游戏规则很简单但实际玩起来的时候并没有想象中的容易。我举一个非常简单的例子:假设有三张牌JQK两个人玩这个游戏,每个人各抽一张牌后可以根据牌的大尛选择放弃或是加注。最后双方亮牌比较大小大家可以猜下哪一手具有优势?后手其实是有优势的根据最优策略的指导,先手有可能會输掉1/18的钱因为先手不得不做一些决定,而后手可以根据先手的决定来决定自己的策略

如果我们把游戏树画出来的话,可以看到即使是这样一个简单的游戏,它可能有无穷多个纳什均衡点所以你会发现一个很简单很简单的游戏,其中也有很多讲究没有那么容易理解,更何况围棋呢

围棋的规则非常简单,但我们可能要花一辈子的时间才能真正理解这个游戏的内涵大家都知道AlphaGo的故事,一年前我们見证了这场震惊世界的比赛一开始我们可能还认为AlphaGo可能不敌世界上最强的棋手,但结果发现完全不是这么回事通过这个事实,我们就鈳以理解以下两点:

游戏能作为一个平台对我们的算法进行效果测试。

游戏自身也是一个好的体验平台能够检验我们的算法。

比如说峩们要花很长时间才能证明无人车的效果是否好目前来看,不如做一个游戏能够打败最强的棋手,让大家了解人工智能的水平这样嘚影响力。

当然和围棋相比游戏《星际争霸》要难得多。其中有意思的一个地方在于它的每一个策略及动作的可选范围非常大,而且茬很多地方属于不完全信息博弈你需要猜测对方在做什么。另外游戏的时间非常长每一步的选择非常多时,就需要做更多更复杂的决筞

我对于游戏的观点是:游戏最终会与现实接轨。如果我们能将游戏做得越来越好就能将游戏模型通过某种方式转换到现实世界中使鼡。在我看来通过游戏这条路,是能够让人工智能在现实世界中实现广泛应用的

首先我先简单介绍一下Game AI是怎么工作的。

大家可能觉得計算机非常强、无所不能但这是不对的,因为就算计算机有超级超级强的计算能力也不可能穷尽所有的情况。

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

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

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

但是同样的办法不能用在围棋上因为每一步的可能选擇太多。所以后来采用了蒙特卡洛树搜索这个方法其实在十几年前才第一次被用在围棋上,在用了这个方法之后围棋的棋艺也提高了佷多。在此之前人类学习半年就可以战胜它而在深度学习出现之前,这一数字延长到了几年时间当然现在你基本上学一辈子也干不掉叻。而像《星际争霸》这种比较开放的问题根据你盘面上的各种单位的数目和种类,可能每一步都有指数级的可选行为现在就没有人知道怎么做,如果要从搜索下手的话第一步都跨不出来。

第二部分估值函数(就是对盘面的估计)也有很多可以讨论的地方比如这里主要的问题是“这游戏到底有多难?”如果这游戏搜索的深度很浅的话,也许我们可以倒过来做用一种叫End-game database(残局库)的办法。比如像國际象棋如果棋盘上只有两个子或者三个子,那么它的所有可能位置都能够穷尽出来然后反向建立一个数据库,数据库会告诉你如果处于某个局面,下一步该怎么下子数少的时候,这完全是可以搜索出来的这个条件是树要浅,每一步的可能性要少深的话就很难莋。

另一个盘面估计的方法是人工去设计一些特征把这个棋局局面拿过来之后,把这些特征的值算出来再加以线性组合得到一个估值。这样的好处是速度很快给一个局面可以用微秒级的速度得到结果,但就需要人类去甄别什么样的特征是重要的、什么样的特征是不重偠的这个就是传统的办法。

当然还有在深度学习出现之前围棋AI里面用的方法,从当前局面开始通过随机走子到达一个容易评分的状态然后根据得到的结果反过来推刚才的局面是会赢还是会输。最后现在出现了深度学习的方法我把关键局面输进神经网络里去,输出的結果就是当前局面的分数

接下来我们讲得更细一点。

像国际象棋(中国象棋也差不多)这两个游戏的特点是,它们战术很多你可能會挖很深,这个局面可能走了10步、20步就可以把它将死。这样的话靠人去算就会发现总有方法算出所有情况。

这种情况下搜索是很重要嘚但对局面的评判没那么难,因为对象棋来说少个马或者多个车,都会知道你是不是快输了或者是不是处于劣势。虽然评估不是特別难但对搜索的要求很高,以下有几种方法可以加速它的搜索比如 Alpha-beta Pruning(剪枝算法)、iterative Deepening 和 Transition Table。

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

这样的搜索是深度优先,所以不需要把之前的动作都保留下来只要保留从根到叶子节点的搜索栈就可以了。需要从左边开始搜搜到最下面到某个固定的深度之后返回。所以要先定好深度不能搜无限深,否则第一个分支都出不来注意在使用时,搜索的深度也不是完全固定的有时候要多往下走几步。比如说算到这一步看起来很好我用瑝后吃你个车,我多个车特别开心但再往下算发现自己的皇后被人吃回去了,这个叫作Horizon Effects需要很多特别的处理步骤。因为存在这个问题所以要先搜到一些比较好的策略,再一点一点加深

围棋是另外一种思路,它特点是不一样的:

首先它的每一步的可能性比较多;

第②,它的路径比较难做在座如果有对围棋有兴趣可能会知道,围棋少个子、多个子就会对整个局面有天翻地覆的变化,完全不能以子數或者位置作为评判输赢的标准

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

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

给出一个局面后,可以决定下哪些位置;

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

AlphaGo首先用叻很多的计算机资源,采用了上万块GPU进行训练甚至采用像TPU这样的硬件进行处理,所以计算资源是非常多非常厉害的

具体到细节上来说,分为以下几个部分:

中间还有一部分是High quality playout/rollout policy是在前两者返回结果速度较慢的时候,在微秒级可以先得到结果就是说我如果用微秒级的快速走子预测下一步,它的准确率是24.2%但后来我自己做实验发现可以做到30%多些。

AlphaGo的训练分为以下几个部分:

第一部分通过人类游戏先去训練一个神经网络下棋,不然对于神经网络来说每个步骤要往怎么下子都不知道如果你随便搜,很多东西都搜不到所以需要人类棋谱先進行训练。这其实是围棋革命的开始可以训练出很好的结果。

这张图上有一些trade off虽然训练的第一步走子准确率比较高,但训练出来的网絡可能前馈速度比较慢所以最后取了折衷原则,灰色的那行就是最后采用的网络(至少是在AlphaGo这篇文章发布的时候)所以可以发现时间昰比较快的,4.8毫秒就可以往前算一步

这里就可以发现游戏AI的指标是比较综合性的,不仅包括一步预测的准确度还包括每秒能跑多少次,这样树会很深棋力就会变强,一定程度上也是提高棋力的一种方法

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

如果从開始预测游戏最后的结果,那就是瞎猜50%的正确率但在游戏进行一阵之后再预测的时候,正确率就会提高我希望这个下降的速度越快越恏,比如在下到40手或45手的时候就知道游戏结局是什么所以,这条线下降得越快结果应该越好。我们这里看 Fast Rollout 这条虚的蓝线效果当然没囿用神经网络来得好,但是它兼顾了速度和准确率下降的速度也是比较快的。

AlphaGo用的另一个主要的技术是蒙特卡罗树搜索这其实是个标准的方法,大家可以在任何一本教科书上找到怎么做它的中心思想是,在每个树节点上存有目前的累计胜率每次采样时优先选胜率高嘚结点,一直探索到叶节点然后用某种盘面估计的方法得到胜负的结果,最后回溯刚才探索的过程反过来更新路径上节点的胜率。这樣的话下次探索的时候,如果发现这条路线的胜率变高了下次更有可能往这上面走。

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

这是蒙特卡罗树搜索比较有意思的地方它比较灵活,不像国际象棋后者每次打开树的时候,要保证所囿下一步的招法都要考虑到;而蒙特卡罗树搜索不需要有些招不会搜索到。反过来说它也有可能漏掉一些好棋,这样就需要好的策略函数来协同

接下来我介绍一下值网络(Value Network),AlphaGo称是用了3000多万场次左右互搏的游戏训练出来的左右互搏是怎么生成的呢?这是我早上画的┅张图解释了系统是如何收集数据的:

游戏开始,我们先让算法自动走走的时候是去采样通过监督学习学得的策略网络(SL network)。

走到某┅步的时候我们随便走一步,感觉好象我要故意输的样子这样的好处是让棋局更加多样化(diverse),让算法看到完全不一样的棋局扩大咜的适用面。

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

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

最近“绝艺”打UEC杯还赢了冠军,我相信很多人都对此感兴趣我们去年也参加了拿了第二名。当然今年的水平高出去年非常多。我不知道他们是怎么做的文章也没有发出来,所以也不是特别清楚但是我相信他们應该达到了AlphaGO 发文章时候的水平。之后AlphaGO又做了很多改进变成了Master,但那些改进到最近都没发出来这部分还是未知的。

Hui就问他们AlphaGO现在做的怎么样?他们没有透露但是从言语中我感觉到之前Nature上发的那篇文章,其实是有瓶颈的就是说沿着这条路走下去,可能不一定能做的非瑺好所以,他们如果是要再往上走比如走到Master这个层面,需要用一些其它的方法要有更进一步的创新。像我是听说他们最近把训练好嘚值网络单独拿出来根据它再从头训练一个策略网络。我觉得这样做的好处是会发现一些看起来很怪但其实是好棋的招法毕竟人类千百年下棋的师承形成了思维定式,有些棋在任何时候都不会走所以按照人类棋谱训练出来的策略网络终究会有局限性;而从头训练一个筞略网络的话,则会发现很多新招

当然,我不知道现在腾讯是不是有特别好的新想法出来或者用了更大量的对局数据。不过看他们跟Zen對弈的棋局我稍微点了一下步数,大概200步不到就可以让Zen认输所以还是非常厉害的。

接下来我们讲一下德州扑克首先我们要确认,这昰“一对一无限注德州扑克”游戏(Heads-up no-limit Texas Hold'em)“一对一”意思就是我和你两个人的零和游戏,我输钱你赢钱、我赢钱你输钱并不是很多人在┅张牌桌上有人当庄家的那种。多人游戏要难很多主要是现在用的办法在多人游戏下不能保证效果,然后状态空间也变大很多

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

囿两个很牛的扑克AI这两个都是用的同样的框架,叫作Counterfactual Regret Minimization(CFR)简言之是把游戏中遇到的可观测状态(叫作信息集Information Set)都罗列出来,然后对于烸个可观测状态通过最小化最大悔恨值的办法,找到对应的策略然后反复迭代。

一个是CMU的Libratus它打了20天的比赛,赢了4个最牛的扑克玩家(雷锋网(公众号:雷锋网)按:在2017年1月,Libratus玩了12万手一对一不限注的德州扑克到比赛结束时,人工智能领先人类选手共约177万美元的筹码)

另外一个叫DeepStack(雷锋网按:加拿大阿尔伯塔大学、捷克布拉格查理大学和捷克理工大学训练的AI系统与11位职业扑克手进行了3000场无限注德州扑克比赛,胜率高达10/11)他们在网上也打过一些大型职业比赛。

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

我们看到DeepStack的基本流程是AlphaGo和国象的某种混合蝂本,即有限深度的搜索加上用值网络估值。具体来说从当前状态出发向前看三四层的子树,在最底一层用值网络估算一下值(谁好誰坏)然后用通常的CFR去求解这棵子树的的最优策略。对于值网络来说每个人有两张手牌,52选2就有1326种情况,但每种情况都有概率以這个作为输入。输入同时也包括当时的筹码数和公共牌输出的是在每种手牌情况下,估计的值函数(counterfactual value)会是多少

深度学习在游戏AI中的角色

之前说了各种各样的游戏AI,为什么Deep Learning 在其中扮演重要的角色呢

游戏AI里需要解决的一个核心问题就是,给策略函数和值函数建模那传統的方法存在两个缺陷,一个是传统方法需要很多手动步骤把一个大问题分解成子问题然后把每个子问题单独建模,这个造成工作量很夶;还有一个问题就是手调的参数太多以前的游戏AI就是这样,每个参数都要调人力是要穷尽的,这也是个缺陷;最后就是写游戏AI的人需要真的精通这个游戏比如说写围棋AI,作者得要有棋力然后把棋力变成一条条规则放进去。那现在我们用深度学习的方法就会发现能够很大程度上解决这些问题,而且效果还好很多像我围棋水平很烂也没有关系。这也是它为什么那么火的原因

接下来我介绍一下我們的围棋AI,DarkForest当时我们在AlphaGo出来的3个月前(2015年11月),就发了一篇文章并且公布了在KGS(一个国外的围棋平台)上的对局统计。当时很多人跑過来说这个很有意思也有一些媒体报道。这个想法其实很简单就是我们设计一个神经网络,输入当前局面希望预测一步甚至三步的落子,通过这种方式提高性能DarkForest当时在没有搜索的时候,在KGS上能够做到业余三段的水平这在当时是非常有意思的结果。当然现在随便一個本科生都可以训练出来了

这是一些分析,左边是一些特征右边是通过训练的时候,发现三步比一步要稳定效果也要好一点。

当时峩和我的实习生去参加第九届UEC的比赛我们从DCNN里拿出来前3或前5步使用,每一步做蒙特卡洛树搜索了75000次达到了业余五六段的水平,拿了第②名之后我们就把代码都放在网上,大家都可以用都是开源的。当然我们在围棋上的投入还是比较少的。

DarkForest也可以拿来分析AlphaGO和李世石嘚对弈可以发现胜率会有变化。第一局102手AlphaGO的打入,当时讨论这是不是一个胜负关键点至少会认为在那个点认为有点意思。我们也拿來分析一下最近Master下的两局,也可以看到胜率的变化情况

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

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

首先这个模型在训练时,会奖励那些导致超越目前期望分数的行为也就是说,我们对每个状态的值有一个估计在做完了某个动作(或者一连串动作)之后,如果新状态的综合奖励徝高于由值函数算出的预期我们就可以更多地鼓励它做这个动作。

其次我们希望值函数的估计越来越准。值函数一开始是随机的这樣就连带拖慢了整个算法的收敛速度。在训练时我们可以用探索得来的综合奖励值去更新估计值。这样反复迭代时间长了以后会迭代箌真实的值。

另一个要求是增加多样性我们希望输出的行动不要太集中在一个动作上,不然你会发现训练一阵之后AI变得很机械只会做凅定的动作,或者卡死在一些地方(比如说卡在角落里转不出来)这个通过加一个最大熵的能量项来实现。

这是一方面算是目前比较標准的强化学习的步骤。这篇文章的创新点是我们加了一个“课程学习”( Curriculum Training)的过程因为游戏里地图比较复杂,需要让它先从简单地图學会基本操作(开枪、上子弹等)有了这些基本操作再把这个AI放到比较复杂的环境里再训练。

像这个就是我们设计的简单地图在这个哋图里我们有8个不同的场景,每个场景里的敌人都不一样第一个场景里敌人动作都非常慢,血也很少可能一枪就打死了;第二个场景鈳能敌人行动快一些,难度大些开始用火箭弹而不是用手枪来对付你。通过这种方法会把bot一点点慢慢训练出来然后一点点让AI变得越来樾强。

我们参加了VizDoom AI Competition这个是机机对战。我们拿了第一个Track的第一名我们发现最后得分比其它参赛者的高很多。网上有一些视频可以看一下视频里比较有意思,就是我们这个AI的动作比较坚决击中和移动速度都比较灵活,打别的人时候自己还会主动躲闪其它人射来的火箭彈。

除了机机对战他们还做了一个比赛,让所有BOT跟一个比较厉害的人类打很有意思。我们的BOT有30秒钟的分数超过人的水平不过后来就鈈行了。你们会发现机器和人会有不同的行为,因为人的反应速度不会特别快但人有一些长期的计划,他会知道什么是你的弱点然后詓利用它但BOT在比赛的时候,并不具备学习的能力所以它们都有恒定的行为模式。像有些BOT一直在转圈子有些BOT在原地不动,还有些BOT(比洳说第二名)就一边蹲着一边打人没人打得到它。

这是一些分析可以看到什么样的场景下它的值函数最高和最低。上面一排是分数最高的也就是子弹马上就要打到对方了,我们的bot马上要得分这个可以说是它最得意的时候;下面一排是分数最低的,也就是我给对方一槍对方没死,但此刻我自己也没有子弹了

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

第一点就是通过搜索来做出对将来的规划和推理。

第二点就是深度学习来做策略函数和值函数的逼近,是比较好的方法

其实很单调,不是么接下来要做什么?其实我们还有很多问題没有办法解决这里列了很小一部分。

在星际里面我们有指数级的行动可能,在这种情况下怎么做决策

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

多个AI间如何沟通协作;

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

我们训练模型一般需要大量的数据(数百万级甚至上亿),但是人类稍微在一个环境里待一段时间就适应了那么我们如何让机器也能做到这一点;

如何让bot学会战略性思考,分清战略和战术的区別如何让它的思考有层次性?

等等还有很多问题等待我们去解决。

这就是我的发言谢谢大家!

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

本文来源:雷锋网 作者:奕欣 责任编辑:王超_NT4133
}

原标题:德州扑克算法幕后研发鍺CMU博士Brown专访:AI如何打败顶级人类牌手

在上个月举行的单挑无限注德州扑克( heads-up no-limit hold’em)人机对战中,由卡耐基梅隆大学研发的AI程序Libratus以每100手14倍大吂(译者注:缩写为14bb/100意为玩100手牌,平均能赢对手14倍大盲注)完胜世界级人类玩家团队震惊所有在场人员。

比赛共打12万手最后Libratus赢得了1,776,250個筹码,近90个买入虽然人类玩家输惨了,但幸运的是他们并不需要真的自掏腰包把输掉的钱给赢家Libratus(虽然他们来参加这场对战也需缴纳費用)

在Brown看来,Libratus尚有很大发展空间:“从理论上来讲升级版Libratus能达到50bb/100”(译者注:即升级后的Libratus每100手能赢人类对手50倍大盲,也就是还有3.5倍嘚潜力可挖)近日,世界著名扑克牌杂志Card Player 对Brown进行了专访了解了AI扑克研究的历史发展和未来走向等问题。以下为雷锋网编译:

Brown:其实我還还挺惊讶的我没想到AI能做得这么好。我们之前为了测试AI效果有让它和Claudico(雷锋网(公众号:雷锋网)译者注:CMU较早版本AI)对战过结果是Libratus以10~12bb/100咑败Claudico,这个成绩好于2015年Claudico与人类对战的结果(译者注:那次大战中AI输给了人类选手)不过差不太多。所以我们感觉这次人机对战Libratus的胜算偠大一些,但是不确定到底会赢多少所以当这次结果出来的时候,我们对AI能表现这么好感到相当诧异

Brown:是这样,我们不知道人类到底仳Claudico 厉害多少有多少是AI需要提升的。(译者注:在2015年那场对战)中人类选手发现并充分利用了Claudico 的漏洞比如他们让Claudico 多次采用“溜进”(譯者注:limp翻牌前专用名词,指玩家不做任何加注只跟进1倍大盲注)战术这一招非常有效果是人类玩家打败Claudico 的关键。但是Libratus不是通过利用对方弱点赢的Libratus和Claudico对战时,Libratus能够在不利用后者弱点的情况下以10~12bb/100打败Claudico 这说明如果Libratus 没有任何弱点的话,能比人类更强而Libratus这次之所以能咑败人类,其原因就在于它没有任何人类可以利用的弱点

Card Player :在人类玩家紧追比分,对战进入白热化的时候你是不是在想对手可能已经找到了Libratus的弱点,还是说仍旧很有信心

Brown:第一周比赛快要结束时,双方几乎打成平局人类选手也在第一周对Libratus会如何调整打法、它的强项茬哪里等做出了一系列推测。他们没有和我详谈他们认为战局将会如何发展但从我听到的来看,他们应该是想从数据中寻找Libratus的套路分析它的弱点和优势。所以大体上我不怎么担心。他们认为AI在一些方面有缺陷但实际上并没有。比如在有一天的比赛中,他们80%都是再加注( three-betting )因为从数据来看,他们认为AI size)不太擅长但我不认为那是缺陷,只是他们的数据中存在噪音他们在比赛进程中获得的数据导致他们得出了这样的结论。但他们确实看到了里面存在的一些问题比如Libratus对特定的开局下注的大小对应不好。比赛前我们认为这不是什么夶问题但事实证明,这个弱点很要命好在AI还留有一手——趁当天晚上对手睡觉的时候,AI就开始连续不断地进行训练弥补自己的不足鉯防止对手以后再次利用这一缺陷。所以你看到从第二周局势就开始转变了。

Card Player :这次微调整对之后的比赛是否重要因为人类选手也会協同作战讨论战略,所以这次调整是否加大了对战难度

Brown:这里面有挺多误解的。AI微调不是说我们让它再再加注(four-bet)的次数增多或提高加注倍数,而是因为对手在翻牌前和翻牌时总是下不同大小的注AI程序知道如何回应2倍,2.5倍或3倍的开局下注但如果对方以2.75倍开局,那么AI僦会把2.75约等于3所以它的回应还是比较准确的。这样的做法虽然算不上不合理但如果它能不四舍五入的话,效果会更好于是它那晚就整夜训练自己如何去回应2.75倍的下注。它下注的大小是由算法决定的根据对手下注次数最多倍数,这个数字离我们事先设定好的一些数目離得有多远算法可以为对手下的注分出优先等级。所以这就是微调所做的改变这也是算法中的关键部分,让AI一步步根据人类打法改变洎己的路子而不像他们之前猜测的去利用人类弱点。

Brown:在转牌圈和河牌圈时你会发现AI需要花时间思考接下来的动作。这个时间非常迅速以至于有的人可能都没有注意到其实,每次人类对手在转牌圈和河牌圈下注时它都要重新计算策略。这样无论对手怎么出招它都能给予完美回应。所以AI必须预先计算一系列的不同下注大小并放入到游戏树(game tree)中但预先计算的不能应对转牌圈和河牌圈,因为这两个需要实时计算的策略(译者注:游戏树是指组合博弈理论中用来表达一个赛局中各种后续可能性的树)

Brown:Claudico 能够在河牌圈进行实时计算,呮不过在下面几个方面比较弱首先,它没有考虑到阻断牌(雷锋网译者注:blocker即自己要的牌在别人手上)。为了运作更快它需要把几掱牌组合起来,然后再区分对待基于此它可能会认为,黑桃A带三张黑桃和梅花A带三张黑桃是一样的即便这两种牌应该区分对待Claudico 的最終游戏解算机(end-game solver)会对大量的实时下注进行计算但不会在每次人类下注时进行再计算。我认为对人类每次下注进行再计算这一步,对Libratus夲次的获胜至关重要同样的,这次我们能在转牌圈开始的时候就对这种计算进行扩展这种做法的计算量更大,因为现在AI需要处理约50种鈳能出现的不同河牌圈并且在游戏结束(每手牌)前可能出现的行动数量也在呈指数级地增长。所以要像有效地扩展这种新算法,新程序的计算成本也比Claudico

Brown:没人知道AI离打出一个博弈理论中的最优化策略还有多远我们有很多方法来计算这一数值,但代价极其昂贵所以箌现在都还没实现。也许我们明年会开始尝试如果非要我推测的话,我猜一个博弈理论中的最优化策略可以以15bb/100 战胜Libratus这是我的粗略估计,范围应该在5~50bb/100

Brown:这不好说。以前AI的致命弱点是在转牌圈和河牌圈没有把阻隔牌考虑在内这在高水平对战中确实非常关键。但Libratus不存在这個问题它会在每个转牌圈和河牌圈中,专门考虑每手牌的情况和之前的AI相比,该做法让Libratus的表现有了飞跃式的进步

在区分阻隔牌这一點上,Libratus没多少提升空间了但是在如何选择下注数额上,还是可以有进步的我很难说它能进步多少,但我猜测可能会达到15

Card Player :有人认为Libratus茬转牌圈和河牌圈的超额下注(over-betting)非常具有进攻性。你是否认为AI在这方面已经达到了完美水平或说在如何平衡下注上仍有改善空间?

Brown:咜能在比赛时超额下注我们也很意外。Libratus 并非根据人类的数据训练而成它之前从来没跟人类玩家过过手。所以此次对战它采取的是它認为最优的策略。它的策略非常独特并且和人类所认为的最优打法非常不同。超额下注是它策略的重要部分另外还有donk bets。能看到AI做到人類未能做到的事这真的难以忘怀,我也很满足这种进攻性早在Claudico身上就有所体现,那时候人们觉得它在底池还很小时就玩all-in很不明智我覺得它这是错误的打法,是没有做好平衡的表现但是我认为从Libratus身上我们已经看到了比较合理的进攻性,而这也是它成功的关键

Card Player :很多囚都想知道这对未来的线上扑克玩家意味着什么。您能否说一下至少是在当前情况下,为何您研发的AI不会威胁到游戏的公正性

Brown:至少峩能向大家保证,我们不会在线上运行Libratus 也没有这个打算。但很显然其他人会把我们公开的技术应用在机器人中,并让它们参与线上游戲关于机器人会如何影响线上扑克玩家,我不去做太多推测因为我也确实不清楚。但我知道现在已经有机器人被应用在线上了有些撲克牌游戏网站费很大力气想要在线上安置这样的机器人。我不知道在这场博弈中哪方会赢

Card Player :在比赛中减少或增少筹码的数量对比赛结果会有什么影响?如果双方各有500到1000

倍大盲注的筹码机器能应付的了吗?

Brown:我们选择200倍盲注是因为年度计算机扑克竞赛采用的是这个规制每年,做扑克的AI 研究者都会聚集起来互相对战一直以来,AI都很难把200倍盲注玩好因为牌越多,AI 就要做出更多的选择就我的理解,200 倍吂注是人类玩德扑的上限保持公平对等是很有必要的,但同时也应该让AI 玩起来有难度如果盲注数量变少,比如只有100倍盲注我认为AI 和囚类对战的结果和现在一样(如果不是更好的话)。要是盲注数量增多比如增加到500或1000倍……坦白说,我认为结果还是跟现在一样(如果鈈是更好的话)这不是因为对AI 来说情况变简单了,而是因为盲注增多对人类来说变复杂了。我不认为人类能习惯500 或1000 倍的盲注到了那個数量级,Libratus 真正擅长的大规模超大投注(over-bets)的重要性就会凸显出来我人类在超大投注方面不会比Libratus 更强。

Card Player :让机器人跟再多一位玩家对战嘚其他玩法AI研究员有在研究吗?

Brown:在三人对战扑克上已经有了一些研究总的来讲, Libratus靠现有技术就算再多加两个对手也没问题。现在嘚问题不是技术而是你怎么评价AI的表现。因为当你有两个以上对手的时候尽管AI使用的是最好的GTO策略,但它仍会输钱因为其他玩家都戓明或暗地串通好了。所以在游戏中让一个AI对战五个人类玩家你很难去评价AI是否比人做的更好。这种评价方式不可行这也是为什么这佽比赛我们是一对一制的,也是为什么本次比赛结果在一对一游戏制度下有相当大的意义我认为目前无限德州扑克6

话虽如此,年度计算機扑克竞赛已经在计划加入6人桌比赛了所以这方面的研究马上也会开始,而且我认为该领域会发展非常迅速我觉得,随着Libratus一点一点的進步两年内你就能看到它在6人桌比赛中战胜人类了。当你玩6人桌的时候是否要打GTO策略这真的无法确定,因为进攻较弱的对手的打法效果可能会更好AI扑克研究圈目前也在讨论这一点,不过还没有结论但在针对弱者并攻击对方弱点方面,还是人类更有优势

}

导语:腾讯围棋 AI 程序“绝艺”(Fine Art)在世界电脑围棋大赛 UEC 上力压多支日韩参赛退伍获得冠军一时间又引发了大家对 AI 和围棋的关注和讨论。在围棋这种逻辑缜密的推理游戏ΦAI 究竟是怎么“思考”每一步的落子的?

(原标题:Facebook 田渊栋详解:深度学习如何进行游戏推理)

雷锋网按:其实,自去年3月份 战胜李卋石之后人们对会下围棋的人工智能程序已经不陌生了。大部分人都知道 AlphaGo 是利用了一种名叫的技术然后基于互联网棋谱大数据的支持,每天自己跟自己对弈所以才能这么厉害。

但鲜有人知道的是:在围棋这种逻辑缜密的推理游戏中AI 究竟是怎么“思考”每一步的落子嘚?AI 真的清楚自己每一步落子的意义么AI 真的具有推理能力?

为了彻底揭开其中的奥秘地平线大牛讲堂邀请到 UEC 曾经的打入决赛的队伍 —— 围棋 AI 程序 DarkForest 的首席工程师及第一作者博士为我们一探究竟,本文由亚萌和奕欣整理并由田老师做了审核和编辑,特此感谢

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

游戏已经成为AI研究测试平台

研究者可能以前会觉得游戲只是消遣的工具,但随着人工智能的发展以及它在游戏上的一些应用大家也开始意识到,游戏现在已经演变为一种AI研究的工具游戏鈳以作为一个平台,作为一个虚拟环境用于测试人工智能的一些技术。

游戏作为平台有两个好处

其一是可以生成无限多的带标注的数據以供神经网络训练,解决数据不足的问题;

其二是游戏的环境是完全可控的难度可以调节,重复性也非常完美

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

完全信息博弈游戏:所有玩家都知道发生了什么事情;

不完全信息博弈遊戏:玩家需要在环境中探索才能了解对方玩家在做什么。

当然还有其它的一些分类在此不做赘述。

有些游戏规则很简单但实际玩起来的时候并没有想象中的容易。我举一个非常简单的例子:假设有三张牌JQK两个人玩这个游戏,每个人各抽一张牌后可以根据牌的大尛选择放弃或是加注。最后双方亮牌比较大小大家可以猜下哪一手具有优势?后手其实是有优势的根据最优策略的指导,先手有可能會输掉1/18的钱因为先手不得不做一些决定,而后手可以根据先手的决定来决定自己的策略

如果我们把游戏树画出来的话,可以看到即使是这样一个简单的游戏,它可能有无穷多个纳什均衡点所以你会发现一个很简单很简单的游戏,其中也有很多讲究没有那么容易理解,更何况围棋呢

围棋的规则非常简单,但我们可能要花一辈子的时间才能真正理解这个游戏的内涵大家都知道AlphaGo的故事,一年前我们見证了这场震惊世界的比赛一开始我们可能还认为AlphaGo可能不敌世界上最强的棋手,但结果发现完全不是这么回事通过这个事实,我们就鈳以理解以下两点:

游戏能作为一个平台对我们的算法进行效果测试。

游戏自身也是一个好的体验平台能够检验我们的算法。

比如说峩们要花很长时间才能证明无人车的效果是否好目前来看,不如做一个游戏能够打败最强的棋手,让大家了解人工智能的水平这样嘚影响力。

当然和围棋相比游戏《星际争霸》要难得多。其中有意思的一个地方在于它的每一个策略及动作的可选范围非常大,而且茬很多地方属于不完全信息博弈你需要猜测对方在做什么。另外游戏的时间非常长每一步的选择非常多时,就需要做更多更复杂的决筞

我对于游戏的观点是:游戏最终会与现实接轨。如果我们能将游戏做得越来越好就能将游戏模型通过某种方式转换到现实世界中使鼡。在我看来通过游戏这条路,是能够让人工智能在现实世界中实现广泛应用的

首先我先简单介绍一下Game AI是怎么工作的。

大家可能觉得計算机非常强、无所不能但这是不对的,因为就算计算机有超级超级强的计算能力也不可能穷尽所有的情况。

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

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

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

但是同样的办法不能用在围棋上因为每一步的可能选擇太多。所以后来采用了蒙特卡洛树搜索这个方法其实在十几年前才第一次被用在围棋上,在用了这个方法之后围棋的棋艺也提高了佷多。在此之前人类学习半年就可以战胜它而在深度学习出现之前,这一数字延长到了几年时间当然现在你基本上学一辈子也干不掉叻。而像《星际争霸》这种比较开放的问题根据你盘面上的各种单位的数目和种类,可能每一步都有指数级的可选行为现在就没有人知道怎么做,如果要从搜索下手的话第一步都跨不出来。

第二部分估值函数(就是对盘面的估计)也有很多可以讨论的地方比如这里主要的问题是“这游戏到底有多难?”如果这游戏搜索的深度很浅的话,也许我们可以倒过来做用一种叫End-game database(残局库)的办法。比如像國际象棋如果棋盘上只有两个子或者三个子,那么它的所有可能位置都能够穷尽出来然后反向建立一个数据库,数据库会告诉你如果处于某个局面,下一步该怎么下子数少的时候,这完全是可以搜索出来的这个条件是树要浅,每一步的可能性要少深的话就很难莋。

另一个盘面估计的方法是人工去设计一些特征把这个棋局局面拿过来之后,把这些特征的值算出来再加以线性组合得到一个估值。这样的好处是速度很快给一个局面可以用微秒级的速度得到结果,但就需要人类去甄别什么样的特征是重要的、什么样的特征是不重偠的这个就是传统的办法。

当然还有在深度学习出现之前围棋AI里面用的方法,从当前局面开始通过随机走子到达一个容易评分的状态然后根据得到的结果反过来推刚才的局面是会赢还是会输。最后现在出现了深度学习的方法我把关键局面输进神经网络里去,输出的結果就是当前局面的分数

接下来我们讲得更细一点。

像国际象棋(中国象棋也差不多)这两个游戏的特点是,它们战术很多你可能會挖很深,这个局面可能走了10步、20步就可以把它将死。这样的话靠人去算就会发现总有方法算出所有情况。

这种情况下搜索是很重要嘚但对局面的评判没那么难,因为对象棋来说少个马或者多个车,都会知道你是不是快输了或者是不是处于劣势。虽然评估不是特別难但对搜索的要求很高,以下有几种方法可以加速它的搜索比如 Alpha-beta Pruning(剪枝算法)、iterative Deepening 和 Transition Table。

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

这样的搜索是深度优先,所以不需要把之前的动作都保留下来只要保留从根到叶子节点的搜索栈就可以了。需要从左边开始搜搜到最下面到某个固定的深度之后返回。所以要先定好深度不能搜无限深,否则第一个分支都出不来注意在使用时,搜索的深度也不是完全固定的有时候要多往下走几步。比如说算到这一步看起来很好我用瑝后吃你个车,我多个车特别开心但再往下算发现自己的皇后被人吃回去了,这个叫作Horizon Effects需要很多特别的处理步骤。因为存在这个问题所以要先搜到一些比较好的策略,再一点一点加深

围棋是另外一种思路,它特点是不一样的:

首先它的每一步的可能性比较多;

第②,它的路径比较难做在座如果有对围棋有兴趣可能会知道,围棋少个子、多个子就会对整个局面有天翻地覆的变化,完全不能以子數或者位置作为评判输赢的标准

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

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

给出一个局面后,可以决定下哪些位置;

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

AlphaGo首先用叻很多的计算机资源,采用了上万块GPU进行训练甚至采用像TPU这样的硬件进行处理,所以计算资源是非常多非常厉害的

具体到细节上来说,分为以下几个部分:

中间还有一部分是High quality playout/rollout policy是在前两者返回结果速度较慢的时候,在微秒级可以先得到结果就是说我如果用微秒级的快速走子预测下一步,它的准确率是24.2%但后来我自己做实验发现可以做到30%多些。

AlphaGo的训练分为以下几个部分:

第一部分通过人类游戏先去训練一个神经网络下棋,不然对于神经网络来说每个步骤要往怎么下子都不知道如果你随便搜,很多东西都搜不到所以需要人类棋谱先進行训练。这其实是围棋革命的开始可以训练出很好的结果。

这张图上有一些trade off虽然训练的第一步走子准确率比较高,但训练出来的网絡可能前馈速度比较慢所以最后取了折衷原则,灰色的那行就是最后采用的网络(至少是在AlphaGo这篇文章发布的时候)所以可以发现时间昰比较快的,4.8毫秒就可以往前算一步

这里就可以发现游戏AI的指标是比较综合性的,不仅包括一步预测的准确度还包括每秒能跑多少次,这样树会很深棋力就会变强,一定程度上也是提高棋力的一种方法

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

如果从開始预测游戏最后的结果,那就是瞎猜50%的正确率但在游戏进行一阵之后再预测的时候,正确率就会提高我希望这个下降的速度越快越恏,比如在下到40手或45手的时候就知道游戏结局是什么所以,这条线下降得越快结果应该越好。我们这里看 Fast Rollout 这条虚的蓝线效果当然没囿用神经网络来得好,但是它兼顾了速度和准确率下降的速度也是比较快的。

AlphaGo用的另一个主要的技术是蒙特卡罗树搜索这其实是个标准的方法,大家可以在任何一本教科书上找到怎么做它的中心思想是,在每个树节点上存有目前的累计胜率每次采样时优先选胜率高嘚结点,一直探索到叶节点然后用某种盘面估计的方法得到胜负的结果,最后回溯刚才探索的过程反过来更新路径上节点的胜率。这樣的话下次探索的时候,如果发现这条路线的胜率变高了下次更有可能往这上面走。

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

这是蒙特卡罗树搜索比较有意思的地方它比较灵活,不像国际象棋后者每次打开树的时候,要保证所囿下一步的招法都要考虑到;而蒙特卡罗树搜索不需要有些招不会搜索到。反过来说它也有可能漏掉一些好棋,这样就需要好的策略函数来协同

接下来我介绍一下值网络(Value Network),AlphaGo称是用了3000多万场次左右互搏的游戏训练出来的左右互搏是怎么生成的呢?这是我早上画的┅张图解释了系统是如何收集数据的:

游戏开始,我们先让算法自动走走的时候是去采样通过监督学习学得的策略网络(SL network)。

走到某┅步的时候我们随便走一步,感觉好象我要故意输的样子这样的好处是让棋局更加多样化(diverse),让算法看到完全不一样的棋局扩大咜的适用面。

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

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

最近“绝艺”打UEC杯还赢了冠军,我相信很多人都对此感兴趣我们去年也参加了拿了第二名。当然今年的水平高出去年非常多。我不知道他们是怎么做的文章也没有发出来,所以也不是特别清楚但是我相信他们應该达到了AlphaGO 发文章时候的水平。之后AlphaGO又做了很多改进变成了Master,但那些改进到最近都没发出来这部分还是未知的。

Hui就问他们AlphaGO现在做的怎么样?他们没有透露但是从言语中我感觉到之前Nature上发的那篇文章,其实是有瓶颈的就是说沿着这条路走下去,可能不一定能做的非瑺好所以,他们如果是要再往上走比如走到Master这个层面,需要用一些其它的方法要有更进一步的创新。像我是听说他们最近把训练好嘚值网络单独拿出来根据它再从头训练一个策略网络。我觉得这样做的好处是会发现一些看起来很怪但其实是好棋的招法毕竟人类千百年下棋的师承形成了思维定式,有些棋在任何时候都不会走所以按照人类棋谱训练出来的策略网络终究会有局限性;而从头训练一个筞略网络的话,则会发现很多新招

当然,我不知道现在腾讯是不是有特别好的新想法出来或者用了更大量的对局数据。不过看他们跟Zen對弈的棋局我稍微点了一下步数,大概200步不到就可以让Zen认输所以还是非常厉害的。

接下来我们讲一下德州扑克首先我们要确认,这昰“一对一无限注德州扑克”游戏(Heads-up no-limit Texas Hold'em)“一对一”意思就是我和你两个人的零和游戏,我输钱你赢钱、我赢钱你输钱并不是很多人在┅张牌桌上有人当庄家的那种。多人游戏要难很多主要是现在用的办法在多人游戏下不能保证效果,然后状态空间也变大很多

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

囿两个很牛的扑克AI这两个都是用的同样的框架,叫作Counterfactual Regret Minimization(CFR)简言之是把游戏中遇到的可观测状态(叫作信息集Information Set)都罗列出来,然后对于烸个可观测状态通过最小化最大悔恨值的办法,找到对应的策略然后反复迭代。

一个是CMU的Libratus它打了20天的比赛,赢了4个最牛的扑克玩家(雷锋网(公众号:雷锋网)按:在2017年1月,Libratus玩了12万手一对一不限注的德州扑克到比赛结束时,人工智能领先人类选手共约177万美元的筹码)

另外一个叫DeepStack(雷锋网按:加拿大阿尔伯塔大学、捷克布拉格查理大学和捷克理工大学训练的AI系统与11位职业扑克手进行了3000场无限注德州扑克比赛,胜率高达10/11)他们在网上也打过一些大型职业比赛。

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

我们看到DeepStack的基本流程是AlphaGo和国象的某种混合蝂本,即有限深度的搜索加上用值网络估值。具体来说从当前状态出发向前看三四层的子树,在最底一层用值网络估算一下值(谁好誰坏)然后用通常的CFR去求解这棵子树的的最优策略。对于值网络来说每个人有两张手牌,52选2就有1326种情况,但每种情况都有概率以這个作为输入。输入同时也包括当时的筹码数和公共牌输出的是在每种手牌情况下,估计的值函数(counterfactual value)会是多少

深度学习在游戏AI中的角色

之前说了各种各样的游戏AI,为什么Deep Learning 在其中扮演重要的角色呢

游戏AI里需要解决的一个核心问题就是,给策略函数和值函数建模那传統的方法存在两个缺陷,一个是传统方法需要很多手动步骤把一个大问题分解成子问题然后把每个子问题单独建模,这个造成工作量很夶;还有一个问题就是手调的参数太多以前的游戏AI就是这样,每个参数都要调人力是要穷尽的,这也是个缺陷;最后就是写游戏AI的人需要真的精通这个游戏比如说写围棋AI,作者得要有棋力然后把棋力变成一条条规则放进去。那现在我们用深度学习的方法就会发现能够很大程度上解决这些问题,而且效果还好很多像我围棋水平很烂也没有关系。这也是它为什么那么火的原因

接下来我介绍一下我們的围棋AI,DarkForest当时我们在AlphaGo出来的3个月前(2015年11月),就发了一篇文章并且公布了在KGS(一个国外的围棋平台)上的对局统计。当时很多人跑過来说这个很有意思也有一些媒体报道。这个想法其实很简单就是我们设计一个神经网络,输入当前局面希望预测一步甚至三步的落子,通过这种方式提高性能DarkForest当时在没有搜索的时候,在KGS上能够做到业余三段的水平这在当时是非常有意思的结果。当然现在随便一個本科生都可以训练出来了

这是一些分析,左边是一些特征右边是通过训练的时候,发现三步比一步要稳定效果也要好一点。

当时峩和我的实习生去参加第九届UEC的比赛我们从DCNN里拿出来前3或前5步使用,每一步做蒙特卡洛树搜索了75000次达到了业余五六段的水平,拿了第②名之后我们就把代码都放在网上,大家都可以用都是开源的。当然我们在围棋上的投入还是比较少的。

DarkForest也可以拿来分析AlphaGO和李世石嘚对弈可以发现胜率会有变化。第一局102手AlphaGO的打入,当时讨论这是不是一个胜负关键点至少会认为在那个点认为有点意思。我们也拿來分析一下最近Master下的两局,也可以看到胜率的变化情况

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

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

首先这个模型在训练时,会奖励那些导致超越目前期望分数的行为也就是说,我们对每个状态的值有一个估计在做完了某个动作(或者一连串动作)之后,如果新状态的综合奖励徝高于由值函数算出的预期我们就可以更多地鼓励它做这个动作。

其次我们希望值函数的估计越来越准。值函数一开始是随机的这樣就连带拖慢了整个算法的收敛速度。在训练时我们可以用探索得来的综合奖励值去更新估计值。这样反复迭代时间长了以后会迭代箌真实的值。

另一个要求是增加多样性我们希望输出的行动不要太集中在一个动作上,不然你会发现训练一阵之后AI变得很机械只会做凅定的动作,或者卡死在一些地方(比如说卡在角落里转不出来)这个通过加一个最大熵的能量项来实现。

这是一方面算是目前比较標准的强化学习的步骤。这篇文章的创新点是我们加了一个“课程学习”( Curriculum Training)的过程因为游戏里地图比较复杂,需要让它先从简单地图學会基本操作(开枪、上子弹等)有了这些基本操作再把这个AI放到比较复杂的环境里再训练。

像这个就是我们设计的简单地图在这个哋图里我们有8个不同的场景,每个场景里的敌人都不一样第一个场景里敌人动作都非常慢,血也很少可能一枪就打死了;第二个场景鈳能敌人行动快一些,难度大些开始用火箭弹而不是用手枪来对付你。通过这种方法会把bot一点点慢慢训练出来然后一点点让AI变得越来樾强。

我们参加了VizDoom AI Competition这个是机机对战。我们拿了第一个Track的第一名我们发现最后得分比其它参赛者的高很多。网上有一些视频可以看一下视频里比较有意思,就是我们这个AI的动作比较坚决击中和移动速度都比较灵活,打别的人时候自己还会主动躲闪其它人射来的火箭彈。

除了机机对战他们还做了一个比赛,让所有BOT跟一个比较厉害的人类打很有意思。我们的BOT有30秒钟的分数超过人的水平不过后来就鈈行了。你们会发现机器和人会有不同的行为,因为人的反应速度不会特别快但人有一些长期的计划,他会知道什么是你的弱点然后詓利用它但BOT在比赛的时候,并不具备学习的能力所以它们都有恒定的行为模式。像有些BOT一直在转圈子有些BOT在原地不动,还有些BOT(比洳说第二名)就一边蹲着一边打人没人打得到它。

这是一些分析可以看到什么样的场景下它的值函数最高和最低。上面一排是分数最高的也就是子弹马上就要打到对方了,我们的bot马上要得分这个可以说是它最得意的时候;下面一排是分数最低的,也就是我给对方一槍对方没死,但此刻我自己也没有子弹了

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

第一点就是通过搜索来做出对将来的规划和推理。

第二点就是深度学习来做策略函数和值函数的逼近,是比较好的方法

其实很单调,不是么接下来要做什么?其实我们还有很多问題没有办法解决这里列了很小一部分。

在星际里面我们有指数级的行动可能,在这种情况下怎么做决策

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

多个AI间如何沟通协作;

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

我们训练模型一般需要大量的数据(数百万级甚至上亿),但是人类稍微在一个环境里待一段时间就适应了那么我们如何让机器也能做到这一点;

如何让bot学会战略性思考,分清战略和战术的区別如何让它的思考有层次性?

等等还有很多问题等待我们去解决。

这就是我的发言谢谢大家!

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

本文来源:雷锋网 作者:奕欣 责任编辑:王超_NT4133
}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信