【攻克Dota2】OpenAI自學習多智能體5v5團隊戰擊敗人類玩家

【攻克Dota2】OpenAI自學習多智能體5v5團隊戰擊敗人類玩家

來自專欄新智元22 人贊了文章

剛剛,OpenAI 宣布了一個大新聞——他們的一個由5個神經網路組成的OpenAI Five,已經開始擊敗Dota 2的業餘玩家隊伍。

剛剛,OpenAI 宣布了一個大新聞——還記得去年他們的AI在 Dota2 1v1 比賽中戰勝了人類職業玩家 Dendi嗎?現在,OpenAI的由5個神經網路組成的OpenAI Five,已經開始擊敗Dota 2的業餘玩家隊伍。

4月23日,OpenAI Five首次擊敗了腳本基線。5月15日,OpenAI Five與第一隊平分秋色,贏得了一場比賽並輸掉了另一場。6月6日,OpenAI Five在與隊伍1、2、3的比賽中全部獲勝。之後,我們又與第4和第5隊進行了非正式的比賽,預計會輸得很慘,但OpenAI Five在前3場比賽中贏得了兩場。

OpenAI表示,雖然他們現在玩的是有限制的遊戲,但他們的目標是在8月份擊敗國際頂級職業團隊(不過只限於一組有限的英雄)。同時,他們也坦承這個任務艱巨——「我們可能不會成功:Dota 2是世界上最流行和最複雜的電子競技遊戲之一,每年都有來自全世界最富有創造力和積極性的專業人員參賽,競爭Dota年度價值4000萬美元的獎金(這也是所有電子競技遊戲中份額最大的獎金)。

如今,OpenAI Five每天都通過自我對戰(self-play)來學習,而每天自我對戰的量是180年的遊戲——沒錯,是180年。它使用OpenAI提出的演算法「近端策略優化」(PPO)的擴展版,在256個GPU和128,000個CPU內核上進行訓練。每個英雄都使用單獨的LSTM,不使用人類數據,最終AI能夠學會識別策略。這表明,強化學習能夠進行大但卻可實現規模(large but achievable scale)的長期規劃,而不發生根本性的進展,這與OpenAI開始項目時的預期相悖。

為了對他們所取得的進步衡量基準,OpenAI將在7月28日舉行一場比賽,歡迎觀看直播甚至親臨現場。

OpenAI Five與OpenAI玩DOTA最好的團隊競賽。比賽由暴風遊戲的專業評論員和OpenAI Dota團隊成員Christy Dennison進行了評論,也得到了玩家的觀戰。

國內首家決策智能公司創始人兼CEO袁泉點評:

Dota遊戲是一個典型的AI難題,它綜合了決策周期長,空間大而且敵我雙方是在非完全信息下博弈。OpenAI繼去年解決1v1的問題後,1年內能在5v5的更複雜情況下,完全依靠自我對抗學習、無顯式通訊信道的前提下,即展現出了類似於人的長期規劃協作能力,代表了多智能體決策智能的國際最高水準,也體現了大規模算力帶來的美感。

Dota2究竟有多難?複雜程度超乎想像

玩星際爭霸或Dota,需要AI在不確定的情況下進行推理與規劃,涉及多個智能體協作完成複雜的任務,權衡短中長期不同的收益。相比下圍棋這樣的確定性問題,星際爭霸/Dota的搜索空間要高出10個數量級。

因此,攻剋星際爭霸或者Dota這樣的複雜電子競技遊戲,是AI的最大挑戰之一,也將是AI的一個里程碑式的成就。

