使用机器学习预测电子竞技游戏《守望先锋》的胜负
摘要:?機器學習可以預測游戲的輸贏?來看看Bowen Yang博士是如何構建這一模型的。
《守望先鋒》中的英雄
來自加州大學河濱分校的物理學博士學位的Bowen Yang正在致力于構建一個模型——對游戲中的人物特征進行有意義的學習,來預測電子競技游戲中的獲勝團隊。這個方法廣泛適用于任何具有結構化數據的業務。
現在,電子競技游戲是一個有著巨大潛力且不斷上升的市場。去年,在英雄聯盟的世界冠軍賽中,僅僅一場半決賽就吸引了1.06億觀眾,甚至超過了2018年的超級碗(美國職業橄欖球大聯盟年度冠軍賽)。為玩家提供個性化游戲分析的公司Visor,就希望能夠有一個可以實時預測團隊勝率的模型。
預測比賽
預測模型有很多種用途。比如,它可以向玩家提供有效反饋,幫助他們提高技能;對于玩家,它可以成為一個很好的參與工具,來吸引那些不熟悉游戲規則的潛在玩家;另外,如果一個模型在預測方面能夠超越人類,那么它在電子競技下注方面就會有著前所未有的潛力。
DOTA2國際邀請賽現場
《守望先鋒》簡介
我們今天建模的對象是《守望先鋒》——一款基于團隊的多人在線射擊游戲。每個隊伍有六名玩家,每位玩家從英雄列表(26名英雄)中選擇一個英雄(游戲角色,如超級馬里奧),與另一隊進行戰斗,每場游戲都有特定的游戲地圖(游戲開始之前就已設定)。
游戲中有很多因素會影響游戲的預測結果,其中大部分是分類特征。舉個例子,英雄的選擇對于游戲的前期有著很大的作用。因此,我們面臨的挑戰是:如何處理這些分類特征。如果我只使用一種熱編碼,那么特征空間可以很輕松地增長到數百個維度。不幸的是,收集足夠多的游戲數據來滿足這個高緯度特征空間,這幾乎是不可能的。
縱軸和橫軸分別為預測準確度與游戲進度,使用熱編碼和特征選擇的邏輯回歸對預測進行建模。在游戲接近尾聲時,預測較為準確;但在游戲開始時,預測幾乎是一個隨機值(具有0.5的準確性)。
本文將重點介紹如何使用嵌入對這些游戲角色進行建模,以及如何提升預測的準確度。
有關更多細節和實現,請參閱我的Github鏈接。
多個英雄可以組成一個隊伍(“復仇者”)
從《魔獸世界》等角色扮演游戲到Dota 2、LoL和Overwatch等戰斗類游戲,團隊是現代多人在線視頻游戲的核心概念,而英雄則是隊伍的基礎。
《守望先鋒》中的英雄可以分為三類:進攻(DPS)、防御(坦克)和輔助,每個英雄都有自己的強項和弱點。一個團隊應該保持英雄成員的平衡(所以沒有特定的陣容)、配合(團隊配合非常重要),根據當前的作戰地圖和英雄的技能水平形成團隊策略。這和籃球比較比較相似,需要后衛、中鋒和前鋒合作。因此,團隊的組合需要有一定的模式,甚至某個英雄可以在一個團隊中共同出現。
典型的均衡團隊需要有2名防御(坦克)、2名進攻(DPS)和2名輔助。
多個單詞可以組成一個句子
我們可以從英雄和單詞的類比中得出某些結論。一個單詞本身有自己的含義,如果形成一個句子或一篇文章,那么,它的意義更大。同樣地,英雄本身也有自己的“含義”和特征,比如一些英雄攻擊力強、一些英雄則擅長防守,如果二者組成一個團隊,那么,他們的角色會變得更加復雜。
以前,單詞是用一個熱編碼建模的,這種編碼很大程度上受到高緯災難的影響,因為詞匯量太大,以至于特征空間的維度可能很容易就超過數十萬。一個熱編碼簡單地假設單詞之間彼此獨立,即它們的表示(representations)是相互正交的,它并不捕獲單詞在句子中的含義。另一方面,單詞也可以表示為分布式表示。這樣,單詞的語義可以通過更低維的矢量(嵌入)來捕獲。
當用語詞的分布式表示的算法是著名的word2vec模型。
超越word2vec
為了利用嵌入的優勢,我們應該考慮以下幾個事項:
1.相似性:相似性代表了輸入之間的“重疊”。例如,“國王”和“女王”代表統治者。輸入的重疊越多,它們的嵌入就越密(更小的維度)。換句話說,必須有不同輸入到相同輸出的映射。如果輸入是相互正交的,那么嵌入就沒有任何意義了。
2.訓練任務:嵌入是從訓練任務中(預)學習的。訓練任務應該與我們自己的任務相關,因此嵌入的信息是可轉移的。例如,word2vec在Google新聞上進行訓練,然后用于機器翻譯。它們是相關的,因為它們的詞語具有相同的語義含義。
3.大量的數據:為了找到輸入數據之間的相似性或關系,我們需要大量數據來探索高維度空間。因為有大量的可用于無監督學習的數據,分布式表示可以減少維度背后的“黑魔法”。例如,word2vec模型在數十億字上進行訓練。在一定程度上,嵌入僅僅是獨熱編碼輸入和下行任務之間的附加線性層的權重。為了訓練包括嵌入層的整個管道,我們仍然需要大量數據來填充高維度輸入空間。Continuous bag of?heroes模型
考慮完以上幾個問題,我們現在開始設計Hero2vec模型。
1.相似性:如前所述,《守望先鋒》中的英雄屬于某些類別。這種相似性表明它們可以通過分布式表示來描述,而不是一個熱正交編碼。
2.訓練任務:通過對中心詞和上下文詞的共現進行建模,word2vec試圖來捕捉單詞的一般語義含義。同樣,高協作性的英雄很可能會在一個團隊中同時出現,即聯合概率P(h0,h1,... h5)很高(h代表英雄)。但是,對這個聯合概率進行建模并沒有非常簡單。或者,我們可以嘗試使用最大化條件概率P(h0 | h1,h2,... h5)來建模。由于游戲的預測只是P(結果| h0,h1,... h5,其他因素),因此這兩個任務是高度相關。
給定一個團隊中的五個英雄,我們就可以預測出生存到最后的的英雄。例如,如果一支球隊已經有2名后衛,2名中鋒和1名前鋒,那么最后一名球員很有可能成為球隊的前鋒。
3.數據:Visor提供了超過30,000多種團隊組合用于預訓練嵌入。與數十億的單詞相比,30,000個組合可能看起來很小,同樣,輸入維度也比詞匯表中的單詞(例如260,000+)要小的多(26英雄)。考慮到訓練數據的需求隨維度呈指數增長,實際上,30,000個組合足夠進行訓練。
4.模型:概率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),實現可視化,如下圖所示。
英雄的嵌入(投影到二維平面上)
顯然,嵌入成功地捕捉了英雄背后的游戲設計。英雄根據自己的角色或類別進行聚類。更有意思的是,嵌入還可以捕捉英雄超越其類別內其它英雄的更微妙的特征。例如,盡管Roadhog英雄是防御(坦克),玩家仍然把它看作進攻(DPS);雖然Symmetra是輔助,但它并不能治愈隊友,所以她更接近進攻(DPS)和防御(坦克)等。玩家并不像游戲設計師所認為的那樣,將它們視為兩類。對于熟悉《守望先鋒》的玩家來說,進攻型DPS和防御性DPS之間的界限非常模糊,也就是說,玩家并沒有根據游戲設計的本意,將它們歸為兩類。
因此,與硬編碼類別的英雄(或產品)相比,在捕捉英雄的特征或屬性時,嵌入可以更加流暢和準確的對其進行捕捉,即玩家和游戲設計者都能從嵌入中提取更多有用的信息。玩家可以用這個模型來更好地理解或欣賞該游戲,而游戲設計師也可以利用該模型對游戲設計進行驗證和改進。
Map2vec
我們已經討論過了如何在游戲中模擬英雄。在介紹英雄嵌入是如何幫助我們預測游戲勝負之前,我想簡單地談談如何處理另一個分類特征——地圖。
《守望先鋒》的每場游戲都是在特定的游戲地圖上進行的,而團隊的組合取決于地圖的布局,即P(團隊|地圖)。通過貝葉斯規則重寫,P(團隊|地圖)?P(地圖|團隊)P(團隊)。因此,我們可以用P(地圖|團隊)來嵌入地圖,如下所示。
map2vec的模型結構。包括英雄的嵌入層、全連接神經網絡和softmax層。softmax層的權重是地圖的嵌入。
與上面的Hero2vec模型不同的是:映射的嵌入是從最后一個線性層繪制的,word2vec模型的輸入嵌入和輸出嵌入都可以用來代表單詞。
同樣的,地圖的嵌入也可以進行可視化。
地圖的可視化
通過嵌入,我們可以很好地理解地圖背后的游戲設計。對于那些熟悉《守望先鋒》的玩家來說,能夠看到單個地圖的進攻區域和防御區域之間的差異,這比查看地圖之間的差異要更有意思。
相同的體系結構可以對任何共同出現的事務進行建模。例如,輸入為一堆電影,目標為喜歡這些電影的特定客戶。訓練這個管道,就可以為我們提供電影和客戶的嵌入。
使用英雄嵌入來預測游戲的勝負
使用英雄嵌入,可以提高游戲預測的準確度,如下圖所示:
縱軸和橫軸分別為預測準確度與游戲進度。用Hero2vec嵌入,該邏輯回歸模型可以提高游戲前期的預測準確度。
如上圖所示,二者都使用邏輯回歸,當輸入為英雄嵌入時,預測的準確度要比輸入為一個熱編碼時高。更值得一提的是,英雄嵌入的確可以提升游戲前期或中期的預測準確度。
團隊中英雄的組合能夠為模型提供很多信息,這其中的一個原因就是,在游戲開始時,數字特征幾乎不會有任何變化,因此,在游戲前期,數字特征基本上沒有什么用處。隨著游戲進入中期,數字特征種會積累更多的信息,這樣一來,團隊中英雄的組合形式就不再那么重要了。當游戲打到后期時,兩個預測結果重疊,因為數值特征中的值足夠多,足以來預測游戲結果。
?
游戲結果與兩個重要的數字特征。在游戲前期時(左下角),特征差異不大,結果幾乎是重疊的。隨著游戲繼續進展(朝右上角),方差逐漸變大,預測結果也可以很容易的分開。
總結
本文討論了如何用低維分布表示來表示高維分類特征,并遵循NLP和word2vec算法的邏輯。
通過對《守望先鋒》中的英雄進行預訓練,我構建了一個可以預測游戲勝負的可靠模型。并且,該模型在游戲前期的預測準確率更高,更為詳細的模型和代碼請查看我的Git庫。
文章原標題《Predicting e-sports winners with Machine Learning》
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的使用机器学习预测电子竞技游戏《守望先锋》的胜负的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「深圳云栖大会」大数据时代以及人工智能推
- 下一篇: 用户需求源源不断,阿里云网络创新不止