他這個Z炮是怎麼壓到我的?——OpenAI解釋Dota2AI的實現過程

譯者按:本站之前已經介紹了OpenAI帶來的Dota2的人工智慧機器人的一些信息。而今天,OpenAI發表的文章為我們提供了這個AI研究過程中的種種細節,包括訓練環境的搭建、AI的成長曆程以及未來研究團隊的目標和方向。閱讀這些信息對於了解人工智慧發展現狀以及增強學習的一些特性頗有幫助,因此本站特將該文章翻譯在此,請各路大神指正。

本文首發在集智專欄:他這個Z炮是怎麼壓到我的?——OpenAI解釋Dota2AI的實現過程 - 集智專欄 有兩個視頻知乎不能播放,建議在集智上觀看。

原文作者:OpenAI

譯者:朝陽

前言

我們(指OpenAI,下同——譯者注)研究的人工智慧在Dota2上面的完美表現證明,只要提供足夠的計算資源,自我學習方式(self-play)能夠飛速提升機器學習系統的性能,從而將人工智慧的水平從低於人類水平攀升至超過人類的等級。在過去的一個月里,我們的人工智慧系統從剛剛能和高水平的人較量一番提升到了可以打敗世界上最頂尖的選手,而它的水平還在不斷提升。基於深度學習的有監督學習系統(猜猜在說誰呢?——譯者注)只能達到與它們使用的訓練數據一樣的水平,但是在自學系統中,遊戲數據會自動隨著機器人水平的提升而越來越好。

上圖是我們最好的機器人的TrueSkill評分(與國際象棋中的ELO評分相類似)隨時間變化的圖線,這個圖線是根據機器人之間的對戰模擬以及勝率評測來得出的。AI系統中任何部分的改善都能提升這裡的評分,包括為演算法增加新特性或是進行系統優化等等。令人驚奇的是這個圖線是線性的,這意味著機器人的競技水平增長速度是以指數形式向上攀升的。

(很多人也許會問為什麼圖線是線性的但水平上升是指數形式的,這是因為在TrueSkill系統下,玩家的水平越高,則分數的提升越困難,因此只有保證水平指數上升才能讓評分穩步提高——譯者注)

這個項目的時間表如下所示。根據一些觀點,Dota2中大約有15%的人天梯分在1500以下,低於3000的玩家有58%,而99.99%的玩家都低於7500。

  • 5月1日:在一個簡單的Dota2環境中完成我們的第一個傳統的增強學習過程,這個過程的主要任務是指揮卓爾遊俠(小黑——譯者注)學會風箏一個固定編碼的撼地者(小牛)。
  • 5月8日:天梯分1500的測試者聲稱我比AI不知高到哪裡去
  • 6月初:天梯分1500的測試者輸了
  • 6月30日:與3000分的測試者較量,贏得大部分比賽
  • 7月8日:在與7500分的准職業選手較量時接近獲勝
  • 8月7日:以3-0打敗了Blitz(6200分的前職業選手)、2-1打敗了Pajkatt(8500分的職業選手)、3-0打敗了CC&C(8900分的職業選手)。所有人都認為Sumail(天才少年,很多人稱其是世界第一中單——譯者注)能夠找出打敗AI的辦法
  • 8月9日:以10-0的比分打敗Arteezy(10000分的職業選手),他也認為Sumail可以獲勝
  • 8月10日:Sumail以0-6的比分輸掉了(辜負了多少人的期待。。。——譯者注),他認為這個AI是不可戰勝的。但當面對八月九日的AI時,Sumail獲得了2-1的勝利。
  • 8月11日:以2-0的比分打敗了Dendi(7300分的職業選手,前世界冠軍,Dota屆老司機)。這一天的機器人相對於八月十日的AI有60%的勝利。

這裡有個視頻,想看的話可以來這個鏈接看:他這個Z炮是怎麼壓到我的?——OpenAI解釋Dota2AI的實現過程 - 集智專欄

Bot與SumaiL進行對戰

我們的任務

一局完整的Dota2遊戲是5對5的,但是1對1的Solo比賽在一些大賽中也有登場。我們研究的機器人是完整按照大賽的基本規則來的——我們並沒有基於1對1的場景對AI的策略進行某種簡化。

