天天看點

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

近日,在 qcon北京2017上,來自阿裡巴巴認知計算實驗室的技術專家龍海濤(花名德衡)發表了題為《星際争霸和ai》的專題演講。《星際争霸》一直是遊戲玩家心目中即時戰略類的經典之作,曆時十多年而不衰。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

而如今它更成為深度強化學習、人工智能算法研究的一個主要平台和工具。因為其蘊含了多智能體協作、多任務學習、宏觀政策規劃等複雜問題,一旦取得部分突破和進展,對商業和社會發展都會帶來極大影響。如國外的 deepmind、facebook 等公司相繼投入大量人力基于它進行通用人工智能的研究。

在本次演講中,德衡重點介紹了阿裡巴巴如何在《星際争霸》遊戲環境中研究人工智能算法,分享阿裡在這方面研究嘗試中得到的初步成果,并重點闡述多智能體協作在微觀戰鬥場景中的應用,以及未來在這個平台上的進一步的研究方向等。

以下為演講全文:

大家下午好!我是來自阿裡巴巴認知計算實驗室的龍海濤,今天主要跟大家聊一下“《星際争霸》與人工智能”的話題。首先我會介紹一下為什麼會選擇《星際争霸》這個遊戲來做人工智能前沿性的研究。

1. 為什麼選擇《星際争霸》作為人工智能算法研究的環境

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

首先可能大家有疑問,為什麼選擇《星際争霸》這個遊戲來做我們ai研究平台。阿裡認知計算實驗室目前是挂靠在搜尋事業部下面,我們團隊的成員基本都是做搜尋、廣告、推薦、算法這樣的背景,之前我們主要做的是ctr預估的優化,還有cvr轉化率的一些優化,從去年“雙11”之後,我們想在認知智能方面做一些前沿性的探索,我們一緻認為遊戲是一個研究ai算法的絕佳平台,首先它是非常幹淨的平台,可以源源不斷産生資料,而且疊代非常快,就是說它的智能是可以觀測到的。

另外,它離真實的場景和應用比較近,并且《星際争霸》十多年來就是一個非常好的受大家歡迎的遊戲,積累了非常非常多的資料,這樣我們可以從之前的經驗去學習,這也是我們考慮的一個方面。最重要的,它對ai來講存在着非常大的挑戰,非常複雜,主要有以下六點:

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第一點,它是一個不完全資訊下的環境。比起像圍棋或者象棋這種大家都可能看得見的、完全資訊下的博弈,《星際争霸》是有戰争迷霧的,是以必須去探路、偵查、了解對手的資訊,進而在不确定的情況下去做智能的決策,這個是相對其他遊戲來講非常不同或者挑戰更大的一個方面。

第二點,它有非常巨大的搜尋空間,圍棋的搜尋空間大概在10^170,《星際争霸》在128×128的地圖上并且人口上限是400個unit的情況下,它的搜尋空間大概在10^1685,比圍棋高10個數量級,這還是在沒有算上其他狀态(比如說血量等等)的情況下。是以現有的任意一個單一的算法是根本不可能解決《星際争霸》裡面所有的問題的。

第三點,它是一個即時對抗類的遊戲。下圍棋可以有一分鐘或者兩分鐘的思考時間,但是在《星際争霸》裡,如果說正常遊戲大概是1秒鐘24幀,那麼你必須在42毫秒之内做出迅速的反應,而且這個反應不是一個action,而是一系列的action,每個unit都會采取行動,這對我們算法的性能、效率、工程上的考慮都是非常大的挑戰。

第四點,它需要智能體有一個長期的規劃,而不是一個下意識的動作,是需要有記憶,需要考慮這場戰争應該采取什麼樣的政策,中盤應該怎麼考慮,發展到後期又應該采取什麼樣的政策,而且這個政策的計劃是根據偵查到的所有的資訊動态去調整,這對人工智能的挑戰是非常非常大的。

第五點,在《星際争霸》裡面要玩好的話,必須基于時序上、空間上去做推理,比如說地理位置的優勢,坦克如果架在哪裡可能會比較好,如果開分機在哪個位置去開會比較有利,甚至于軍營造在什麼地方,這些對于ai來說都需要進行一個空間上的推理。

第六點,《星際争霸》最高有400個unit,是以其實是需要多個智能體協作的,需要多個兵種去配合,這也是對ai來講一個很大的挑戰。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

星際争霸》裡面ai的研究或者競賽不是最近才出現的,其實在2010年的時候已經有大量的研究人員在研究《星際争霸》裡面的ai,主要是以加拿大alberta大學為主的研究力量,包括一些老師和學生,而且有三個固定的競賽和一些循環賽,大家在上面pk。

