Reinforcement Learning in Unity

Unity中的強(qiáng)化學(xué)習(xí) Reinforcement Learning in Unity

強(qiáng)化學(xué)習(xí)是一種人工智能技術(shù),通過(guò)獎(jiǎng)勵(lì)理想的行為來(lái)訓(xùn)練agent執(zhí)行任務(wù)痕慢。在強(qiáng)化學(xué)習(xí)過(guò)程中,agent會(huì)探索其環(huán)境,觀察事物的狀態(tài)搜贤,并根據(jù)這些觀察結(jié)果采取行動(dòng)。如果行動(dòng)能得到更好的狀態(tài)钝凶,agent會(huì)收到積極的獎(jiǎng)勵(lì)仪芒。如果導(dǎo)致不太理想的狀態(tài),那么agent不會(huì)收到獎(jiǎng)勵(lì)或負(fù)面獎(jiǎng)勵(lì)(懲罰)。當(dāng)在訓(xùn)練期間學(xué)習(xí)時(shí)掂名,agent會(huì)優(yōu)化其決策据沈,以便隨著時(shí)間的推移獲得最大的回報(bào)。

ML-Agents使用稱為Proximal Policy Optimization(PPO)的強(qiáng)化學(xué)習(xí)算法饺蔑。PPO使用神經(jīng)網(wǎng)絡(luò)來(lái)逼近目標(biāo)函數(shù)锌介,該目標(biāo)函數(shù)將agent的觀察結(jié)果映射為其在給定狀態(tài)下可以采取的最佳行動(dòng)。ML-Agents PPO算法使用TensorFlow實(shí)現(xiàn)膀钠,并在單獨(dú)的Python進(jìn)程中運(yùn)行(通過(guò)socket與正在運(yùn)行的Unity應(yīng)用程序進(jìn)行通信)掏湾。

注意:如果您不是主要研究學(xué)習(xí)機(jī)器和強(qiáng)化學(xué)習(xí),只想訓(xùn)練agent完成任務(wù)肿嘲,則可以將PPO訓(xùn)練視為黑箱(black box)融击。在Unity以及Python訓(xùn)練方面有一些與訓(xùn)練相關(guān)的參數(shù)可供調(diào)整,但你不需要深入了解算法本身就可以成功創(chuàng)建和訓(xùn)練agent雳窟。訓(xùn)練部分(https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-PPO.md)提供了運(yùn)行訓(xùn)練過(guò)程的分步驟尊浪。

模擬和訓(xùn)練過(guò)程

培訓(xùn)和模擬由ML-Agents Academy類協(xié)調(diào)進(jìn)行。Academy與場(chǎng)景中的Agent和Brain對(duì)象一起工作以逐步完成模擬封救。當(dāng)Academy已經(jīng)達(dá)到其最大步數(shù)或場(chǎng)景中的所有agent完成時(shí)拇涤,一個(gè)episode完成。

在訓(xùn)練期間誉结,外部Python訓(xùn)練進(jìn)程與Academy進(jìn)行交流鹅士,在收集數(shù)據(jù)并優(yōu)化其神經(jīng)網(wǎng)絡(luò)模型的同時(shí)運(yùn)行一系列episodes。分配給agent的Brain類型決定了它是否參與訓(xùn)練惩坑。External brain與外部進(jìn)程溝通來(lái)訓(xùn)練TensorFlow模型掉盅。訓(xùn)練成功完成后,你可以將訓(xùn)練好的模型文件添加到Unity項(xiàng)目中以舒,以便與Internal brain一起使用趾痘。

ML-Agents Academy類按如下方式編排agent模擬循環(huán):