機器人基於以下的準則來完成行動:

  • 環境觀測:這裡將遊戲內的視覺要素,包括英雄、小兵、信使以及建築等等封裝成一個API供AI使用,我們保證AI所獲得的要素跟人類玩家是完全一致的,AI並沒有獲得遊戲內部的全局視野。
  • 遊戲動作:對於英雄的動作指揮也是通過API來完成的,動作的施放頻率也和人類等同,這些動作包括移動英雄到某個位置、攻擊某個單位或是使用物品。
  • 遊戲反饋:機器人會受到各種因素的影響,比如說獲勝可能性以及類似於血量和補刀數量這些基本數據。

我們為AI設置了一些基本的出裝思路,然後每次使用一種出裝來進行評估。我們還額外使用傳統的增強學習技術來訓練AI學會一開始的擋兵動作,這個動作一般發生在敵方還尚未露面的時候。

Dota2國際邀請賽

我們的成果,即這種僅包含少量「指導」的AI自我學習成果能夠保證機器人在本年度的國際邀請賽的舉辦期間(周一到周四)也能顯著地提升遊戲水平。在周一晚上,因為使用了出人意料的出裝思路(早期出了一個魔棒),Pajakatt獲得了一次勝利,於是我們也將這種出裝加入了我們的訓練名單之中。

在周三下午的一點左右,我們測試了當時的機器人性能。當時的機器人在第一波兵線消耗時就會丟掉一管血。我們當時認為也許我們需要回滾一下,但是緊接著我們發現接下來的遊戲場景非常精妙,當時AI在第一波對抗時的策略是引誘對手來攻擊自己,而在後面的自學過程中AI自行修復了這種不適當的策略,並掌握了如何對抗挑釁的辦法。這時候,我們在第一波的策略中使用周一的機器人來進行策略組合,並在4點鐘與Arteezy的比賽的20分鐘之前完成了整個過程。

Arteezy的比賽結束後,我們更新了AI的擋兵系統,這次更新將AI的TrueSkill評分提高了一分。而在周四Sumail的比賽之前,更多的訓練過程使得TrueSkill評分又提升了兩分。Sumail指出機器人已經學會了如何在對手的視野之外施放影壓,這是一個我們從未知曉的對戰技巧:在對手的視野之外施放技能時,對手的魔棒將不會獲得點數。

Arteezy還和我們7500分的准職業測試人員玩了一場,毫無疑問10000分的Arteezy完勝,但是我們的測試者使用他在AI身上學到的技巧輕輕地耍了Arteezy一把,Arteezy笑談這個策略只有Paparazi在對付他時使用過一次,而他從來沒有對此進行過訓練。

這裡有個視頻,想看的話可以點鏈接:他這個Z炮是怎麼壓到我的?——OpenAI解釋Dota2AI的實現過程 - 集智專欄

挑戰機器人

雖然Sumail認為這個機器人是「不可戰勝的」,在面對從未見過的遊戲局面時,AI也會變的傻乎乎的。我們在TI7國際邀請賽的場館內安排了可以和AI一較高下的線下比賽,這裡世界各地的玩家總共與機器人進行了1000餘場比賽,玩家們絞盡腦汁使用各種辦法來打敗AI。

打敗AI的玩家基本上使用了以下三種策略機制:

  • 無腦拉兵線:在小兵前進時,玩家可以通過攻擊兵線來讓小兵一出現就追逐自己(在中路二塔到三塔之間),這樣做的結果就是你被一幫小兵滿地圖追著跑,而對面的一塔會因為無人把守而迅速崩潰(值得一提的是Dota2的內置AI也有這個問題,電腦在面對玩家無腦拉兵線的行為時總會無所適從——譯者注)。
  • 毒球加風靈之紋:這種出裝能確保玩家在一級的時候就能有一個很明顯的速度優勢,因此在對抗AI時玩家能夠迅速地拿到一血。當然根據比賽規則,玩家要利用這個優勢再一次擊殺機器人才行(Solo大賽的規則是二殺一塔,即首先拿到兩個人頭或是摧毀敵方一塔的玩家獲勝——譯者注)。
  • 一級學影壓:這是個高等級技巧,但是一些6千到7千的玩家使用這個辦法成功地擊殺了機器人,方法就是在一級的時候學影壓然後在盡量短的時間裡使用影壓擊中對手3到5次(這確實是Solo比賽中的一種高端策略,犧牲一開始的補刀積累,通過早期的技能傷害建立血量上的優勢——譯者注)。

