編者按:如果你想深入學(xué)習(xí),增強(qiáng)學(xué)習(xí)能力,請(qǐng)查看Marcos Campos在2017年9月17-20日于舊金山舉行的O'Reilly人工智能大會(huì)上給出的教程《增強(qiáng)學(xué)習(xí)導(dǎo)論》。你可以在賈斯汀·弗朗西斯的GitHub上找到這篇博文中顯示的代碼。
那些對(duì)機(jī)器學(xué)習(xí)世界感興趣的人已經(jīng)意識(shí)到了基于強(qiáng)化學(xué)習(xí)的人工智能的能力。在過去的幾年里,強(qiáng)化學(xué)習(xí)(RL)的使用在許多方面取得了突破。DeepMind將深度學(xué)習(xí)與強(qiáng)化學(xué)習(xí)相結(jié)合,在許多雅達(dá)利游戲中實(shí)現(xiàn)卓越的性能。2016年3月4:1擊敗圍棋冠軍李世石。雖然RL目前在很多游戲環(huán)境中表現(xiàn)不錯(cuò),但它是一種全新的解決需要最優(yōu)決策和效率的問題的方法,在機(jī)器智能中肯定會(huì)發(fā)揮作用。
OpenAI成立于2015年底,是一家非營利組織。其目的是“建立一個(gè)安全的人工通用智能(AGI),并確保AGI的利益盡可能廣泛和均衡地分配”。除了探索關(guān)于AGI的許多問題,OpenAI對(duì)機(jī)器學(xué)習(xí)世界的一個(gè)主要貢獻(xiàn)是開發(fā)健身房和宇宙軟件平臺(tái)。
Gym是為測試和開發(fā)RL算法而設(shè)計(jì)的一組環(huán)境/任務(wù)。它消除了用戶創(chuàng)建復(fù)雜環(huán)境的需要。健身房是用Python寫的,有很多環(huán)境,比如機(jī)器人模擬或者雅達(dá)利游戲。它還提供了一個(gè)在線排行榜,供人們將結(jié)果與代碼進(jìn)行比較。
簡單來說,RL是一種計(jì)算方法。在這種方法中,代理通過采取行動(dòng)最大化累積的回報(bào)來與環(huán)境交互。下面是一張簡單的圖,后面我會(huì)經(jīng)常提到。
圖1增強(qiáng)學(xué)習(xí):簡介,第二版。來自理查德·薩頓和安德魯·巴爾托,批準(zhǔn)使用
處于當(dāng)前狀態(tài)(St)的代理對(duì)環(huán)境的反應(yīng)和響應(yīng)采取行動(dòng)(At),然后返回到新的狀態(tài)(St+1)并獎(jiǎng)勵(lì)代理的行動(dòng)(Rt+1)??紤]到更新的狀態(tài)和獎(jiǎng)勵(lì),代理選擇下一個(gè)動(dòng)作,并在循環(huán)中重復(fù)它,直到環(huán)境任務(wù)被解決或終止。
OpenAI的健身房就是基于這些基本原則。所以讓我們先安裝健身房,看看它與這個(gè)循環(huán)有什么關(guān)系。我們用Python和Ubuntu終端安裝健身房(你也可以根據(jù)GitHub上健身房的介紹使用Mac電腦)。
sudo apt-get install-y python 3-numpy python 3-dev python 3-pip cmake zlib 1g-dev libjpeg-dev xffb libav-tools xorg-dev python-OpenGL lib boost-all-dev libsdl 2-dev swig
cd ~
git克隆https://github.com/openai/gym.git
cd健身房
sudo pip3 install -e '。[全部]'
接下來,我們可以在我們的終端上運(yùn)行Python3并導(dǎo)入健身房。
python3
進(jìn)口健身房
首先,我們需要一個(gè)環(huán)境。作為我們的第一個(gè)例子,我們將介紹一個(gè)非?;镜某鲎廛嚟h(huán)境。
env =健身房. make("Taxi-v2 ")
為了初始化環(huán)境,我們必須重置它。
env.reset()
您會(huì)注意到重置環(huán)境將返回一個(gè)整數(shù)。這個(gè)數(shù)字是我們的初始狀態(tài)。在這種滑行環(huán)境中,所有可能的狀態(tài)都由0到499的整數(shù)表示。我們可以使用以下命令來確定可能狀態(tài)的總數(shù):
env.observation_space.n
如果要可視化當(dāng)前狀態(tài),請(qǐng)鍵入以下內(nèi)容:
env.render()
在這種環(huán)境下,黃色方塊代表出租車,(“|”)代表一面墻,藍(lán)色字母代表搭載乘客,紫色字母代表下車乘客,出租車內(nèi)有乘客時(shí)會(huì)變成綠色。當(dāng)我們看到代表環(huán)境的顏色和形狀時(shí),算法不會(huì)像我們一樣思考,它只會(huì)理解一個(gè)平坦的狀態(tài),在這個(gè)例子中是一個(gè)整數(shù)。
現(xiàn)在我們已經(jīng)加載了環(huán)境并知道了當(dāng)前狀態(tài),讓我們來探索代理的可用操作。
env.action_space.n
該命令顯示總共六個(gè)可用操作。健身房不會(huì)一直告訴你這些動(dòng)作的含義,但是在這個(gè)場景中,六個(gè)可能的動(dòng)作是:下(0)、上(1)、左(2)、右(3)、接乘客(4)、放下乘客(5)。
為了學(xué)習(xí)方便,我們把當(dāng)前狀態(tài)改寫為114。
env.env.s = 114
env.render()
現(xiàn)在我們讓出租車前進(jìn)。
環(huán)境步驟(1)
env.render()
您會(huì)注意到這個(gè)env.step(1)操作將返回4個(gè)變量。
(14,-1,F(xiàn)alse,{'prob': 1.0})
我們將在后面對(duì)這些變量進(jìn)行如下定義:
狀態(tài),獎(jiǎng)勵(lì),完成,信息=環(huán)境步驟(1)
這四個(gè)變量是:新狀態(tài)(St+1= 14)、獎(jiǎng)勵(lì)(Rt+1= -1)、指示環(huán)境是終止還是完成的布爾值以及附加調(diào)試信息。每一個(gè)健身房環(huán)境在行動(dòng)后都會(huì)返回同樣的四個(gè)變量,因?yàn)樗鼈兪窃鰪?qiáng)學(xué)習(xí)問題的核心變量。
看渲染的環(huán)境。如果向左走,你希望環(huán)境回歸什么?當(dāng)然,你會(huì)得到和以前一樣的獎(jiǎng)勵(lì)。對(duì)于每一步,環(huán)境總是給出-1的獎(jiǎng)勵(lì),這樣代理可以嘗試找到最快的解決方案。如果衡量你累計(jì)的獎(jiǎng)勵(lì)總量,連續(xù)撞墻會(huì)嚴(yán)重懲罰你的最終獎(jiǎng)勵(lì)。環(huán)境會(huì)給你一個(gè)-10的回頭率,每次上下車不正確。
所以,如何才能解決這個(gè)環(huán)境的任務(wù)呢?
解決這個(gè)環(huán)境問題的一個(gè)令人驚訝的方法是從六種可能的行動(dòng)中隨機(jī)選擇一種。當(dāng)你能成功的接一個(gè)乘客,把它放到他們想去的地方,這個(gè)環(huán)境的任務(wù)就被認(rèn)為解決了。一旦實(shí)現(xiàn),你將獲得20點(diǎn)獎(jiǎng)勵(lì),完成變量將變?yōu)檎妗=?jīng)過多次隨機(jī)行動(dòng)后,你可能會(huì)幸運(yùn)地完成任務(wù)。雖然概率小,但也不是不可能。評(píng)估每個(gè)代理的性能的一個(gè)核心部分是將它們與具有隨機(jī)動(dòng)作的代理進(jìn)行比較。在健身房的環(huán)境中,可以使用env.action_space.sample()選擇隨機(jī)動(dòng)作代理。您可以創(chuàng)建一個(gè)循環(huán),讓代理隨機(jī)行動(dòng),直到任務(wù)得到解決。我們可以在循環(huán)中添加一個(gè)計(jì)數(shù)器,看看需要多少步驟來解決環(huán)境任務(wù)。
state = env.reset()
計(jì)數(shù)器= 0
獎(jiǎng)勵(lì)=無
同時(shí)獎(jiǎng)勵(lì)!= 20:
狀態(tài),獎(jiǎng)勵(lì),完成,info = env . step(env . action _ space . sample())
計(jì)數(shù)器+= 1
打印(計(jì)數(shù)器)
有些人可能很幸運(yùn)能在短時(shí)間內(nèi)解決任務(wù)。但是平均來說,一個(gè)完全隨機(jī)的策略需要2000多個(gè)步驟來解決一個(gè)任務(wù)。因此,如果我們想在未來獲得最大的回報(bào),就必須讓算法記住自己的行動(dòng)和回報(bào)。這種情況下,算法的內(nèi)存會(huì)變成一個(gè)Q動(dòng)作值表。
為了將來管理這個(gè)Q表,我們將使用一個(gè)NumPy數(shù)組列表。列表的大小是狀態(tài)數(shù)(500)乘以可能動(dòng)作數(shù)(6),即500×6。
將numpy導(dǎo)入為np
q = NP . zeros([env . observation _ space . n,env.action_space.n])
在多次嘗試解決任務(wù)后,我們將更新Q值,并逐步提高我們算法的效率和性能。我們也希望跟蹤每一輪的累計(jì)獎(jiǎng)金值,我們定義為g。
G = 0
類似于大多數(shù)機(jī)器學(xué)習(xí)問題,我們?nèi)匀恍枰粋€(gè)學(xué)習(xí)率。我會(huì)用我個(gè)人最喜歡的0.618,這也是數(shù)學(xué)的黃金分割常數(shù)π。
α= 0.618
接下來,我們可以實(shí)現(xiàn)最基本的Q值學(xué)習(xí)算法。
對(duì)于范圍內(nèi)的劇集(1,1001):
完成=假
g,獎(jiǎng)勵(lì)= 0,0
state = env.reset()
完成后!=真:
action = np.argmax(Q[state]) #1
狀態(tài)2,獎(jiǎng)勵(lì),完成,信息= env.step(動(dòng)作)#2
Q[狀態(tài),動(dòng)作] += alpha *(獎(jiǎng)勵(lì)+NP . max(Q[狀態(tài)2])–Q[狀態(tài),動(dòng)作]) #3
G +=獎(jiǎng)勵(lì)
state = state2
如果劇集% 50 == 0:
打印('第{}集總獎(jiǎng)勵(lì):{} '。格式(劇集,G))
光是這些代碼就能解決這個(gè)出租車環(huán)保任務(wù)。里面有很多代碼,我來分解解釋一下。
注(#1):該代理使用argmax函數(shù)為當(dāng)前狀態(tài)選擇Q值最高的動(dòng)作。argmax函數(shù)返回一個(gè)狀態(tài)的最高值的索引/動(dòng)作。一開始我們Q表的值都是0。但是每走一步,每個(gè)狀態(tài)-動(dòng)作組的Q值都會(huì)更新。
注(#2):代理采取這個(gè)動(dòng)作,然后我們將未來狀態(tài)保存為狀態(tài)2 (St+1)。這將允許代理將以前的狀態(tài)與新的狀態(tài)進(jìn)行比較。
注(#3):使用獎(jiǎng)勵(lì)更新狀態(tài)-動(dòng)作組的Q值(St,At)和狀態(tài)2的最大Q值(St+1)。此更新使用動(dòng)作值公式(基于貝爾曼方程),并允許以遞歸方式(基于未來值)更新狀態(tài)-動(dòng)作組。循環(huán)更新的公式如圖2所示。
圖2 Q值的遞歸更新。來源:Gregz448,CC0,基于維基共享授權(quán)
更新完成后,我們更新整體獎(jiǎng)勵(lì)值g,并將狀態(tài)(St)更新為之前的狀態(tài)2(St+1)。這樣就可以重新開始循環(huán),決定下一步的行動(dòng)。
經(jīng)過多輪后,算法最終會(huì)收斂,這樣每個(gè)狀態(tài)的最優(yōu)動(dòng)作就可以由Q表來確定,以保證最大的獎(jiǎng)勵(lì)值。到這個(gè)時(shí)候,我們認(rèn)為環(huán)境任務(wù)已經(jīng)解決了。
現(xiàn)在,我們已經(jīng)解決了一個(gè)非常簡單的環(huán)境任務(wù)。那我們來試試更復(fù)雜的雅達(dá)利游戲環(huán)境——Pacman(小黃人吃豆)
env = gym.make("MsPacman-v0 ")
state = env.reset()
您會(huì)注意到env.reset()返回了一個(gè)非常大的數(shù)字列表。更具體地說,您可以鍵入state.shape來顯示這個(gè)狀態(tài)是210x160x3的張量。它代表雅達(dá)利游戲中由長度、寬度和三個(gè)RGB顏色通道組成的像素。像以前一樣,你可以想象這個(gè)環(huán)境。
env.render()
和以前一樣,我們可以看看所有可能的行動(dòng):
env.action_space.n
我們有九個(gè)可能的動(dòng)作:整數(shù)0-8。需要注意的是,代理并不知道每個(gè)動(dòng)作意味著什么。它的工作是學(xué)習(xí)哪種行為將優(yōu)化獎(jiǎng)勵(lì)。但是對(duì)于我們的理解,我們可以:
env . env . get _ action _ means()
結(jié)果顯示代理可以選擇9個(gè)動(dòng)作:不做,8個(gè)可以在游戲手柄上做的動(dòng)作。
使用我們之前的策略,讓我們首先看看隨機(jī)代理的性能。
state = env.reset()
獎(jiǎng)勵(lì),信息,完成=無,無,無
完成后!=真:
狀態(tài),獎(jiǎng)勵(lì),完成,info = env . step(env . action _ space . sample())
env.render()
完全隨機(jī)的策略最多能打幾百分,永遠(yuǎn)過不了第一關(guān)。
繼續(xù),現(xiàn)在基本的Q表算法不能用了。因?yàn)橛?3,600個(gè)像素點(diǎn),所以每個(gè)點(diǎn)都有3個(gè)介于0和255之間的隨機(jī)整數(shù)RGB值。很容易看出事情變得極其復(fù)雜。深度學(xué)習(xí)可以用來解決這個(gè)問題。利用卷積神經(jīng)網(wǎng)絡(luò)或DQN,機(jī)器學(xué)習(xí)庫可以將復(fù)雜的高維像素矩陣轉(zhuǎn)化為抽象表達(dá)式,并將該表達(dá)式轉(zhuǎn)化為優(yōu)化動(dòng)作。
綜上所述,你現(xiàn)在已經(jīng)有了一些基礎(chǔ)知識(shí),知道如何使用健身房做一些基于別人(甚至是你自己)算法的實(shí)驗(yàn)。如果你想得到這篇博文中用到的代碼,并去做或者編輯,可以在我的GitHub上找到。
隨著解決環(huán)境問題的新方法和更好方法的出現(xiàn),RL領(lǐng)域正在迅速擴(kuò)大。到目前為止,A3C方法是最流行的方法之一。強(qiáng)化學(xué)習(xí)很可能會(huì)在未來的人工智能中發(fā)揮更重要的作用,并將繼續(xù)產(chǎn)生非常有趣的結(jié)果。
這篇文章最初以英文出現(xiàn):“強(qiáng)化學(xué)習(xí)和OpenAI健身房介紹”。
賈斯汀·弗朗西斯
賈斯汀住在加拿大西海岸的一個(gè)小農(nóng)場里。這個(gè)農(nóng)場側(cè)重于公園人的道德和設(shè)計(jì)的農(nóng)學(xué)。在此之前,他是一家非營利社區(qū)合作社自行車店的創(chuàng)始人和教育家。在過去的兩年里,他住在一艘帆船上,全職探索和體驗(yàn)加拿大的喬治亞海峽。但現(xiàn)在他的主要精力放在了學(xué)習(xí)機(jī)器學(xué)習(xí)上。
在紐約和舊金山成功售罄門票后,由O'Reilly主持的人工智能大會(huì)將于2018年4月10-13日來到北京。目前,主講人正在征集:https://ai.oreilly.com.cn/ai-cn.
話題收集截止日期:11月7日
1.《gym 增強(qiáng)學(xué)習(xí)和OpeAI Gym的介紹:基礎(chǔ)增強(qiáng)學(xué)習(xí)問題的演示》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《gym 增強(qiáng)學(xué)習(xí)和OpeAI Gym的介紹:基礎(chǔ)增強(qiáng)學(xué)習(xí)問題的演示》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/fangchan/881166.html