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