有趣!機器學習預測《守望先鋒》里的贏家
網路遊戲及電競流媒體業務正在崛起為一個巨大的市場。在去年的英雄聯盟世界錦標賽中,僅一場半決賽就有高達 1.06 億人觀看,甚至超過了 2018 年「超級碗」的觀看人數。另一個成功的例子是 Twitch,目前有數千遊戲玩家在上面直播玩遊戲,平台也早已收穫數千萬觀眾。而專門向遊戲玩家提供個性化遊戲分析報告的公司 Visor,正積極搭建模型,用於實時預測遊戲比賽中的勝負。
Twitch上的遊戲主播
能夠預測遊戲勝負的模型
這種能夠預測遊戲勝負的模型會有很多用途,例如為玩家提供有益的反饋,幫助他們改進技術;從觀眾角度講,會成為很好的參與工具,特別是能吸引那些對遊戲尚不熟悉的潛在觀眾群體;最最重要的是,如果模型能比人類更準確的預測比賽,那麼它在電競投注方面會有史無前例的應用前景。
守望先鋒角色合影
為《守望先鋒》建模
我(作者 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 背後的邏輯。
通過預訓練《守望先鋒》中的英雄角色,我搭建了一個能預測比賽中團隊正確率的模型,而且該模型在遊戲開始階段的預測效果很理想。
除了預測《守望先鋒》輸贏外,這種邏輯原理也能應用到任何我們感興趣的領域。我很期待從嵌入中獲取的這種知識將來能應用到多種任務上,未來我會繼續探索此類問題。
本模型及相關代碼參見我的 Git 庫:
https://link.zhihu.com/?target=https%3A//github.com/ybw9000/hero2vec
- 加入AI學院學習 -


※獲贊2萬,一文讀懂深度學習
※AI大佬們都在關注什麼?人才、生態和機會!
TAG:AI講堂 |