1. 調(diào)用您的Academy子類的AcademyReset()函數(shù)。
2. 調(diào)用場(chǎng)景中每個(gè)agent的AgentReset()函數(shù)蔓钟。
3. 調(diào)用場(chǎng)景中每個(gè)agent的CollectObservations()函數(shù)永票。
4. 使用每個(gè)agent的Brain類來(lái)決定agent的下一個(gè)動(dòng)作。
5. 調(diào)用Academy子類的AcademyAct()函數(shù)滥沫。
6. 為場(chǎng)景中的每個(gè)agent調(diào)用AgentAction()函數(shù)侣集,傳遞agent Brain選擇的動(dòng)作。(如果agent已完成兰绣,則不會(huì)調(diào)用此函數(shù)肚吏。)
7. 如果agent已達(dá)到其最大步數(shù)或者將其自身標(biāo)記為完成,則調(diào)用agent的AgentOnDone()函數(shù)狭魂。或者,你可以將agent設(shè)置為在episode結(jié)束之前完成重新啟動(dòng)雌澄。在這種情況下斋泄,Academy調(diào)用AgentReset()函數(shù)。
8. Academy達(dá)到自己的最大步數(shù)時(shí)镐牺,通過(guò)調(diào)用Academy子類的AcademyReset()函數(shù)再次開(kāi)始下一個(gè)episode炫掐。

要?jiǎng)?chuàng)建訓(xùn)練環(huán)境,請(qǐng)擴(kuò)展Academy和Agent類以實(shí)現(xiàn)上述方法睬涧。Agent.CollectObservations()和Agent.AgentAction()函數(shù)是必需的; 其他方法是可選的 - 你是否需要實(shí)現(xiàn)它們?nèi)Q于你的具體情況募胃。

注意:Python
PPO訓(xùn)練進(jìn)程用于在訓(xùn)練期間與Academy進(jìn)行通信并控制Academy的API也可用于其他目的。
例如畦浓,您可以使用API將Unity用作您自己的機(jī)器學(xué)習(xí)算法的模擬引擎痹束。有關(guān)更多信息,請(qǐng)參閱Python
API讶请。

組織Unity場(chǎng)景

要在Unity場(chǎng)景中訓(xùn)練和使用ML-Agents祷嘶,場(chǎng)景必須包含一個(gè)Academy子類以及所需的Brain對(duì)象和Agent子類。場(chǎng)景中的任何Brain實(shí)例都必須附加到Unity場(chǎng)景層次結(jié)構(gòu)中Academy的子級(jí)GameObjects上夺溢。Agent實(shí)例應(yīng)附加到代表該Agent的GameObject论巍。

Scene Hierarchy

你必須為每個(gè)agent分配一個(gè)Brain,但是你可以在多個(gè)agents之間共享Brain风响。每個(gè)agent都將獨(dú)立進(jìn)行觀察并采取行動(dòng)嘉汰,但會(huì)使用相同的決策邏輯,對(duì)于Internal
brain
状勤,則使用相同的經(jīng)過(guò)訓(xùn)練的TensorFlow模型鞋怀。

Academy

Academy對(duì)象總體協(xié)調(diào)agents及其決策過(guò)程。只能將一個(gè)Academy對(duì)象放置在場(chǎng)景中荧降。

你必須創(chuàng)建Academy類的子類(因?yàn)榛愂浅橄蟮模┙芋铩?chuàng)建Academy子類時(shí),可以實(shí)現(xiàn)以下方法(全部都是可選的):

  • InitializeAcademy(): 初次啟動(dòng)時(shí)準(zhǔn)備環(huán)境朵诫。
  • AcademyReset(): 為下一個(gè)訓(xùn)練集準(zhǔn)備環(huán)境和agent辛友。根據(jù)需要使用此功能在場(chǎng)景中放置和初始化實(shí)體。
  • AcademyStep(): 為下一個(gè)模擬步驟準(zhǔn)備環(huán)境剪返。在為當(dāng)前步驟調(diào)用任何AgentAction()方法之前废累,Academy類將調(diào)用此函數(shù)。你可以使用此功能在agent采取行動(dòng)之前更新場(chǎng)景中的其他對(duì)象脱盲。請(qǐng)注意邑滨,agent已經(jīng)收集了他們的觀察結(jié)果,并在Academy調(diào)用此方法之前選擇了一個(gè)操作钱反。

基礎(chǔ)Academy類還定義了可以在Unity Editor檢查器中設(shè)置的幾個(gè)重要屬性掖看。對(duì)于訓(xùn)練匣距,這些屬性中最重要的是Max Steps,它決定了每次訓(xùn)練持續(xù)的時(shí)間哎壳。一旦Academy的步數(shù)計(jì)數(shù)器達(dá)到此值毅待,它將調(diào)用AcademyReset()函數(shù)開(kāi)始下一個(gè)episode。

