有趣!机器学习预测《守望先锋》里的赢家

640?wx_fmt=gif


网络游戏及电竞流媒体业务正在崛起为一个巨大的市场。在去年的英雄联盟世界锦标赛中,仅一场半决赛就有高达 1.06 亿人观看,甚至超过了 2018 年“超级碗”的观看人数。另一个成功的例子是 Twitch,目前有数千游戏玩家在上面直播玩游戏,平台也早已收获数千万观众。而专门向游戏玩家提供个性化游戏分析报告的公司 Visor,正积极搭建模型,用于实时预测游戏比赛中的胜负。


640?wx_fmt=jpeg

能够预测游戏胜负的模型

这种能够预测游戏胜负的模型会有很多用途,例如为玩家提供有益的反馈,帮助他们改进技术;从观众角度讲,会成为很好的参与工具,特别是能吸引那些对游戏尚不熟悉的潜在观众群体;最最重要的是,如果模型能比人类更准确的预测比赛,那么它在电竞投注方面会有史无前例的应用前景。

640?wx_fmt=jpeg

守望先锋角色合影

为《守望先锋》建模

我(作者 Bowen Yang——译者注)为游戏《守望先锋》搭建了一个模型。《守望先锋》是一款基于团队的多人在线 FPS 游戏。每个团队有 6 名玩家,每个玩家选择一个英雄(见上图),然后同另外一队作战。每场游戏在一个特定的游戏地图上进行,在游戏开始前就会确定地图。简单做个比喻,就跟足球赛差不多,有两支队伍,在某个球场上踢球。

预测一场游戏的胜负涉及到很多因素,这些因素大部分都是类别特征。例如,英雄的选择状况很大程度上预示了游戏结果,特别是在早期阶段。

640?wx_fmt=jpeg

例如低分段的比赛里“半藏+黑百合”的组合胜率奇低

因此,我们挑战就是如何处理这些类别特征。如果我只用独热编码,特征空间会很容易的超过几百个维度。不幸的是,几乎不可能收集到足够多的游戏视频去供给维度如此之高的“怪物”。

然而,这个凶神恶煞的“怪物”也是可以被打败的。在本文,我会讲解如何用“嵌入”(embeddings)为游戏中的角色建模,以及如何优化预测。

640?wx_fmt=jpeg

上图为预测准确率 VS 游戏进度。预测由逻辑回归、独热编码和特征选择进行建模后得出。预测值在游戏即将结束时越来越准确,但在游戏开始阶段几乎都是随机猜测(50%的准确率)。我们的挑战是怎样优化游戏开始阶段时的预测准确率。

团队组建

团队是现代多人在线游戏的核心概念,从 RPG 游戏如《魔兽世界》到竞技游戏如《Dota2》、《英雄联盟》、《守望先锋》,莫不如此。而英雄人物正是团队的组建基石。

《守望先锋》中的英雄可以分为3个子类别:进攻者(DPS)、防守者(坦克)、支援者(奶妈)。每个英雄都有他/她自己的长处和短处。一个团队的构成应当均衡配置(这样不会有特定的瓶颈)、密切协作(这样能优势互补),并且根据玩家的技术水平和当前地图组队。这跟篮球队的组队很像,比如要考虑前锋、中锋和后卫的配置。因此,在团队构成上是由一定的模式可循的。说得更正式些,某些英雄有可能往往共同出现在同一队中。

640?wx_fmt=jpeg

一个典型的平衡配置的《守望先锋》队伍包含两名攻击者,两名防守者和两名支援者。

和均衡组合的篮球队很像。

如果我们更进一步讲,在某些情况下,人类和这些英雄也很相似。我们每个人都各不相同,仍然在这个社会上分工协作。在团队中工作,身处朋友圈子中,共享利益。而为《守望先锋》中的英雄建模的背后理念就如同为人类(或商业活动中的用户)建模。问题是,我们该如何以紧凑且有意义的方式为这些英雄建模。

词汇组成句子

将词汇和游戏中的英雄进行类比,我们能获得直觉的感知。词汇包含了很多意义,如果它们组成句子或文章时,会更有意义。同样,游戏中的这些英雄背后也有很多“意义”或个性,比如有些英雄擅长进攻,有些擅长防守,如果他们组成队伍的话,情况会变得更为复杂。

