N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

遊資網發表於2022-04-20
2022N.GAME網易遊戲開發者峰會於「4月18日-4月21日」舉辦,本屆峰會圍繞全新主題“未來已來 The Future is Now”,共設定創意趨勢場、技術驅動場、藝術打磨場以及價值探索場四個場次,邀請了20位海內外重磅嘉賓共享行業研發經驗、前沿研究成果和未來發展趨勢。

今天的乾貨來自技術驅動場的嘉賓曾廣俊,他是網易互娛AI Lab的技術主管。

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

以下是嘉賓分享實錄:(部分刪減與調整)

大家好。非常高興來到N.GAME峰會跟大家分享一下強化學習在互娛遊戲的落地。

互娛AI Lab成立於2017年底,主要是要將3D、CV、RL、NLP和語音技術落地到遊戲當中,解決遊戲的痛點問題。今天我們來講一下強化學習是什麼?強化學習可以在遊戲裡面做些什麼?最後展望一下強化學習除了在遊戲當中,還能在其他領域做出什麼樣的應用。

一、強化學習是什麼?

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

假如現在我們要訓練一條小狗做出坐下的這樣一個動作,我們可能會做出一個指令讓它去坐下。如果小狗做對了這個動作,我們就會給一個食物獎勵它;如果它沒做到那我們就不會給獎勵。通過這樣的反饋,多次的迭代,我們的小狗最終就會知道要做出坐下這個動作才能獲得獎勵。

同樣,當我們的遊戲接入了以後,我們會把當前的狀態資訊傳送給AI,AI根據當前的一些狀態去做出動作。由遊戲反饋這個動作是否會有獎懲,AI得到反饋之後就會據此調整它的策略。

通過多輪的迭代,它就會知道在某個時刻應該要做什麼樣的動作才能獲得最大的回報。由於我們需要和環境進行大量互動,所以強化實習通常需要很多的時間讓機器去做探索,努力縮小探索空間、提高樣本的利用率,來提高強化學習的訓練效果是一個重要的方向。

二、強化學習可以在遊戲裡面做些什麼?

遊戲要接入強化學習時非常簡單,只要實現兩個介面,一個就是reset介面,一個就step介面。reset介面會從遊戲裡面返回初始狀態;step介面就是從AI裡面獲取對應的動作。然後,遊戲環境返回下一個狀態的資訊和一些回報的獎勵資訊,最後把這個遊戲打包成動態庫或者docker,就可以交給強化學習AI訓練。

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

1、強化學習的主要應用:對戰型AI

實際上,強化學習最主要的應用主要還是對戰型AI。在互娛遊戲中我們落地了NPC的對戰AI。先以天下3山海繪為例,天下3山海繪是一個人機對戰的卡牌遊戲,玩家可以選多個難度,跟機器人進行對戰。

策劃需要在短時間內完成人機對戰AI,這個AI要適應多種難度,且難度要能動態調整,以適應玩家的水平。

如果我們用行為樹做山海繪的AI的話,是需要策劃用很多的時間去列舉每個狀態的資訊,然後根據狀態的節點去做對應的動作,如果我們要做分級難度的話就更需要細緻去劃分,這樣花費的時間將會更加巨大,上線之後每一次卡牌的更新,都需要策劃去重新花費大量時間修改行為樹去適應新的卡牌。

實際上,這浪費了很多的人力和時間。更關鍵的是,行為樹的AI通常強度都是達不到通常玩家的水平。如果用強化學習去做的話,我們就可以很快速的去生成AI,尤其當新卡更新到新的遊戲環境裡面,強化學習可以很快速地適應一個新的環境,只需要重新再Finetune一下就可以了。

強化學習訓練本身,是在做機器人的自對弈的行為。這樣的一個過程中,自然而然地批量生成了大量不同難度的AI。這些AI可以無縫遷移,滿足玩家對於難度選擇的需求。最關鍵的一點是用強化學習去做AI,它最後的強度能夠遠超玩家的水平。

我們的強化學習訓練和一般的強化學習類似,都是主要由取樣器,訓練器來組成。取樣器在CPU上面執行AI的決策,通過與遊戲環境進行互動,生成大量的樣本。這些樣本又可以送到GPU上面的訓練器上進行優化,優化出來的模型再放到模型池裡面。

模型池可以讓AI去選擇對戰的對手,通過迭代模型池的強度,當前訓練的AI也會逐漸的變強。其中,模型池的模型也可以作為不同難度的AI模型讓玩家選擇。這個AI的難點主要是在動作空間上,剛才提到訓練強化學習其實是試錯的過程,如果我們可選的動作太多的話,我們需要去找到合適的動作就需要很長的時間。

比如我要出AABCCD這樣的一個動作,它有好幾張牌,我們第一張牌可能會有幾十個選擇,第二張牌同樣也會有幾十張選擇。這麼多卡牌的選擇組合起來,樹型的結構會使我們的動作空間成指數級增長。我們的解決方案是把單步決策變成序列決策。

