下文转载自:https://news.51cto.com/art/202004/613746.htm

按:虽然还是玩棋牌乐的AI,但相对于我们日常编写的XX管理系统,好比哺乳动物 VS 鱼类了。

2019 年 8 月 29 日,微软发布了一个名为 Suphx(超级凤凰)的「麻将 AI」,在专业的麻将竞技平台上,Suphx 的实力胜过了顶级人类选手的平均水平。

作者:神经小兮来源:HyperAI超神经|2020-04-03 09:05

场景描述:还记得去年 8 月微软发布的「雀神 AI」Suphx 吗?今天,该研究团队在 arXiv 上发布了更新版的论文,进一步介绍了 Suphx 背后的技术。

2019 年 8 月 29 日,微软发布了一个名为 Suphx(超级凤凰)的「麻将 AI」,在专业的麻将竞技平台上,Suphx 的实力胜过了顶级人类选手的平均水平。

当时一经发布,Suphx 便引起了广泛的关注,不仅是人工智能领域,不少麻将爱好者也都赶来围观讨论。

麻将的信息集数目和信息集平均大小超过了桥牌、德扑和围棋

人们评价该系统比战胜了职业围棋手的 AlphaGo 更复杂,被誉为「最强日麻人工智能」。

今天,该系统的研发团队在 arXiv 上发表了论文《Suphx: Mastering Mahjong with Deep Reinforcement Learning》(《Suphx:掌握麻将与深度强化学习》),更深一步地讲解了 Suphx 背后的技术。

《Suphx:掌握麻将与深度强化学习》

论文地址:https://arxiv.org/pdf/2003.13590.pdf

Suphx 愈战愈勇:已超越 99.99% 玩家

此前我们已经介绍过,Suphx 系统利用深度强化学习,从 5000 场比赛中学习、吸取经验之后,在日本专业的麻将竞技平台「天凤」上击败了众多麻将玩家,取得平台「特上房」的最高段位十段。

Suphx 在天凤平台的段位,远高于其它麻将 AI

这样一个强悍的麻将 AI,究竟是如何打造的?来自微软亚洲研究院、京都大学、中国科学技术大学、清华大学以及南开大学的研究团队,在最新版的论文中,进行了深入的介绍。

从论文中,我们也得知,Suphx 在进一步的学习下,水平也更进一步。在拥有超过 35 万位玩家的「天凤」平台上,被官方评为水平超越 99.99% 以上玩家,这是计算机程序首次超过麻将中大多数顶级人类玩家。

五大模型与强化学习,造就雀神 AI

Suphx 包含一系列卷积神经网络,它学习了五种模型来处理不同的场景,包括 discard(丢弃模型)、Riichi 模型、chow 模型、Pong 模型和 Kong 模型。

discard 模型(上)与其它四个模型的架构(下)

在此基础上,Suphx 采用另一种基于规则的模型,来决定是否宣布赢家并进行下一轮,检查是否赢牌可以从其他玩家丢弃的牌中来判断,或者从排墙上抽出来的牌来判断。

据介绍,Suphx 的训练过程一共分为三步。

首先,它的 5 个模型都使用从「天凤」平台收集的顶级人类玩家的日志进行训练。

然后,使用包含一套基于 CPU 的麻将模拟器和基于 GPU 的轨迹生成推理引擎,通过自我博弈强化学习对系统进行微调。

最后,在在线游戏期间,使用运行时策略调整被用来观察当前轮的结果,从而使系统执行得更好。

Suphx 中的分布式强化学习系统

由于麻将牌局中,对手的信息都是未知的,因此,Suphx 尝试了先知教练技术来提升强化学习的效果。在自我博弈的训练阶段,利用隐藏信息引导模型训练方向 ,从而增强 AI 模型对可见信息的理解,并找到有效的决策依据。

评估 :5760 场角逐,创造十段纪录

在实验之前,团队在 44 个 GPU (包括 4 个 Nvidia Titan XPs 用于参数服务器,40 个 K80s 用于自我博弈玩家)上,使用 150 万次牌局,对每个模型进行了为期两天的训练。

该团队对 20 个 Nvidia Tesla K80 GPU 上的 Suphx 进行了评估。为了减小稳定排名的方差,他们从 100 多万场的麻将牌局数据集中,随机抽取了 80 万牌局的数据,并从中进行了 1000 次取样。

评估结果为,在「天凤」平台与人类玩家进行了超过 5760 场比赛后,Suphx 创造了十段的纪录——大约只有 180 个玩家曾经达到过这个水平。而 Suphx 稳定的排名是 8.74 段(人类玩家最高水平是 7.4 段)。

强化学习 agent 最终稳定排名统计

在不断优化中,RL-2 最终取得更好的表现

有趣的是,研究人员写道,Suphx 的防守「非常强」,放胡的概率很低,只有 10.06%,而且它开发了自己的游戏风格,可以保证牌的安全,并以半平手取胜。

AI 玩家(南方)会选择保守打法

