CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

本文主要是介绍CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

在国外的学术圈里,有一份论文火了。论文里进行的研究表明,人类历史上第一次,AI在德州扑克游戏上赢得了人类职业玩家。而这份论文的突破性意义在于:AI在非完整信息的博弈游戏中,赢得人类职业对手

这篇论文的名字是《DeepStack:无限下注扑克里的专家级人工智能》(DeepStack: Expert-Level Artificial Intelligence in No-Limit Poker),1月6号提交到了ArXiv上。

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

论文作者是来自加拿大Alberta大学、捷克Charles大学、布拉格捷克理工大学的研究人员。而论文题目里的DeepStack,是一种新型的算法名称,论文里说明到“DeepStack 是一种通用算法,可用于一大类非完整信息的序列博弈”。在一项涉及到数十位参与者和4.4万手扑克的研究中,DeepStack 成为了世界上第一个在“一对一无限注德州扑克”上击败了职业扑克玩家的计算机程序。

什么是“一对一无限注德州扑克”(HUNL)

德州扑克的英文名称是“Texas Hold'em”,而“一对一无限注德州扑克”(Heads-up no-limit,简称 HUNL)的意思,就是有2个玩家且不限下注筹码。这篇论文里的自然就是计算机和职业玩家挨个对局。

虽然是扑克,但跟斗地主还是很不一样的,它是“赌场”十分受欢迎的项目。这里祭出视频,帮大家理解一下德州扑克的规则和玩法。

从上面的视频中,我们大致能了解一场德州扑克会有两类信息:玩家每人手里分到2张底牌的“私有信息”和桌子上公共牌的“公开信息”。玩家用自己的2张底牌和5张公共牌结合在一起,选出5张牌,不论手中的牌使用几张(甚至可以不用手中的底牌),凑成最大的成牌,跟其他玩家比大小。按照“Hand Rank”决定最后的胜者。

在中国玩德州扑克的名人,一个是汪峰老师,另一个就是李开复老师。在知乎上“扑克有哪些技巧、经验或者原则?”的提问下,排名第一的,就是李开复老师的答案,他尤其提到玩好诈唬(Bluffing,高手惯用技巧)的关键在于学好统计

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

德州扑克是新一代的图灵测试?

德州扑克已经成为十分流行的人工智能研究测试地,每一个扑克玩家手里握着的底牌“私有信息”,是其它玩家看不到的,所以被称为是“非完整信息”(Imperfect information)的博弈。这跟围棋有很大不同,围棋是完整信息公开的博弈,玩家们可以看到棋盘上的每个旗子,考虑所有落子的可能性。所以德州扑克对于人工智能来说,更加具有挑战性。

《DeepStack》这篇论文的通信作者 Michael Bowling曾经在2015年初接受《New Scientist》采访时说道:“德州扑克最有趣的地方,就是你无法获得完整的信息”。

而卡耐基梅隆大学(CMU)Tuomas Sandholm教授也说道:“扑克已经成为在非完整信息情况下,衡量(计算机)智能水平的标准......而它可以看做是一种超越图灵测试的存在。

不知对手“底牌”的博弈,即非完整信息博弈要求更复杂的推理。

计算机正确决定,依赖于对方“底牌信息”情况下的概率分布,这种“底牌信息”可以通过对手过去的行为显露出来。比如有时玩家采取“诈唬”(Bluffing),对手有时手里并没有强牌,但还是作出全额下注志在必得的行为,计算机这时要根据对方过去的博弈表现,来判断对手有强牌的概率。

相应的,对手也会推断我方的底牌信息,所以这里就是一个“递归推理”(recursive reasoning),一个玩家无法轻易推理博弈状况。

有趣的是,这两位教授都在领导自己的团队攻克这个新型图灵测试,一位在加拿大Alberta大学,一位在美国CMU大学。

几天前,CMU已经发出预告:由Tuomas Sandholm教授领导研发出的Libratus人工智能系统,将于当地时间1月11日,在宾夕法尼亚州匹兹堡的 Rivers 赌场,与四个顶级职业玩家玩12万手的HUNL,并角逐20万美元的奖金。早在2015年,Libratus的前身Claudico与人类玩家首次对战,在8万手的对决中完败,这次算是CMU的卷土重来。

但是我们已经知道了结果,Alberta赶在CMU之前,把就论文发出来了。学术圈人士纷纷表达赞美,称DeepStack具有里程碑意义(当然这份论文还未通过同行审议阶段),然而跟CMU Libratus提前好几天的预热盛况相比,DeepStack并没有得到等量的媒体待遇,也引发一些人的不满。

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

CMU走的是当年AlphaGo的路线,在华丽的赌场搞一场秀,与人类顶尖玩家对战,还有20万美金的噱头。所以这份DeepStack论文虽然比CMU更早取得突破,但阵仗不如后者大,媒体对其忽视了,也在情理。

总之一句话,Alberta抢了先,CMU抢了热闹(学术界的竞争也是异常激烈的)。

此份DeepStack论文的成果

DeepStack总共与33位人类选手进行了4.4万手的较量,分别在2016年11月7日和12月12日之间于线上举行对局。最终获胜的前三位选手,分别有5000、2500和1250加元的奖励。以下是对局结果。结果显示,DeepStack的平均赢率为492 mbb/g(一般人类玩家到50 mbb/g就被认为拥有较大优势,750mbb/g 就是对手每局都弃牌的赢率)。

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

前面我们提到,一场扑克的信息可以分为“私有”和“公开”,放在桌子中间的5张公开牌形成一种动态的“公开状态”。游戏中的公开状态的可能序列构成一个公开树(Public tree),其中每一个公开状态都有一个相关的公开子树(Public subtree)。

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

上图是HUNL 中公开树的一部分。红色和蓝色线条表示玩家动作,绿色线条表示公开的公共牌。圆形节点表示游戏结束。

CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试

这张图是DeepStack整体架构,分为(a)(b)(c)三个部分。在(a)中,DeepStack在每一个公开状态里, 都要重新计算它需要的动作,其中子树值(Subtree value)会通过一个训练好的深度神经网络 Neural net(b)来计算,而训练Neural net的样本就是(c)。

总的来说,DeepStack结合了递归推理(Recursive reasoning)来处理信息不对称性,还结合了分解(Decomposition)集中计算到相关决策上,并形成了一种关于任意牌的直觉(Intuition),这种直觉可以使用深度学习进行自我玩牌而自动学习到。

而对于DeepStack和1月11日的CMU的Libratus赌场大战,雷锋网将跟踪深入报道。

PS:关注雷锋网公众号(雷锋网(公众号:雷锋网)


本文作者:亚萌


本文转自雷锋网禁止二次转载,原文链接


这篇关于CMU风头被抢,新型DeepStack算法抢先攻克德州扑克图灵测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278025

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11