2022N.GAME網(wǎng)易游戲開發(fā)者峰會(huì)于「4月18日-4月21日」舉辦,本屆峰會(huì)圍繞全新主題“未來已來 The Future is Now”,共設(shè)置創(chuàng)意趨勢(shì)場(chǎng)、技術(shù)驅(qū)動(dòng)場(chǎng)、藝術(shù)打磨場(chǎng)以及價(jià)值探索場(chǎng)四個(gè)場(chǎng)次,邀請(qǐng)了20位海內(nèi)外重磅嘉賓共享行業(yè)研發(fā)經(jīng)驗(yàn)、前沿研究成果和未來發(fā)展趨勢(shì)。
今天的干貨來自技術(shù)驅(qū)動(dòng)場(chǎng)的嘉賓曾廣俊,他是網(wǎng)易互娛AI Lab的技術(shù)主管。

以下是嘉賓分享實(shí)錄:(部分刪減與調(diào)整)
大家好。非常高興來到N.GAME峰會(huì)跟大家分享一下強(qiáng)化學(xué)習(xí)在互娛游戲的落地。
互娛AI Lab成立于2017年底,主要是要將3D、CV、RL、NLP和語音技術(shù)落地到游戲當(dāng)中,解決游戲的痛點(diǎn)問題。今天我們來講一下強(qiáng)化學(xué)習(xí)是什么?強(qiáng)化學(xué)習(xí)可以在游戲里面做些什么?最后展望一下強(qiáng)化學(xué)習(xí)除了在游戲當(dāng)中,還能在其他領(lǐng)域做出什么樣的應(yīng)用。
一、強(qiáng)化學(xué)習(xí)是什么?

假如現(xiàn)在我們要訓(xùn)練一條小狗做出坐下的這樣一個(gè)動(dòng)作,我們可能會(huì)做出一個(gè)指令讓它去坐下。如果小狗做對(duì)了這個(gè)動(dòng)作,我們就會(huì)給一個(gè)食物獎(jiǎng)勵(lì)它;如果它沒做到那我們就不會(huì)給獎(jiǎng)勵(lì)。通過這樣的反饋,多次的迭代,我們的小狗最終就會(huì)知道要做出坐下這個(gè)動(dòng)作才能獲得獎(jiǎng)勵(lì)。
同樣,當(dāng)我們的游戲接入了以后,我們會(huì)把當(dāng)前的狀態(tài)信息發(fā)送給AI,AI根據(jù)當(dāng)前的一些狀態(tài)去做出動(dòng)作。由游戲反饋這個(gè)動(dòng)作是否會(huì)有獎(jiǎng)懲,AI得到反饋之后就會(huì)據(jù)此調(diào)整它的策略。
通過多輪的迭代,它就會(huì)知道在某個(gè)時(shí)刻應(yīng)該要做什么樣的動(dòng)作才能獲得最大的回報(bào)。由于我們需要和環(huán)境進(jìn)行大量交互,所以強(qiáng)化實(shí)習(xí)通常需要很多的時(shí)間讓機(jī)器去做探索,努力縮小探索空間、提高樣本的利用率,來提高強(qiáng)化學(xué)習(xí)的訓(xùn)練效果是一個(gè)重要的方向。
二、強(qiáng)化學(xué)習(xí)可以在游戲里面做些什么?
游戲要接入強(qiáng)化學(xué)習(xí)時(shí)非常簡(jiǎn)單,只要實(shí)現(xiàn)兩個(gè)接口,一個(gè)就是reset接口,一個(gè)就step接口。reset接口會(huì)從游戲里面返回初始狀態(tài);step接口就是從AI里面獲取對(duì)應(yīng)的動(dòng)作。然后,游戲環(huán)境返回下一個(gè)狀態(tài)的信息和一些回報(bào)的獎(jiǎng)勵(lì)信息,最后把這個(gè)游戲打包成動(dòng)態(tài)庫或者docker,就可以交給強(qiáng)化學(xué)習(xí)AI訓(xùn)練。