請(qǐng)參閱Academy(https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Academy.md)了解Academy屬性及其用途的完整列表归榕。

Brain

Brain囊括了決策過(guò)程尸红,該對(duì)象必須是Unity場(chǎng)景層次結(jié)構(gòu)中Academy的子級(jí)。每個(gè)agent都必須分配一個(gè)Brain刹泄,但是您可以將同一個(gè)Brain與多個(gè)agents一起使用外里。

直接使用Brain類,而不是子類特石。 Brain行為取決于Brain的類型盅蝗。在訓(xùn)練期間,將agent的Brain類型設(shè)置為“External”县匠。要使用訓(xùn)練好的模型槽畔,請(qǐng)將模型文件導(dǎo)入到Unity項(xiàng)目中瘫怜,并將Brain類型更改為“Internal”。有關(guān)使用不同類型的Brain的詳細(xì)信息,請(qǐng)參閱Brain(https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Brains.md)奴潘。如果四種內(nèi)置類型不能滿足您的需求吩案,您可以擴(kuò)展CoreBrain類以創(chuàng)建不同的Brain類型研儒。

Brain類有幾個(gè)重要的屬性恋昼,您可以使用Inspector窗口進(jìn)行設(shè)置。這些屬性必須適合使用Brain的agent玖姑。例如愕秫,“矢量觀察空間大小”屬性必須與agent完全創(chuàng)建的特征矢量的長(zhǎng)度相匹配。有關(guān)創(chuàng)建agent和正確設(shè)置Brain實(shí)例的信息焰络,請(qǐng)參閱agent(http://www.reibang.com/p/6d40059a3454)戴甩。

Agent

Agent類表示場(chǎng)景中的一個(gè)行動(dòng)者(actor),收集觀察結(jié)果并執(zhí)行操作闪彼。
Agent類通常附加到場(chǎng)景中的GameObject對(duì)象 -例如甜孤,在足球比賽中的球員對(duì)象或車輛模擬中的車對(duì)象。 每個(gè)agent必須分配一個(gè)Brain畏腕。

要?jiǎng)?chuàng)建agent缴川,需要擴(kuò)展agent類并實(shí)現(xiàn)基本的CollectObservations()和AgentAction()方法:

  • CollectObservations(): 收集agent對(duì)其環(huán)境的觀察。
  • AgentAction(): 執(zhí)行agent大腦選擇的行動(dòng)并為當(dāng)前狀態(tài)分配獎(jiǎng)勵(lì)描馅。

這些函數(shù)的實(shí)現(xiàn)決定了分配給此agent的Barin屬性該怎樣設(shè)置把夸。

您還必須確定Agent如何完成任務(wù)或超時(shí)。Agent完成(或不可撤銷地失斆邸)任務(wù)后恋日,可以手動(dòng)將Agent程序設(shè)置為在AgentAction()函數(shù)中完成膀篮。還可以將Agent的Max Steps屬性設(shè)置為正值,并且Agent在執(zhí)行了多個(gè)步驟后會(huì)認(rèn)為自己已完成谚鄙。當(dāng)Academy達(dá)到自己的最大步數(shù)時(shí)各拷,它開(kāi)始下一episode。如果將Agent的ResetOnDone屬性設(shè)置為true闷营,則該Agent可以在一個(gè)episode中多次嘗試其任務(wù)。(使用Agent.AgentReset()函數(shù)準(zhǔn)備Agent以再次啟動(dòng)知市。)

