1
本文作者: 楊曉凡 | 2017-09-08 17:19 | 專題:NIPS 2017 |
雷鋒網(wǎng) AI 科技評(píng)論按:這周,機(jī)器學(xué)習(xí)頂級(jí)會(huì)議 NIPS 2017 的論文評(píng)審結(jié)果已經(jīng)通知到各位論文作者了,許多作者都馬上發(fā) Facebook/Twitter/Blog/朋友圈分享了論文被收錄的喜訊。大家的熟人 Facebook 人工智能研究院研究員田淵棟也有一篇論文入選,論文名為「ELF: An Extensive, Lightweight and Flexible Research Platform for Real-time Strategy Games」。這篇論文介紹了他們構(gòu)建的強(qiáng)化學(xué)習(xí)研究平臺(tái) ELF,為環(huán)境設(shè)計(jì)、高速訓(xùn)練、算法優(yōu)化等重要任務(wù)提供了整套高效易用的解決方案,并且還一并把這個(gè)平臺(tái)開(kāi)源了。田淵棟本人也在平臺(tái)開(kāi)源后發(fā)表了一篇知乎專欄,介紹了關(guān)鍵思想和開(kāi)發(fā)中的一些小故事。以下雷鋒網(wǎng) AI 科技評(píng)論根據(jù)論文對(duì) ELF 平臺(tái)做一個(gè)更詳細(xì)的介紹。
ELF 名字的來(lái)源是 Extensive, Lightweight, Flexible 的首字母縮寫(xiě),意指這個(gè)平臺(tái)涵蓋的內(nèi)容廣闊、具有輕量化設(shè)計(jì)、還有高靈活性。這是一個(gè)為強(qiáng)化學(xué)習(xí)研究人員設(shè)計(jì)的平臺(tái),它為游戲提供了多樣化的屬性、高效率的模擬和高度可定制的環(huán)境設(shè)置。在這個(gè)平臺(tái)上不僅可以更改游戲的參數(shù),也可以構(gòu)建新的游戲。強(qiáng)化學(xué)習(xí)方法的訓(xùn)練也集成在了環(huán)境中,深入而且具有高靈活性;對(duì)并行發(fā)生的事件的模擬尤其進(jìn)行了優(yōu)化。基于ELF,作者們?cè)O(shè)計(jì)了一個(gè)即時(shí)戰(zhàn)略(RTS)游戲引擎,其中包含了三個(gè)初始環(huán)境,分別為Mini-RTS、搶旗子和塔防。Mini-RTS 是一個(gè)迷你的定制化即時(shí)戰(zhàn)略游戲,它包含了所有星際游戲中的基本變化(戰(zhàn)爭(zhēng)迷霧,收集資源,建造部隊(duì),用部隊(duì)攻擊和防御等等)。這個(gè)Mini-RTS游戲在4核MacBook Pro上的運(yùn)行速度高達(dá)16.5萬(wàn)幀/秒,這比其它現(xiàn)有環(huán)境的速度提高了一個(gè)數(shù)量級(jí)。如此之高的訓(xùn)練速度就讓人類首次可以端到端地訓(xùn)練出一個(gè)能夠完成整場(chǎng)比賽的人工智能,用來(lái)對(duì)抗游戲內(nèi)置的基于規(guī)則的bot玩家。更進(jìn)一步地,基于ELF的人工智能在6個(gè)CPU和1個(gè)GPU上只需要一天的時(shí)間就可以完成訓(xùn)練。玩另外兩個(gè)游戲的人工智能在訓(xùn)練時(shí)也有相似甚至更高的訓(xùn)練效率。
許多真實(shí)世界的場(chǎng)景和復(fù)雜的游戲(比如星際),本質(zhì)上都是分為不同的層次的。作者們建立的即時(shí)戰(zhàn)略游戲中的內(nèi)置 bot 可以掌握所有的游戲數(shù)據(jù),而且?guī)в幸粋€(gè)內(nèi)置層次化指令系統(tǒng);這樣的指令系統(tǒng)讓任意控制層次上的訓(xùn)練變得可行。 正如在論文中展示出的,層次化的控制系統(tǒng)讓作者們得以訓(xùn)練出能夠完成整場(chǎng)比賽的人工智能,它不僅能夠表現(xiàn)出最高層次的游戲策略,也能用內(nèi)置的技巧處理低階的指令。以往的即時(shí)戰(zhàn)略游戲研究都只關(guān)注了低階的局部戰(zhàn)術(shù)戰(zhàn)役情形。另一方面,對(duì)游戲數(shù)據(jù)的全面掌控也給監(jiān)督學(xué)習(xí)訓(xùn)練帶來(lái)了可能性,只需要小規(guī)模的內(nèi)部數(shù)據(jù)就可以。
ELF 對(duì)用于訓(xùn)練的環(huán)境和參與者之間互動(dòng)關(guān)系的變化具有非常高的適應(yīng)性,這樣的表現(xiàn)得益于 EFL 采用的 C++/Python 混合框架。這其中包括了一對(duì)一、多對(duì)一和一對(duì)多映射?,F(xiàn)有的強(qiáng)化學(xué)習(xí)訓(xùn)練環(huán)境(比如 OpenAI 的 Gym 和 Universe)都只能在一種 Python 接口上封裝一個(gè)游戲,這就讓切換互動(dòng)關(guān)系變得很麻煩。ELF 的并行部分是用 C++ 編寫(xiě)的,這對(duì)加速模擬訓(xùn)練過(guò)程至關(guān)重要。最后,ELF 可以用來(lái)承載任意用 C/C++編寫(xiě)的游戲,包括 Atari 系列游戲、棋類游戲和物理引擎,只要寫(xiě)一個(gè)簡(jiǎn)單的適配軟件就可以。
在 PyTorch 編寫(xiě)的靈活的強(qiáng)化學(xué)習(xí)后端支持之下,作者們與眾多的基準(zhǔn)模型進(jìn)行了對(duì)比,并且討論了訓(xùn)練中使用到的有效技巧。論文中展示的第一個(gè)結(jié)果是玩部分信息即時(shí)策略游戲的AI,它送通過(guò)端到端的方式訓(xùn)練的。作者們使用了 A3C(Asynchronous Advantages Actor-Critic)模型,探索了幀跳躍、時(shí)間視域、網(wǎng)絡(luò)架構(gòu)、序列學(xué)習(xí)等等設(shè)計(jì)方法。結(jié)果表明帶有Leaky ReLU和 Batch Normaliztion 的網(wǎng)絡(luò)在長(zhǎng)期視界訓(xùn)練和漸進(jìn)序列訓(xùn)練下,跟內(nèi)置的基于規(guī)則的AI進(jìn)行Mini-RTS完整比賽可以取得超過(guò)70%的勝率。在其它游戲中還取得了更好的結(jié)果。
ELF 使用了經(jīng)典的生產(chǎn)者-消費(fèi)者模型,生產(chǎn)者玩N局游戲,每局游戲都在一個(gè)單獨(dú)的C線程中。當(dāng)游戲中的一組M個(gè)游戲當(dāng)前狀態(tài)就緒的時(shí)候,對(duì)應(yīng)的游戲會(huì)被鎖定,這組狀態(tài)通過(guò)daemon送進(jìn)Python一側(cè)。消費(fèi)者(例如執(zhí)行器、優(yōu)化器等等)通過(guò)Python/C++界面獲得帶有歷史記錄的成組的游戲感知,然后把回復(fù)發(fā)回給鎖定的這組游戲;本來(lái)鎖定后在等待下一步操作或者下一個(gè)值的這組游戲就可以繼續(xù)運(yùn)行了。
為了結(jié)構(gòu)的簡(jiǎn)潔性,生產(chǎn)者和消費(fèi)者目前在同一個(gè)進(jìn)程中進(jìn)行。不過(guò)它們也可以分開(kāi)在不同的進(jìn)程中,甚至在不同的機(jī)器上。在訓(xùn)練(或者評(píng)估)開(kāi)始之前,不同的消費(fèi)者可以要求提供不同長(zhǎng)度的歷史狀態(tài)。比如一個(gè)執(zhí)行器需要的的狀態(tài)歷史比較短,而一個(gè)優(yōu)化器需要的狀態(tài)歷史就比較長(zhǎng)。
如下圖是 ELF 的用法示例。
根據(jù)論文中的介紹,ELF的架構(gòu)有如下幾個(gè)特點(diǎn):
用 C 語(yǔ)言編寫(xiě),具有多線程能力?,F(xiàn)代強(qiáng)化學(xué)習(xí)方法經(jīng)常需要很高的并行訓(xùn)練程度,在多樣的情境下獲得更豐富的經(jīng)驗(yàn)。然而多數(shù)現(xiàn)有的強(qiáng)化學(xué)習(xí)環(huán)境(Open AI 的Gym和Universe,RLE,Atari,Doom)提供的Python接口只能封裝一個(gè)游戲?qū)嵗?。這樣導(dǎo)致的結(jié)果就是,應(yīng)用現(xiàn)代強(qiáng)化學(xué)習(xí)方法的時(shí)候需要在 Python 代碼中編寫(xiě)并行計(jì)算機(jī)制。然而,由于 Python 中全局解釋器鎖GIL的限制,Python中線程級(jí)別的并行化只能發(fā)揮出多核CPU很小的一部分性能。進(jìn)程級(jí)別的并行化也會(huì)給帶來(lái)進(jìn)程間額外的數(shù)據(jù)交換開(kāi)銷,并且增加框架設(shè)計(jì)難度。相比之下,用 C 線程實(shí)現(xiàn)的并行化在多核 CPU 上的拓展性要好得多。
環(huán)境與模型之間的靈活配置。ELF 可以支持一個(gè)到多個(gè)消費(fèi)者,每一個(gè)消費(fèi)者都可以從收到的一組狀態(tài)中了解到當(dāng)前環(huán)境的狀況;消費(fèi)者一般就是一個(gè)神經(jīng)網(wǎng)絡(luò)模型。這些不同的消費(fèi)者之間可以選擇分享一些參數(shù)、可以更新權(quán)重、可以存在于不同的進(jìn)程甚至不同的計(jì)算機(jī)上。這種架構(gòu)就為游戲環(huán)境和模型更換互動(dòng)關(guān)系提供了很高的靈活性。可以為每一個(gè)游戲環(huán)境各自分配一個(gè)模型,就是“一對(duì)一”的,比如A3C,這種情況下每個(gè)智能體都有單獨(dú)的一個(gè)模型副本用來(lái)進(jìn)行預(yù)測(cè)和更新。類似地,可以把多個(gè)環(huán)境分配給一個(gè)模型,就是“多對(duì)一”,比如 BatchA3C或GA3C,模型可以進(jìn)行批量的前向預(yù)測(cè),更好地利用GPU。模型里同樣可以包含前向規(guī)劃的方法,比如蒙特卡洛樹(shù)搜索(MCTS)和自我對(duì)局,同一個(gè)環(huán)境可能要接收多個(gè)模型計(jì)算出的多個(gè)結(jié)果,也就是“一對(duì)多”。在 ELF 中,這些訓(xùn)練設(shè)定都只需要很小的改動(dòng)就可以完成。
高度可定制以及統(tǒng)一的接口。在作者們的 RTS 引擎中實(shí)現(xiàn)的游戲可以用原始像素?cái)?shù)據(jù)或者游戲內(nèi)部的低維數(shù)據(jù)進(jìn)行訓(xùn)練。相比感知類的任務(wù),游戲內(nèi)部的數(shù)據(jù)對(duì)邏輯推理類的研究任務(wù)更為重要。值得一提的是,ELF 同樣支持基于網(wǎng)格的視覺(jué)渲染,便于debug時(shí)嘗試不同情境。
ELF 提供了一個(gè)統(tǒng)一的接口,可以承載任何用 C/C++編寫(xiě)的現(xiàn)有程序,包括 Atari 系列游戲、棋類游戲和自定義的RTS游戲引擎,只需一個(gè)簡(jiǎn)單的適配器即可。這就可以讓現(xiàn)有強(qiáng)化學(xué)習(xí)方法的多線程游戲和訓(xùn)練變得很容易。基于這個(gè) RTS 引擎,作者們一并編寫(xiě)了三個(gè)完善的游戲環(huán)境,如下圖。(結(jié)構(gòu))
強(qiáng)化學(xué)習(xí)后端。作者們提出了一個(gè)基于Python的強(qiáng)化學(xué)習(xí)后端軟件。它的設(shè)計(jì)非常靈活易用,便于實(shí)現(xiàn)模型中的強(qiáng)化學(xué)習(xí)方法。其中實(shí)現(xiàn)了A3C、策略梯度、Q-Learning、信任區(qū)域策略優(yōu)化等多個(gè)基準(zhǔn)方法,基本都不需要很長(zhǎng)的 Python 代碼就可以。
研究人員們普遍認(rèn)為即時(shí)戰(zhàn)略游戲是象棋和圍棋后的下一個(gè)人工智能的大挑戰(zhàn)。在即時(shí)戰(zhàn)略游戲中,玩家一般需要收集資源、建造單位(建筑、小兵等等),并且在戰(zhàn)爭(zhēng)迷霧中探索環(huán)境(有限的視野之外的區(qū)域是不可見(jiàn)的)進(jìn)攻敵人或者進(jìn)行防御,直到分出勝負(fù)。即時(shí)戰(zhàn)略游戲的特點(diǎn)是極高而且一直在變化的行動(dòng)空間(比如10個(gè)單位,每個(gè)單位有5種可能的選擇,行為空間就是510)、微妙的游戲狀況以及大幅度延時(shí)的回報(bào)。典型的職業(yè)選手一分鐘可以進(jìn)行200~300個(gè)操作,而一場(chǎng)游戲通常要進(jìn)行20到30分鐘。
直接用在研究中的即時(shí)戰(zhàn)略游戲引擎很少。面向消費(fèi)者的游戲(比如星際1、2)都有著復(fù)雜的動(dòng)態(tài)變化、單位交互和圖像表現(xiàn),玩這些游戲也長(zhǎng)期以來(lái)被證明是一件復(fù)雜的事情。除此之外,它們并不是開(kāi)源的,外部程序無(wú)法獲得游戲內(nèi)部的狀態(tài),沒(méi)法簡(jiǎn)單地用在研究中。開(kāi)源的即時(shí)戰(zhàn)略游戲有 Spring、OpenRA、Warzone 2100,它們關(guān)注的是復(fù)雜的圖像和特效、簡(jiǎn)潔的用戶界面、穩(wěn)定的網(wǎng)絡(luò)連接、靈活的地圖編輯器和即插即用的游戲mod。它們中大多數(shù)都采用了基于規(guī)則的AI,沒(méi)有能夠高于實(shí)時(shí)速度運(yùn)行的設(shè)計(jì)、而且也沒(méi)有提供能夠直接用于現(xiàn)代機(jī)器學(xué)習(xí)架構(gòu)的接口。其它的一些即時(shí)戰(zhàn)略游戲也有各種各樣的限制導(dǎo)致它們不適用于機(jī)器學(xué)習(xí)研究。
為了得到高速、可定制、適合用于強(qiáng)化學(xué)習(xí)的即時(shí)戰(zhàn)略游戲環(huán)境,作者們自己編寫(xiě)了一個(gè)RTS游戲引擎??刂茊挝弧⒁苿?dòng)、攻擊、特定技能、對(duì)其它單位的影響等等基礎(chǔ)設(shè)定一應(yīng)俱全,而且這個(gè)引擎設(shè)計(jì)了具有不同層次的指令集,只要改變可用的指令、可用的單位、特定情況下引發(fā)的單位操作三個(gè)要素,就可以構(gòu)建出新的游戲。引擎中也為此提供了易用的工具。引擎中集成的基于規(guī)則的AI也可以用類似的方法進(jìn)行拓展。在 ELF 中,作者們一并提供了三個(gè)游戲,Mini-RTS、搶旗子和塔防。這三個(gè)游戲都具有以下的特點(diǎn):
足夠復(fù)雜的游戲性。每個(gè)游戲中的單位都是以真實(shí)坐標(biāo)移動(dòng)的,具有體積和碰撞檢測(cè),它們的動(dòng)作也是需要占用時(shí)間的。RTS引擎是時(shí)間觸發(fā)型的,在每一次觸發(fā)到時(shí)候,游戲中的bot會(huì)根據(jù)觀察到的信息做出決定、給單位下達(dá)命令。然后這些命令就被執(zhí)行、游戲狀態(tài)發(fā)生變化,游戲就繼續(xù)執(zhí)行。盡管這樣的游戲機(jī)制算不上簡(jiǎn)單,Mini-RTS游戲還是能夠在MacBook Pro筆記本上跑出每個(gè)核心40K幀/秒的高速度,這個(gè)速度比多數(shù)現(xiàn)有的環(huán)境要高出一個(gè)數(shù)量級(jí)。這樣,在單臺(tái)機(jī)器上也只需要一天就能完成AI模型的訓(xùn)練。
內(nèi)置的層次化命令結(jié)構(gòu)。一個(gè)智能體可以下達(dá)戰(zhàn)略型的命令,比如“侵略性更強(qiáng)的站位”,可以下達(dá)戰(zhàn)術(shù)型的指令,比如“hit and run”,微操型的也可以,比如單獨(dú)拉回一個(gè)單位以避免吃到傷害。理想狀況下,一個(gè)強(qiáng)有力的智能體應(yīng)當(dāng)掌握所有級(jí)別的命令;不過(guò)實(shí)際中的常用做法是關(guān)注某一個(gè)特定級(jí)別的指令層級(jí)別,然后把其它層次留給硬性的規(guī)格處理。為了提供這樣的可能性,這個(gè)RTS引擎使用了一個(gè)層次化的指令系統(tǒng),它能夠?yàn)橛螒蛱峁┎煌瑢哟蔚目刂颇芰Α8邔哟蔚闹噶钛苌龅牡蛯哟沃噶羁赡軙?huì)影響到所有的單位;一個(gè)低層次的、發(fā)給特定單位的持續(xù)動(dòng)作指令需要占用幾次出發(fā)的時(shí)間,這期間每次觸發(fā)的時(shí)候可以給單位發(fā)送立即型的指令。
內(nèi)置的基于規(guī)則的AI。與游戲環(huán)境一起,作者們?cè)O(shè)計(jì)了基于規(guī)則的bot。這些內(nèi)置bot可以掌握地圖中所有的信息并且按照固定的策略行動(dòng)(比如造5個(gè)坦克然后攻擊地方基地)。這些AI的行動(dòng)方式就是先發(fā)出高層次的指令,然后翻譯成低層次的指令并執(zhí)行。
有了 ELF,研究員們第一次可以在即時(shí)戰(zhàn)略游戲中訓(xùn)練能夠玩整局游戲的AI,并且取得了比內(nèi)置的AI強(qiáng)得多的表現(xiàn)。相比之下,其它現(xiàn)有的即時(shí)戰(zhàn)略游戲AI要么是基于規(guī)則的,要么專注于戰(zhàn)術(shù)執(zhí)行。
作者們?cè)?ELF 中的游戲里測(cè)試評(píng)估了這個(gè)平臺(tái)的可用性。
執(zhí)行性能
可以看到,隨著使用的CPU核心數(shù)目的增加,每個(gè)核心的平均性能表現(xiàn)并沒(méi)有發(fā)生大的變化。ELF的高效與可拓展性可見(jiàn)一斑。相比之下,OpenAI 的Gym 要提高性能就困難得多。
A3C模型訓(xùn)練表現(xiàn)
由于訓(xùn)練輸入是稀疏且混雜的,作者們嘗試構(gòu)建了帶有 Leaky ReLU 和 Batch Normalization 的CNN模型。BN可以通過(guò)正態(tài)化每個(gè)濾波器的輸出來(lái)穩(wěn)定訓(xùn)練中的梯度變化,Leaky ReLU 則可以保留帶負(fù)號(hào)的線性響應(yīng)信號(hào),這在輸入特征稀疏的情境中非常重要??梢钥吹?,兩種方法結(jié)合以后的效果格外地高。
組合訓(xùn)練提高模型表現(xiàn)
作者們?cè)跍y(cè)試中發(fā)現(xiàn),組合訓(xùn)練對(duì)AI訓(xùn)練非常重要。他們的做法是,在訓(xùn)練AI模型的時(shí)候,先讓內(nèi)置AI玩一定的時(shí)間,然后交給要訓(xùn)練的AI接著玩。這就降低了游戲初始時(shí)的難度,而且給游戲帶來(lái)了更多的變化,避免掉進(jìn)局部最小值里。
這樣,ELF 不僅用合理的結(jié)構(gòu)設(shè)計(jì)提供了一個(gè)包含一組游戲設(shè)計(jì)選項(xiàng)的研究平臺(tái)、一個(gè)輕量級(jí)的游戲模擬器和一個(gè)靈活的實(shí)驗(yàn)環(huán)境,實(shí)際使用中也確實(shí)能給強(qiáng)化學(xué)習(xí)研究人員帶來(lái)很大的便利。在ELF的基礎(chǔ)上,前向建模、層次化強(qiáng)化學(xué)習(xí)、不確定規(guī)劃、復(fù)雜行為空間強(qiáng)化學(xué)習(xí)等方法也可以在即時(shí)戰(zhàn)略游戲中得到更高效的研究。引用田淵棟在知乎專欄里的話說(shuō):“如果大家對(duì)強(qiáng)化學(xué)習(xí)和游戲AI有興趣,這個(gè)框架會(huì)提供很大幫助”。
論文地址:https://arxiv.org/abs/1707.01067
項(xiàng)目地址:https://github.com/facebookresearch/ELF/
雷鋒網(wǎng) AI 科技評(píng)論編譯整理
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。
本專題其他文章