1、強(qiáng)化學(xué)習(xí)的主要應(yīng)用:對(duì)戰(zhàn)型AI
實(shí)際上,強(qiáng)化學(xué)習(xí)最主要的應(yīng)用主要還是對(duì)戰(zhàn)型AI。在互娛游戲中我們落地了NPC的對(duì)戰(zhàn)AI。先以天下3山海繪為例,天下3山海繪是一個(gè)人機(jī)對(duì)戰(zhàn)的卡牌游戲,玩家可以選多個(gè)難度,跟機(jī)器人進(jìn)行對(duì)戰(zhàn)。
策劃需要在短時(shí)間內(nèi)完成人機(jī)對(duì)戰(zhàn)AI,這個(gè)AI要適應(yīng)多種難度,且難度要能動(dòng)態(tài)調(diào)整,以適應(yīng)玩家的水平。
如果我們用行為樹做山海繪的AI的話,是需要策劃用很多的時(shí)間去列舉每個(gè)狀態(tài)的信息,然后根據(jù)狀態(tài)的節(jié)點(diǎn)去做對(duì)應(yīng)的動(dòng)作,如果我們要做分級(jí)難度的話就更需要細(xì)致去劃分,這樣花費(fèi)的時(shí)間將會(huì)更加巨大,上線之后每一次卡牌的更新,都需要策劃去重新花費(fèi)大量時(shí)間修改行為樹去適應(yīng)新的卡牌。
實(shí)際上,這浪費(fèi)了很多的人力和時(shí)間。更關(guān)鍵的是,行為樹的AI通常強(qiáng)度都是達(dá)不到通常玩家的水平。如果用強(qiáng)化學(xué)習(xí)去做的話,我們就可以很快速的去生成AI,尤其當(dāng)新卡更新到新的游戲環(huán)境里面,強(qiáng)化學(xué)習(xí)可以很快速地適應(yīng)一個(gè)新的環(huán)境,只需要重新再Finetune一下就可以了。
強(qiáng)化學(xué)習(xí)訓(xùn)練本身,是在做機(jī)器人的自對(duì)弈的行為。這樣的一個(gè)過程中,自然而然地批量生成了大量不同難度的AI。這些AI可以無縫遷移,滿足玩家對(duì)于難度選擇的需求。最關(guān)鍵的一點(diǎn)是用強(qiáng)化學(xué)習(xí)去做AI,它最后的強(qiáng)度能夠遠(yuǎn)超玩家的水平。
我們的強(qiáng)化學(xué)習(xí)訓(xùn)練和一般的強(qiáng)化學(xué)習(xí)類似,都是主要由采樣器,訓(xùn)練器來組成。采樣器在CPU上面執(zhí)行AI的決策,通過與游戲環(huán)境進(jìn)行交互,生成大量的樣本。這些樣本又可以送到GPU上面的訓(xùn)練器上進(jìn)行優(yōu)化,優(yōu)化出來的模型再放到模型池里面。
模型池可以讓AI去選擇對(duì)戰(zhàn)的對(duì)手,通過迭代模型池的強(qiáng)度,當(dāng)前訓(xùn)練的AI也會(huì)逐漸的變強(qiáng)。其中,模型池的模型也可以作為不同難度的AI模型讓玩家選擇。這個(gè)AI的難點(diǎn)主要是在動(dòng)作空間上,剛才提到訓(xùn)練強(qiáng)化學(xué)習(xí)其實(shí)是試錯(cuò)的過程,如果我們可選的動(dòng)作太多的話,我們需要去找到合適的動(dòng)作就需要很長(zhǎng)的時(shí)間。
比如我要出AABCCD這樣的一個(gè)動(dòng)作,它有好幾張牌,我們第一張牌可能會(huì)有幾十個(gè)選擇,第二張牌同樣也會(huì)有幾十張選擇。這么多卡牌的選擇組合起來,樹型的結(jié)構(gòu)會(huì)使我們的動(dòng)作空間成指數(shù)級(jí)增長(zhǎng)。我們的解決方案是把單步?jīng)Q策變成序列決策。
也就是說,我們從游戲環(huán)境里面得到的狀態(tài),AI決策第一張牌應(yīng)該要出什么,再把第一張出的牌和環(huán)境的狀態(tài)再輸進(jìn)去AI,再做一次決策。第二張牌再以同樣的模式,再輸出到下一輪的決策里面。
最后,我們就可以輸出一個(gè)持續(xù)的決策,AABCCD再統(tǒng)一返回到給我們的游戲環(huán)境中。這樣就可以把一步的決策化為多步的決策,把游戲空間從指數(shù)級(jí)降到一個(gè)常數(shù)的級(jí)別。
我們對(duì)比一下強(qiáng)化學(xué)習(xí)跟行為樹的AI。在加入新的卡牌之后,強(qiáng)化學(xué)習(xí)明顯需要的時(shí)間會(huì)比行為樹少很多。它相比于行為樹,只有3-5個(gè)等級(jí),具有的100多個(gè)難度等級(jí)也比較平滑。另外,它還可能會(huì)存在著比較大的難度跳躍。而強(qiáng)化學(xué)習(xí),它能做到遠(yuǎn)高于玩家的水平,這是行為樹不能做到的。