這里(http://www.reibang.com/p/6d40059a3454)有更詳細(xì)的介紹傻盟。

環(huán)境

ML-Agents中的環(huán)境可以是Unity中構(gòu)建的任何場(chǎng)景。Unity場(chǎng)景提供了Agent進(jìn)行觀察嫂丙,行動(dòng)和學(xué)習(xí)的環(huán)境娘赴。如何將Unity場(chǎng)景設(shè)置為學(xué)習(xí)環(huán)境,這取決于你的目標(biāo)跟啤。
你可能試圖解決范圍有限的特定強(qiáng)化學(xué)習(xí)問(wèn)題诽表,在這種情況下,你可以使用相同的場(chǎng)景進(jìn)行訓(xùn)練和測(cè)試受過(guò)訓(xùn)練的agent隅肥「妥啵或者,您可能會(huì)訓(xùn)練agent在復(fù)雜的游戲或模擬中操作腥放。在這種情況下泛啸,創(chuàng)建專門構(gòu)建的訓(xùn)練場(chǎng)景可能更加高效和實(shí)用。

訓(xùn)練和測(cè)試(或正常游戲)場(chǎng)景都必須包含一個(gè)Academy對(duì)象來(lái)控制agent決策過(guò)程秃症。Academy定義了幾種可以針對(duì)訓(xùn)練場(chǎng)景與常規(guī)場(chǎng)景設(shè)置不同的屬性候址。Academy的配置屬性控制渲染和時(shí)間尺度。你可以設(shè)置訓(xùn)練配置以最大限度地縮短Unity花費(fèi)渲染圖形的時(shí)間种柑,以加快訓(xùn)練速度岗仑。你可能還需要調(diào)整其他的Academy設(shè)置。 例如聚请,Max Steps應(yīng)盡可能縮短培訓(xùn)時(shí)間——只需要足夠長(zhǎng)的時(shí)間以便阿根廷完成任務(wù)荠雕,并在學(xué)習(xí)過(guò)程中有一些額外的時(shí)間來(lái)“漫游”。在常規(guī)場(chǎng)景中良漱,你經(jīng)常不希望Academy完全重置場(chǎng)景; 如果是這樣的話舞虱,Max Steps應(yīng)該設(shè)置為零。

在Unity中創(chuàng)建訓(xùn)練環(huán)境時(shí)母市,必須設(shè)置場(chǎng)景以便可以通過(guò)外部訓(xùn)練進(jìn)程來(lái)控制場(chǎng)景矾兜。
考慮因素包括:

  • 訓(xùn)練場(chǎng)景必須在訓(xùn)練過(guò)程啟動(dòng)Unity應(yīng)用程序時(shí)自動(dòng)啟動(dòng)。
  • 場(chǎng)景必須至少包含一個(gè)External brain患久。
  • 學(xué)院必須將場(chǎng)景重置為每個(gè)訓(xùn)練集合的有效起點(diǎn)椅寺。
  • 訓(xùn)練集必須有一個(gè)明確的結(jié)局 - 使用Max Steps或每個(gè)agent設(shè)置自己為完成狀態(tài)浑槽。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市返帕,隨后出現(xiàn)的幾起案子桐玻,更是在濱河造成了極大的恐慌,老刑警劉巖荆萤,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镊靴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡链韭,警方通過(guò)查閱死者的電腦和手機(jī)偏竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敞峭,“玉大人踊谋,你說(shuō)我怎么就攤上這事⌒铮” “怎么了殖蚕?”我有些...
    開(kāi)封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沉迹。 經(jīng)常有香客問(wèn)我睦疫,道長(zhǎng),這世上最難降的妖魔是什么胚股? 我笑而不...
    開(kāi)封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任笼痛,我火速辦了婚禮,結(jié)果婚禮上琅拌,老公的妹妹穿的比我還像新娘缨伊。我一直安慰自己,他們只是感情好进宝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布刻坊。 她就那樣靜靜地躺著,像睡著了一般党晋。 火紅的嫁衣襯著肌膚如雪谭胚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天未玻,我揣著相機(jī)與錄音灾而,去河邊找鬼。 笑死扳剿,一個(gè)胖子當(dāng)著我的面吹牛旁趟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庇绽,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锡搜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橙困!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耕餐,我...
    開(kāi)封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凡傅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后肠缔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夏跷,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年明未,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拓春。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亚隅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庶溶,到底是詐尸還是另有隱情煮纵,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布偏螺,位于F島的核電站行疏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏套像。R本人自食惡果不足惜酿联,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夺巩。 院中可真熱鬧贞让,春花似錦、人聲如沸柳譬。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)美澳。三九已至销部,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間制跟,已是汗流浹背舅桩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雨膨,地道東北人擂涛。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哥放,于是被迫代替她去往敵國(guó)和親歼指。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爹土,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容