AlphaMao項目的回顧和總結,是不是可以算是大老師的前身?
來自專欄 VPGAME/VPESPORTS的北美黑科技作坊25 人贊了文章
去年夏天TI前的時候,VPGAME推出了一個叫AlphaMao的產品。可能很多同學都沒有用過,簡單地介紹一下,這是個基於陣容的勝率預測器,你輸入兩邊陣容,他還給你一個勝率。這個靈感來自於平時我們看直播的時候主播們經常說的「這個陣容我覺得几几開」,以及現在會說的「我們來看一下大老師覺得几几開」。其實現在似乎還掛在現網上
【VPGAME】World』s No.1 eSports service platform DOTA2不過模型已經有8個月沒有更新了(仔細想想這算不算現網事故?(?°?°?))
剛上線的時候還是有一些不錯的反響的,上一些我們VPGAME APP社區的截圖
在NGA和百度貼吧上也有不少帖子在討論,上幾個百度出來的鏈接(換手機了找不到其他的截圖QAQ,其實當時非常用心地截了很多很多用戶的反饋T T)
八師傅直播測試勝率的這是個啥軟體啊【dota2吧】_百度貼吧(喂那個析樂數據是認真的么!!(???皿??)??3??)
http://bbs.nga.cn/read.php?tid=12382933請xiao8在直播的時候玩過,然後後來好像還有幾個主播自己玩了玩。
按時間算,我們應該是最早的大數據分析勝率的模型(產品上線是17年5月份)。在我們推出2個月後的MDL上,也有另外一個team做了一個根據時間變化的勝率模型,但是顯然他們低估了這個項目的難度,我在MDL的前兩天還特別關注了一下那個模型的效果,結果開局動不動就99%、100%判死刑真是有點難看= =關鍵是死刑被打臉的概率實在太高了_(??ω?? 」∠)_
然後後來雖然計划上是有不少地更新計劃,但是因為公司職能結構的變化,繼續訓練所需要的數據系統進行了停工重構。所以這個項目也就暫停了。後來大老師推出的時候我也一度非常地沮喪想要離職(主要是看到Valve做出來的東西基本上和我計劃的是一模一樣的,以及我們曾經如此close…??????????? 當然現在已經在新的項目上站起來了!然後被OpenAI用錢又打趴下了#怎麼可能233#)
網上說如何做出大老師的文章那麼多,不過基本上都是科普文,沒怎麼說怎麼做的。所以在這篇文章里,我就來說一下我們是怎麼做出來的。由於好久沒有用中文寫文章以及不知道中文術語,會混一些英文單詞。然後我們一開始在立項的時候把這個稱之為「勝率預測器Win Rate Prediction Tool」,所以下文基本上會以勝率預測器或者wrpt來代指項目。
因為文章有點長,準備分兩篇發,在這一部分中我會提到:
- 代碼
- 結果
- 簡單地回顧下製作過程
- 改進模型過程中的幾個比較關鍵的點
代碼
代碼見:
vpus/dota2-win-rate-prediction-v1我們Team內對於開源的不同意見有很多,但是最終我決定還是開源我們的項目。有如下幾個方面考慮:
- Dota Plus的推出,使得我們的成果已經不再是行業領先的了,甚至從商用角度來說已經意義沒有那麼大了,所以開源對於公司的損失已經比較低了
- 非常多的人對於遊戲、特別是Dota2大數據非常感興趣,現在網上大多數都是科普文而沒有乾貨,希望能給大家帶來不同方向的幫助(??????)
- 我們希望能有更多的人能夠在我們的基礎上做出更好的模型,或是利用我們的模型去使用在更多的地方。有任何想法都可以在Github/知乎上和我們討論或者發我郵箱shimakaze@vpesports.com
- (自吹警告_(:з」∠)_)除去Dota Plus,目前應該是沒有比我們這個更好的模型了(笑)
結果
去年6月份時提交給我們公司運營部門的公關文:
在過去的半年中,模型每天都在通過學習新的比賽樣本來更新自己的模型。目前模型擁有60%的總體準確率以及高達97.6%的相對準確率。在針對7月15日的所有比賽的預測中,模型結果是5:5時的比賽有51%的準確率、模型結果是6:4時的比賽有59%的準確率、模型結果是7:3時的比賽有66%的準確率、模型結果是8:2時的比賽有79%的準確率、模型結果是9:1時的比賽有89%的準確率。
雖然沒有達到我們在做之前覺得的可以達到80%左右的總體準確率,但是自己的感覺還是不錯的。在去年TI中,也獲得了比較不錯的結果(錯誤集中在我最愛的VP這支20分鐘強無敵、30分鐘僵持、40分鐘雪崩的隊伍上(*′▽`*))
簡單地回顧下製作過程
我們是在16年12月底的聖誕節假期開始弄這個模型的。前後一共耗時3個星期的樣子。當時我們一共嘗試了4個不同的模型/神經網路,然後在效果最好的v4之上我們去掉了訓練多個Epoch的設定,改成了只訓練1個Epoch得到了v5。最後在4月份上線產品前,又在那之上調整了其中的英雄之間Advantage(互克關係評分)的公式,並且移除了訓練數據中的比賽具體數據(如每個英雄的KDA、出裝等),經過了6個版本得到了最終現在掛在github上的版本v1。
關於v1具體的模型的話可以看下代碼,因為是一步步改進為v1的,以及我覺得這個模型肯定不是最優Network,所以我就不一行一行解釋why do we construct this NN了。想分享一下我們在改到這個模型所經歷的幾個比較關鍵的改動。
改進模型過程中的幾個比較關鍵的點
- 增加2個支持數據我們在模型當中導入了兩個支持數據,分別是英雄在同一隊時候的勝率(combo_win_rate),以及英雄在兩個隊時候的勝率(against_win_rate)。最一開始的時候,我們是沒有添加這兩個數據的,訓練數據只有兩邊的陣容 [h1, h2, … h10] 以及比賽最終結果0 or 1。這個思路其實並不是錯誤的——所謂Deep Learning或是大數據,歸根結底還是在尋找input和output之間的relationship,可以說是一種更高級的統計。所以訓練數據只放輸入值和輸出值其實是可以的,但是訓練效率會比較低。同時這麼做其實還有另外一層好處,就是去除任何人為想法,為模型添加人為思路是我認為在機器學習中比較雙刃劍的操作,好處在於也許很快就能做出一個你期望的結果,壞處就是也許你「過度」地指導了你的模型,使得你的模型只是在按照你想的去成長而已,並不是帶給你一個正確的solution。
2、多訓練幾個Epoch,這麼做的Benefit有很多,可以參考這個Quora貼
Why are multiple epochs needed for deep learning?在做了上面這兩項更新後,我們發現效果還是不好,的確有看到預測準確度在往上漲,但是漲的非常緩慢(好像是從50%漲到了51%),而此時我們的訓練數據已經打到了差不多60G的樣子了。這個數據量其實是非常的大的,舉個例子:從我在大三接觸到機器學習到今年PhD被Master Out的5年學習中,在任何一個項目中都沒有用過超過2個G的訓練數據,這其中甚至還包括了很多圖片學習的項目。繼續增加數據集也許的確能夠給我們帶來一個可觀的結果,但是絕對不是我們應該做的事情。於是我們開始著手改進模型。我們首先想到的點是:作為一個玩家,我們平時是怎麼選擇陣容的?顯然,大多數時候我們想的是A英雄和B英雄配在一起非常厲害,比如神域哈斯卡;以及對面有什麼英雄我就要選什麼英雄,比如對面選骷髏王你選敵法猴子。所以在這次模型改進中,我們加入了同隊和異隊勝率。2. 從異隊勝率到互克評分
上面我們說到在模型中添加兩個勝率,但是實際看代碼的話會發現,我們最終並沒有使用互克的勝率,而是使用了互克的評分。這其中主要由這兩個原因:- 版本是有強勢英雄的。舉個例子來說,在我們當時訓練的時候,全能的勝率是非常恐怖的(好像有60%),而蜘蛛只有30幾的勝率。這其中有操作難度的問題,也有被克制英雄多少的問題。所以單從勝率來說的話,並不能很好地體現互克關係。這也是為什麼無論是Dotabuff還是Dotamax在英雄互克關係的時候,都額外使用了一個叫「克制指數」的數據。
- 每個英雄的選擇次數以及遇上的場次不一樣,單純比較勝率並不合適。
所以我們引入了我們在做這個項目之前就做好了的互克關係函數,公式出來的結果基本和Dotabuff一致,使用的方法是A對B的勝率到A的平均勝率的距離。不過我們的結果當時和Dotamax有一定的差別。
3. 數據處理
我們在這當中還做過的一項非常重要的改進就是訓練數據的處理。這一點其實是我們在做訓練數據的時候疏忽了。在這個項目的前置項目——計算陣容組合勝率的時候我們發現,以火槍、大屁股還有三個其他特定英雄幾乎擁有100%的勝率,這主要是來自當初非常流行的小語種速推代練。然後我們當時就一個英雄的使用難度是否應該被考慮進去也有過爭論。最終我們嘗試了以下幾種手段:- 清除所有Normal局;清除所有Normal和High局;只使用VPGAME/CDEC認證選手的比賽來削弱使用難度因素
- 清除所有時間小於10/15/20分鐘的比賽
- 清除勝率過高的陣容
在比較處理後的數據集以及訓練結果後,最終我們依然使用所有Skill level的比賽並清除了所有時間小於15分鐘的比賽。
4. 英雄位置是不是有關係?
其實在做這一項改動之前,我們的模型已經能夠產出一個非常不錯的結果了(接近60%的general accuracy以及非常不錯的相對準確度(參考上文結果))。但是我們還是想能不能再進一步,於是我們想到了應該把英雄位置也添加進去一起考慮。一場比賽後,裝備和金錢是最適合用來判斷一個英雄在他的隊伍中所處的位置的。於是在這一版本中,我們添加了的幾乎所有的基礎比賽數據,即每個英雄的最終等級、KDA、GPM、XPM、身上裝備這些。關於這個改動,由於結果相近,我和當時主要負責這個模型的同學有不同的看法:我認為這個數據可以不用添加,因為從結果上看差距非常接近,然後他極大地影響了訓練數據大小以及訓練效率;他則是認為這個數據也許再結果上體現出的改進不大,但是從模型角度說卻是實實在在地補上了一塊空缺。這個現在我覺得其實都可以,我認為Valve在做大老師的時候沒有特別考慮英雄位置(開局前)
在下一篇我將會說一下:
- 本來這個項目的後續計劃
- 沒有做成大老師的幾個原因
- 我們在這個項目上學到了什麼
- 關於這個項目的未來
傳送門
一定要填嗎:AlphaMao項目的回顧和總結,是不是可以算是大老師的前身?(二)最後照例給自己團隊打一個廣告!
歡迎各位同學給我們公司投簡歷!辦公地點在Bellevue Downtown(就在V社和Epic樓下其實),職位的話沒有Opening限制,主要還是招工程師,但是需要證明自己的價值並且說服我們招你!最好帶一封cover letter表示下你能給我們帶來什麼。實習全職都可以,表現不錯並且需要的話(4 out of 5,一般獲得Offer的話就不會太難)我們也提供H1B哦!
Email:hr-us@vpgame.cn 或者 joinus@vpesports.com 建議按照項目來投哈
想在國內工作的同學們可以投簡歷到hr@vpgame.cn
做個預告:
下星期如果有時間的話(沒時間就再下一周),會寫一篇關於VPEsports過去一年在Dota2 AI領域的研究,以及最終是如何「失敗」的,順便聊聊關於OpenAI的新的5v5 Bot的一些看法。
推薦閱讀:
※新手在DOTA2里如何不拖隊友後腿?
※DOTA里有哪些看起來沒什麼輸出,實際輸出爆炸的英雄?
※女王應該怎麼玩?
※如何評價Dota2 7.16版本更新?
※誰能科普一下dota選手sylar的歷程?