編者按:關(guān)于OpenAI的那篇博客,相信很多玩家一早起來就已經(jīng)看過了。昨晚打完Dota2時,云玩家小編也在Reddit上看了相關(guān)視頻,還和隊友一起推測了會兒內(nèi)在機制。但不曾想,我這一睡就又錯過了頭條。本文會重新編譯原博內(nèi)容,并補上被大家忽視的一些關(guān)鍵點。
去年,OpenAI的強化學(xué)習(xí)bot在中路solo中擊敗職業(yè)選手Dendi,贏得眾人矚目,但Dota2是一個5人游戲,在那之后,我們目標(biāo)是制作一個由神經(jīng)網(wǎng)絡(luò)構(gòu)成的5人團隊,它能在8月份舉辦的Ti8國際邀請賽上,用有限的英雄擊敗職業(yè)隊。時至今日,我們有了OpenAI Five,它已經(jīng)可以在比賽中擊敗業(yè)余玩家。
OpenAI Five玩的是限制版的Dota2,它只會瘟疫法師、火槍、毒龍、冰女和巫妖5個英雄,因為鏡像訓(xùn)練,它的對手也只能玩這5個。游戲的“限制性”主要體現(xiàn)在以下幾方面:
英雄受限(上述5個);
沒有假眼和真眼;
沒有肉山;
不能隱身(消耗品和相關(guān)物品,可以理解為沒有霧、微光、隱刀、大隱刀、隱身符等);
沒有召喚物和分身(沒有分身斧、分身符、支配頭盔等);
沒有圣劍、魔瓶、補刀斧、飛鞋、知識之書、凝魂之露(沒有骨灰?);
每隊五只無敵信使(和加速模式一樣);
不能掃描。
這些限制使OpenAI Five的游戲和正常游戲有一定區(qū)別,尤其是隊長模式,但總體而言,它和隨機征召等模式差別不大(對于冰女這樣的五號位,沒有眼完全沒法玩吧?。?/p>
OpenAI Five每天玩的游戲量相當(dāng)于人類玩家180年的積累,和圍棋AI一樣,它從自學(xué)中提取經(jīng)驗。訓(xùn)練設(shè)備是256個GPU和128,000個CPU,使用的強化學(xué)習(xí)算法是近端策略優(yōu)化(PPO)。因為不同英雄間技能、出裝各異,這5個英雄使用的是5個獨立的LSTM,無人類數(shù)據(jù),由英雄從自己的數(shù)據(jù)中學(xué)習(xí)可識別策略。
實驗表明,在沒有根本性進(jìn)展的前提下,強化學(xué)習(xí)可以利用LSTM進(jìn)行大規(guī)模的、可實現(xiàn)的長期規(guī)劃,這出乎我們的意料。為了考察這個成果,7月28日,OpenAI Five會和頂級玩家進(jìn)行比賽,屆時玩家可以在Twitch上觀看實況轉(zhuǎn)播。
OpenAI Five擊敗OpenAI員工隊伍
問題
如果一個AI能在像星際、Dota這樣復(fù)雜的游戲里超越人類水平,那它就是一個里程碑。相較于AI之前在國際象棋和圍棋里取得的成就,游戲能更好地捕捉現(xiàn)實世界中的混亂和連續(xù)性,這就意味著能解決游戲問題的AI系統(tǒng)具有更好的通用性。醉翁之意不在酒,它的目標(biāo)也不僅僅是游戲。
Dota2是一款實時戰(zhàn)略游戲,一場比賽由2支隊伍構(gòu)成,每支隊伍5人,在游戲中,每個玩家需要操控一個“英雄”單位。如果AI想玩Dota2,它必須掌握以下幾點:
時間較長。Dota2的運行幀數(shù)是30幀每秒,一場游戲平均45分鐘,也就是一場游戲要跑80,000幀左右。在游戲中,大多數(shù)動作(action,例如讓英雄移動到某一位置)產(chǎn)生的獨立影響相對較小,但一些獨立動作,比如TP,就可能會對游戲戰(zhàn)略產(chǎn)生重大影響。同時,游戲中也存在一些貫徹始終的戰(zhàn)略,比如推線、farm(刷錢)和gank(抓人)。OpenAI Five的觀察頻率是4幀一次,也就是場均20,000個動作,而國際象棋一般在40步以內(nèi)就能決出勝負(fù),圍棋是150步。這些動作幾乎都具有戰(zhàn)略性意義。
視野有限。在Dota2中,地圖本身是黑的,只能靠英雄和建筑提供一定視野(禁止插眼),這就意味著比賽要根據(jù)不完整的數(shù)據(jù)信息進(jìn)行推斷,同時預(yù)測敵方英雄的發(fā)育進(jìn)度。國際象棋和圍棋都是全知視角。
高維的、連續(xù)的動作空間。在比賽中,一個英雄可以采取的動作有數(shù)十個,其中有些是對英雄使用的,有些是點地面的。對于每個英雄,我們把這些連續(xù)的動作空間分割成170,000個可能的動作(有CD,不是每個都能用),除去其中的連續(xù)部分,平均每幀約有1000個動作可以選擇。而在國際象棋中,每個節(jié)點的分支因子只有35個,圍棋則是平均250個。
高維的、連續(xù)的觀察空間。Dota2的地圖相當(dāng)豐富,比如一場比賽中有10個英雄、幾十個建筑、多個NPC單位,以及包括神符、樹木、圣壇(火鍋)等在內(nèi)的諸多要素。我們的模型通過V社的Bot API觀察游戲狀態(tài),用20,000個數(shù)據(jù)(大多數(shù)是浮點數(shù)據(jù))總結(jié)了整張地圖的所有信息。相較之下,國際象棋只有約70個(8×8棋盤),圍棋只有約400個(19×19棋盤)。
Dota2的游戲規(guī)則非常復(fù)雜——它已經(jīng)被積極開發(fā)了十幾年,游戲邏輯代碼也有數(shù)十萬行。對于AI來說,這個邏輯需要幾毫秒才能執(zhí)行,而國際象棋和圍棋只需幾納秒。目前,游戲還在以每兩周一次的頻率持續(xù)更新,不斷改變語義環(huán)境。
我們的方法
我們使用的算法是前陣子剛推出的PPO,這次用的是它的大規(guī)模版本。和去年的1v1機器人一樣,OpenAI Five也是從自學(xué)中總結(jié)游戲經(jīng)驗,它們從隨機參數(shù)開始訓(xùn)練,不使用任何人類數(shù)據(jù)。
強化學(xué)習(xí)(RL)研究人員一般認(rèn)為,如果想讓智能體在長時間游戲中表現(xiàn)出色,就難免需要一些根本上的新突破,比如hierarchical reinforcement learning(分層強化學(xué)習(xí))。但實驗結(jié)果表明,我們應(yīng)該給予已有算法更多信任,如果規(guī)模夠大、結(jié)構(gòu)夠合理,它們也能表現(xiàn)出色。
智能體的訓(xùn)練目標(biāo)是最大化未來回報,這些回報被折扣因子γ加權(quán)。在OpenAI Five的近期訓(xùn)練中,我們把因子γ從0.998提高到了0.9997,把評估未來獎勵的半衰期從46秒延長到了五分鐘。為了體現(xiàn)這個進(jìn)步的巨大,這里我們列幾個數(shù)據(jù):在PPO這篇論文中,最長半衰期是0.5秒;在Rainbow這篇論文中,最長半衰期是4.4秒;而在Observe and Look Further這篇論文中,最長半衰期是46秒。
盡管當(dāng)前版本的OpenAI Five在“補刀”上表現(xiàn)不佳(大約是Dota玩家的中位數(shù)),但它對于經(jīng)驗、金錢的的優(yōu)先級匹配策略和專業(yè)選手基本一致。為了獲得長期回報,犧牲短期回報是很正常的,就好比隊友抱團推塔時,玩家不該自己在線上補刀刷錢。這是個振奮人心的發(fā)現(xiàn),因為我們的AI系統(tǒng)真的在進(jìn)行長期優(yōu)化。
模型結(jié)構(gòu)
看不清圖請向論智君索取
每個OpenAI Five神經(jīng)網(wǎng)絡(luò)都包含一個單層的LSTM(左下淡紫),其中有1024個神經(jīng)元。輸入當(dāng)前的游戲狀態(tài)(從Valve的Bot API中提取)后,它會單獨計算各個action head(輸出動作標(biāo)簽),如圖中下方亮藍(lán)色方框中的X坐標(biāo)、Y坐標(biāo)、目標(biāo)單位等,再把所有action head合并成一系列動作。
下圖是OpenAI Five使用的觀察空間和動作空間的交互式演示。它把整張地圖看做一個有20,000個數(shù)據(jù)的列表,并通過8個列舉值的列表來采取行動。這個場景是夜魘上天輝高地,我們選中冰女,可以發(fā)現(xiàn),冰女腳下的9×9小方格表示她可以前進(jìn)位置,其中白色目標(biāo)方塊的坐標(biāo)是(-300,0)。大方框表示可以放Nova地方,目標(biāo)分別是投石車、小兵、毒龍、巫妖、瘟疫法師和另一個冰女。
OpenAI Five可以就自己觀察到的內(nèi)容對缺失信息做出反應(yīng)。例如火槍的一技能是榴霰彈,這是一個范圍傷害,雖然除了星際玩家以外的正常玩家都看得到這個區(qū)域,但它并不屬于OpenAI Five的觀察范圍。即便“看不到”,每當(dāng)AI走進(jìn)霰彈區(qū)時,它們還是會急著走出來,因為那時它們的血量在不斷下降。
探索
既然AI可以學(xué)會“深謀遠(yuǎn)慮”,那接下來的問題就是環(huán)境探索。前文提到了,OpenAI Five玩的是限制版Dota2,即便少了很多復(fù)雜內(nèi)容,它還有上百種道具、數(shù)十種建筑物、法術(shù)、單位類型和游戲機制要學(xué)習(xí)——其中某些內(nèi)容的組合還會產(chǎn)生更強大的東西。對于智能體來說,有效探索這個組合廣闊的空間并不容易。
OpenAI Five的學(xué)習(xí)方法是自我訓(xùn)練(從隨機參數(shù)開始),這就為探索環(huán)境提供了初級經(jīng)驗。為了避免“戰(zhàn)略崩潰”,我們把自我訓(xùn)練分成兩部分,其中80%是AI和自己對戰(zhàn),剩下20%則是AI和上一版AI對戰(zhàn)。經(jīng)過幾個小時的訓(xùn)練,帶線、刷錢、中期抓人等戰(zhàn)略陸續(xù)出現(xiàn)了。幾天后,它們已經(jīng)學(xué)會了基礎(chǔ)的人類戰(zhàn)略:搶對面的賞金神符,走到己方外塔附近補刀刷錢,不停把英雄送去占線擴大優(yōu)勢。在這個基礎(chǔ)上,我們做了進(jìn)一步訓(xùn)練,這時,OpenAI Five就已經(jīng)能熟練掌握5人推塔這樣的高級策略了,
2017年3月,我們的第一個智能體擊敗了機器人,卻對人類玩家手足無措。為了強制在戰(zhàn)略空間進(jìn)行探索,在訓(xùn)練期間(并且只在訓(xùn)練期間),我們隨機化了它的各項屬性(血量、移速、開始等級等),之后它開始能戰(zhàn)勝一些玩家。后來,它又在另一名測試玩家身上屢戰(zhàn)屢敗,我們就又增加了隨機訓(xùn)練,AI變強了,那名玩家也開始輸了。
OpenAI Five使用了我們之前為1v1智能體編寫的隨機數(shù)據(jù),它也啟用了一種新的“分路”方法。在每次訓(xùn)練比賽開始時,我們隨機地將每個英雄“分配”給一些線路子集,并對其進(jìn)行懲罰以避開這幾路。
上述探索自然離不開回報的指引。我們?yōu)镈ota2設(shè)計的回報機制基于人類玩家對行為的具體評判:團隊作用、技能施放、死亡次數(shù)、助攻次數(shù)和擊殺次數(shù)等。為了防止智能體鉆漏洞,我們的方法是計算另一隊的平均表現(xiàn),然后用本隊英雄表現(xiàn)減去這個值來具體評判。
英雄的技能點法、裝備和信使管理都從腳本導(dǎo)入。
團隊合作
Dota2是個團隊合作游戲,但OpenAI Five的5名英雄間不存在神經(jīng)網(wǎng)絡(luò)上的明確溝通渠道。他們的團隊合作由一個名為“team spirit”的超參數(shù)控制,范圍是0到1,由它給每個英雄的加權(quán),讓它們知道這時是團隊利益更重要還是個人刷錢更重要。
Rapid
這個AI是在我們的強化學(xué)習(xí)訓(xùn)練系統(tǒng)Rapid上實現(xiàn)的,后者可以應(yīng)用于Gym環(huán)境庫。我們已經(jīng)用Rapid解決了OpenAI的許多其他問題,比如Competitive Self-Play。
整個訓(xùn)練系統(tǒng)被分為rollout workers和optimizer兩部分,其中前者運行一個游戲副本,并用一個智能體收集經(jīng)驗,后者則在一系列GPU中執(zhí)行同步梯度下降。rollout workers通過Redis跟optimizer同步經(jīng)驗。如上圖所示,每個實驗還包括一個Eval workers的過程,它的作用是評估經(jīng)過訓(xùn)練的智能體和參考智能體。除此之外還有一些監(jiān)控軟件,如TensorBoard、Sentry和Grafana。
在同步梯度下降過程中,每個GPU在各自batch計算梯度,然后再對梯度進(jìn)行全局平均。我們最初使用MPI的allreduce進(jìn)行平均,但現(xiàn)在用我們自己的NCCL2封裝來并行GPU計算和網(wǎng)絡(luò)數(shù)據(jù)傳輸。
上圖顯示了不同數(shù)量的GPU同步58MB數(shù)據(jù)(OpenAI Five參數(shù))的延遲,幾乎可以被并行運行的GPU計算所掩蓋。
我們還為Rapid開發(fā)了Kubernetes、Azure和GCP后端。
游戲
到目前為止,OpenAI Five已經(jīng)在限制版Dota2中獲得了非常輝煌的戰(zhàn)績:
頂級OpenAI員工隊伍:天梯分2500+(前46%玩家)
觀看比賽的最強觀眾隊(包括解說Blitz):天梯分4000-6000(前90-99%玩家)——非開黑
V社員工隊伍:天梯分2500-4000(前46-90%玩家)
業(yè)余選手隊伍:天梯分4200(前93%玩家)——開黑隊
半職業(yè)隊:天梯分5500(前99%玩家)——開黑隊
4月23日,OpenAI Five首次擊敗機器人腳本;5月15日,它在和OpenAI員工隊的較量中1勝1負(fù),首次戰(zhàn)勝人類玩家;6月6日,它突破OpenAI隊、觀眾隊和V社隊的封鎖,決定性地贏得了所有的比賽。之后我們又和業(yè)余隊、半職業(yè)隊進(jìn)行了非正式比賽,OpenAI Five沒有像預(yù)想中那樣一敗涂地,而是在和兩個隊的前三場比賽中都贏了兩場。
這些AI機器人的團隊合作幾乎是壓倒性的,它們就像5個無私的玩家,知道最好的總體戰(zhàn)略。——Blitz
我們也從OpenAI Five的比賽中觀察到了一些東西:
它們會為了搶奪敵方優(yōu)勢路舍棄自家優(yōu)勢路(天輝的下路和夜魘的上路),使對方無力回防。這種戰(zhàn)略近幾年常出現(xiàn)在職業(yè)隊伍比賽中,解說Blitz也稱自己是從液體(李逵)那里得知這點的。
推動局勢轉(zhuǎn)變,比對面更快地把戰(zhàn)局從前期推進(jìn)中期。這樣做的具體方法是:(1)如下圖所示,成功的gank;(2)在對面抱團后,及時反制。
它們在少數(shù)領(lǐng)域背離了目前的游戲風(fēng)格,比如AI前期會給輔助更多經(jīng)驗和錢,讓它們在強勢期打足傷害,擴大局面優(yōu)勢,打贏團戰(zhàn),然后抓住對方失誤快速致勝。
AI和人類的差別
OpenAI Five可以觀察的信息和人類玩家相同,游戲里有什么數(shù)據(jù),它就看到什么數(shù)據(jù)。比如玩家需要手動去檢查英雄位置、血量情況和身上的裝備。我們的方法并沒有從根本上與觀察狀態(tài)相關(guān)聯(lián),但僅從游戲渲染像素看,它就需要數(shù)千個GPU。
對于許多人關(guān)心的APM問題,OpenAI Five只有150-170(每4幀一次動作,理論上最高有450)。但需要注意的是,這150是有效操作,不是逛街和打字嘲諷,它的平均反應(yīng)時間為80ms,比人類快。
這兩個差異在1v1中最為重要,但在比賽中,我們發(fā)現(xiàn)人類玩家可以輕松適跟上AI的節(jié)奏,所以雙方競技還是比較公平的。事實上去年Ti7期間,一些職業(yè)玩家也和我們的1v1 AI做了多次訓(xùn)練,根據(jù)Blitz的說法,1v1 AI改變了人們對1v1的看法(AI采用了快節(jié)奏的游戲風(fēng)格,現(xiàn)在每個人都適應(yīng)了)。
令人驚訝的發(fā)現(xiàn)
二元回報能夠提供良好的表現(xiàn)。1v1模型的回報是多尺度的,包括擊殺英雄、連續(xù)擊殺等。我們做了一個實驗,讓智能體只能從輸贏中獲得回報。如上圖所示,和常見的平滑曲線(黃線)相比,雖然它(紫線)在訓(xùn)練中期出現(xiàn)了一個較慢并且稍微平穩(wěn)的階段,但它的訓(xùn)練結(jié)果和黃線很接近。這個實驗用了4,500個CPU和16個k80 GPU,模型性能達(dá)到半專業(yè)級(70個TrueSkill),而我們的1v1模型是90個TrueSkill。
可以自學(xué)卡兵。在去年的1v1模型中,我們獨立訓(xùn)練模型卡兵,并附加一個“卡兵塊”獎勵。我們團隊的一名員工在訓(xùn)練2v2模型時,因為要休假,于是建議他(現(xiàn)在的)妻子看看要花多久才能提高性能。令人驚訝的是,這個模型居然在沒有任何特殊指引和回報激勵的情況下得出了卡兵會產(chǎn)生優(yōu)勢的結(jié)論。
我們?nèi)栽谛迯?fù)錯誤。上圖中的黃線模型已經(jīng)可以擊敗業(yè)余玩家,但修復(fù)了一些Bug后,它的提升非常明顯。這給我們帶來的啟示是即便已經(jīng)擊敗更強的人類玩家,我們的模型還是可能隱藏著嚴(yán)重錯誤。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4784瀏覽量
101245 -
AI
+關(guān)注
關(guān)注
87文章
31746瀏覽量
270530 -
強化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
268瀏覽量
11307
原文標(biāo)題:一文解析OpenAI Five,一個會打團戰(zhàn)的Dota2 AI
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論