使用机器学习预测电子竞技游戏《守望先锋》的胜负

摘要: 机器学习可以预测游戏的输赢?来看看Bowen Yang博士是如何构建这一模型的。



《守望先锋》中的英雄

来自加州大学河滨分校的物理学博士学位的Bowen Yang正在致力于构建一个模型——对游戏中的人物特征进行有意义的学习,来预测电子竞技游戏中的获胜团队。这个方法广泛适用于任何具有结构化数据的业务。

现在,电子竞技游戏是一个有着巨大潜力且不断上升的市场。去年,在英雄联盟的世界冠军赛中,仅仅一场半决赛就吸引了1.06亿观众,甚至超过了2018年的超级碗(美国职业橄榄球大联盟年度冠军赛)。为玩家提供个性化游戏分析的公司Visor就希望能够有一个可以实时预测团队胜率的模型。

预测比赛

预测模型有很多种用途。比如,它可以向玩家提供有效反馈,帮助他们提高技能;对于玩家,它可以成为一个很好的参与工具,来吸引那些不熟悉游戏规则的潜在玩家;另外,如果一个模型在预测方面能够超越人类,那么它在电子竞技下注方面就会有着前所未有的潜力。


DOTA2国际邀请赛现场

《守望先锋》简介

我们今天建模的对象是《守望先锋》——一款基于团队的多人在线射击游戏。每个队伍有六名玩家,每位玩家从英雄列表(26名英雄)中选择一个英雄(游戏角色,如超级马里奥),与另一队进行战斗,每场游戏都有特定的游戏地图(游戏开始之前就已设定)。

游戏中有很多因素会影响游戏的预测结果,其中大部分是分类特征。举个例子,英雄的选择对于游戏的前期有着很大的作用。因此,我们面临的挑战是:如何处理这些分类特征。如果我只使用一种热编码,那么特征空间可以很轻松地增长到数百个维度。不幸的是,收集足够多的游戏数据来满足这个高纬度特征空间,这几乎是不可能的。


纵轴和横轴分别为预测准确度与游戏进度,使用热编码特征选择的逻辑回归对预测进行建模。在游戏接近尾声时,预测较为准确;但在游戏开始时,预测几乎是一个随机值(具有0.5的准确性)。

本文将重点介绍如何使用嵌入对这些游戏角色进行建模,以及如何提升预测的准确度。

有关更多细节和实现,请参阅我的Github链接

多个英雄可以组成一个队伍(复仇者

从《魔兽世界》等角色扮演游戏到Dota 2LoLOverwatch等战斗类游戏,团队是现代多人在线视频游戏的核心概念,而英雄则是队伍的基础。

《守望先锋》中的英雄可以分为三类:进攻(DPS)、防御(坦克)和辅助,每个英雄都有自己的强项和弱点。一个团队应该保持英雄成员的平衡(所以没有特定的阵容)、配合(团队配合非常重要),根据当前的作战地图和英雄的技能水平形成团队策略。这和篮球比较比较相似,需要后卫、中锋和前锋合作。因此,团队的组合需要有一定的模式,甚至某个英雄可以在一个团队中共同出现。


典型的均衡团队需要有2名防御(坦克)、2名进攻(DPS)和2名辅助。

多个单词可以组成一个句子

我们可以从英雄和单词的类比中得出某些结论。一个单词本身有自己的含义,如果形成一个句子或一篇文章,那么,它的意义更大。同样地,英雄本身也有自己的“含义”和特征,比如一些英雄攻击力强、一些英雄则擅长防守,如果二者组成一个团队,那么,他们的角色会变得更加复杂。

以前,单词是用一个热编码建模的,这种编码很大程度上受到高纬灾难的影响,因为词汇量太大,以至于特征空间的维度可能很容易就超过数十万。一个热编码简单地假设单词之间彼此独立,即它们的表示(representations)是相互正交的,它并不捕获单词在句子中的含义。另一方面,单词也可以表示为分布式表示这样,单词的语义可以通过更低维的矢量(嵌入)来捕获。

当用语词的分布式表示的算法是著名的word2vec模型

超越word2vec

为了利用嵌入的优势,我们应该考虑以下几个事项:

1.相似性:相似性代表了输入之间的“重叠”。例如,“国王”和“女王”代表统治者。输入的重叠越多,它们的嵌入就越密(更小的维度)。换句话说,必须有不同输入到相同输出的映射。如果输入是相互正交的,那么嵌入就没有任何意义了。

2.训练任务:嵌入是从训练任务中(预)学习的。训练任务应该与我们自己的任务相关,因此嵌入的信息是可转移的。例如,word2vecGoogle新闻上进行训练,然后用于机器翻译。它们是相关的,因为它们的词语具有相同的语义含义。

3.大量的数据:为了找到输入数据之间的相似性或关系,我们需要大量数据来探索高维度空间。因为有大量的可用于无监督学习的数据,分布式表示可以减少维度背后的“黑魔法”。例如,word2vec模型在数十亿字上进行训练。在一定程度上,嵌入仅仅是独热编码输入和下行任务之间的附加线性层的权重。为了训练包括嵌入层的整个管道,我们仍然需要大量数据来填充高维度输入空间。Continuous bag of heroes模型

考虑完以上几个问题,我们现在开始设计Hero2vec模型。

1.相似性:如前所述,《守望先锋》中的英雄属于某些类别。这种相似性表明它们可以通过分布式表示来描述,而不是一个热正交编码。

2.训练任务:通过对中心词和上下文词的共现进行建模,word2vec试图来捕捉单词的一般语义含义。同样,高协作性的英雄很可能会在一个团队中同时出现,即联合概率Ph0h1... h5)很高(h代表英雄)。但是,对这个联合概率进行建模并没有非常简单。或者,我们可以尝试使用最大化条件概率Ph0 | h1h2... h5)来建模。由于游戏的预测只是P(结果| h0h1... h5,其他因素),因此这两个任务是高度相关。