Dota 2 是一個實時競技電子遊戲,有兩支5人隊伍組成,每個玩家都控制一個英雄,能玩Dota的AI,必須掌握以下技巧:

  • 長線策略。Dota遊戲以每秒30幀的速度運行,一場時長為45分鐘,大概為80,000 tick。大多數操作(例如操縱英雄移動)單獨產生的影響較小,但有些個別的行為,比如TP回家,可能會影響遊戲戰略。還有一些策略,則能影響整個戰局。OpenAI Five每4幀觀察一次,產生20,000步移動。相比之下,國際象棋通常在40步移動之前就結束,圍棋則大概150手移動,而且幾乎每一次移動都是戰略性的。
  • 局部可觀測狀態。在Dota過程中,已方單位和建築只能看到他們周圍的區域。地圖的其他部分隱藏在霧中,敵人和他們的戰略也是隱藏的。因此,比賽需要根據不完整的數據進行推斷,並且需要對敵方的意圖進行建模。相比之下,國際象棋和圍棋都是完全信息博弈。
  • 高維、連續的行為空間。在Dota中,每個英雄可以採取數十種行為,而許多行為要麼面向敵方單位,要麼點地移動位置。OpenAI將每個英雄的空間分割成170,000個可能的操作;不計算連續部分,每個tick平均有大約1000個有效行為。國際象棋中的平均行為數量為35,在圍棋中,這是數字也只有250。
  • 高維、連續的觀察空間。Dota在包含十個英雄,數十個塔,數十個NPC的地圖上操作的遊戲,以及神符、樹和守衛等。OpenAI的模型通過Valve的Bot API觀察Dota遊戲的狀態,其中20,000(大多是浮點)數字表示允許人類訪問的所有信息。相比之下,國際象棋棋盤有大約70個枚舉值(8x8的棋盤加6類棋子和其他一些歷史信息),而圍棋則有大約400個枚舉值(19x19的棋盤加黑白兩種棋子)。

    Dota規則也非常複雜。這是一個已經被積極開發了十多年的遊戲,遊戲邏輯在幾十萬行代碼中實現。這個邏輯需要幾毫秒的時間才能執行,而對於國際象棋或圍棋引擎則只需要幾納秒。遊戲也每兩周更新一次,不斷改變環境語義。

完全從自我對戰中學習,128000CPU+256 P100GPU

OpenAI的系統使用一個擴展版本的Proximal Policy Optimization進行學習。OpenAI Five和OpenAI早期的1v1 bot都是完全從自我對戰中學習。它們從隨機參數開始,不使用來自人類回放(replay)的搜索或自舉。

RL研究人員(包括OpenAI自己)一般認為,長線策略需要從根本上取得新的進展,比如分層強化學習。結果表明,實際上當前的演算法已經足夠,至少當它們以足夠的規模和合理的探索方式運行時。

OpenAI的agent經過訓練,可以最大化未來獎勵的指數衰減和,並由稱為γ的指數衰減因子加權。在最新的OpenAI Five訓練中,他們從0.998(評估未來獎勵的半衰期為46秒)調整到0.9997(評估未來獎勵的半衰期為五分鐘)。相比之下,PPO論文中最長的時間跨度半衰期是0.5秒,Rainbow論文中最長的半衰期為4.4秒。

儘管當前版本的OpenAI Five的補兵能力表現不佳,但它在選擇優先攻擊目標上已經達到專業水平。獲得長期回報往往需要犧牲短期回報,例如發育後的金錢,因為團推時也需要耗費時間。這表明系統真正在進行長期的優化。

模型結構

每個OpenAI Five網路都包含一個單層的、1024-unit的LSTM,它可以查看當前的遊戲狀態(從Valve的Bot API中提取),並通過幾個可能的行動head發出下一步採取的行動。每個 head都具有語義含義,例如,延遲該行動的時間值,選擇哪一個行動以及該行動在網格中的X或Y坐標等。

OpenAI Five使用觀察空間和行動空間進行互動式演示。OpenAI Five將世界視為20000個數值的列表,並通過發出一個包含8個枚舉值的列表來採取行動。可以選擇不同的行動和目標以了解OpenAI Five如何編碼每個動作,以及它如何觀察世界。下圖顯示了人類會看到的場景。

OpenAI Five可以對丟失的與它所看到的相關的狀態片段做出反應。例如,直到最近,OpenAI Five的觀察都還沒有包括彈片落下的區域,人類在屏幕上能看到這些區域。然而,我們觀察到OpenAI Five學習走出(雖然不能避免進入)活躍的落彈區域,因為當進入落彈區時,agent會發現它生命值在下降。

探索

儘管有學習演算法能夠處理較長的視野,我們仍然需要探索環境。即使我們設了限制,仍然有數百個物品,幾十種建築,法術和單位類型,以及需要了解的複雜的遊戲機制。要有效地探索這個巨大的空間並不容易。

