有趣!机器学习预测《守望先锋》里的赢家
網絡游戲及電競流媒體業務正在崛起為一個巨大的市場。在去年的英雄聯盟世界錦標賽中,僅一場半決賽就有高達 1.06 億人觀看,甚至超過了 2018 年“超級碗”的觀看人數。另一個成功的例子是 Twitch,目前有數千游戲玩家在上面直播玩游戲,平臺也早已收獲數千萬觀眾。而專門向游戲玩家提供個性化游戲分析報告的公司 Visor,正積極搭建模型,用于實時預測游戲比賽中的勝負。
能夠預測游戲勝負的模型
這種能夠預測游戲勝負的模型會有很多用途,例如為玩家提供有益的反饋,幫助他們改進技術;從觀眾角度講,會成為很好的參與工具,特別是能吸引那些對游戲尚不熟悉的潛在觀眾群體;最最重要的是,如果模型能比人類更準確的預測比賽,那么它在電競投注方面會有史無前例的應用前景。
守望先鋒角色合影
為《守望先鋒》建模
我(作者 Bowen Yang——譯者注)為游戲《守望先鋒》搭建了一個模型。《守望先鋒》是一款基于團隊的多人在線 FPS 游戲。每個團隊有 6 名玩家,每個玩家選擇一個英雄(見上圖),然后同另外一隊作戰。每場游戲在一個特定的游戲地圖上進行,在游戲開始前就會確定地圖。簡單做個比喻,就跟足球賽差不多,有兩支隊伍,在某個球場上踢球。
預測一場游戲的勝負涉及到很多因素,這些因素大部分都是類別特征。例如,英雄的選擇狀況很大程度上預示了游戲結果,特別是在早期階段。
例如低分段的比賽里“半藏+黑百合”的組合勝率奇低
因此,我們挑戰就是如何處理這些類別特征。如果我只用獨熱編碼,特征空間會很容易的超過幾百個維度。不幸的是,幾乎不可能收集到足夠多的游戲視頻去供給維度如此之高的“怪物”。
然而,這個兇神惡煞的“怪物”也是可以被打敗的。在本文,我會講解如何用“嵌入”(embeddings)為游戲中的角色建模,以及如何優化預測。
上圖為預測準確率 VS 游戲進度。預測由邏輯回歸、獨熱編碼和特征選擇進行建模后得出。預測值在游戲即將結束時越來越準確,但在游戲開始階段幾乎都是隨機猜測(50%的準確率)。我們的挑戰是怎樣優化游戲開始階段時的預測準確率。
團隊組建
團隊是現代多人在線游戲的核心概念,從 RPG 游戲如《魔獸世界》到競技游戲如《Dota2》、《英雄聯盟》、《守望先鋒》,莫不如此。而英雄人物正是團隊的組建基石。
《守望先鋒》中的英雄可以分為3個子類別:進攻者(DPS)、防守者(坦克)、支援者(奶媽)。每個英雄都有他/她自己的長處和短處。一個團隊的構成應當均衡配置(這樣不會有特定的瓶頸)、密切協作(這樣能優勢互補),并且根據玩家的技術水平和當前地圖組隊。這跟籃球隊的組隊很像,比如要考慮前鋒、中鋒和后衛的配置。因此,在團隊構成上是由一定的模式可循的。說得更正式些,某些英雄有可能往往共同出現在同一隊中。
一個典型的平衡配置的《守望先鋒》隊伍包含兩名攻擊者,兩名防守者和兩名支援者。
和均衡組合的籃球隊很像。
如果我們更進一步講,在某些情況下,人類和這些英雄也很相似。我們每個人都各不相同,仍然在這個社會上分工協作。在團隊中工作,身處朋友圈子中,共享利益。而為《守望先鋒》中的英雄建模的背后理念就如同為人類(或商業活動中的用戶)建模。問題是,我們該如何以緊湊且有意義的方式為這些英雄建模。
詞匯組成句子
將詞匯和游戲中的英雄進行類比,我們能獲得直覺的感知。詞匯包含了很多意義,如果它們組成句子或文章時,會更有意義。同樣,游戲中的這些英雄背后也有很多“意義”或個性,比如有些英雄擅長進攻,有些擅長防守,如果他們組成隊伍的話,情況會變得更為復雜。
傳統上,我們用獨熱編碼為詞匯建模,但這很容易受到維度的影響,因為如果詞匯很大的話,特征空間很容易就會有成百上千個維度。獨熱編碼簡單假設詞匯相互獨立,也就是說它們的表示相互正交,因此無法捕捉詞匯的語義。另一方面,詞匯也能用分布式表征(也叫詞向量)來表示。在這種情況下,可以用更低維度的稠密向量(嵌入)捕捉到詞匯的語義。
以分布式表征表示詞匯的一種現代方法就是著名的 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, 其它因素),因此這兩個任務高度相關。
圖:根據團隊中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 倍。
上圖是 Hero2vec 模型的架構,包括一個嵌入層、一個全連接層和一個softmax層。由于 softmax 層只有26個目標,無需進行負采樣。
將游戲英雄可視化
游戲英雄的嵌入(這里是 10 個維度)可以通過將它們投射到一個二維平面上(用 PCA)進行可視化,如下所示。
游戲英雄的嵌入(投射到2維平面上)
很明顯,嵌入成功地捕捉了這些英雄背后的游戲設計理念。他們趨向于根據自身的角色和類別聚集在一起。更有意思的是,嵌入還捕捉到了這些英雄超出類別特征之外的微妙特點。例如,路霸被很多玩家當成 DPS 英雄(2333333),雖然他被設計成坦克;盡管被認為是支援型英雄,“秩序之光”并沒有怎么治愈盟友,所以她更接近于 DPS 英雄和坦克等。對于熟悉《守望先鋒》的人來說,值得一提的是進攻型和防守型 DPS 英雄之間并沒有明確的界限,建議玩家別真的按游戲設計的類別來使用他們。
很難說秩序之光是一個傳統的支援型英雄
因此,和英雄(或商業產品)的硬編碼類別相比,嵌入在捕捉它們的個性或屬性方面會更靈活更準確,也就是說,玩家(顧客)和游戲設計者(商家)都能從嵌入中獲取更有用的信息和見解。玩家可以用它們更好的理解或享受游戲,游戲設計者也能用它們優化游戲的設計。
Map2vec
目前為止,我聊到了如何為《守望先鋒》中的英雄建模。在詳談英雄的嵌入如何幫助預測游戲結果之前,我想簡單說說怎樣處理另一個類別特征,也就是游戲地圖。
每局《守望先鋒》游戲都是在一個特定的地圖上開戰(不同地圖里各個英雄的優勢體現也有所不同),隊伍配置實際上也是根據地圖所決定,也就是 P(團隊|地圖)。用貝葉斯定理重寫 P(團隊|地圖)~P(地圖|團隊)P(團隊)。那么可以將 P(地圖|團隊)建模為嵌入到地圖中,如下所示:
圖:模型 map2vec 的架構,包含一個英雄的嵌入層,一個全連接層和一個 softmax 層。 Softmax 層的權重為地圖的嵌入。
和上面的 Hero2vec 模型有一點不同,地圖的嵌入來自模型最后的線性層。其靈感源自 Word2vec 模型中輸入嵌入和輸出嵌入都能用于表示詞匯。
我們可以簡單的將地圖的嵌入可視化。
地圖的嵌入
嵌入也能很好的理解地圖背后的游戲設計。對于那些熟悉《守望先鋒》的朋友來說,可以看出單局地圖上攻擊區和防守區之間的差別要比不同地圖之間的差別大得多。
國王大道這種巷戰地圖很適合法老之鷹、狂鼠這類具有范圍傷害的英雄
這種架構也可以泛化,用于為任何共同出現的情況建模。例如,輸入可以是一些電影,目標可以是喜歡這些電影的詳細觀眾。訓練整個流水線更衣讓我們獲得電影和觀眾兩方面的嵌入。
用游戲英雄的嵌入預測游戲結果
有了游戲英雄的嵌入以后,就能進一步優化游戲結果預測的準確率,如下所示:
圖:預測準確率 VS 游戲進度。使用了 Hero2vec 嵌入后,邏輯回歸模型在游戲早期階段的預測準確率大幅提升。
在都使用邏輯回歸方法的情況下,當輸入嵌入英雄的嵌入時,其整體準確率要高于只將輸入簡單地獨熱編碼。更有價值的是,英雄的嵌入真的能提高在游戲開始/中間階段時的結果預測準確率,而且在游戲越早的時候越難預測結果。
隊伍構成同樣飽含信息的一個原因是,在游戲開始階段,數值特征幾乎沒有任何方差,因此它們幾乎沒有用處。而隨著游戲進行,越來越多的信息開始匯聚在數值特征中,因此這時隊伍構成相對來說就沒那么重要了。所以,在接近游戲結束時,由于數值特征的方差很大,已經大到足以揭示游戲的結果,這時兩個預測值會出現重疊。
上圖為游戲結果 VS 兩個重要數值特征。在游戲開始階段(左下角),數值特征中并無多少方差,結果幾乎是重疊的。隨著游戲進行(朝右上角發展),方差越來越大,結果很明顯開始分離。
結語
總的來看,本文討論了如何用低維分布式表征來表示高維類別特征,然后解釋了神經語言模型和 Word2vec 背后的邏輯。
通過預訓練《守望先鋒》中的英雄角色,我搭建了一個能預測比賽中團隊正確率的模型,而且該模型在游戲開始階段的預測效果很理想。
除了預測《守望先鋒》輸贏外,這種邏輯原理也能應用到任何我們感興趣的領域。我很期待從嵌入中獲取的這種知識將來能應用到多種任務上,未來我會繼續探索此類問題。
來源:IT派
文章版權歸原作者所有,轉載僅供學習使用,不用于任何商業用途,如有侵權請留言聯系刪除,感謝合作。
總結
以上是生活随笔為你收集整理的有趣!机器学习预测《守望先锋》里的赢家的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福利再度来袭,R语言数据分析书籍值得你拥
- 下一篇: 重磅来袭,2018 年 6 月编程语言排