這一類ai的話是classic ai,也就是沒有學習能力、沒有模型、也不需要訓練,而是基于預程式設計的規則,是以不是非常靈活,這種算法下的ai其實離真正超過人類或者打敗人類目标還是非常非常遠的,它們可以打敗内置的ai,但是還遠遠比不上人類的專業選手,甚至連普通選手基本上也打不過。

另外一類是modern ai,也就是以智能體自主學習為主的算法,從去年開始這個領域火起來了。比如阿裡巴巴和倫敦大學學院,最近在合作的基于《星際争霸1》裡面做一些新的ai的嘗試。 另外就是google deepmind,去年11月份他們和暴雪合作,會基于《星際争霸2》去開放一個api,讓大家基于《星際争霸2》開發自己的ai算法,另外像facebook也有一些團隊做這方面的研究。

2. 深度強化學習

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

強化學習是非常接近人類學習的一個學習機制,通過這個agent跟環境的互動,在互動當中學習。agent會觀察周圍的環境,然後環境會給它一些回報,agent根據狀态和回報會做出一些動作,這些動作會或多或少的影響這個環境,環境會根據這個動作回報一些reward,reward可能是獎勵的也可能是懲罰的,agent根據這樣的試錯,不斷的去調整。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

agent背後有兩個概念非常重要,一個是不停的優化政策,什麼樣的狀況下采用什麼樣的action是合理的,另外一個是用價值函數評估目前的狀态它的價值是怎麼樣的。

強化學習跟深度學習結合,就叫深度強化學習。因為深度學習或者神經網絡是非常适合去做這種表示學習的,可以表示成一個複雜的函數。policy或者value用神經網絡去逼近的話,在工程上或者效率上是非常好的提升。

以alphago的例子來講,在訓練的時候分成三個階段,第一個階段,從人類的棋譜裡面學習人類的先驗的知識,通過監督學習學習一個較好的、勝率較高的policy network;第二個階段,基于監督學習學習出來的policy network,然後自我對弈,通過policy gradient再去優化policy network,這就比之前學出來的policy network要更好;第三階段,再用學出來的強化學習版的policy network自我對弈,獲得一個最佳。

3. 多智能體協作

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

其實目前為止所有的ai的智能體比較成功的一些應用基本都是這種單個的agent,其實對于人類來講,協作智能是智能體的一個非常大的方面,我們的祖先智人為什麼可以統治地球,其中一個很大的原因就是,他們學會了大規模的協作,而且是非常靈活的協作。可以想象一下,未來全部都是這種ai的智能體,它們能不能自我學習到人類水準協作的一個智能呢?

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

我們用了一個詞artificial collective intelligence,這對現實和未來都有非常大的意義。比如手機淘寶,現在絕大部分流量背後都是一個算法推薦出來的,不管廣告還是搜尋其背後都是ai的智能體在做,目前這些智能體都是各出各的優化,或者推出自己的商品。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

其實我們在考慮的是,比如手機淘寶首頁裡邊有愛逛街、猜你喜歡這種位置,那麼他們能不能夠協同地去推薦一些這樣的商品,進而可以讓使用者的體驗最好,讓平台的價值最大化。其實以後可能都是算法經濟、ai經濟,都是這種ai的agent,比如滿大街可能都是自動駕駛的無人車,他們之間是不是也需要一些協作,讓交通出行效率能夠達到最大化。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

最近我們在《星際争霸》裡的微觀戰鬥場景下,提出來一個多智能體雙向協作網絡,關于這個網絡的詳細内容大家感興趣可以下載下傳我們的paper看一下,這個工作是我們跟ucl一起合作完成的,用來探索或者解決多智能體協作的問題。

這是我們提出來的bicnet(multiagent bidirectionally-coordinated net)的網絡結構,它其實也是比較經典的結構,分成兩部分,左邊這部分是一個policy的網絡,就是說從下往上會把《星際争霸》的環境進行一些抽象,包括地圖的資訊、敵方機關的血量、攻擊力,還有我方unit的資訊,抽象出來形成一個共享的state,經過一個雙向的rnn這樣的網絡,進行充分的雙向的溝通,再往上每個agent去得出自己的action。

比如我到某一個地方去攻擊誰。左邊這個policy network就是對于目前的狀态應該采取什麼行動,右邊就是一個value的network,根據前面policy得出來的action,還有抽象出來的state進行評估,q值大概是多少,做出一個預判。當采取這些行動以後,這個環境就會給出相應的回報,一些reward來說明這步打的好還是不好,然後會通過一個reword從右邊這個網絡下來,去反向傳播更新裡面的參數。