给定一个团队中的五个英雄,我们就可以预测出生存到最后的的英雄。例如,如果一支球队已经有2名后卫,2名中锋和1名前锋,那么最后一名球员很有可能成为球队的前锋。

3.数据Visor提供了超过30,000多种团队组合用于预训练嵌入。与数十亿的单词相比,30,000个组合可能看起来很小,同样,输入维度也比词汇表中的单词(例如260,000+)要小的多(26英雄)。考虑到训练数据的需求随维度呈指数增长,实际上,30,000个组合足够进行训练。

4.模型:概率Ph0 | h1h2... h5)与word2vec中连续词袋(CBOW)模型中的P(中心词语|上下文词语)完全相同。不同于单词的是,(h1h2... h5)之间相互置换,并不会影响概率,因此(h1h2... h5)的嵌入总和实际上就是输入总和。在这里,除了Ph0 | h1h2... h5)外,我们还可以对Ph1 | h0h2... h5)等进行建模,使数据集可以有效的扩展6次。


Hero2vec的模型架构,包括嵌入层、全连接神经网络和softmax层。由于softmax层只有26个目标,所以不需要负采样。

英雄的可视化处理

可以将英雄的嵌入(10个维度)投影到二维平面上(使用PCA),实现可视化,如下图所示。


英雄的嵌入(投影到二维平面上)

显然,嵌入成功地捕捉了英雄背后的游戏设计。英雄根据自己的角色或类别进行聚类。更有意思的是,嵌入还可以捕捉英雄超越其类别内其它英雄的更微妙的特征。例如,尽管Roadhog英雄是防御(坦克),玩家仍然把它看作进攻(DPS);虽然Symmetra是辅助,但它并不能治愈队友,所以她更接近进攻(DPS)和防御(坦克)等。玩家并不像游戏设计师所认为的那样,将它们视为两类。对于熟悉《守望先锋》的玩家来说,进攻型DPS和防御性DPS之间的界限非常模糊,也就是说,玩家并没有根据游戏设计的本意,将它们归为两类。

因此,与硬编码类别的英雄(或产品)相比,在捕捉英雄的特征或属性时,嵌入可以更加流畅和准确的对其进行捕捉,即玩家和游戏设计者都能从嵌入中提取更多有用的信息。玩家可以用这个模型来更好地理解或欣赏该游戏,而游戏设计师也可以利用该模型对游戏设计进行验证和改进。

Map2vec

我们已经讨论过了如何在游戏中模拟英雄。在介绍英雄嵌入是如何帮助我们预测游戏胜负之前,我想简单地谈谈如何处理另一个分类特征——地图。

《守望先锋》的每场游戏都是在特定的游戏地图上进行的,而团队的组合取决于地图的布局,即P(团队|地图)。通过贝叶斯规则重写,P(团队|地图)〜P(地图|团队)P(团队)。因此,我们可以用P(地图|团队)来嵌入地图,如下所示。


map2vec的模型结构。包括英雄的嵌入层、全连接神经网络和softmax层。softmax层的权重是地图的嵌入。

与上面的Hero2vec模型不同的是:映射的嵌入是从最后一个线性层绘制的,word2vec模型的输入嵌入和输出嵌入都可以用来代表单词。

