我們曾分享《游戲開發(fā)中的AI (1)-入門篇》以及《游戲開發(fā)中的AI(2)-基于Q-Learning的強化學(xué)習(xí)》。這意味著游戲可以在增強學(xué)習(xí)算法的發(fā)展中發(fā)揮著作用。作為世界上最受歡迎的創(chuàng)作引擎,Unity正處于機器學(xué)習(xí)與游戲的十字路口。對我們的使命而言,為機器學(xué)習(xí)研究者提供最強大的訓(xùn)練場景十分關(guān)鍵。他們能將最新的機器學(xué)習(xí)技術(shù)回饋游戲社區(qū)。作為這一努力的第一步,我們很高興地向大家介紹Unity機器學(xué)習(xí)代理工具。
訓(xùn)練智能代理
機器學(xué)習(xí)正在改變從自主代理獲得我們所期望的智能行為的方式。在過去,行為靠手工編碼而來,而現(xiàn)在則是以在訓(xùn)練環(huán)境中不斷交互的方式教給代理(機器人或虛擬化身)。從工業(yè)機器人、無人機和無人駕駛汽車到游戲角色和敵人,都在使用這種方式來進行行為學(xué)習(xí)。訓(xùn)練環(huán)境的質(zhì)量對于可以學(xué)習(xí)的行為種類是至關(guān)重要的,而且通常需要做出一定的權(quán)衡。在虛擬環(huán)境中訓(xùn)練代理的典型場景需要一個單個的環(huán)境,以及一個與該環(huán)境緊密耦合的代理。代理的行為改變環(huán)境狀態(tài),并為代理提供獎勵。
典型的增強學(xué)習(xí)訓(xùn)練周期
在Unity中,我們希望為那些不斷增長的,對運用機器學(xué)習(xí)開發(fā)智能代理感興趣的群體,設(shè)計一個更具靈活性和易用性的系統(tǒng)。此外,我們希望在此同時能充分利用Unity引擎和編輯器的高質(zhì)量物理和圖形,以及簡單卻強大的開發(fā)者控制特性。我們認為這樣的組合可以使下列群體獲得其他的解決方案可能無法提供的優(yōu)勢:
對研究現(xiàn)實競爭和合作場景中復(fù)雜多主體行為感興趣的學(xué)術(shù)研究者。
對機器人、無人駕駛汽車和其他工業(yè)應(yīng)用領(lǐng)域的大規(guī)模并行訓(xùn)練方案感興趣的行業(yè)研究者。
對在虛擬世界創(chuàng)造各種具有非特定精妙行為的智能代理感興趣的游戲開發(fā)者。
Unity的機器學(xué)習(xí)代理
我們提供的解決方案稱為機器學(xué)習(xí)代理(簡稱ML - Agents),并且已經(jīng)發(fā)布了對應(yīng)SDK的開放測試版,您可以訪問Github下載使用。研究者和開發(fā)者可使用ML - Agents SDK將由Unity編輯器創(chuàng)建的游戲和模擬程序轉(zhuǎn)換成可訓(xùn)練智能代理的環(huán)境。在這個環(huán)境中,只需一個簡單的Python API即可使用深度增強學(xué)習(xí)、演化策略或其他機器學(xué)習(xí)方法對智能代理進行訓(xùn)練。測試版的Unity ML – Agents已作為開源軟件發(fā)布,其中包含了一套示例項目和基線算法用作新手入門。由于這是首個測試版本,我們正積極收集反饋,并鼓勵任何感興趣的人在GitHub做出貢獻。有關(guān)機器學(xué)習(xí)代理工具的更多信息, 請訪問:https://github.com/Unity-Technologies/ml-agents。
學(xué)習(xí)環(huán)境
如何在機器學(xué)習(xí)代理中進行學(xué)習(xí)環(huán)境配置
在任何學(xué)習(xí)環(huán)境下都有的三種主要對象是:
代理
每個代理都可以擁有一組獨有的狀態(tài)和觀察,在環(huán)境中采取獨有的行為,并在環(huán)境中獲得獨有的獎勵。一個代理的動作由與之相聯(lián)的大腦決定。
大腦
每個大腦都定義了一個特定的狀態(tài)和動作空間,并負責(zé)決定每個關(guān)聯(lián)的代理將采取哪些行動。當前版本支持將大腦設(shè)定為以下四種模式之一:
外部-動作決策由TensorFlow(或你選擇的ML庫)決定,我們的Python API負責(zé)打開套接字進行通信。
內(nèi)部(實驗性)-動作決策由一個已訓(xùn)練模型決定,該模型使用TensorFlowSharp嵌入項目。
玩家-動作決策由玩家輸入決定。
啟發(fā)式-動作決策由手工編碼的行為決定。
學(xué)院
一個場景中的學(xué)院對象也包含了在環(huán)境中所有作為子對象的大腦。每個環(huán)境都包含單個學(xué)院對象,該對象從以下這些方面定義了環(huán)境的范圍:
引擎配置-在訓(xùn)練和推理模式下,游戲引擎的速度和渲染質(zhì)量。
跳幀-在每個代理做出一個新的決定之間要跳過多少引擎步驟。
全局迭代長度-單次迭代的持續(xù)時間。到時間后,所有代理都將被設(shè)置為完成。
所有連接著設(shè)置為外部模式大腦的代理,它們的狀態(tài)和觀察都會被外部通信器(External Communicator)收集,并通過我們的Python API與你選擇的ML庫進行通信。將多個代理設(shè)置到單個大腦,可以以批處理方式進行動作決策,從而在系統(tǒng)支持的情況下獲得并行計算的優(yōu)勢。
靈活的訓(xùn)練場景
有了Unity 的機器學(xué)習(xí)代理工具,各種各樣的訓(xùn)練場景都是可能的,這取決于代理、大腦和獎勵的連接方式。我們很期待開發(fā)者社區(qū)會創(chuàng)造出各種新奇和有趣的環(huán)境。對于那些訓(xùn)練智能代理的新手來說,下面這些例子可以用來啟發(fā)靈感。每個都是一個環(huán)境配置原型,包含如何使用ML - Agents SDK進行創(chuàng)建的描述。
單個代理:連接單個大腦的單個代理。傳統(tǒng)的代理訓(xùn)練方式??梢砸匀魏螁稳擞螒驗槔?,比如Chicken。
同時單個代理:連接到單個大腦的多個具有獨立獎賞函數(shù)的獨立代理。一種傳統(tǒng)訓(xùn)練場景的并行版本,可以加速和穩(wěn)定訓(xùn)練過程。例如,訓(xùn)練12個機器人手臂同時打開一扇門。
對抗性自我博弈:與單個大腦相連,具有反獎勵函數(shù)的兩個相互作用的代理。在雙人游戲中,對抗性自我博弈可以讓一個代理變得越來越熟練的同時,總能擁有與之完美匹配的對手:它自己。這是在訓(xùn)練AlphaGo時使用的策略,而最近被OpenAI用于訓(xùn)練打敗人類的1v1 Dota 2代理。
合作性多代理:與單個或多個不同大腦相連,共享同一個獎勵函數(shù)的多個相互作用的代理。在這種情況下,所有的代理都必須共同完成一個無法獨立完成的任務(wù)。例如,在一個單個代理只能訪問部分信息的環(huán)境中,代理間需要進行共享才能完成任務(wù)或協(xié)作解決一個問題。
競爭性多代理:與單個或多個不同大腦相連,具有反獎勵函數(shù)的多個相互作用的代理。在這種情況下,代理必須相互競爭以贏得競爭,或者獲得一些有限的資源。所有的團隊運動都屬于這種情況。
生態(tài)系統(tǒng):與單個或多個不同大腦相連,具有獨立獎勵函數(shù)的多個相互作用的代理。這種情況可以想象為一個小世界,在這個世界里,擁有不同目標的動物相互作用,例如一個可能有斑馬、大象、長頸鹿的熱帶草原,或者是一個都市環(huán)境中的無人駕駛模擬。
附加功能
除了由學(xué)院/大腦/代理系統(tǒng)所提供的靈活訓(xùn)練方案之外,機器學(xué)習(xí)代理工具還包括其它用于提高訓(xùn)練過程靈活性和解釋性的功能。
監(jiān)控代理的決策:由于ML-Agents的通信是雙向的,我們在Unity中提供了一個代理監(jiān)控(Agent Monitor)類,它可以顯示已訓(xùn)練代理的各方面信息,比如在Unity環(huán)境中的策略和值輸出。通過實時提供這些輸出,研究者和開發(fā)者可以更容易地調(diào)試代理的行為。
在每個代理之上是一個價值估計,對應(yīng)于代理期望的未來回報。當右側(cè)的代理錯過球時,價值估計會下降到零,因為它期望當前迭代盡快結(jié)束,因此沒有額外的獎勵。
課程學(xué)習(xí)(Curriculum Learning):在剛開始訓(xùn)練的時候,代理往往很難學(xué)習(xí)復(fù)雜的任務(wù)。課程學(xué)習(xí)是一種逐漸增加任務(wù)難度的過程,使學(xué)習(xí)更有效率。ML-Agents支持在每次重置環(huán)境時設(shè)置自定義環(huán)境參數(shù)。這使得環(huán)境中與困難或復(fù)雜性相關(guān)的元素可以根據(jù)訓(xùn)練的進展進行動態(tài)調(diào)整。
復(fù)雜性遞增的GridWorld環(huán)境的不同可能配置
復(fù)雜的視覺觀察:與其它平臺不同,代理的觀察可能局限于單個向量或圖像,機器學(xué)習(xí)代理工具允許每個代理使用多個攝像機進行觀察。這使代理能夠?qū)W會從多個視覺流集成信息,例如,訓(xùn)練無人駕駛汽車時需要多個觀察不同視角的攝像頭,導(dǎo)航代理可能需要集成空中和第一人稱視覺,或某種代理需要同時獲得原始視覺輸入、以及深度圖或?qū)ο蠓指顖D像。
上圖是相同環(huán)境的兩種不同攝像機視圖。當代理同時獲得兩者時它可以學(xué)會利用第一人稱和類地圖信息擊敗對手。
模仿學(xué)習(xí)(即將發(fā)布)——直接向代理演示我們希望它執(zhí)行的行為,而非試圖使其通過試錯來學(xué)習(xí),通常會更直觀。在未來的版本中,ML - Agents將提供記錄所有在監(jiān)督學(xué)習(xí)場景中使用的狀態(tài)/動作/獎勵信息的能力,例如模仿學(xué)習(xí)。利用模仿學(xué)習(xí),玩家可以向代理提供在一個環(huán)境中代理應(yīng)有的行為演示,然后利用這些演示以獨立的方式訓(xùn)練一個代理,或者將其作為一個增強學(xué)習(xí)過程的第一步。
結(jié)語
聯(lián)系客服