這個網絡有幾點比較好的設計:

第一,它的scalability比較好,《星際争霸》裡面打仗的時候随時可能會有傷亡,這個agent死掉以後這個網絡不是還可以正常的工作,包括源源不斷湧現的新的agent進來,是不是也是可以工作。我們看到雙向網絡參數是共享的,是以是不會有影響的;

第二,我們在中間用了這樣一個雙向網絡以後,其實是在一個效率和性能之間做了比較好的平衡,如果用全連接配接網絡的話,計算量會過大。但是我們用一個雙向網絡,前面告訴你大概要做什麼樣的action,回來再告訴前面的人他們采取了什麼樣的action,一結合,最後算出來應該追加的政策是什麼樣子,從實際來看效果也是非常好的。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

其實我們認知計算實驗室在設計一些算法或者模型的時候會參考神經科學裡邊目前的一些研究成果,我們認為研究認知心理學、大腦、類腦的研究或者神經科學,對于做人工智能應該有兩個好處。

第一個好處就是,神經科學具有啟發性,就是當你在一些具體的問題或者場景裡面去思考的時候,會遇到一些問題,這些問題可能是從來沒有人解過的,如果神經科學、交叉科學裡有類似的這種結構或者算法,這些可能會很好的解決你的問題,帶來算法上的一些啟發。反過來另外一點,神經科學也可以幫你做驗證,你設計一個算法以後,如果神經科學裡面有類似的結構,那麼很大機率這個算法是可以工作的。

其實我們的actor-critic網絡在人腦裡面也是有相應的對應,左邊就是actor-critic這個網絡,右邊是我們的大腦,大腦裡邊紋狀體就是負責actor、critic兩部分,這個紋狀體腹部是負責critic這部分,背部是負責actor這部分,reward下來以後我們大腦會計算,這與預期的reward有什麼差距,這個差距就會以多巴胺的形式影響到actor,下一次你就要按照這個去調節,讓下一次action做的更好一點。其實多巴胺展現在我們的算法裡面就是td error,也就是我們算的reward的誤差,這其實是一個很好的對應。

4. 實驗平台和實際效果

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

前面是網絡架構的設計,為了實作這樣一個算法模型,我們搭了一個實驗平台,這個實驗平台就是基于facebook的torchcraft,它是把《星際争霸1》和torch封裝在一起,但是我們比較習慣于tensorflow和python,是以在上面做了一個封裝,再把這套架構放在這個openai标準接口裡邊,大家有興趣可以試一下。

這個架構主要分成兩部分,對應剛才說的強化學習,左邊是environment,其實就是《星際争霸》這個遊戲,包括引擎,還有裡面的dll,dll基于bwenv,這是一個官方認可的dll。基于這個bwenv dll把内部的狀态、指令封裝起來,其實這就是一個server,右邊就是agent,是一個client,這樣你可以連上很多的agent玩這個遊戲。

中間是傳遞的資訊,environment會把它每一幀的資料吐給agent,agent會把每一幀的資料抽象成狀态,然後再把這個state送到model裡面去學習或者做預測,反過來會預測出來一些action,這些action會封裝成指令,再發回給《星際争霸》的environment,比如說開槍或者逃跑,這個是我們搭的這樣一個《星際争霸》的實驗平台。

下面是我們這個實驗平台做到的一些效果,總結起來有五種可觀測的智能:

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第一種,可以配合走位。這個例子就是三個槍兵打一個super的小狗,這個小狗是我們編輯過的,血量非常大,一下子打不死。三個槍兵打一個小狗,a/b這兩個圖,在訓練的早期其實是沒有學會太多的配合意識,是以他們走位的時候經常會發生碰撞,經過可能幾萬輪的訓練以後,他們慢慢學會了配合隊友的走位,這樣大家撞不到一起。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第二個場景,這個配合就是邊打邊撤,hit and run這樣的技能,這個例子就是三個槍兵打一個狂徒,利用遠端攻擊的優勢來消滅敵人。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第三種,掩護攻擊。剛才三個槍兵打一個狂徒的時候是同時撤退,但是在這個場景下有些槍兵可能會去吸引這個小狗或者去阻擋一下,讓另外兩個槍兵抓住這個時間空隙來消滅這個小狗。非常有意思的一點就是,這種協作不是在任何情況下都會出現的,如果你的環境不是那麼的有挑戰性,可能它就是簡單的hit and run就足夠了,如果我們的環境更嚴苛一點,比如這個小狗血量調高,攻擊力從3調到4,或者血量從210調到270,發現它又學會了另一種更進階的掩護攻擊的協作,這就非常有意思了。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第四種,分組的集火攻擊。這個例子是15個槍兵打16個槍兵,大家想想應該怎麼取勝?政策可能3個槍兵或者4個槍兵自動組成一組,這3個槍兵先幹掉一個、再幹掉一個,就是把火力集中,但又不是15個槍兵打1個,而把火力分散一點,最後可能我們這方還剩6個槍兵,對方可能全部消滅掉了,這個都是通過很多輪次的學習之後他們自動去學到的這樣一個配合。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第五種,不光是槍兵之間學會配合,還可以多兵種配合,異構的agent的配合。這個例子就是,兩個運輸機,每個運輸機帶一個坦克去打一頭大象,正常來講,兩個坦克打一個大象肯定是打不過的,加上運輸機的配合以後,大象攻擊某一個坦克的時候,運輸機會及時的把這個坦克收起來,讓大象撲空,同時另外一個運輸機趕緊把它的坦克放下去,去攻擊大象,這樣一來一回可能大象一點便宜占不到就被消滅了,這個是基于我們之前的做出bicnet一個協作的展現。