传统上,我们用独热编码为词汇建模,但这很容易受到维度的影响,因为如果词汇很大的话,特征空间很容易就会有成百上千个维度。独热编码简单假设词汇相互独立,也就是说它们的表示相互正交,因此无法捕捉词汇的语义。另一方面,词汇也能用分布式表征(也叫词向量)来表示。在这种情况下,可以用更低维度的稠密向量(嵌入)捕捉到词汇的语义。

以分布式表征表示词汇的一种现代方法就是著名的 Word2vec 模型。关于这种模型已经有了很多详细解释和应用指南。

超越 Word2vec

词向量的背后目的不仅仅是嵌入词汇。为了能利用嵌入的强大力量,我们需要考虑几个方面。

  • 相似性。相似性代表了输入之间的“重叠”。例如,“国王”和“王后”都代表统治者。输入之间的重叠越多,它们的嵌入就会越密集(维度更少)。换句话说,不同的输入会映射到相同的输出。如果输入从内在上正交,进行嵌入操作就没有意义了。

  • 训练任务。嵌入是从训练任务中学习到的(或预先学习到)。因此训练任务应和我们自己的训练任务相关,这样嵌入的信息才可以迁移。例如,用谷歌新闻训练 Word2vec,将其用于机器翻译。它们就是相关的,因为两者可以共享词汇的隐含语义。

  • 大量数据。如果想全面找出输入背后的相似性或关系,需要有大量的数据来探索高维度空间。通过分布式表征进行降维操作的“黑色魔术”很大程度上是由于有大量数据适用于非监督式学习。例如,Word2vec 模型就是用数十亿词汇训练而成。在某种程度上,嵌入就是独热编码输入和下游任务之间一个额外层的权重,仍然需要大量的数据来填充高维度输入空间。

团队:“CBOH”算法

这里的“CBOH”是“Continuous Bag of Heroes”的简写,你也应该猜到了,就是仿自 Word2vec 中的 CBOW 算法,即 Continuous Bag of Words。

根据我们上文谈论的几点需要考虑的地方,我逐步设计了 Hero2vec 模型。

  • 相似性。之前提过,《守望先锋》中的英雄可以归为一定的类别。这种相似性表明他们也能够通过分布式表征进行表示,而非独热编码。

  • 训练任务。Word2vec 会通过为中心词汇和语境词汇共同出现的状况建模来捕捉词汇的整体语义。同样地,游戏中能优势互补的英雄也会出现同一队伍中,也就是说,联合概率P(h0, h1,… h5)很高(h代表英雄)。不过,建模这种联合概率仍不是很直接。那么我们可以试着将条件概率P(h0|h1, h2,… h5)最大化。因为比赛结果的预测值就是概率P(结果|h0, h1,… h5, 其它因素),因此这两个任务高度相关。

640?wx_fmt=jpeg

图:根据团队中5个“上下文”英雄,是有可能预测最后一个英雄(“中心词”)的。例如,如果队伍已有2个攻击者、2个防守者和1个支援者,那么剩下的那个很高概率是个支援者。

  • 数据。 Visor 提供给我超过 3 万个游戏团队的队伍构成数据,用以预训练嵌入。和数十亿的词汇相比,3 万可能看起来是个很小的数目,但和词汇(维度 26,000+)相比,我的输入的维度也小得多(26 个英雄)。考虑到训练数据的需求会随着维度呈指数级增长,3 万这个数字实际上足够我训练模型了。

  • 模型。概率P(h0|h1, h2,… h5)和 Word2vec 模型的 CBOW 算法中所用的 P(中心词汇|语境词汇)的形式一模一样。更直观的讲,不像词汇,(h1, h2,… h5)的排列状况不影响概率,因此(h1, h2,… h5)的嵌入之和是输入的很好总结。模型的架构说明见下方。这里有个小技巧,除了P(h0|h1, h2,… h5)外,我们也可以这样建模 P(h1|h0, h2,… h5)等等,因此数据集可以有效的扩充 6 倍。

640?wx_fmt=jpeg

上图是 Hero2vec 模型的架构,包括一个嵌入层、一个全连接层和一个softmax层。由于 softmax 层只有26个目标,无需进行负采样。

将游戏英雄可视化

游戏英雄的嵌入(这里是 10 个维度)可以通过将它们投射到一个二维平面上(用 PCA)进行可视化,如下所示。