我們也挑戰(zhàn)了更難的游戲,參加了NeurIPS舉辦的MineRL Diamond比賽,這個(gè)比賽已經(jīng)舉辦第三屆,每一次都吸引了大量工業(yè)界和學(xué)術(shù)界的強(qiáng)隊(duì)參加。這個(gè)比賽的目的就是在MineCraft的環(huán)境中,從一開始用一把斧頭開始采集木頭資源,再通過木頭資源去做下一步的工具,最后,要挖掘到鉆石。這個(gè)比賽舉辦以來,基本上沒有隊(duì)伍能在這種環(huán)境里面從中挖到了鉆石。比賽有很多方案,大多數(shù)隊(duì)伍都選擇了基于玩家數(shù)據(jù)去進(jìn)行訓(xùn)練,如基于玩家數(shù)據(jù)進(jìn)行模仿學(xué)習(xí),或者在模仿學(xué)習(xí)組上再進(jìn)行強(qiáng)化學(xué)習(xí)。
但官方提供的數(shù)據(jù)其實(shí)不多,玩家的水平也是參差不齊,其中也有很多無效的操作。我們也嘗試過使用官方的數(shù)據(jù)集進(jìn)行訓(xùn)練,實(shí)際上效果也并不好。那我們能不能直接用強(qiáng)化學(xué)習(xí),從零開始訓(xùn)練呢?可以,但我們要解決幾個(gè)難點(diǎn)。環(huán)境輸出的是以圖像信息為主的,由于圖像信息,它是一個(gè)3x64x64的一個(gè)圖片,它的信息維度是非常大的。要AI去遍歷這么一個(gè)大空間的數(shù)據(jù)其實(shí)非常困難,因此,我們就采用了CNN網(wǎng)絡(luò),盡量去降低它的一個(gè)復(fù)雜度,提出它的一些關(guān)鍵特征。
另外,對(duì)于這個(gè)比賽需要AI有長(zhǎng)期的規(guī)劃能力。比如它需要先從產(chǎn)木頭開始,產(chǎn)夠了足夠的木頭才能去做木鎬,用木鎬才能去更好地去挖石頭,挖到石頭后制造石搞去挖鐵,這樣一環(huán)扣一環(huán)的操作才能有機(jī)會(huì)挖到鉆石,這就需要AI在每個(gè)時(shí)刻都能知道自己的策略是要干什么,自己下一步需要干什么。而這么長(zhǎng)的一段時(shí)間里面,讓AI去盲目地去探索也是使用強(qiáng)化學(xué)習(xí)直接訓(xùn)練所需要面臨巨大挑戰(zhàn)。我們做的主要工作就是從縮減它的探索空間。
首先是動(dòng)作編碼,我們會(huì)把動(dòng)作精簡(jiǎn)到只有20個(gè)動(dòng)作,而且根據(jù)當(dāng)前的局面去屏蔽一些不需要的動(dòng)作。這樣的話,實(shí)際上我們AI每一次可以選擇動(dòng)作非常少,這樣可以壓縮探索的空間。跳幀也是一個(gè)關(guān)鍵點(diǎn)。
通過跳幀我們可以把本來很長(zhǎng)的游戲壓縮成比較短的游戲過程,AI需要做的決策數(shù)目也大大縮小了,這些策略都能進(jìn)一步縮減我們的探索空間。縮減了探索空間,我們就能在比較短的時(shí)間里面訓(xùn)出比較好的效果。更重要的是,有一個(gè)合理的獎(jiǎng)勵(lì)。比如我們?nèi)殻枰粋€(gè)藏寶圖,用藏寶圖去指引我們下一步的目標(biāo)在哪里,通過達(dá)到一個(gè)目標(biāo)獲取下一條線索,才能更容易找到目標(biāo)。
如果用原生的原始獎(jiǎng)勵(lì),要不就是第一次資源就獲得獎(jiǎng)勵(lì)之后再不能獲得獎(jiǎng)勵(lì)。這樣的話,我們的AI可能就學(xué)不到,應(yīng)該要重復(fù)收集足夠的資源才能去做工具。如果每一次都有獎(jiǎng)勵(lì),AI又可能會(huì)學(xué)到刷分這樣的一個(gè)行為。所以我們就細(xì)致的調(diào)整了它實(shí)際的一個(gè)獎(jiǎng)勵(lì),去更好地引導(dǎo)AI的訓(xùn)練。
比如木頭的話,它是一開始需要比較多,后面沒有用。所以,我們一開始會(huì)給它重復(fù)的獎(jiǎng)勵(lì),到了一定程度就不會(huì)再給獎(jiǎng)勵(lì)。另外,挖鉆石的行為,其實(shí)跟挖礦、挖石頭上的一個(gè)操作是類似的,都是要不斷挖掘。我們需要去鼓勵(lì)它進(jìn)行這樣的操作,所以挖石頭,挖鐵礦我們都是給它無限的獎(jiǎng)勵(lì)。最后,我們通過這樣的策略非常有效的將AI訓(xùn)練出來。可以看到,隨著AI的迭代,它的累積回報(bào)跟挖到鉆石的概率都是飛快的上升。最后,我們也是以歷史最高分獲得了冠軍,也是這比賽舉辦以來第一次有隊(duì)伍挖到鉆石了。
2、用強(qiáng)化學(xué)習(xí)進(jìn)行輔助游戲設(shè)計(jì)
我們還探索用強(qiáng)化學(xué)習(xí)去做輔助游戲設(shè)計(jì)的工作。比如有一個(gè)競(jìng)速游戲,需要測(cè)試賽車的圈速、賽車的漂移性能、賽道的通過性、彎道的難度;如果用人工驗(yàn)證的話,要花費(fèi)很多的時(shí)間。比如,我們需要若干天讓它去熟悉游戲、掌握游戲的技巧,將游戲技術(shù)提高到一個(gè)比較高的水平,讓測(cè)試才相對(duì)準(zhǔn)確一點(diǎn)。還要去做驗(yàn)證賽車和賽道的組合,把每一個(gè)賽車和賽道的組合都跑一遍,這也需要耗費(fèi)很多時(shí)間。

