AI程序首次在德州扑克中战胜人类

DeepStack采用了一个完全不同的方法。它持续地使用CFR中的循环推理来处理信息不对称的问题。但是,它并不会计算和存储一个完整的优先策略用于博弈,所以也不需要进行简要的提炼(浓缩)。反之,在游戏中,它会在每一个具体的场景出现时就进行考虑, 但是并不是独立的。

通过使用一个快速的近似估计来代替某一种深度的计算,它能避免对整个游戏的剩余部分进行推理。这种估计可以被看成是DeepStack的直觉:在任何可能的扑克情境下,持有任何可能的个人牌的牌面大小的直觉。

最终,从某种程度上来说与人类的很像的DeepStack的直觉,是需要被训练的。我们使用了随机生成的扑克情景用深度学习进行训练。最终,我们证明了,DeepStack从理论上来说是可行的,比起基于“浓缩”的方法,它能产生从实质上需要更少地探索的策略,同时,它也是世界上首个在HUNL游戏中击败人类专业玩家的计算机程序,平均赢率超过450 mbb/g。(mbb/g,milli-big-blinds per game ,是用于衡量扑克玩家表现的指数,50 mbb/g可以就认为是一个较大的优势,750mbb/g就是对手每局都弃牌的赢率。)

神经网络机器学习系统第一次战胜人类职业玩家

跟职业选手对抗结果

为了把DeepStack跟人类专家相比较,我们雇用了国际扑克联盟(International Federation of Poker)里的专业扑克选手。选手们在4周中完成3000局比赛。为了激励选手,给排名最高的前三(以AIVAT计)分别予以5000加元、2500加元和1250加元的奖励。比赛在2016年11月7日和12月12日之间在线上举行,扑克选手可以选择最多同时玩4局,这在线上很常见。总共有来自17个国家的33名选手跟DeepStack进行了较量。DeepStack跟每个人比赛的表现如表1:

表1:跟职业扑克选手较量结果,以AIVAT和所赢得的筹码进行衡量,以mbb/g为单位。

表2:向前分解根据在哪一轮而具体分析。F, C, 1/2P, P ,2P和A 分别是如下的缩写:弃牌(Fold),跟进(Call),二分之一底池押注(half of a pot-sized bet),底池押注(a pot-sized bet),双倍底池押注(twice a pot-sized bet)以及全注(All in)。最后一列表示当超过深度限制的时候用到了哪个神经网络:flop 网络, turn 网络,或者辅助网络。

比赛速度

分解计算和神经网络评估在一个GPU 上实现。这使得它可以一次快速批量调用反事实价值网络上多个子公共树。这是让DeepStack 变快的关键。在Torch7中开发,在NVIDIA GeForce GTX 1080显卡上运行。很多以上的实现手段都是为了让DeepStack 快速运行,理想上是像人打牌一样快。表3展示了DeepStack 和人类在前一步骤的之后和提交下一个步骤之前的平均间隔时间。平均看来,DeepStack 比起人类选手快很多。不过我们要记住人类选手同时可以进行4局比赛(虽然很少有人同时进行两局以上),所以当轮到人类选手比赛时,它可能正在另外一盘比赛上。

表3: 人类和DeepStack 的思考时间,DeepStack 在第一轮叫注(Pre-flop)平均时间超级快,这表明第一轮叫注时的状态通常能命中缓存。

表4: 不同程序使用局部最佳反馈(LBR:local best response)的最低程度。LBR 仅仅评估每一轮在下表中所列出的动作。F, C, 1/2P, P ,2P 和A 缩写意义同上。

最佳反馈估值(Best-response Values) vs 自玩估值(Self-play Values)

DeepStack 在持续分解计算中采用自玩估值而非最佳反馈估值。之前的预测试用CFR-D 解决更小的比赛,这表明自玩估值产生的策略通常攻击性更小,与最佳反馈估值产生的策略相比,在和测试智能代理一对一的表现更好。图5展示了一个例子,关于DeepStack在特定第五张牌的博弈中有着不同数字的分解迭代的攻击性。除了缺少对它稳固性的理论评价,用自玩估值看上去就像最佳反馈估值一样最终收敛至低攻击性策略。