OpenAI Five從自我對戰(self-play)過程中學習(從隨機權重開始),這為探索環境提供了一個自然的設置。為了避免「策略崩潰」,agent在80%的遊戲中進行自我訓練,其餘20%的遊戲則與過去的自己對戰。在第一場比賽中,英雄漫無目的地在地圖上漫步。經過幾個小時的訓練後,出現了諸如規劃、發育或中期戰鬥等概念。幾天之後,它們一致採用基本的人類策略:試圖從對手偷財富,推塔發育,並在地圖周圍旋轉控制英雄以獲得線路優勢。通過進一步的訓練,它們變得精通 5個英雄一起推塔這樣的高級戰略了。

在2017年3月,我們的第一個agent擊敗了bot,但仍然搞不定人類。為了強制在戰略空間進行探索,在訓練期間(並且只在訓練期間),我們對這些單位的屬性(生命,速度,初始等級等)進行了隨機化,然後它開始能與人類對打。後來,當一名測試玩家一直不斷地擊敗我們的1v1 bot時,我們增加了隨機訓練,測試玩家開始出現失敗。(我們的機器人團隊同時將類似的隨機化技術應用於物理機器人身上,以便從模式世界轉換到現實世界。)

OpenAI Five使用我們為1v1 bot編寫的隨機數據。它還使用一個新的「lane assignment」。在每次訓練遊戲開始時,我們隨機地將每個英雄「分配」給一些線路的子集,並在它發生偏離是對其進行懲罰,直到遊戲中隨機選擇的時間才結束懲罰。

這樣的探索得到了很好的回報。我們的獎勵主要由衡量人類如何在遊戲中做決定的指標組成:凈價值,殺敵數數,死亡,助攻數,正(反)補數等等。我們通過減去另一組的平均獎勵後處理每個agent的獎勵,以防止agent找到 positive-sum 的情況。

協調

OpenAI Five不包含英雄神經網路之間的明確通信渠道。團隊合作由我們稱為「團隊精神」(team spirit)的超參數控制。team spirit的範圍從0到1,對OpenAI Five的每個英雄應該關心其個人獎勵函數與團隊獎勵函數的平均值賦予權重。我們在訓練中將它的值從0調整到1。

Rapid

我們的系統是一個稱為Rapid的通用RL訓練系統,可用於任何Gym環境。我們已經使用Rapid解決了OpenAI的其他一些問題,包括競爭性的自我對抗(Competitive Self-Play)。

訓練系統分為運行遊戲副本的rollout worker和收集經驗的agent,以及optimizer節點,這些節點在整個GPU隊列中執行同步梯度下降。 rollout worker通過Redis將它們的經驗同步到optimizer每個實驗還包括訓練好的agent進行評估,以及監控軟體,如TensorBoard,Sentry和Grafana。

在同步梯度下降過程中,每個GPU計算batch部分的梯度,然後對梯度進行全局平均。下圖顯示了不同數量的GPU同步58MB數據的延遲。

我們在Kubernetes,Azure和GCP後端實現了Rapid。

遊戲結果

到目前為止,OpenAI Five已經(在我們的限制下)與這些隊伍進行了比賽:

  • 最強OpenAI員工團隊:2.5k MMR(46th percentile)
  • 觀看OpenAI員工比賽的最強觀眾(包括第一次OpenAI員工比賽的解說員Blitz):4-6k MMR(90th-99th percentile),儘管他們從來沒有作為一個團隊參賽。
  • Valve employee團隊:2.5-4k MMR(46th-90th percentile)。
  • 業餘團隊:4.2k MMR(93rd percentile),訓練為一支隊伍。
  • 半專業團隊:5.5k MMR(99th percentile),訓練為一支隊伍。

4月23日版的OpenAI Five是第一個擊敗我們的腳本基線的版本。5月15號的OpenAI Five與第一隊旗鼓相當,贏了一場比賽,又輸了一場。6月6日的OpenAI Five戰勝了1-3對。我們和4隊、5隊建立了非正式的比賽,預計出現很差的表現,但是OpenAI Five在前三場比賽中均贏了兩場。

「機器人的團隊合作方面簡直勢不可擋,感覺就像五個無私的玩家一樣,知道一個很好的總體戰略。」——— Blitz

