2017 年,OpenAI 在 Dota2 TI 決賽現場以 1 對 1 solo 的方式擊敗了「Dota 2」世界頂級玩家。經過一年的發展,OpenAI 於昨日宣佈他們的 AI bot 在 5 v 5 團隊賽中擊敗業餘人類玩家,並計劃之後能夠擊敗頂級專業團隊。機器之心對OpenAI的部落格內容進行了編譯介紹。
我們團隊構建的模型,OpenAI Five,已經擊敗業餘 Dota2 團隊了。雖然如今是在有限制的情況下,但我們計劃到 8 月份在有限英雄池下擊敗 TI 賽中的一支頂級專業隊伍。我們可能不會成功,因為 Dota2 是當前最流行也最複雜的電子競技遊戲之一,一批有激情與創造力的玩家經年訓練,想要瓜分 4000 萬美金的獎金池。
透過自我對抗學習,OpenAI Five 每天相當於玩 180 年的遊戲。訓練上,它使用 256 塊 GPU、12 萬 8000 個 CPU 核心使用近端策略最佳化(Proximal Policy Optimization)方法進行訓練,這是在我們去年建立的 solo Dota2 系統上的擴增。當我們為每個英雄使用單獨的一個 LSTM,模型就可以在沒有人類資料的情況下學到可識別的策略。這表明強化學習即使沒有根本性的進步,也能夠產生大規模但也可接受的長期規劃。這出乎了我們剛開始時的預料。
問題
人工智慧的一個里程碑就是在星際爭霸或者 Dota 這類複雜的電子遊戲中超越人類的水平。相比於上一個里程碑,即國際象棋與圍棋,複雜電子遊戲開始反映真實世界的混亂與連續的本質。因此我們希望,能夠解決複雜電子遊戲的系統可以成為通用的、在遊戲之外有廣闊應用場景的系統。
Dota2 是一個實時的 5 v 5 策略遊戲,每個玩家控制一個英雄。而玩 Dota 的 AI 需要掌握以下技能:
長線策略。Dota 遊戲平均每秒 30 幀,一場時常 45 分鐘,大概 8 萬 tick。大部分操作(例如操縱英雄移動)都有單獨的小影響,但一些個體行為可能會影響到遊戲戰略,例如 TP 回家。此外,還有一些策略可能會終結整場遊戲。OpenAI Five 每 4 幀觀察一次,產生了 2 萬個決策。相比之下,國際象棋一般在 40 步之前就結束了,圍棋大概 150 步,但這些遊戲每一步都很有策略性。
區域性可觀測狀態。己方單位和建築的視野都有限。地圖的其他部分是沒有視野的,可能藏有敵人和敵方策略。高玩通常需要基於不完整資料做推理,以及建模敵方意圖。而國際象棋和圍棋都是完全資訊博弈。
高維、持續的行為空間。在 Dota 中,每個英雄能採取數十種行為,而且許多行為要麼面向敵方單位,要麼點地移動位置。我們把這個空間離散到每個英雄 17 萬種可能的操作(不是每 tick 都有效,例如在技能冷卻時放技能就是無效操作);不計算連續部分,每 tick 平均 1000 個可能有效行為。國際象棋的行為數量大概是 35,圍棋 250。
高維、連續的觀察空間。Dota 是在一張包含 10 個英雄、20 幾個塔、數十個 NPC 單位的地圖上操作的遊戲,此外還有神符、樹、眼衛等。透過 Valve(Dota 2 的運營公司)的 Bot API,我們的模型把 Dota 遊戲視為 2 萬個狀態,也就代表人類在遊戲中可獲取到的所有資訊。國際象棋代表大概 70 個列舉值(8x8 的棋盤,6 類棋子和較小的歷史資訊)。圍棋大概有 400 個列舉值(19x19 的棋盤,黑白 2 子,加上 Ko)。
Dota 規則也非常複雜,這類遊戲開發了十幾年,成百上千的程式碼行實現遊戲邏輯。而且遊戲每兩週更新一次,環境語義一直在變。
方法
我們的系統使用一個高度擴充套件版本的近端策略最佳化(Proximal Policy Optimization)演算法進行學習。OpenAI Five 和之前的 1v1 機器人都是透過自我對抗進行學習的。他們從隨機引數開始,並不從人類玩家的方法中進行搜尋或者自舉。
強化學習研究人員(包括我們自己)過去普遍認為,進行長時間範圍的學習需要根本性的演算法突破,例如層級強化學習(hierarchical reinforcement learning)。而我們的結果顯示,我們並沒有充分信任現有的模型——至少當他們以足夠的規模和合理的探索方式執行的時候。
我們的智慧體被訓練以最大化未來獎勵的指數衰減和,其中指數衰減因子被稱為 γ。在 OpenAIFive 最新一輪的訓練中,我們將 γ 從 0.998(以 46 秒為半衰期)調整到了 0.997(以 5 分鐘為半衰期)。相比之下,OpenAI 的近端策略最佳化(PPO)論文中最長的時間跨度為半衰期 0.5 秒,DeepMind 的 Rainbow 論文中最長的時間跨度為半衰期 4.4 秒,Google Brain 的 Observe and Look Further 論文中則使用了 46 秒的半衰期。
雖然當前 OpenAI Five 的補兵能力略差(看我們的測試賽,專業 Dota 解說員 Blitz 估計它的補兵能力只有職業玩家的中值水平),但它在選擇優先攻擊目標上能達到專業水平。獲取長期獎勵(例如插眼控圖)通常需要犧牲短期獎勵(例如發育後的金錢),因為團推時要也要耗費時間。這一觀察加強了我們的信念:系統會隨長時間而有最佳化。
模型架構
每個 Open AI Five 網路包含一個單層、1024 個單元的 LSTM 網路,它能觀察當前的遊戲狀態(從 Valve 的 Bot API 中抽取)並透過一些可能的行動 Head 發出下一步採取的行動。每一個 Head 都包含語義資訊,例如延遲該行動的時間值、選擇哪一個行動和其 X 與 Y 的座標軸。
OpenAI Five 使用了觀察空間和行動空間的互動性演示。它將世界表徵為一個由 2 萬個數值組成的列表,並透過發出一個包含 8 個列舉值的列表而採取行動。我們可以在 OpenAI 網站上選擇不同的行動和目標以理解 OpenAI Five 是如何編碼每一個行動,以及如何觀察世界的。下圖展示了人們可能會觀察到的場景:
Necrophos
OpenAI Five 可以對其丟失的狀態片段作出反應,這些狀態片段可能與它所看到的相關。例如,直到最近 OpenAI Five 的觀察還沒有包含彈片落下的區域,而人類可以在螢幕上輕鬆觀察到這些落彈區域。然而,我們觀察到 OpenAI Five 可以學習走出活躍的落彈區域,因為在這樣的區域中智慧體會發現它們的生命值在下降。
探索
儘管構建的學習演算法能處理較長的視野,但我們仍然需要探索環境。即使我們已經限制了複雜度,但遊戲仍然有數百種物品、幾十種建築、法術、單位型別以及需要長時間慢慢學習的遊戲機制,這些變數將組合成極其巨量的情況。因此,有效地探索這一巨大的組合空間是非常困難的。
OpenAI Five 透過自我對抗(self-play)從隨機權重開始學習,這為探索環境提供了一個自然的 curriculum。為了避免「策略崩壞」,智慧體在 80% 的遊戲中透過自我對抗進行訓練,而在 20% 的遊戲中與過去的智慧體進行對戰。在第一場遊戲中,英雄漫無目的地在地圖上探索,而在幾個小時的訓練後,出現了規劃、發育或中期戰鬥等概念。幾天後,智慧體能一致地採用基本的人類策略:試圖從對手偷財富、推塔發育、在地圖旋轉控制英雄以獲得線路優勢。透過進一步的訓練,它們變得精通 5 個英雄一起推塔這樣的高階策略了。
在 2017 年,我們第一個智慧體擊敗了機器人,但仍然不能戰勝人類。為了強制在策略空間中進行探索,我們有且僅在訓練期間對這些單位的屬性(生命、速度和初始等級等)進行了隨機化,然後它開始與人類對戰。隨後,當一名測試玩家不停地擊敗我們的 1V1 機器人時,我們增加了訓練的隨機性,然後測試玩家就開始輸掉比賽了。此外,我們的機器人團隊同時將類似的隨機技術應用到物理機器人中,以便從模仿學習遷移知識到現實世界中。
OpenAI Five 使用我們為 1V1 機器人編寫的隨機化,它還使用一個新的「lane assignment」。在每次訓練遊戲開始時,我們隨機「分配」每一個英雄到線路的一些子集,並在智慧體發生偏離時對其進行懲罰,直到遊戲中的隨機選擇時間才結束懲罰。
這樣的探索得到了很好的獎勵。我們的獎勵主要由衡量人類如何在遊戲中做決策的指標組成:淨價值、殺敵數、死亡數、助攻數、最後人頭等。我們透過減去每一個團隊的平均獎勵以後處理每一個智慧體的獎勵,因此這能防止智慧體找到正項和(positive-sum)的情況。
合作
OpenAI Five 沒有在各個英雄的神經網路之間搭建顯式的溝通渠道。團隊合作由一個我們稱之為「團隊精神」的超引數控制。團隊精神的取值範圍為從 0 到 1,代表了 OpenAI Five 的每個英雄在多大程度上關注自己的個人獎勵函式以及在多大程度上關注團隊平均獎勵函式。在訓練中,我們將其值從 0 逐漸調整到 1。
Rapid
我們的系統是用通用的強化學習訓練系統 Rapid 來實現的。Rapid 可以被應用到任何一個 Gym 環境。在 OpenAI,我們也用 Rapid 來解決其他問題,包括競爭性自我對抗訓練(Competitive Self-Play)。
訓練系統示意圖
我們已經在 IBM Kubernetes,微軟 Azure,谷歌 GCP 後端上實現了 Rapid。
遊戲
到目前為止,我們與這些隊伍進行了對戰:
最強的 OpenAI 職員團隊: 匹配分 2500
觀看 OpenAI 職員比賽的觀眾玩家 (包括 Blitz 等):匹配分 4000-6000,他們此前從沒有組隊參賽過。
Valve 公司團隊: 匹配分 2500-4000
業餘團隊: 天梯 4200, 作為一支隊伍來進行訓練。
半職業團隊: 天梯 5500, 作為一支隊伍來進行訓練。
在與前面三支隊伍的比賽中,OpenAI 取得了勝利,輸給了後面的兩隻隊伍(只贏了開場前三局)。
我們觀察到 OpenAI Five 具有以下幾個特點:
經常來犧牲自己的優勢路(夜魘軍團的上路,天輝軍團的下路),以壓制敵人的優勢路,迫使戰鬥轉移到對手更難防禦的一邊。該策略在過去幾年的專業領域出現過,現在已經成為了流行戰術。Blitz 說他在打 DOTA 8 年後才學到了這個戰術,當時是 Liquid(一支職業隊伍)告訴了他。
比賽初期到中期的轉換比對手更快。它是這樣做到的:1)在人類玩家走位出問題時,進行多次成功 gank,2)在對方組織起反抗前,去組隊推塔。
在一些領域機器有時也會偏離主流打法,例如在前期將錢和經驗讓給輔助英雄(這些英雄一般不優先獲取資源)。OpenAI Five 的優先順序使它獲得的傷害更快達到頂峰,從而建立起更大的優勢,贏得團戰以及利用對方的錯誤來確保快速取勝。
和人類的差異
OpenAI Five 獲得的資訊和人類是一樣的,但前者可以實時看到位置、生命值和裝備清單等,而這些資訊都需要人類選手去手動檢視。我們的方法從根本上就沒有依賴於(實時)觀察狀態,但從遊戲中渲染畫素就需要成千上萬塊 GPU。
OpenAI Five 平均每分鐘可進行 150-170 次操作(APM=150-170,因為每四幀觀察一次,所以理論峰值為 450)。熟練的玩家有可能掌握完美捕捉畫面的時機,但這對機器來說輕而易舉。OpenAI Five 的平均反應時間為 80 毫秒,比人類更快。
這些差異在 1V1 中影響最大(當時我們機器人的反應時間為 67 毫秒),但競技是相對公平的,因為我們已經看到人類在學習和適應機器人的打法。在去年 TI 之後,很多專業選手使用我們的 1V1 機器人進行了為期數月的訓練。William *"Blitz"* Lee(前 DOTA2 專業選手和教練)表示,1V1 機器人已經改變了我們對單挑的傳統看法(機器人採取了快節奏的打法,現在每個人都已經試著去跟著這個節奏)。
令人驚訝的發現
二元獎勵可以給予良好的表現。我們的 1v1 模型具有形狀獎勵,包括上次命中獎勵,殺戮等。我們進行了一個實驗,只獎勵代理的獲勝或失敗,並且讓它在中間訓練了一個數量級較慢並且稍微平穩的階段,與我們平常看到的平滑學習曲線形成對比。該實驗在 4500 個核心和 16 個 k80 GPU 上進行訓練,訓練至半專業級(70 TrueSkill,而非我們最好的 1v1 機器人的 90 TrueSkill)。
我們可以從頭開始學習卡兵。對 1v1 來說,我們使用傳統的強化學習和一個卡兵獎勵(a creep block award)來學習卡兵。我們的一個同事在去度假前(去和未婚妻求婚!)留下了 2v2 模型,打算看看需要多久的訓練能才提高表現。令他驚訝的是,這個模型在沒有任何指導或獎勵的情況下學會了卡兵。
我們仍在修復系統漏洞。下圖顯示了擊敗業餘玩家的訓練程式碼,相比之下,我們只是修復了一些漏洞,比如訓練期間的罕見崩潰,或者導致達到 25 級的巨大負面獎勵的錯誤。事實證明我們可以在隱藏嚴重漏洞的情況下,依然擊敗優秀的人類玩家!
Open AI Dota 的一個子團隊手託去年在 Dota 2 國際邀請賽 1v1 上擊敗世界頂級專業玩家的膝上型電腦。
下一步計劃
Open AI 的團隊專注於達成八月份制定的目標。我們不知道它是否可以實現,但是我們相信透過自身的努力(和運氣),機會還是很大的。