閱讀871 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

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

image


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

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

以下為演講全文:

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



image


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

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

image


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

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

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

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

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

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

image


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

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

另外一類是Modern AI,也就是以智能體自主學習為主的算法,從去年開始這個領域火起來了。比如阿裏巴巴和倫敦大學學院,最近在合作的基於《星際爭霸1》裏麵做一些新的AI的嚐試。 另外就是Google DeepMind,去年11月份他們和暴雪合作,會基於《星際爭霸2》去開放一個API,讓大家基於《星際爭霸2》開發自己的AI算法,另外像Facebook也有一些團隊做這方麵的研究。



image


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

image


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

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

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



image


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


image

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

image


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

image


最近我們在《星際爭霸》裏的微觀戰鬥場景下,提出來一個多智能體雙向協作網絡,關於這個網絡的詳細內容大家感興趣可以下載我們的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,一結合,最後算出來應該追加的策略是什麼樣子,從實際來看效果也是非常好的。

image


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

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

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



image


前麵是網絡架構的設計,為了實現這樣一個算法模型,我們搭了一個實驗平台,這個實驗平台就是基於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,比如說開槍或者逃跑,這個是我們搭的這樣一個《星際爭霸》的實驗平台。

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

image


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

image


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

image


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

image


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

image


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

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

image


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

image


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

image


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

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

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


image


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

原文鏈接

最後更新:2017-06-16 15:32:22

  上一篇:go  阿裏多位技術專家參加ACM圖靈獎50周年大會,增進產學研互動
  下一篇:go  新技術助力電子商務到新時代