策劃重新設(shè)計(jì)的賽車或者賽道后,需要人工去重新適應(yīng)新的賽車賽道的特性,這需要花費(fèi)很多時(shí)間去重新適應(yīng)。另外用人工驗(yàn)證的話,還會(huì)存在一些偏差。因?yàn)槿斯を?yàn)證不可能保證每一次測(cè)試都是人類地最高水平,所以他可能需要重復(fù)測(cè)試驗(yàn)證。另外人固有的操作習(xí)慣也會(huì)影響他評(píng)測(cè)新的賽車,在舊的賽車賽道,他已經(jīng)很熟悉,遇到新的賽車之后,他可能就會(huì)沿用舊賽車的一些操作,這樣新賽車的特性可能就不一定能發(fā)揮出來。
強(qiáng)化學(xué)習(xí)的一個(gè)重點(diǎn)就是要加速AI的訓(xùn)練。因?yàn)橹挥屑铀倭薃I的訓(xùn)練,我們才能更好的適應(yīng)策劃的新的配置,能在更短的時(shí)間里面完成一個(gè)跑測(cè)。因此,我們的主要工作就是把一些不合理的動(dòng)作屏蔽掉,減少它的探索空間,動(dòng)態(tài)的提前結(jié)束游戲。
相似的賽道同時(shí)訓(xùn)練也有助于AI去學(xué)習(xí)它們之間的聯(lián)系,加速它的收斂過程。AI在CPU機(jī)器上也可以快速輸出結(jié)果。即便是在CPU機(jī)器 上進(jìn)行訓(xùn)練,我們也可以縮短90%的測(cè)試時(shí)間。利用AI可以在同一個(gè)賽道同時(shí)輸出多輛賽車,觀察在每一個(gè)時(shí)刻,它的位置、速度、檔位、還有賽車的引擎的信息,方便策劃去調(diào)試。
3、用強(qiáng)化學(xué)習(xí)進(jìn)行游戲的平衡性分析
除了進(jìn)行競(jìng)速游戲的驗(yàn)證以外,我們還可以做一些游戲的平衡性分析。比如在策略游戲里面,新的英雄上線了可能會(huì)有玩家吐槽,這個(gè)英雄太強(qiáng)了,跟什么英雄搭配都是無解的存在。那下一個(gè)版本策劃可能就會(huì)修改,把它削弱一點(diǎn)。實(shí)際上,上線玩家又可能會(huì)發(fā)現(xiàn)這英雄被削的太多了,之前充的錢可能又白花了。這樣的話就會(huì)給游戲的口碑帶來極大的影響,同時(shí)也會(huì)非常影響游戲玩家的體驗(yàn)。
我們嘗試可以用事前分析去解決,比如可以用人工去評(píng)估,可以用程序去模擬所有的組合對(duì)戰(zhàn)結(jié)果。當(dāng)然,我們也可以用強(qiáng)化學(xué)習(xí)去進(jìn)行探索,用人工的話,就像剛才那樣可能就會(huì)出現(xiàn),人工的遺漏。有一些情況沒有考慮到,上線之后就會(huì)被玩家發(fā)現(xiàn)有一些特別強(qiáng)的組合。這樣的話,它的準(zhǔn)確率實(shí)際上是比較低的。
如果用程序去模擬所有組合的結(jié)果會(huì)非常準(zhǔn)確,但因?yàn)樗慕M合數(shù)非常多,要通常需要數(shù)個(gè)月的時(shí)間,甚至不可接受的時(shí)間。如果用強(qiáng)化學(xué)習(xí)的話,就相當(dāng)于在兩者時(shí)間取了個(gè)折中。通過強(qiáng)化學(xué)習(xí),我們啟發(fā)式去進(jìn)行搜索,并不需要進(jìn)行所有的組合的枚舉。我們可以通過啟發(fā)式的搜索找到一些可能比較強(qiáng)的組合。我們并不需要把所有的組合都遍歷一遍,就可以得出一個(gè)比較精準(zhǔn)的結(jié)果,因?yàn)锳I并沒有人所擁有的先驗(yàn)知識(shí)的一些偏見,所以相對(duì)人的經(jīng)驗(yàn)AI的結(jié)果會(huì)更準(zhǔn)確。

