多智能體對(duì)抗作為決策AI中重要的部分,也是強(qiáng)化學(xué)習(xí)領(lǐng)域的難題之一。為豐富多智能體對(duì)抗環(huán)境,OpenDILab(開(kāi)源決策智能平臺(tái))開(kāi)源了一款多智能體對(duì)抗競(jìng)技游戲環(huán)境——Go-Bigger。同時(shí),Go-Bigger還可作為強(qiáng)化學(xué)習(xí)環(huán)境協(xié)助多智能體決策AI研究。 與風(fēng)靡全球的agar.io、球球大作戰(zhàn)等游戲類(lèi)似,在Go-Bigger中,玩家(AI)控制地圖中的一個(gè)或多個(gè)圓形球,通過(guò)吃食物球和其他比玩家球小的單位來(lái)盡可能獲得更多重量,并需避免被更大的球吃掉。每個(gè)玩家開(kāi)始僅有一個(gè)球,當(dāng)球達(dá)到足夠大時(shí),玩家可使其分裂、吐孢子或融合,和同伴完美配合來(lái)輸出博弈策略,并通過(guò)AI技術(shù)來(lái)操控智能體由小到大地進(jìn)化,憑借對(duì)團(tuán)隊(duì)中多智能體的策略控制來(lái)吃掉盡可能多的敵人,從而讓己方變得更強(qiáng)大并獲得最終勝利。 四類(lèi)小球,挑戰(zhàn)不同決策路徑 Go-Bigger采用Free For All(FFA)模式來(lái)進(jìn)行比賽。比賽開(kāi)始時(shí),每個(gè)玩家僅有一個(gè)初始球。通過(guò)移動(dòng)該球,玩家可吃掉地圖上的其他單位來(lái)獲取更大的重量。每個(gè)隊(duì)伍都需和其他所有隊(duì)伍進(jìn)行對(duì)抗,每局比賽持續(xù)十分鐘。比賽結(jié)束后,以每個(gè)隊(duì)伍最終獲得的重量來(lái)進(jìn)行排名。 在一局比賽中共有分身球、孢子球、食物球、荊棘球四類(lèi)球。分身球是玩家在游戲中控制移動(dòng)或者技能釋放的球,可以通過(guò)覆蓋其他球的中心點(diǎn)來(lái)吃掉比自己小的球;孢子球由玩家的分身球發(fā)射產(chǎn)生,會(huì)留在地圖上且可被其他玩家吃掉;食物球是游戲中的中立資源,其數(shù)量會(huì)保持動(dòng)態(tài)平衡。如玩家的分身球吃了一個(gè)食物球,食物球的重量將被傳遞到分身球;荊棘球也是游戲中的中立資源,其尺寸更大、數(shù)量更少。如玩家的分身球吃了一個(gè)荊棘球,荊棘球的大小將被傳遞到分身球,同時(shí)分身球會(huì)爆炸并分裂成多個(gè)分身。此外,荊棘球可通過(guò)吃掉孢子球而被玩家移動(dòng)。 分身球 孢子球 食物球 荊棘球(尖刺) 團(tuán)隊(duì)緊密配合,實(shí)現(xiàn)合理重量傳遞 在Go-Bigger中,團(tuán)隊(duì)內(nèi)部的合作和外部的競(jìng)技對(duì)于最終的成績(jī)至關(guān)重要。因此,Go-Bigger設(shè)計(jì)了一系列的規(guī)則來(lái)提高團(tuán)隊(duì)所能帶來(lái)的收益。由于玩家的分身球重量越小,移動(dòng)速度越快,更多的分身可以保證快速發(fā)育,但是會(huì)面臨被其他玩家吃掉的風(fēng)險(xiǎn)。同時(shí),冷卻期的存在使得玩家無(wú)法靠自身擺脫這樣的風(fēng)險(xiǎn)。因此,同一隊(duì)伍中不同玩家的配合尤為關(guān)鍵。 為便于團(tuán)隊(duì)內(nèi)玩家的配合,Go-Bigger設(shè)置了玩家無(wú)法被同隊(duì)伍完全吃掉的規(guī)則。Go-Bigger還設(shè)置了單個(gè)分身球的重量上限和重量衰減,使得單一分身球無(wú)法保持過(guò)大重量,迫使其分裂以減少重量損失。在游戲后期,團(tuán)隊(duì)內(nèi)部的重量傳遞會(huì)顯得至關(guān)重要,合理的重量傳遞可以保證團(tuán)隊(duì)在與其他隊(duì)伍對(duì)抗時(shí)獲得更大的優(yōu)勢(shì)。 支持RL環(huán)境,提供三種交互模式 此外,為幫助用戶(hù)在強(qiáng)化學(xué)習(xí)領(lǐng)域的多智能體策略學(xué)習(xí),Go-Bigger也提供了符合gym.Env標(biāo)準(zhǔn)的接口供其使用。在一局游戲中,Go-Bigger默認(rèn)設(shè)置含有20個(gè)狀態(tài)幀和5個(gè)動(dòng)作幀。每個(gè)狀態(tài)幀都會(huì)對(duì)當(dāng)前地圖內(nèi)所有單位進(jìn)行仿真和狀態(tài)處理,而動(dòng)作幀會(huì)在此基礎(chǔ)上,附加對(duì)單位的動(dòng)作控制,即改變單位的速度、方向等屬性,或使單位啟用分裂、發(fā)射或停止等技能。 為了更方便地對(duì)環(huán)境進(jìn)行探索,Go-Bigger還提供了必要的可視化工具。在與環(huán)境進(jìn)行交互的時(shí)候,可以直接保存本局包含全局視角及各個(gè)玩家視角的錄像。此外,Go-Bigger提供了單人全局視野、雙人全局視野、單人局部視野三種人機(jī)交互模式,使得用戶(hù)可以快速了解環(huán)境規(guī)則。 三步走,快速搭建強(qiáng)化學(xué)習(xí)baseline 算法baseline的目的是驗(yàn)證某個(gè)問(wèn)題環(huán)境使用強(qiáng)化學(xué)習(xí)算法的初步效果,對(duì)各個(gè)環(huán)節(jié)的信息做簡(jiǎn)單梳理和分析,熟悉之后便可輕松上手比賽,在環(huán)境、算法、算力上逐步增加復(fù)雜度,設(shè)計(jì)迭代效果更強(qiáng)的智能體。 Go-Bigger環(huán)境的強(qiáng)化學(xué)習(xí)算法baseline主要分為環(huán)境瘦身、基礎(chǔ)算法選擇、定制訓(xùn)練流程三部分。其中,環(huán)境瘦身即將原始游戲環(huán)境簡(jiǎn)化成適用于強(qiáng)化學(xué)習(xí)的標(biāo)準(zhǔn)環(huán)境格式;基礎(chǔ)算法選擇指根據(jù)環(huán)境的基本信息選擇合理的基礎(chǔ)RL算法;定制訓(xùn)練流程指根據(jù)環(huán)境的特殊特征定制訓(xùn)練流程。 1.環(huán)境瘦身 A.人類(lèi)視角的Go-Bigger(左)V.S. 翻譯成游戲引擎中的結(jié)構(gòu)化信息(右): 這些人理解起來(lái)很簡(jiǎn)單的數(shù)據(jù)表示,對(duì)計(jì)算機(jī)和神經(jīng)網(wǎng)絡(luò)卻非常不友好,因此需要專(zhuān)門(mén)對(duì)這些信息做一定的加工,并根據(jù)強(qiáng)化學(xué)習(xí)的特性設(shè)置成標(biāo)準(zhǔn)的強(qiáng)化學(xué)習(xí)環(huán)境觀察空間。 (1)特征工程: ▪ 原始的游戲數(shù)據(jù)需要表達(dá)游戲內(nèi)容,其數(shù)值范圍波動(dòng)便會(huì)較大(比如從幾十到幾萬(wàn)的球體大小),直接將這樣的信息輸入給神經(jīng)網(wǎng)絡(luò)會(huì)造成訓(xùn)練的不穩(wěn)定,所以需要根據(jù)信息的具體特征進(jìn)行一定的處理(比如歸一化,離散化,取對(duì)數(shù)坐標(biāo)等等)。 ▪ 對(duì)于類(lèi)別信息等特征,不能直接用原始的數(shù)值作為輸入,常見(jiàn)的做法是將這樣的信息進(jìn)行獨(dú)熱編碼,映射到一個(gè)兩兩之間距離相等的表示空間。 ▪ 對(duì)于坐標(biāo)等信息,使用絕對(duì)坐標(biāo)會(huì)帶來(lái)一些映射關(guān)系的不一致問(wèn)題,相對(duì)坐標(biāo)通常是更好的解決方式。 (2)從RGB圖像到特征圖像層 直接將原始的RGB 2D圖像信息輸入神經(jīng)網(wǎng)絡(luò),盡管結(jié)果尚可,但需要更多的數(shù)據(jù)、更長(zhǎng)的訓(xùn)練時(shí)間,以及更復(fù)雜的訓(xùn)練技巧。更為簡(jiǎn)明并有效的方式是進(jìn)行“升維”,即將耦合在一起的圖像信息離解成多個(gè)分離的特征圖像層。最終根據(jù)游戲內(nèi)容定義出具體的特征圖像層,并區(qū)分各個(gè)玩家的局部視野,拼接后構(gòu)成總體的特征圖像層。下圖為一玩家視野中食物球的特征圖像層: (3)可變維度 Go-Bigger環(huán)境中存在很多可變維度的地方,為了簡(jiǎn)化,baseline環(huán)境中強(qiáng)行截?cái)嗔藛挝粩?shù)量,用統(tǒng)一的方式來(lái)規(guī)避可變維度問(wèn)題。 B.設(shè)計(jì)動(dòng)作空間 Go-Bigger對(duì)于人類(lèi)來(lái)說(shuō)操作起來(lái)十分簡(jiǎn)單,包括上下左右QWE,這些基本的按鍵組合起來(lái)便可以誕生出許多有趣的操作,如十面埋伏、大快朵頤等。但是,游戲引擎中實(shí)際的動(dòng)作空間是這樣的(動(dòng)作類(lèi)型 + 動(dòng)作參數(shù)): 游戲引擎的這種形式在強(qiáng)化學(xué)習(xí)中被稱(chēng)作混合動(dòng)作空間,也有相應(yīng)的算法來(lái)處理該問(wèn)題。但基于baseline一切從簡(jiǎn)這一核心,通過(guò)使用比較簡(jiǎn)單粗暴的離散化處理,將連續(xù)的動(dòng)作參數(shù)(x,y坐標(biāo))離散化為上下左右四個(gè)方向。針對(duì)動(dòng)作類(lèi)型和動(dòng)作參數(shù)的組合,也簡(jiǎn)單使用二者的笛卡爾積來(lái)表示,最終將環(huán)境定義為一個(gè)16維的離散動(dòng)作空間。 C.設(shè)計(jì)獎(jiǎng)勵(lì)函數(shù) 獎(jiǎng)勵(lì)函數(shù)定義了強(qiáng)化學(xué)習(xí)優(yōu)化的目標(biāo)方向。Go-Bigger是一項(xiàng)關(guān)于比誰(shuí)的隊(duì)伍更大的對(duì)抗游戲,因此獎(jiǎng)勵(lì)函數(shù)的定義也非常簡(jiǎn)單,即相鄰兩幀整個(gè)隊(duì)伍的大小之差。 如下圖所示兩張表示相鄰兩個(gè)動(dòng)作幀,右側(cè)計(jì)分板顯示各個(gè)隊(duì)伍實(shí)時(shí)的大小數(shù)值,將當(dāng)前幀的大小減去上一幀的大小,就定義得到了獎(jiǎng)勵(lì)值。而對(duì)于整場(chǎng)比賽,則使用每一步獎(jiǎng)勵(lì)的累加和作為最終的評(píng)價(jià)值。評(píng)價(jià)值最大的隊(duì)伍,將贏得本局比賽。此外,在訓(xùn)練時(shí),還通過(guò)縮放和截?cái)嗟仁侄螌ⅹ?jiǎng)勵(lì)值限制在[-1, 1]范圍內(nèi)。 2.基礎(chǔ)算法選擇 在完成對(duì)RL環(huán)境的魔改之后,會(huì)呈現(xiàn)如下基本信息: ▪ 多模態(tài)觀察空間:圖像信息 + 單位屬性信息 + 全局信息 ▪ 離散動(dòng)作空間:16維離散動(dòng)作 ▪ 獎(jiǎng)勵(lì)函數(shù):稠密的獎(jiǎng)勵(lì)函數(shù),且取值已經(jīng)處理到[-1, 1] ▪ 終止?fàn)顟B(tài):并無(wú)真正意義上的終止?fàn)顟B(tài),僅限制比賽的最長(zhǎng)時(shí)間 對(duì)于這樣的環(huán)境,可用最經(jīng)典的DQN算法 + 多模態(tài)編碼器神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)。對(duì)于各種模態(tài)的觀察信息,使用數(shù)據(jù)對(duì)應(yīng)的經(jīng)典神經(jīng)網(wǎng)絡(luò)架構(gòu)即可。例如,對(duì)于圖像信息,選擇一個(gè)帶降采樣的卷積神經(jīng)網(wǎng)絡(luò)將2D圖像編碼為特征向量;對(duì)于單位屬性信息,需要建模各個(gè)單位之間的聯(lián)系,獲得最終的單位特征向量;對(duì)于全局信息,則使用由全連接層構(gòu)成的多層感知機(jī)。在各部分編碼完成之后,將三部分的特征拼接在一起,將構(gòu)成時(shí)間步的觀察特征向量,以復(fù)用最經(jīng)典的Dueling DQN結(jié)構(gòu)。以特征向量為輸入,輸出這一步選擇16個(gè)動(dòng)作的Q值,并使用N-step TD損失函數(shù)即可完成相應(yīng)訓(xùn)練的優(yōu)化。完整的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。 3.定制訓(xùn)練流程 DQN通常只用來(lái)解決單智能體的問(wèn)題,而在Go-Bigger中一支隊(duì)伍會(huì)存在多個(gè)玩家,且一局比賽為多個(gè)隊(duì)伍混戰(zhàn),因此會(huì)涉及多智能體之間合作和對(duì)抗等問(wèn)題。在多智能體強(qiáng)化學(xué)習(xí)領(lǐng)域,針對(duì)該問(wèn)題可展開(kāi)諸多的研究方向,但為簡(jiǎn)化設(shè)計(jì)Go-Bigger使用了Independent Q-Learning (IQL)+ 自我對(duì)戰(zhàn)(Self-Play)的方式來(lái)實(shí)現(xiàn)訓(xùn)練流程。 例如,對(duì)于一個(gè)隊(duì)伍中的多個(gè)智能體,團(tuán)隊(duì)的最終目標(biāo)是讓整個(gè)隊(duì)伍(總體積/總體量/總重量)的大小最大,因此在baseline中可使用IQL算法來(lái)實(shí)現(xiàn),以高度并行化地實(shí)現(xiàn)整個(gè)優(yōu)化過(guò)程;對(duì)于實(shí)際一局比賽中存在多個(gè)智能體的情況,則可使用樸素的自我對(duì)戰(zhàn)(Self-Play)這一相當(dāng)簡(jiǎn)單且非常節(jié)省算力的方式來(lái)參與比賽。評(píng)測(cè)時(shí),會(huì)將隨機(jī)機(jī)器人和基于規(guī)則的機(jī)器人作為比賽的對(duì)手,測(cè)試驗(yàn)證目前智能體的性能。 Tips: ▪ 使用更高級(jí)的自我對(duì)戰(zhàn)(Self-Play)算法(比如保存智能體的中間歷史版本,或使用PFSP算法); ▪ 構(gòu)建League Training流程,不同隊(duì)伍使用不同的策略,不斷進(jìn)化博弈; ▪ 設(shè)計(jì)基于規(guī)則的輔助機(jī)器人參與到訓(xùn)練中,幫助智能體發(fā)現(xiàn)弱點(diǎn),學(xué)習(xí)新技能,可作為預(yù)訓(xùn)練的標(biāo)簽或League Training中的對(duì)手,也可構(gòu)造蒸餾訓(xùn)練方法的老師,請(qǐng)玩家盡情腦洞。 從零開(kāi)始實(shí)現(xiàn)上述算法和訓(xùn)練流程非常復(fù)雜,而通過(guò)決策智能框架DI-engine(https://github.com/opendilab/DI-engine)可大大簡(jiǎn)化相應(yīng)內(nèi)容。其內(nèi)部已經(jīng)集成了支持多智能體的DQN算法實(shí)現(xiàn)和一系列相關(guān)訣竅,以及玩家自我對(duì)戰(zhàn)和對(duì)抗機(jī)器人的訓(xùn)練組件,只需實(shí)現(xiàn)相應(yīng)的環(huán)境封裝,神經(jīng)網(wǎng)絡(luò)模型和訓(xùn)練主函數(shù)即可(詳細(xì)代碼參考https://github.com/opendilab/GoBigger-Challenge-2021/tree/main/di_baseline)。 幾個(gè)有意思的發(fā)現(xiàn) 通過(guò)上述簡(jiǎn)單基線算法訓(xùn)練出來(lái)的初級(jí)AI在在發(fā)育階段會(huì)將球盡量分開(kāi),以增大接觸面加快發(fā)育;在面對(duì)潛在的危險(xiǎn)時(shí),會(huì)避開(kāi)比自身大的球,并使用分裂技能加快移動(dòng)速度,防止被吃掉。這些操作都是在人類(lèi)玩家的游戲過(guò)程中經(jīng)常用到的小技巧。 為了進(jìn)一步推動(dòng)決策智能相關(guān)領(lǐng)域的技術(shù)人才培養(yǎng),打造全球領(lǐng)先的原創(chuàng)決策AI開(kāi)源技術(shù)生態(tài),OpenDILab(開(kāi)源決策智能平臺(tái))將發(fā)起首屆Go-Bigger多智能體決策AI挑戰(zhàn)賽(Go-Bigger: Multi-Agent Decision Intelligence Challenge)。本次比賽將于2021年11月正式啟動(dòng),使用由OpenDILab開(kāi)源的Go-Bigger(https://github.com/opendilab/GoBigger)游戲環(huán)境。希望集結(jié)全球技術(shù)開(kāi)發(fā)者和在校學(xué)生,共同探索多智能體博弈的研究。歡迎對(duì)AI技術(shù)抱有濃厚興趣的選手踴躍參加,和全球的頂尖高手一決勝負(fù)! |