640?wx_fmt=jpeg

游戏英雄的嵌入(投射到2维平面上)

很明显,嵌入成功地捕捉了这些英雄背后的游戏设计理念。他们趋向于根据自身的角色和类别聚集在一起。更有意思的是,嵌入还捕捉到了这些英雄超出类别特征之外的微妙特点。例如,路霸被很多玩家当成 DPS 英雄(2333333),虽然他被设计成坦克;尽管被认为是支援型英雄,“秩序之光”并没有怎么治愈盟友,所以她更接近于 DPS 英雄和坦克等。对于熟悉《守望先锋》的人来说,值得一提的是进攻型和防守型 DPS 英雄之间并没有明确的界限,建议玩家别真的按游戏设计的类别来使用他们。

640?wx_fmt=jpeg

很难说秩序之光是一个传统的支援型英雄

因此,和英雄(或商业产品)的硬编码类别相比,嵌入在捕捉它们的个性或属性方面会更灵活更准确,也就是说,玩家(顾客)和游戏设计者(商家)都能从嵌入中获取更有用的信息和见解。玩家可以用它们更好的理解或享受游戏,游戏设计者也能用它们优化游戏的设计。

Map2vec

目前为止,我聊到了如何为《守望先锋》中的英雄建模。在详谈英雄的嵌入如何帮助预测游戏结果之前,我想简单说说怎样处理另一个类别特征,也就是游戏地图。

每局《守望先锋》游戏都是在一个特定的地图上开战(不同地图里各个英雄的优势体现也有所不同),队伍配置实际上也是根据地图所决定,也就是 P(团队|地图)。用贝叶斯定理重写 P(团队|地图)~P(地图|团队)P(团队)。那么可以将 P(地图|团队)建模为嵌入到地图中,如下所示:

640?wx_fmt=jpeg

图:模型 map2vec 的架构,包含一个英雄的嵌入层,一个全连接层和一个 softmax 层。 Softmax 层的权重为地图的嵌入。

和上面的 Hero2vec 模型有一点不同,地图的嵌入来自模型最后的线性层。其灵感源自 Word2vec 模型中输入嵌入和输出嵌入都能用于表示词汇。

我们可以简单的将地图的嵌入可视化。

640?wx_fmt=jpeg

地图的嵌入

嵌入也能很好的理解地图背后的游戏设计。对于那些熟悉《守望先锋》的朋友来说,可以看出单局地图上攻击区和防守区之间的差别要比不同地图之间的差别大得多。

640?wx_fmt=jpeg

国王大道这种巷战地图很适合法老之鹰、狂鼠这类具有范围伤害的英雄

这种架构也可以泛化,用于为任何共同出现的情况建模。例如,输入可以是一些电影,目标可以是喜欢这些电影的详细观众。训练整个流水线更衣让我们获得电影和观众两方面的嵌入。

用游戏英雄的嵌入预测游戏结果

有了游戏英雄的嵌入以后,就能进一步优化游戏结果预测的准确率,如下所示:

640?wx_fmt=jpeg

图:预测准确率 VS 游戏进度。使用了 Hero2vec 嵌入后,逻辑回归模型在游戏早期阶段的预测准确率大幅提升。

在都使用逻辑回归方法的情况下,当输入嵌入英雄的嵌入时,其整体准确率要高于只将输入简单地独热编码。更有价值的是,英雄的嵌入真的能提高在游戏开始/中间阶段时的结果预测准确率,而且在游戏越早的时候越难预测结果。

队伍构成同样饱含信息的一个原因是,在游戏开始阶段,数值特征几乎没有任何方差,因此它们几乎没有用处。而随着游戏进行,越来越多的信息开始汇聚在数值特征中,因此这时队伍构成相对来说就没那么重要了。所以,在接近游戏结束时,由于数值特征的方差很大,已经大到足以揭示游戏的结果,这时两个预测值会出现重叠。

640?wx_fmt=jpeg

上图为游戏结果 VS 两个重要数值特征。在游戏开始阶段(左下角),数值特征中并无多少方差,结果几乎是重叠的。随着游戏进行(朝右上角发展),方差越来越大,结果很明显开始分离。

结语

总的来看,本文讨论了如何用低维分布式表征来表示高维类别特征,然后解释了神经语言模型和 Word2vec 背后的逻辑。