強(qiáng)化學(xué)習(xí)的訓(xùn)練都離不開一個(gè)環(huán)境,在這一個(gè)游戲平衡性分析的場(chǎng)景里面,搭建一個(gè)合適的環(huán)境來表述這個(gè)問題是非常重要的。我們用模型池跟游戲模擬器組成這一個(gè)游戲環(huán)境,每一次,AI從游戲環(huán)境里面獲取到當(dāng)前要對(duì)戰(zhàn)的陣容,然后它所需要的角色就是要擊敗這個(gè)陣容所需要的組合。輸出的動(dòng)作返回到戰(zhàn)斗模擬器去進(jìn)行模擬對(duì)戰(zhàn),最后把賽果返回到我們的AI里面。
AI通過這樣的反饋就能獲取這一個(gè)陣容是否合理,多輪的迭代之后AI就會(huì)學(xué)會(huì)如何搭配陣容才能打敗對(duì)面的組合,而這樣的一個(gè)強(qiáng)的組合也會(huì)逐漸加入到我們的陣容池里面進(jìn)行淘汰,把差的陣容淘汰,留下強(qiáng)的陣容。通過迭代,陣容池里面就可以留下一大批可能潛在過強(qiáng)的英雄組合,我們把這樣的一個(gè)流程搭成一個(gè)自助跑測(cè)平臺(tái),策劃只需要上傳更新好的游戲?qū)傩晕募缓簏c(diǎn)一下運(yùn)行就可以直接跑出來所需要的結(jié)果。包括每一個(gè)陣容它的實(shí)際對(duì)戰(zhàn)的結(jié)果。每一個(gè)英雄的實(shí)際強(qiáng)度跟其他英雄的對(duì)比,還有陣容的陣容之中每個(gè)英雄的出場(chǎng)率,都可以驗(yàn)證這個(gè)英雄的強(qiáng)度是否符合策劃預(yù)先設(shè)計(jì)的預(yù)期。
三、強(qiáng)化學(xué)習(xí)在其他領(lǐng)域的應(yīng)用
前面說了很多強(qiáng)化學(xué)習(xí)在互娛游戲里面的落地,我們也可以觀察到強(qiáng)化學(xué)習(xí),不止在游戲里面有應(yīng)用,我們還可以看到在國(guó)外,有一些公司用強(qiáng)化學(xué)習(xí)和對(duì)抗學(xué)習(xí)做游戲關(guān)卡的生成。有自動(dòng)駕駛和機(jī)器人的控制都大量用到了強(qiáng)化學(xué)習(xí)的技術(shù)。
最近,Deepmind還提出了用強(qiáng)化學(xué)習(xí)去控制核聚變的反應(yīng)堆。我相信這樣的一個(gè)技術(shù)可以促進(jìn)最終核聚變的應(yīng)用。
我的演講到此結(jié)束,非常感謝大家。
2022N.GAME網(wǎng)易游戲開發(fā)者峰會(huì)4月18日-4月21日每天下午15點(diǎn)直播,戳鏈接可直達(dá)峰會(huì)官網(wǎng):https://game.academy.163.com/event/nGame