解決這些問題的辦法與解決Pajkatt發現的Bug是類似的。當然我們要注意在5對5的遊戲中,這些策略基本是不能奏效的,我們也需要一個更完整的系統來處理各種AI沒見過的複雜奇怪的遊戲狀況。

基礎框架

我們還沒有準備好向大家介紹機器人的一些內部原理——我們的團隊正在全力為5v5做著準備。

我們在項目中所面對的第一個問題就是如何在雲端的物理GPU中運行Dota2的遊戲環境,當我們嘗試在GPU的雲端實例中運行遊戲時,遊戲返回了一大堆令人費解的錯誤信息。但是當我們在Greg的私人電腦上(這個主機就是TI7的活動現場所展示的計算機)啟動運行時,我們發現當顯示器接入之後,遊戲便開始正常啟動;而當我們斷開顯示器時,遊戲便返回了和之前一樣的錯誤信息。因此我們修改了雲端GPU環境的配置文件,讓遊戲認為環境中存在一個真實的顯示器。

由於Dota2現在還不支持自定義的私人伺服器,因此如果沒有GPU而又需要靈活運行這個遊戲的話,遊戲的渲染速度將會非常緩慢。因此我們構建了一個中間層來阻攔了大部分的OpenGL調用,除了一些特別的遊戲用來完成啟動的語句。

(這裡解釋一下,OpenAI的訓練環境是在雲端的GPU伺服器集群上來完成的,現場所展示的U盤只記載著訓練好的模型。一般GPU的雲伺服器環境都是Linux,而Dota2的Linux版本是使用OpenGL來渲染的。當然,由於OpenAI的訓練過程依靠的是Dota2自身的介面,因此在訓練過程中遊戲根本沒必要去渲染畫面——但是作為一個遊戲,它必須時刻監控遊戲渲染畫面來保證遊戲運行的穩定,這就是為什麼OpenAI的研究人員需要使用一個中間層來處理遊戲的OpenGL調用,其目的是讓遊戲認為其運行在一個有顯示器、渲染過程穩定的環境之中。——譯者注)

與此同時,我們還編寫了一個由腳本控制的機器人——我們需要一個基準來充當參照物(主要是遊戲的內置AI在1對1時表現得很差勁),同時我們也需要深刻理解Dota2的機器人API的各種細節。這個腳本機器人在沒有敵人的情況下能夠在十分鐘內拿到70個補刀,但是這種水平仍然會被聰明的人類玩家打敗。目前我們的機器人所達到的最好的補刀數字是97(再拿到這個數字之前AI就攻破了對方的防禦塔,所以這個數字是推斷出來的),而十分鐘內理論的補刀上限是101。

5對5

1對1就已經足夠複雜了,而5對5更是複雜得難以想像。我們明白我們必須極大地拓寬AI的視野來讓其能夠進行5v5的對抗。

千里之行始於足下,我們將從行為模範策略開始來逐漸構築模型。Dota2每天會有上百萬場公開比賽,而所有這些比賽的錄像會在Valve的伺服器上保留兩周。我們從去年十一月開始就開始下載所有專家級別的遊戲錄像,然後已經擁有了580萬場遊戲的海量資料庫(每場遊戲都是10個人類玩家,遊戲時長在45分鐘左右)。我們使用OpenDota(一家提供Dota2錄像查詢的網站,它能為OpenAI標明那些遊戲是專家級別的——譯者注)來發現這些錄像,並為他們提供了1.2萬美元的資助(他們10年的資金募集目標)來完成這個項目。

我們有著各種各樣的奇妙主意,而且也為實現我們的目標而招賢納士(我們期望的人才不一定是專家,但必須對機器學習滿懷好奇)。在這裡我們也感謝微軟Azure雲平台以及Valve公司的大力協助。


推薦閱讀:

TAG:集智https:jizhiim | 刀塔DOTA2 | openai |