通过预训练《守望先锋》中的英雄角色,我搭建了一个能预测比赛中团队正确率的模型,而且该模型在游戏开始阶段的预测效果很理想。

除了预测《守望先锋》输赢外,这种逻辑原理也能应用到任何我们感兴趣的领域。我很期待从嵌入中获取的这种知识将来能应用到多种任务上,未来我会继续探索此类问题。

来源:IT派

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。


640?wx_fmt=png



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

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

相关文章

C#8.0宝藏好物Async streams

之前写《.NET gRPC 核心功能初体验》&#xff0c;利用gRPC双向流做了一个打乒乓的Demo&#xff0c;存储消息的对象是IAsyncEnumerable<T>&#xff0c;这个异步可枚举泛型接口支撑了gRPC的实时流式通信。本文我将回顾分享foreach/yield return/async await语法糖的本质如何…

连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库

1、安装插件在使用Visual Studio 2013添加ADO.NET实体数据模型新建连接时&#xff0c;默认是没有Mysql选项的。此时我们需要安装两个东西&#xff1a;1、mysql-for-visualstudio&#xff1a;Mysql的Visual Studio插件&#xff0c;推荐1.2.3版本2、mysql-connector-net&#xff…

C# 合并BitMap图像,生成超大bitmap

使用c#&#xff0c;合并多个bitMap图像当只需要两个图像合并的时候&#xff0c;可以简单的使用gdi&#xff0c;把两个图像画到一个画布上面实现合并bitmap.当需要将许多bitmap合并时&#xff0c;由于bitmap类限制&#xff0c;长度或宽度太大时会报异常&#xff0c;前面这种方法…

重磅来袭,2018 年 6 月编程语言排行榜

TIOBE 编程语言社区最新发布了 2018 年 6 月排行榜&#xff0c;和 5 月榜单相比&#xff0c;前九名没有任何变化&#xff0c;依然是 Java、C、C、Python、C#、Visual Basic .NET、PHP、JavaScript、SQL。5月份第十名的Ruby在这个月下降了一名&#xff0c;而R则上升一名&#xf…

mysql bench linux_MySQL Study之--Linux下安装MySQL workbench工具

系统环境&#xff1a;操作系统&#xff1a; RedHat EL6.4(64)WorkBench&#xff1a; mysql-workbench-community-6.0.9MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示…

近两个月工作日志

从3月18日到今日&#xff0c;接近两个月的时间&#xff0c;一直在做的一件事&#xff0c;就是为 xx公司开发库存管理系统。最近终于开发完毕&#xff0c;想着坐下来好好总结总结。 XX公司专业生产蕾丝产品&#xff0c;有15年的历史&#xff0c;因业务提升的关系&#xff0c;急需…

.NET6发布了Preview2,这点超越过去10年!

从ASP.NET的性能诟病&#xff0c;到.NET Core的性能持续改进&#xff0c;在每一个.NET Core版本都能看到性能优化提升的介绍。.NET Core3.1在各种性能排行中霸榜&#xff0c;.NET5再度提升了性能&#xff0c;前些天发布的.NET Preview2&#xff0c;通过PGO &#xff08;Profile…

人工智能预测2018年世界杯 | 德国人打破历史将在俄罗斯上取得最后的胜利?

2018年俄罗斯世界杯近在眼前&#xff0c;比赛将于6月14日~7月15日在俄罗斯的各地举行。但世界杯还没开始&#xff0c;人们已经出现了各种各样的“比赛结果预测”。其中不乏有一些专业人士以及原足球选手&#xff0c;也有许多“生物”对此预测。前几年&#xff0c;章鱼哥保罗就准…

Q+开放的互联网:腾讯QQ “亮剑” 开放平台

&#xff08;图一&#xff09; 近日&#xff0c;人民日报的腾讯广告&#xff08;图一&#xff09;&#xff0c;在网民心中引起不小的波动。看着图中憨厚的小企鹅&#xff0c;后面是数以万计的应用软件&#xff0c;给人一种大将领兵征战沙场的感觉。图片左下角是 “Q开放的互联网…

php查询mysql乱码_php 查询mysql乱码怎么办

php查询mysql乱码的解决办法&#xff1a;1、修改PHP页面语言本身的编码类型&#xff1b;2、将MySQL字符集更改为“UTF8”&#xff1b;3、使用ultraplus中的编码转换功能进行转换。php读取mysql中文数据出现乱码的解决方法1.PHP页面语言本身的编码类型不合适&#xff0c;这时候&…

