事實上這是幾個月前的一個PPT演講。在GDC 2018上,Valve游戲工程師John McDonald介紹了度假社用深度學習提高CSGO用戶游戲體驗的嘗試。之所以說是“提高用戶體驗”而不是“鑒別開掛行為”,是因為V社這次不僅把AI技術用在了反作弊機制上,還對普通玩家心理進行了透徹研究。
2018年1月Steam游戲人數排行前三名
CSGO中的掛
CSGO(中文名《反恐精英:全球攻勢》)是V社于2012年推出的一款第一人稱射擊團隊競技游戲,它是CS系列的第四部作品,6年來一直深受國內外玩家的歡迎。作為一款FPS游戲,玩家惡意開掛幾乎是不可能避免的,相比上圖中排名第一的PUBG,其實CSGO里的掛并沒有多到人神共憤的程度。
但有掛玩家就會生氣,一生氣他們就會抱怨,會用腳投票。
根據John McDonald透露的數據,現在CSGO的月活人數有1240萬,平均日活約300萬,組隊時間平均1-2秒。對于一個已經推出6年的游戲,保持這樣的數據并穩居Steam榜單前三是不容易的,它離不開開發團隊為玩家打造的游戲環境。
可就在2016年,V社收到了鋪天蓋地的玩家投訴,許多人用發郵件、reddit發帖等方式告狀:你們的游戲有很多掛。面對玩家的怒火和無法迅速排查開掛行為的棘手情況,V社有點懵。
CSGO是V社自己開發的游戲,它自帶官方VAC系統,能對開掛者實施高效封禁——但火爆的游戲背后總伴隨經濟利益,許多人針對VAC開發了不少能繞過監控的掛,或是看準V社喜歡秋后算賬的風格找漏洞,既奪走了心存僥幸的玩家的賬號,也毀掉了正常比賽的玩家的游戲體驗。
時至今日,許多人在調侃CSGO“已涼”時都不忘把“掛太多”拉出來重點批評一下。所謂愛之深、責之切。他們對游戲的熱愛是真實的,但他們對外掛的憎惡也是深入骨髓的。而令人無奈的一個現實是,制作一個CSGO外掛的成本非常低,如果某人還保留著當初《半條命2》的外掛,他就會發現這個掛居然也可能繼續在CSGO里生效。
CSGO和深度學習
2015年,CSGO的Overwatch正式上線(別想歪!我真的沒笑),這是一個監督功能,允許獲得裁決資質的選手可以通過觀看疑似作弊選手的Demo來判斷其是否作弊或者調整了游戲參數。如果玩家發現存在開掛行為,他們可以把Demo提交給協調員進一步審核,之后官方會跟進處理并反饋結果。
Overwatch本身可以初步判斷玩家有沒有開掛,它背后的算法是樸素貝葉斯,系統先為開掛找到一個閾值,然后對結果進行分類。但實踐證明,這個基于樸素貝葉斯的系統太寬容了,它只能辨別出非常明顯的開掛行為,然后把大多數微妙的Demo——漏網之魚反饋給真人。
對于玩家而言,也許Overwatch頗為雞肋,但在深度學習眼里,這就成了不可多得的數據來源。
模型簡介
V社開發的反作弊深度學習系統叫VACnet。因為面向序列處理任務,它被設計成一個時間步長為140的GRU RNN,包含一個輸入層(256個神經元)和4個隱藏層(每層256個神經元)。網絡使用的激活函數是ReLU,損失函數是二元交叉熵,優化算法是Adagrad。
VACnet在Overwatch搜集的數據中訓練,其中包含玩家提供的內容和官方收集的內容,是個大型優質數據集。雖然現在也有用深度學習生成數據的方法,但這種做法容易讓神經網絡鉆空子,所以開發人員用的還是真實的游戲Demo。
模型的輸入不是常規的長向量,這里他們把140次射擊當做一個序列,按順序記下每個視頻幀的所有信息。這些輸入被稱為(X,y),其中X就是我們常說的特征,它包括用了什么武器、射擊后的結果、(如果擊中)目標距離有多遠、瞄準角度調整用時等。訓練到最后,模型需要能擬合X數據并反復驗證學習質量,直到輸出最佳結果。
推斷和硬件
完成訓練后,模型就要被用于推斷(饋送)。
John McDonald把這一過程類比成制作牛肉漢堡。當開發人員面對Overwatch時,他們手中沒有現成的牛肉肉泥,而是一頭不斷吃草長胖的牛。為了讓數據能為深度學習模型所用,開發人員花了95%的時間和精力把牛切成牛肉——數據,然后把剩下的1%用于把牛肉攪碎——深度學習,4%用于制作漢堡——訓練模型。
據介紹,V社平均每天收集60萬場5v5比賽,每場比賽耗時4分鐘,一共是240萬分鐘CPU耗時(一天)。然而一天只有1440分鐘,這也就是說,為了達成目標,他們至少要購買1700塊GPU。這時,玩家們獻給G胖的供奉就開始發揮作用了——他們一共買了3456塊CPU。下圖是處理器的冰山一角,它包含64個刀片式服務器,每個刀片有54個CPU核心、128GB RAM,僅用于模型推斷。
按照之前V社制定的反作弊邏輯:玩家舉報——協調員篩選——玩家裁定——開掛/沒開掛,現在他們有了VACnet,舉報環節就又增加了一個“VACnet舉報”。據了解,在所有舉報中,玩家舉報的開掛證實率為15-30%,而且種類非常豐富;而VACnet的開掛證實率高達85%-90%,但種類相對單一。
效果評價
正如之前所述的,VACnet的效果是令人滿意的,盡管缺乏靈活性和通用性,但它至少找出了大部分開掛者的“罪證”。如下圖所示,剛被加入游戲反作弊機制中時,它就小幅提高了系統檢測開掛數的數量,加入更多訓練數據后,它在2018年前后又形成了一個劇增的峰值。而且就實際應用來看,從VACnet提出至今,它還沒有誤判過一起作弊事件,當然最后的真人檢測也在其中發揮了重要作用。
從用戶反饋來看,這個深度學習嘗試也取得了史無前例的成功。自從引入Overwatch和VACnet以來,在reddit上抱怨開掛的CSGO玩家數大幅降低,僅為2016年高峰期的1%。這種情況將有利于老玩家的存續和新玩家的進駐,也是V社所喜聞樂見的。
但VACnet真的很完美嗎?其實不盡然。除了之前提到了它似乎只能識別某幾種開掛行為,它還有一個更嚴峻的缺點。訓練時,當完成“舉報——協調員篩選——玩家裁定——開掛/沒開掛”這一流程后,為了保證模型的學習效果,經真人裁定的數據會被再次饋送進模型進行學習。
這就引出一個問題,如果有人開發了一個掛,它能在前幾槍自描、鎖頭,后幾槍回歸正常,那系統該怎么判斷?如果是個真人裁判,他肯定會想:emm,這貨有問題,肯定開掛了。但機器不知道這樣的判斷依據,它只能把它標成開掛,然后同時從開掛的時間段和沒開掛的時間段內去強行學習開掛依據。這會導致模型性能變差。
針對這個問題,目前V社找到的補救方法是添加一個自動的重新訓練功能,它能修補啟發式算法帶來的漏洞。二是建立一個全新的沒有經驗的模型,由它來拓展開掛行為檢測范圍,增加系統能識別的開掛種類。第三則是把VACnet應用到其他steam游戲上,追求泛化通用化。
小結
John McDonald認為,深度學習是一種新興涌現的技術,它將改革傳統的反作弊方式。V社現在已經把深度學習用于反開掛、反作弊和Dota2英雄選擇等,而其中最受關注的就是Dota2的“大老師”。
就目前而言,玩家無需擔心有人用深度學習技術開發對抗VACnet的工具,因為V社手里掌握著其他人難以想象的游戲數據,對于深度學習來說,數據越多,模型性能越好,這是毫無疑問的。唯一需要擔心的一點是,這個用于訓練的數據集是從比賽里收集的,有人可能會惡意污染數據。雖然似乎人們可以一眼分辨出這個人有沒有開掛,但如果外掛能做到欺騙玩家,那它也能騙過VACnet,并干擾它的訓練和學習。
綜合整個演講,我們可以下這么一個結論:VACnet是有效的,但它的反作弊能力并沒有我們想象中的那么突出,它還是不能做到完全杜絕外掛。如果一個反作弊系統連玩家有沒有作弊都分辨不出來,那它的開發者其實并沒有消滅外掛的決心,而只是關心玩家的游戲體驗。
事實上這也正是VACnet成功的地方,它立竿見影地減少了投訴帖子數量,穩定住了玩家的心,讓CSGO穩居玩家活躍榜的前三位。當玩家們再次談及游戲里的開掛行為時,他們也會樂于討論V社在反作弊上的努力,并褒揚深度學習的實際效果。
對于一個普通玩家來說,這樣的結果是喜是憂呢?
-
深度學習
+關注
關注
73文章
5504瀏覽量
121213
原文標題:V社:用深度學習檢測CSGO中的開掛行為
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論