我們發現OpenAI Five有以下幾個特點:

為了換取控制敵人的優勢路,多次犧牲自己的優勢路(夜魘軍團的上路,天輝軍團的下路),迫使戰鬥向敵人更難防禦的一邊進行。這種策略在過去幾年出現在專業領域,現在被認為是流行的策略。Blitz說他是在經過8年的比賽後才知道這一點的,當時Team Liquid告訴他這件事。

從比賽初期到賽季中期的轉場比對手更快。 它是這樣做的:(1)當玩家在他們路上過度擴張時,建立成功的Ganks;(2)在對手組織對抗之前組隊佔領塔。

在少數領域偏離了目前的遊戲風格,比如給予輔助英雄許多早期經驗和黃金。 OpenAI Five的優先順序使得它的傷害更早達到頂峰,並使它的優勢更加強大,贏得團隊戰鬥並利用錯誤來確保快速的勝利。

與人類的不同之處

OpenAI Five可以訪問與人類相同的信息,但是它可以立即看到諸如位置、健康狀況和物品清單等數據,這些數據是人類必須手動檢查的。我們的方法與觀察狀態沒有本質的聯繫,但是僅僅從遊戲中渲染像素就需要數千個GPU。

OpenAI Five的平均動作速度約為每分鐘150-170個動作(理論上最大動作速度為450個,因為每隔4幀就觀察一次)。對於熟練的玩家來說,幀完美的時機對於OpenAI Five來說是微不足道的。 OpenAI Five的平均反應時間為80ms,比人類快。

這些差異在1v1中最為重要(我們的機器人的響應時間為67ms),但是我們已經看到人類從機器人身上學習並適應機器人,所以競技場相對比較公平。數十位專業人士在去年TI的幾個月里使用我們的1v1機器人進行訓練。根據Blitz的說法,1v1機器人改變了人們對1v1的看法(機器人採用了快節奏的遊戲風格,現在每個人都適應了)。

一些驚人的發現

二元獎勵能夠帶來好的表現。我們的1v1模型具有有形的獎勵。我們做了一個實驗,只獎勵那些獲勝的agent或只獎勵失敗的agent,它訓練一個數量級更慢,並且在中間有一些停滯,這與我們通常看到的平滑的學習曲線形成了對比。實驗運行在4500個內核和16個k80 GPU上,訓練到半專業級(70個TrueSkill),而不是我們最好的1v1機器人的90個TrueSkill。

Creep blocking可以從頭開始學習。對於1v1,我們學習了使用傳統RL進行creep blocking並帶有「creep block」獎勵。我們的一個團隊成員在休假時離開了2v2模型的訓練,打算看看還需要多久的訓練才能提高性能。令他驚訝的是,這個模型在沒有任何特別的指導或獎勵的情況下學會了creep block。

我們還在修復bug。上面的圖表顯示了擊敗業餘玩家的代碼的訓練運行情況,相比之下,我們只是修復了一些bug,比如在訓練中偶爾發生的崩潰,或者達到25級時導致一個大的負面獎勵的錯誤。事實證明,這個系統有可能擊敗人類高手,但同時也可能隱藏著嚴重的bug!

接下來是什麼?

我們的隊伍正集中精力完成我們8月份的目標。我們不知道這個目標能否實現,但我們相信,只要努力工作(還有點運氣),我們就能實現。

在超越人類性能的過程中,我們將發布更新,並在項目完成後就最終系統撰寫報告。請在7月28日加入我們,屆時我們將與一組頂級球員比賽!

我們的目標是超越Dota。現實世界人工智慧的部署將需要處理Dota提出的挑戰,而這些挑戰並不反映在國際象棋、圍棋、雅達利遊戲或Mujoco基準測試任務中。最後,我們將衡量Dota系統在實際任務中的應用成功程度。


推薦閱讀:

如何看待 dota2 7.08 更新?
目前版本飛機的A杖是不是被輕視了?
如何評價Dota2 7.16版本更新?
如何評價 巨龍Major 2.0??
DOTA2 天賦加力量,能否增加抗性?

TAG:人工智慧 | 刀塔DOTA2 | 遊戲 |