猝不及防,Google成功“造人”令人胆寒!人类迎来史上最惨失业潮…

01猝不及防&#xff01;这次&#xff0c;Google“造人”了&#xff01;5月8号&#xff0c;谷歌召开一年一度的Google I/O大会。谷歌CEO劈柴直接祭出了这次大会的王牌AI&#xff0c;这个智能过人的Al让人看完不禁倒吸一口凉气……相比Apple Siri和Microsoft Cortana只能机械式对…

雷军这个程序员!真的牛逼!

阅读本文大概需要3分钟。这两天忙着给CEO汇报工作以及跟进几个新产品的进展&#xff0c;忙到连新闻都没时间看。今天终于轻松了点&#xff0c;早上起来刷了刷知乎&#xff0c;看见一个让我惊呆了的消息&#xff1a;雷军要造车了&#xff01;雷军宣称亲自带队&#xff0c;初期就…

poj2545

题意&#xff1a;给出三个质数&#xff0c;求这素因子只有这三个质数的数中第k大的。 分析&#xff1a;用一个数列&#xff0c;第一位是1。用三个指针指向三个prime要乘的被乘数&#xff0c;最开始都指向1。每次取乘积最小的加入数组&#xff0c;并把指针后移。加入时要判断是否…

mysql rpm 安装后修改路径_mysql rpm包安装后修改数据目录

mysql rpm包安装后修改数据目录发布时间&#xff1a;2020-06-14 23:24:25来源&#xff1a;51CTO阅读&#xff1a;1160作者&#xff1a;梦在这里mysql rpm包安装后修改数据目录1.停止mysql数据服务/etc/init.d/mysqld stop2.为创建的数据目录指定权限chmod -R 777 /home/mysql/d…

微软发布 Windows 10 预览版 Build 21343:此电脑和回收站等启用全新图标

微软已向开发频道&#xff08;Dev&#xff09;的 Windows 预览体验成员发布了 Windows 10 Insider Preview Build 21343 更新。内置应用和文件夹启用全新图标从去年开始&#xff0c;微软就不断为 Windows 10 内置应用重新设计图标。在 Windows 10 版本 20H2 更新中&#xff0c;…

什么样的程序员会让人讨厌

我有一个朋友&#xff0c;就是一个程序员&#xff0c;找他做事的时候&#xff0c;最让人讨厌了。00不愿意帮我修电脑。我说电脑坏了&#xff0c;想让他看看&#xff0c;他先是叫我检查插头&#xff0c;然后叫我重启&#xff0c;重启好之后&#xff0c;他冷淡的说&#xff1a;以…

XenServer XAPI简介

什么是XAPI&#xff0c;或者说XAPI在XenServer中有什么作用&#xff1f; XAPI&#xff08;或者XenAPI&#xff09;是XenServer中的一组管理接口的统称&#xff0c;是XenServer管理的核心&#xff0c;由一系列的toolstack组成。 XAPI主要提供XenCenter以及pool中各主机通信的接口…

leetcode刷题可以用python吗_LeetCode刷题——第四天(python)

每天选壁纸做封面这个环节是我最喜欢的&#xff0c;今天的题目是比较经典又十分简单的一道题。第四天——第四题(回文数)请看题&#xff1a;判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例1&#xff1a;输入: 121输出: true示例2&…

金州勇士队,硅谷黑科技打造的NBA奇迹!

【导读&#xff1a;2018NBA决赛表明&#xff0c;创业如同打球&#xff0c;应该学习勇士&#xff0c;团队作战打“群架”&#xff0c;单打独斗像骑士&#xff0c;纵有“小皇帝”&#xff0c;也难免被横扫】NBA是中国人民最喜欢观看和讨论的美国体育联赛。在NBA诸强中&#xff0c…

C# 调用动态链接库读取二代身份证信息

概述一般来说winform应用程序解决这个问题起来时很容易的&#xff0c;web应用程序就麻烦一点了。你必要有联机型居民身份证阅读器一个。实现方式1、新建一个winform控件项目ReadCardControl&#xff0c;添加一个主类ReadIDCardprivate bool ReadIDCard(){try{BLL.API.SynIDCar…