也就是說,我們從遊戲環境裡面得到的狀態,AI決策第一張牌應該要出什麼,再把第一張出的牌和環境的狀態再輸進去AI,再做一次決策。第二張牌再以同樣的模式,再輸出到下一輪的決策裡面。

最後,我們就可以輸出一個持續的決策,AABCCD再統一返回到給我們的遊戲環境中。這樣就可以把一步的決策化為多步的決策,把遊戲空間從指數級降到一個常數的級別。

我們對比一下強化學習跟行為樹的AI。在加入新的卡牌之後,強化學習明顯需要的時間會比行為樹少很多。它相比於行為樹,只有3-5個等級,具有的100多個難度等級也比較平滑。另外,它還可能會存在著比較大的難度跳躍。而強化學習,它能做到遠高於玩家的水平,這是行為樹不能做到的。

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

我們也挑戰了更難的遊戲,參加了NeurIPS舉辦的MineRL Diamond比賽,這個比賽已經舉辦第三屆,每一次都吸引了大量工業界和學術界的強隊參加。這個比賽的目的就是在MineCraft的環境中,從一開始用一把斧頭開始採集木頭資源,再通過木頭資源去做下一步的工具,最後,要挖掘到鑽石。這個比賽舉辦以來,基本上沒有隊伍能在這種環境裡面從中挖到了鑽石。比賽有很多方案,大多數隊伍都選擇了基於玩家資料去進行訓練,如基於玩家資料進行模仿學習,或者在模仿學習組上再進行強化學習。

但官方提供的資料其實不多,玩家的水平也是參差不齊,其中也有很多無效的操作。我們也嘗試過使用官方的資料集進行訓練,實際上效果也並不好。那我們能不能直接用強化學習,從零開始訓練呢?可以,但我們要解決幾個難點。環境輸出的是以影像資訊為主的,由於影像資訊,它是一個3x64x64的一個圖片,它的資訊維度是非常大的。要AI去遍歷這麼一個大空間的資料其實非常困難,因此,我們就採用了CNN網路,儘量去降低它的一個複雜度,提出它的一些關鍵特徵。

另外,對於這個比賽需要AI有長期的規劃能力。比如它需要先從產木頭開始,產夠了足夠的木頭才能去做木鎬,用木鎬才能去更好地去挖石頭,挖到石頭後製造石搞去挖鐵,這樣一環扣一環的操作才能有機會挖到鑽石,這就需要AI在每個時刻都能知道自己的策略是要幹什麼,自己下一步需要幹什麼。而這麼長的一段時間裡面,讓AI去盲目地去探索也是使用強化學習直接訓練所需要面臨巨大挑戰。我們做的主要工作就是從縮減它的探索空間。

首先是動作編碼,我們會把動作精簡到只有20個動作,而且根據當前的局面去遮蔽一些不需要的動作。這樣的話,實際上我們AI每一次可以選擇動作非常少,這樣可以壓縮探索的空間。跳幀也是一個關鍵點。

通過跳幀我們可以把本來很長的遊戲壓縮成比較短的遊戲過程,AI需要做的決策數目也大大縮小了,這些策略都能進一步縮減我們的探索空間。縮減了探索空間,我們就能在比較短的時間裡面訓出比較好的效果。更重要的是,有一個合理的獎勵。比如我們去尋寶,需要一個藏寶圖,用藏寶圖去指引我們下一步的目標在哪裡,通過達到一個目標獲取下一條線索,才能更容易找到目標。

如果用原生的原始獎勵,要不就是第一次資源就獲得獎勵之後再不能獲得獎勵。這樣的話,我們的AI可能就學不到,應該要重複收集足夠的資源才能去做工具。如果每一次都有獎勵,AI又可能會學到刷分這樣的一個行為。所以我們就細緻的調整了它實際的一個獎勵,去更好地引導AI的訓練。

比如木頭的話,它是一開始需要比較多,後面沒有用。所以,我們一開始會給它重複的獎勵,到了一定程度就不會再給獎勵。另外,挖鑽石的行為,其實跟挖礦、挖石頭上的一個操作是類似的,都是要不斷挖掘。我們需要去鼓勵它進行這樣的操作,所以挖石頭,挖鐵礦我們都是給它無限的獎勵。最後,我們通過這樣的策略非常有效的將AI訓練出來。可以看到,隨著AI的迭代,它的累積回報跟挖到鑽石的概率都是飛快的上升。最後,我們也是以歷史最高分獲得了冠軍,也是這比賽舉辦以來第一次有隊伍挖到鑽石了。

2、用強化學習進行輔助遊戲設計

我們還探索用強化學習去做輔助遊戲設計的工作。比如有一個競速遊戲,需要測試賽車的圈速、賽車的漂移效能、賽道的通過性、彎道的難度;如果用人工驗證的話,要花費很多的時間。比如,我們需要若干天讓它去熟悉遊戲、掌握遊戲的技巧,將遊戲技術提高到一個比較高的水平,讓測試才相對準確一點。還要去做驗證賽車和賽道的組合,把每一個賽車和賽道的組合都跑一遍,這也需要耗費很多時間。

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