同样的,地图的嵌入也可以进行可视化。


地图的可视化

通过嵌入,我们可以很好地理解地图背后的游戏设计。对于那些熟悉《守望先锋》的玩家来说,能够看到单个地图的进攻区域和防御区域之间的差异,这比查看地图之间的差异要更有意思。

相同的体系结构可以对任何共同出现的事务进行建模。例如,输入为一堆电影,目标为喜欢这些电影的特定客户。训练这个管道,就可以为我们提供电影和客户的嵌入。

使用英雄嵌入来预测游戏的胜负

使用英雄嵌入,可以提高游戏预测的准确度,如下图所示:


纵轴和横轴分别为预测准确度与游戏进度。用Hero2vec嵌入,该逻辑回归模型可以提高游戏前期的预测准确度。

如上图所示,二者都使用逻辑回归,当输入为英雄嵌入时,预测的准确度要比输入为一个热编码时高。更值得一提的是,英雄嵌入的确可以提升游戏前期或中期的预测准确度。

团队中英雄的组合能够为模型提供很多信息,这其中的一个原因就是,在游戏开始时,数字特征几乎不会有任何变化,因此,在游戏前期,数字特征基本上没有什么用处。随着游戏进入中期,数字特征种会积累更多的信息,这样一来,团队中英雄的组合形式就不再那么重要了。当游戏打到后期时,两个预测结果重叠,因为数值特征中的值足够多,足以来预测游戏结果。

 


游戏结果与两个重要的数字特征。在游戏前期时(左下角),特征差异不大,结果几乎是重叠的。随着游戏继续进展(朝右上角),方差逐渐变大,预测结果也可以很容易的分开。

总结

本文讨论了如何用低维分布表示来表示高维分类特征,并遵循NLPword2vec算法的逻辑。

通过对《守望先锋》中的英雄进行预训练,我构建了一个可以预测游戏胜负的可靠模型。并且,该模型在游戏前期的预测准确率更高,更为详细的模型和代码请查看我的Git

文章原标题《Predicting e-sports winners with Machine Learning

原文链接

本文为云栖社区原创内容,未经允许不得转载。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由器上的usb接口有什么用_工业主板上有多少种USB接口,红色的USB接口代表什么...

USB接口正式出现是在1996年,一经问世,就成功取代了串口和并口,当然这只是相对于商业电脑和民用电脑而言的,在工控机中还是有串口和并口存在的。USB版本发展至今也已经历好几个阶段,例如USB1.0、USB1.1、USB2.0、USB3.0…

GitHub 热榜第一!这个 Python 项目超 8.4k 标星,网友:太实用!

这个十一,又经历了一波抢票大战。常规办法根本抢不到,大家就把目光转移到“技术手段”上,顺便把一个Python抢票工具,送到了GitHub趋势榜第一:标星超过8.4k,来自名叫文贤平的程序员。这很可能是全GitHub最德…

c语言点按钮弹窗口,【iOS】按钮点击弹窗

拖入一个Round Rect Button,并将Button的文字修改成“点击弹窗”将ViewController.h修改为如下代码,实则在ViewController.h中添加了一行-(IBAction)messageBoxShow;,注册messageBoxShow这个函数。类似于C语言使用函数之前需要在头文件声明这…

cstring 不明确_股价不可预测明确时间点的涨跌

前言最近不少朋友或私信问或群里问几类问题:XXX 股票还能买吗?买了会不会还继续下跌?买了我能不能立刻就涨?XXX 股票能卖吗?我卖了不会还继续涨吧?XXX 股票为什么下跌这么厉害,是要有黑天鹅出现…

11月4日,上海开源基础设施峰会,不见不散!

戳蓝字“CSDN云计算”关注我们哦!即日起,登录上海开源基础设施峰会网站,凭“OpenInfra10”优惠码注册就能享受九折优惠。另外,OpenStack基金会还特别为CSDN云计算社区的成员们预留了宝贵位置。11月4日至6日,世界各地的…

5求的值c语言编辑,C语言中怎样求1+3+5~~~~~+9值并 – 手机爱问

2018-04-06C 语言中的原码怎么?数计算机二进制形式表示数分有符号数和无符号数原码、反码、补码都有符号定点数表示方法有符号定点数高位符号位0正1副下都8位整数例原码数本身二进制形式例1000001 -10000001 1正数反码和补码都和原码相同负数反码其原码除符号位之外…

RabbitMQ 下载、安装、配置、验证_rpm版本(Linux环境)