5. 關于未來的一些思考

但是《星際争霸》裡其實不光是微觀戰鬥,其實更難的是宏觀的政策方面,怎麼樣“宏觀+微觀”打一整個遊戲,這樣其實我們也有一些思考,可能不是特别成熟,但是我們可以一起探讨一下。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第一點,要玩一個full-game,如果是簡單的單層次的強化學習,可能解決不了問題,因為action space實在太大了,一個比較自然的做法就是做層級式的方式,可能上層是政策規劃,下面一層就是它的戰鬥、經濟發展、探路、地圖的分析等等,這樣的話一層一層的,就是高層給下層設定一個goal,下層再給下面一層設計一個goal,其實這跟人的問題分解是比較類似的。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第二點,我們覺得值得去研究和探讨的是模仿學習,imitation learning,剛剛講的alphago的例子也是imitation learning,第一步通過監督學習學習比較好的政策,再把監督學習學好的政策通過自我的對弈去提升,在《星際争霸》裡面更需要這種模仿學習,比如說我們兩個槍兵打一個小狗的時候,我們認為一個好的政策是一個槍兵吸引小狗在那兒繞圈,然後另外一個槍兵就站在中心附近開槍,把這個小狗消滅,兩個槍兵一滴血可以不死。但是這種政策是比較難學習的,是以我們先給它人為的讓這個槍兵在裡面畫圈,畫上幾步之後槍兵自己學會畫圈了,帶着小狗,然後另外一個槍兵在後面追着屁股打,這種探索就非常的有效。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

第三點,我們叫continual learning,如果要邁向通用智能,這是繞不過去的課題。continual learning像人一樣,我們學會了走路,下一次我們學會了說話,我們在學說話的時候可能就不會把走路這件事情這個本領忘掉,但是在《星際争霸》一些場景的時候,神經網絡學到a的時候再去學b,這個時候可能會把a的事情忘掉。

舉個例子,一開始我們訓練一個槍兵打一個小狗,這個小狗是電腦裡邊自帶的ai,比較弱,這個槍兵學會了邊打邊撤,肯定能把小狗打死。我們再反過來訓練一個小狗,這個小狗去打電腦槍兵,這個小狗學會最佳政策就是說一直追着咬,永遠不要猶豫,猶豫就會被消滅掉,是以它是一條惡狗,一直追着槍兵咬。

然後我們把這槍兵和小狗同時訓練,讓他們同時對弈,這樣發現一個平衡态,就是槍兵一直逃,狗一直追,《星際争霸》設計比較好的就是非常平衡。然後這個槍兵就學會了一直跑,我們再把這個槍兵放回到原來的環境,就是再打一個電腦帶的小狗,發現它也會一直跑,它不會邊打邊撤。你發現它學習的時候,學會了a再學會b,a忘了,這個其實是對通用人工智能是非常大的挑戰,最近deepmind也發了一個相關工作的paper,這也是一個promising的方向,大家有興趣可以去看一下,他們的算法叫ewc。

戰勝柯潔後,AI在悄悄潛入人類下一個智慧堡壘

最後一點,前面有說到幾大挑戰,其中有一大挑戰就是長期的規劃,長期規劃裡邊我們認為一個比較好的做法就是,給這種強化學習裡面去引入memory的機制,這也是目前的一個比較火的方向,像memory networks、dnc,要解決的問題就是,我們在學習的過程當中應該記住什麼東西,進而使得我們可以達到一個很好的最大的reward。

<a href="https://mp.weixin.qq.com/s/zbki0bazw-njagzwkcfgfg">原文連結</a>

繼續閱讀