放弃篮筐内的六筒,因为牌桌上已有该牌

此外,论文的合著者写道,大多数现实世界的问题,如金融市场预测和物流优化与麻将有相同的特点。比如复杂的操作/奖励规则、非完美信息问题等等。

作者相信,在 Suphx 中设计的麻将技术,包括全局奖励预测、先知引导以及政策调整等,都有巨大的潜力,将来可广泛应用于现实世界,帮助解决真实而复杂的实际问题。

转载:人家编写的程序:「雀神 AI」Suphx的更多相关文章

  1. 微信小程序「官方示例代码」浅析【上】

    从某个微信群里,拿到了这个IDE的下载地址,然后就有了这个: 根本登不上去,怎么办,怎么办呢? 看代码啊... 反正我又没有保密协议,解压缩一看NodeWebkit + React: 好啦 ,逛逛呗, ...

  2. 【Google Cloud技术咨询】「Contact Center AI」引领我们走向高度智能客服的时代

    前提背景 我们距离"不再智障"的智能客服还有多远?对于智能客服,用户一直都是"批评多于褒奖",究其原因是在于人们对于AI客服的期待很高,而AI客服在实际应用中的 ...

  3. 「腾讯视频」微信小程序插件介绍

    上期,我们在<从原理到应用,一文带你了解小程序插件能力>一文中介绍了小程序插件的意义.作用以及应用.今天开始,我们会每期与大家分享一款优秀的小程序插件,从使用场景到使用方法,都将作出详细的 ...

  4. 如何在windows中编写R程序包(转载)

    网上有不少R包的编译过程介绍,挑选了一篇比较详细的,做了稍许修改后转载至此,与大家分享 如何在windows中编写R程序包 created by helixcn modified by binaryf ...

  5. (转载)用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序“

    原文地址:http://www.vcerror.com/?p=1483 问题描述: 用VC2013编译了一个程序,在Windows 8.Windows 7(64位.32位)下都能正常运行.但在Win ...

  6. .NET CORE编写控制台程序应有的优雅姿势(转载)

    原文地址:https://www.cnblogs.com/zuowj/p/11107243.html 本文所说的编写控制台程序应有的“正确”方法,我把正确二字加上引号,因为没有绝对的正确,因人而异,因 ...

  7. 「编程羽录」上线,程序员必备的这些技能你能get到嘛?

    大家好,我是小羽. 好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章. 会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全 ...

  8. Java编写串口程序

    用Java编写串口程序一般都会用到这个 http://fizzed.com/oss/rxtx-for-java 根据电脑的情况下载 解压以后有安装文档 For a JDK installation: ...

  9. 如何让VS2012编写的程序在XP下运行

    Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和  Minimum Required Ve ...

随机推荐

  1. Docker 搭建 RabbitMQ

    Docker RabbitMQ RabbitMQ 安装非常繁琐,使用 Docker 快速搭建一个 RabbitMQ 开发环境 步骤 拉取镜像 docker pull rabbitmq 启动容器 端口会 ...

  2. Java—接口

    接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义与实 ...

  3. Jdk1.7下的HashMap源码分析

    本文主要讨论jdk1.7下hashMap的源码实现,其中主要是在扩容时容易出现死循环的问题,以及put元素的整个过程. 1.数组结构 数组+链表 示例图如下: 常量属性 /** * The defau ...

  4. vue cli3.0使用svg全过程

    VUE-cli3使用 svg-sprite-loader svg-sprite-loader 的插件,用来根据导入的 svg 文件自动生成 symbol 标签并插入 html 1.安装依赖 npm i ...

  5. 0x01 基本算法-位运算 a^b

    #include<bits/stdc++.h>using namespace std;int power(int a, int b, int p){    int ans = 1%p;   ...

  6. Shell脚本之for循环语句的应用

    在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同.这时候可以使用for循环语句,针对不同的取值重复执行相同的命令序列. for循环语句的语法结构: ...

  7. SpringSecurity权限管理系统实战—五、整合SpringSecurity(下)

    系列目录 前言 上篇文章SpringSecurity整合了一半,这次把另一半整完,所以本篇的序号接着上一篇. 七.自定义用户信息 前面我们登录都是用的指定的用户名和密码或者是springsecurit ...

  8. 地图绘制之basemap第一弹 basemap选择与安装

    作为一个测绘GIS专业的学生,会有很多绘制地图的需求,一般情况使用ArcGIS.QGIS就可以解决,但是在绘制如论文插图时需要使用更加专业可定制化程度更高的工具,专业传统一般使用GMT,几经比较,最终 ...

  9. SparkSQL DSL 随便写写

    @Testdef functionTest() = { Logger.getLogger("org").setLevel(Level.WARN) val spark = getSp ...

  10. nova卸载volume源码分析

    基于llvm +iscsi协议进行分析 1.客戶端接受请求并路由到 VolumeAttachmentController 其对应的restfull请求格式如下:delete /servers/{ser ...