文章目录一、RabbitMQ 安装准备二、RabbitMQ 安装2.1. 环境安装(最小化版本先安装环境)2.2. 安装包下载2.3. rpm安装RabbitMQ2.4. 配置文件修改2.5. 启动RabbitMQ2.6. 查看RabbitMQ是否启动2.7. 查看RabbitMQ 插件列表2.8. 安装RabbitMQ 管控台2.9. 浏览器访问RabbitMQ 管控台三…

python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载

华泰证券网上交易系统高级版是止录最新的证券交易软件,该版本在原有版本上重新设计改版!数据更清晰,交易更快捷!新版本分别有行情、选股、资讯、数据和交易五大模块,新版的框架支持了4K高清显示器显示,如果…

使用拓扑数据分析理解卷积神经网络模型的工作过程

摘要: 神经网络功能强大,但内部复杂且不透明,被称为黑匣子工具。使用拓扑数据分析以紧凑且可理解的方式描述卷积神经网络的功能和学习过程。1.简介神经网络在各种数据方面处理上已经取得了很大的成功,包括图像、文本、时间序列等。…

2000万条直播数据,揭秘斗鱼主播生存现状

戳蓝字“CSDN云计算”关注我们哦!2019年7月17日游戏直播平台斗鱼在美国纳斯达克股票交易所成功上市,成为继虎牙直播之后第二家赴美上市的国内直播平台。7月底斗鱼因为平台主播“乔碧萝殿下”事件再次被推上热搜。段子手们纷纷调侃成为主播的门槛之低&…

最佳实践:使用负载均衡SLB IPv6搞定苹果AppStore审核

摘要: 1.Greetings HI,大家好,我是负载均衡SLB产品经理添毅,今天我们来聊一聊苹果的IPv6审核,以及使用阿里云负载均衡SLB(IPv6)搞定AppStore IPv6审核。 2.Appstore IPv6审核是什么 由于国外的I…

curl查看swift状态命令_前端应该会的23个linux常用命令

(给前端大学加星标,提升前端技能.)作者:null仔https://segmentfault.com/a/11900000214395601、ls 命令 : 显示目录内容列表Linux ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。ls [-alrtAFR] [name...]常用 options-a 显示所有文件及…

深度剖析 | 阿里热修复如何精简优化补丁资源?

摘要: 这一年,关于Sophix热修复我们陆续做了很多优化和改进,包括: 兼容最新Android版本至Android P dp3 JIT混合编译的兼容 第三方加固的全面兼容 新增稳健接入方式 三星低版本特殊机型的兼容 补丁工具加速与初始化检查 资源补丁深…

开启企业级市场转型之路 群晖亮出安全“杀手锏”

戳蓝字“CSDN云计算”关注我们哦!数据犹如企业经营者的眼睛,通过数据可以反映出很多经营中的问题。随着大数据应用日益渗透到各行各业中,数据所蕴含着的巨大商业价值也逐渐被发掘,通过挖掘分析与管理,释放更大的价值&a…

c语言空格键么 有什么意义,C语言里这个空格键跟'\0'到底啥区别啊?

满意答案为CS而liven2019.11.24采纳率:57% 等级:7已帮助:60人空格是空格,结束符0是结束符0,两者不对等。你贴的那个图是不是讲的scanf输入,scanf这个函数默认是将空格作为分割符号,所以你输入…

运放电路的工作原理_图文讲解!教你看懂7款经典运放电路

引言运放的基本分析方法:虚断,虚短。对于不熟悉的运放应用电路,就使用该基本分析方法。运放是用途广泛的器件,接入适当的反馈网络,可用作精密的交流和直流放大器、有源滤波器、振荡器及电压比较器。1、运放在有源滤波中…

自底向上——知识图谱构建技术初探

摘要: 知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过将数据粒度从document级别降到data级别,聚合大量知识,从而实现知识的快速响应和推理。文/阿里安全 染青“The world i…

如何关闭rabbitmq

rabbitmqctl stop方式2 先用ps -ef|grep rabbitmq 查询出进程号,然后用kill -9 进程号,杀死进程RabbitMQ常用命令 说明命令启用Web控制台rabbitmq-plugins enable rabbitmq_management开启服务systemctl start rabbitmq-server.service停止服务system…

全国信息联赛c语言,信息学竞赛之编程规则

本规定适用于NOI系列的各项全国性竞赛。NOI其它规章、规则中所有与本规定不符之处,均以本规定为准。不遵守本规定所造成的不良后果由选手本人承担。评测环境与竞赛环境相同。编程通则1.对于每一道试题,选手只应提交一个源程序文件。源程序文件…