策劃重新設計的賽車或者賽道後,需要人工去重新適應新的賽車賽道的特性,這需要花費很多時間去重新適應。另外用人工驗證的話,還會存在一些偏差。因為人工驗證不可能保證每一次測試都是人類地最高水平,所以他可能需要重複測試驗證。另外人固有的操作習慣也會影響他評測新的賽車,在舊的賽車賽道,他已經很熟悉,遇到新的賽車之後,他可能就會沿用舊賽車的一些操作,這樣新賽車的特性可能就不一定能發揮出來。

強化學習的一個重點就是要加速AI的訓練。因為只有加速了AI的訓練,我們才能更好的適應策劃的新的配置,能在更短的時間裡面完成一個跑測。因此,我們的主要工作就是把一些不合理的動作遮蔽掉,減少它的探索空間,動態的提前結束遊戲。

相似的賽道同時訓練也有助於AI去學習它們之間的聯絡,加速它的收斂過程。AI在CPU機器上也可以快速輸出結果。即便是在CPU機器 上進行訓練,我們也可以縮短90%的測試時間。利用AI可以在同一個賽道同時輸出多輛賽車,觀察在每一個時刻,它的位置、速度、檔位、還有賽車的引擎的資訊,方便策劃去除錯。

3、用強化學習進行遊戲的平衡性分析

除了進行競速遊戲的驗證以外,我們還可以做一些遊戲的平衡性分析。比如在策略遊戲裡面,新的英雄上線了可能會有玩家吐槽,這個英雄太強了,跟什麼英雄搭配都是無解的存在。那下一個版本策劃可能就會修改,把它削弱一點。實際上,上線玩家又可能會發現這英雄被削的太多了,之前充的錢可能又白花了。這樣的話就會給遊戲的口碑帶來極大的影響,同時也會非常影響遊戲玩家的體驗。

我們嘗試可以用事前分析去解決,比如可以用人工去評估,可以用程式去模擬所有的組合對戰結果。當然,我們也可以用強化學習去進行探索,用人工的話,就像剛才那樣可能就會出現,人工的遺漏。有一些情況沒有考慮到,上線之後就會被玩家發現有一些特別強的組合。這樣的話,它的準確率實際上是比較低的。

如果用程式去模擬所有組合的結果會非常準確,但因為它的組合數非常多,要通常需要數個月的時間,甚至不可接受的時間。如果用強化學習的話,就相當於在兩者時間取了個折中。通過強化學習,我們啟發式去進行搜尋,並不需要進行所有的組合的列舉。我們可以通過啟發式的搜尋找到一些可能比較強的組合。我們並不需要把所有的組合都遍歷一遍,就可以得出一個比較精準的結果,因為AI並沒有人所擁有的先驗知識的一些偏見,所以相對人的經驗AI的結果會更準確。

N.GAME丨網易互娛AI Lab技術主管曾廣俊:讓遊戲更智慧——強化學習在互娛遊戲的落地

強化學習的訓練都離不開一個環境,在這一個遊戲平衡性分析的場景裡面,搭建一個合適的環境來表述這個問題是非常重要的。我們用模型池跟遊戲模擬器組成這一個遊戲環境,每一次,AI從遊戲環境裡面獲取到當前要對戰的陣容,然後它所需要的角色就是要擊敗這個陣容所需要的組合。輸出的動作返回到戰鬥模擬器去進行模擬對戰,最後把賽果返回到我們的AI裡面。

AI通過這樣的反饋就能獲取這一個陣容是否合理,多輪的迭代之後AI就會學會如何搭配陣容才能打敗對面的組合,而這樣的一個強的組合也會逐漸加入到我們的陣容池裡面進行淘汰,把差的陣容淘汰,留下強的陣容。通過迭代,陣容池裡面就可以留下一大批可能潛在過強的英雄組合,我們把這樣的一個流程搭成一個自助跑測平臺,策劃只需要上傳更新好的遊戲屬性檔案,然後點一下執行就可以直接跑出來所需要的結果。包括每一個陣容它的實際對戰的結果。每一個英雄的實際強度跟其他英雄的對比,還有陣容的陣容之中每個英雄的出場率,都可以驗證這個英雄的強度是否符合策劃預先設計的預期。

三、強化學習在其他領域的應用

前面說了很多強化學習在互娛遊戲裡面的落地,我們也可以觀察到強化學習,不止在遊戲裡面有應用,我們還可以看到在國外,有一些公司用強化學習和對抗學習做遊戲關卡的生成。有自動駕駛和機器人的控制都大量用到了強化學習的技術。

最近,Deepmind還提出了用強化學習去控制核聚變的反應堆。我相信這樣的一個技術可以促進最終核聚變的應用。

我的演講到此結束,非常感謝大家。

2022N.GAME網易遊戲開發者峰會4月18日-4月21日每天下午15點直播,戳連結可直達峰會官網:https://game.academy.163.com/event/nGame

相關文章