0
本文作者: AI研習(xí)社-譯站 | 2019-06-24 16:35 |
本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :
Deep Reinforcement Learning using Unity ml-agents
作者 | Jo?o Ramos
翻譯 | 通夜 編輯 | 王立魚(yú)
原文鏈接:
https://towardsdatascience.com/deep-reinforcement-learning-using-unity-ml-agents-8af8d407dd5a
大家好 !
最近,我和我的兩個(gè)同事佩德羅·昆塔斯和佩德羅·卡爾代拉做了一些實(shí)驗(yàn),使用的是Unity的ml -agents,我認(rèn)為這是一個(gè)偉大的時(shí)刻,我希望與社區(qū)分享我們的結(jié)果,并向你展示如何擴(kuò)展你的強(qiáng)化學(xué)習(xí)知識(shí)。
如果你不知道Unity ml-agents是什么,讓我給你一個(gè)簡(jiǎn)單的介紹。Unity ml-agents是一個(gè)“用游戲和模擬環(huán)境來(lái)訓(xùn)練智能體的開(kāi)源Unity插件,”。在我看來(lái),這是一個(gè)可以對(duì)開(kāi)始學(xué)習(xí)深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)來(lái)說(shuō)很好的框架,因?yàn)樗梢钥吹秸诎l(fā)生的事情,而不僅僅是在終端上看到數(shù)字和字母。
在開(kāi)始展示我們的小項(xiàng)目之前,讓我先展示一下框架已經(jīng)創(chuàng)建的一些場(chǎng)景。
好了,現(xiàn)在您已經(jīng)了解了這個(gè)工具的功能和外觀(guān),讓我們來(lái)討論一下這個(gè)項(xiàng)目!
我們使用了Unity ml-agents創(chuàng)建的一個(gè)智能體。它基本上是一只蜘蛛,但只有四條腿。然后我們?yōu)檫@只小“蜘蛛”創(chuàng)造了一個(gè)移動(dòng)平臺(tái)來(lái)讓它四處移動(dòng)。
那只是Unity的搭建,讓我們談?wù)剰?qiáng)化學(xué)習(xí)吧!一開(kāi)始,和往常一樣,蜘蛛(agent)只知道它在平臺(tái)上的位置和方向。因?yàn)槲覀兊哪繕?biāo)是讓兩只蜘蛛互相爭(zhēng)斗(不告訴它們?cè)撟鍪裁?,所以他必須設(shè)法教它們。這時(shí)強(qiáng)化學(xué)習(xí)就開(kāi)始起作用了。我假設(shè)在讀這篇文章的你知道強(qiáng)化學(xué)習(xí)背后的基本理論。如果你是新手,這里有一個(gè)初學(xué)者指南:
https://skymind.ai/wiki/deep-reinforcement-learning
所以,就像任何一個(gè)普通的“愚蠢的智能體”一樣,我們必須“教”它。我們通過(guò)當(dāng)他們有好的行為時(shí)給予好的獎(jiǎng)勵(lì),當(dāng)他們有壞的行為時(shí)給予壞的獎(jiǎng)勵(lì)來(lái)教我們的智能體。經(jīng)過(guò)反復(fù)試驗(yàn),智能體們終于學(xué)會(huì)了如何站立和行走!基本上,每次他們的身體接觸到地面,我們都會(huì)給他們不好的獎(jiǎng)勵(lì)。因?yàn)槿绻鼈兊纳眢w在地上,這意味著它們的四條腿不在地上,或者它們的腿沒(méi)有產(chǎn)生足夠的力。(他們應(yīng)該站起來(lái))。通過(guò)給壞的獎(jiǎng)勵(lì),我們告訴他們這些行為不好,他們應(yīng)該避免。
讓我們概括一下到目前為止我們所做的:
-我們使用ml-agents創(chuàng)建了一個(gè)Unity環(huán)境。
-我們教我們的蜘蛛站起來(lái),平衡它的腳來(lái)走路。
下一步是教他們打架!為了改變蜘蛛的行為使它們能夠戰(zhàn)斗,我們必須改變它們的獎(jiǎng)勵(lì)。所以,如果其中一只蜘蛛離開(kāi)了平臺(tái),或者被尸體碰在地上,它將會(huì)得到一個(gè)非常糟糕的獎(jiǎng)勵(lì)。
另外,如果當(dāng)它們做了我們想讓它們做的,而我們沒(méi)有給它們一個(gè)好的獎(jiǎng)勵(lì),它們就不會(huì)繼續(xù)重復(fù)那些行為。所以當(dāng)一只蜘蛛面對(duì)另一只蜘蛛時(shí),我們給了它們很好的獎(jiǎng)勵(lì),當(dāng)蜘蛛朝著另一只蜘蛛的方向前進(jìn)時(shí),我們給了它們更好的獎(jiǎng)勵(lì)。這使得兩只蜘蛛朝著另一只蜘蛛的方向前進(jìn),在某個(gè)時(shí)候,其中一只蜘蛛會(huì)把另一只蜘蛛扔出平臺(tái)。(這只是一個(gè)簡(jiǎn)單的例子來(lái)證明我的觀(guān)點(diǎn))
此外,他們自己也學(xué)會(huì)了用拳頭把對(duì)方打在地上就能贏(yíng)。所以在同一時(shí)刻,他們開(kāi)始“摔跤”。這是一個(gè)非常有趣的觀(guān)察。
此外,我們還用一個(gè)移動(dòng)平臺(tái)測(cè)試了我們的智能體,以創(chuàng)建一個(gè)更困難的環(huán)境:
如果你想復(fù)制我的結(jié)果,這里有更多關(guān)于我的可觀(guān)察向量和獎(jiǎng)勵(lì)函數(shù)的信息:
agent關(guān)于自身的信息:
- agent關(guān)于其關(guān)節(jié)的信息
- agent在平臺(tái)上的向上和向前向量
- agent在平臺(tái)上的位置
關(guān)于對(duì)手的信息:
-對(duì)手身體的向上和向前的矢量
-對(duì)手在平臺(tái)上的位置
智能體不能站起來(lái)應(yīng)該受到懲罰,使得對(duì)手摔倒應(yīng)該得到獎(jiǎng)勵(lì),這是智能體的主要目標(biāo)。
智能體從平臺(tái)上摔下來(lái)應(yīng)該受到懲罰,但不應(yīng)該得到獎(jiǎng)勵(lì)。我們希望智能體們學(xué)習(xí)的戰(zhàn)斗方法,不包括以特定的方式擊潰平臺(tái)來(lái)讓對(duì)手稍微早一點(diǎn)倒下。
智能體應(yīng)該因?yàn)槿ネ茖?duì)手而得到獎(jiǎng)勵(lì),應(yīng)該因?yàn)槌殡x或讓自己被推而受到懲罰。這獎(jiǎng)勵(lì)了一種積極的戰(zhàn)斗風(fēng)格,懲罰了更多的逃避風(fēng)格,包括逃跑。
基于前面的幾點(diǎn),我們創(chuàng)建了如下的獎(jiǎng)勵(lì):
如果代理在地板上:-1.0分
如果對(duì)手在地上:1.0分。
如果代理不在平臺(tái)上:-1.0分
0.003*(標(biāo)準(zhǔn)化的速度*(對(duì)手位置-智能體位置)) +0.001*(前進(jìn)的標(biāo)準(zhǔn)化矢量*(對(duì)手位置-智能體位置))
最后,我們嘗試更進(jìn)一步,使用類(lèi)人機(jī)器人作為智能體。難度呈指數(shù)級(jí)增長(zhǎng),因?yàn)橹┲胗?個(gè)關(guān)節(jié),而類(lèi)人機(jī)器人有12個(gè)。這增加了可能的組合動(dòng)作的總數(shù)。所以,我們最終并沒(méi)有得到驚人的結(jié)果,但這看起來(lái)很有趣:
總之,Unity ml-agents允許您非常容易地構(gòu)建一些有趣的東西。我認(rèn)為這是開(kāi)始學(xué)習(xí)這門(mén)學(xué)科的好方法。請(qǐng)隨時(shí)與我分享你的問(wèn)題和結(jié)果! 雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
作為這個(gè)方向的下一個(gè)項(xiàng)目,我想為無(wú)人機(jī)模擬和自動(dòng)駕駛創(chuàng)造一個(gè)環(huán)境。如果你有什么想法,請(qǐng)聯(lián)系我!
謝謝!
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?
點(diǎn)擊【使用Unity ml-agent進(jìn)行深度強(qiáng)化學(xué)習(xí)】即可訪(fǎng)問(wèn)!
今日課程推薦:深度理解強(qiáng)化學(xué)習(xí)
【課程亮點(diǎn)】
系統(tǒng)化講解強(qiáng)化學(xué)習(xí)體系,算法原理+數(shù)學(xué)推導(dǎo)+實(shí)戰(zhàn)代碼示例
頂會(huì)論文作者講解,豐富項(xiàng)目經(jīng)驗(yàn)
手把手教你強(qiáng)化學(xué)習(xí)
共10章節(jié),約30課時(shí),每周三定時(shí)更新。
課程鏈接:https://ai.yanxishe.com/page/domesticCourse/73
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。