強(qiáng)化學(xué)習(xí)(RL)是關(guān)于訓(xùn)練智能體來完成一些任務(wù)。一般認(rèn)為這能夠達(dá)成某個(gè)目標(biāo),例如,我們可能想要訓(xùn)練機(jī)器人來打開一扇門。強(qiáng)化學(xué)習(xí)可以作為一個(gè)框架,允許機(jī)器人用試錯(cuò)的方法來學(xué)習(xí)打開門。但是,如果我們更感興趣的是讓智能體不僅只是解決一個(gè)目標(biāo),而是一個(gè)可能隨時(shí)間變化的目標(biāo)集合,又會(huì)怎么樣呢?
在本文以及GitHub上對(duì)應(yīng)的notebook文件中,我將介紹和演示機(jī)器學(xué)習(xí)中傳統(tǒng)的強(qiáng)化學(xué)習(xí)范式,以及一種新出現(xiàn)的用于擴(kuò)展強(qiáng)化學(xué)習(xí)的范式,它可以應(yīng)對(duì)復(fù)雜的隨著時(shí)間變化的目標(biāo)。
首先,我將演示如何構(gòu)建一個(gè)簡(jiǎn)單的Q-learning智能體,它由一個(gè)單一的獎(jiǎng)勵(lì)信號(hào)為引導(dǎo),在一個(gè)環(huán)境里自我導(dǎo)航來投遞包裹。然后我將展示Q-learning這個(gè)簡(jiǎn)單的公式在更復(fù)雜的行為情況下會(huì)出現(xiàn)的問題。為了獲得更大的靈活性,我將描述如何構(gòu)建一類強(qiáng)化學(xué)習(xí)智能體,它可以對(duì) “直接未來預(yù)測(cè)”(DFP)的各種目標(biāo)進(jìn)行優(yōu)化。所有使用TensorFlow的代碼都在這個(gè)iPython Jupyter Notebook文件中。
能獲得最大累積獎(jiǎng)勵(lì)的Q-learning
強(qiáng)化學(xué)習(xí)涉及到智能體通過和環(huán)境進(jìn)行交互來隨著時(shí)間的推移獲得最大的回報(bào)。典型的形式化這一過程的方式是:一個(gè)智能體從環(huán)境中接收一個(gè)狀態(tài)(s),再產(chǎn)生一個(gè)動(dòng)作(a)。給定這個(gè)狀態(tài)和動(dòng)作對(duì),環(huán)境就會(huì)反饋給智能體一個(gè)新的狀態(tài)(s)以及一個(gè)回報(bào)(r)。這樣強(qiáng)化學(xué)習(xí)的問題就變成了如何發(fā)現(xiàn)一個(gè)從狀態(tài)到行為的映射,從而能產(chǎn)生最大的累積獎(jiǎng)勵(lì)的問題。
解決問題的一種方法叫做Q-learning。在這個(gè)方法中,我們學(xué)習(xí)一個(gè)狀態(tài)動(dòng)作對(duì)(s,a)和值估計(jì)(v)之間的直接映射。這個(gè)值估計(jì)應(yīng)該與在狀態(tài)(s)期間采取行動(dòng)(a)的折扣預(yù)期獎(jiǎng)勵(lì)相對(duì)應(yīng)。使用Bellman方程,我們可以迭代地更新對(duì)所有可能狀態(tài)動(dòng)作對(duì)的Q(s,a)的估計(jì)。這種迭代更新Q值的能力來自于優(yōu)化Q函數(shù)的以下特性:
Q*(s, a) = r + γmaxa’Q(s’, a’)
此公式意味著給定狀態(tài)和動(dòng)作的當(dāng)前Q值可以分解為當(dāng)前的獎(jiǎng)勵(lì),加上下一狀態(tài)下的預(yù)期未來獎(jiǎng)勵(lì)。通過收集經(jīng)驗(yàn),我們可以訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)更精確的Q值,并且通過采取行動(dòng)來優(yōu)化期望值。在理想情況下,最終我們可以根據(jù)環(huán)境獲得最大的累積獎(jiǎng)勵(lì)。利用一個(gè)通用的函數(shù)逼近器(如神經(jīng)網(wǎng)絡(luò)),我們可以將我們的Q估計(jì)泛化到未見過的狀態(tài),從而使我們可以學(xué)習(xí)任意大的狀態(tài)空間的Q函數(shù)。
基于目標(biāo)的強(qiáng)化學(xué)習(xí)的快遞無人機(jī)場(chǎng)景
Q-learning和其他傳統(tǒng)的公式化的強(qiáng)化學(xué)習(xí)算法都是只學(xué)習(xí)一個(gè)單一的獎(jiǎng)勵(lì)信號(hào),因此一次只能應(yīng)對(duì)一個(gè)單一的“目標(biāo)”。例如,我們希望一架無人機(jī)學(xué)習(xí)如何將包裹投遞到城市各個(gè)地點(diǎn)。這個(gè)“快遞無人機(jī)”的場(chǎng)景將是下面我們?cè)谟懻摶谀繕?biāo)的強(qiáng)化學(xué)習(xí)的指導(dǎo)范式。
在這種環(huán)境中,智能體在5×5的網(wǎng)格中占據(jù)一個(gè)位置,而快遞目的地占據(jù)另外一個(gè)位置。該智能體可以在任意四個(gè)方向上移動(dòng)(向上、下、左、右)。如果我們想讓無人機(jī)去學(xué)習(xí)投遞包裹,我們只需要在無人機(jī)成功地飛到一個(gè)標(biāo)記的位置并進(jìn)行投遞后,給一個(gè)+1的正獎(jiǎng)勵(lì)即可。

圖1.簡(jiǎn)單的無人機(jī)快遞環(huán)境的渲染。來源:Arthur Juliani
圖1所示的內(nèi)容可以用來幫助我們直觀地理解智能體正在學(xué)習(xí)什么。我們使用一個(gè)簡(jiǎn)單的狀態(tài)表示,即一個(gè)5×5的網(wǎng)格和RGB像素(總共75個(gè)值)來表示這個(gè)環(huán)境。這把使用一臺(tái)筆記本電腦來進(jìn)行訓(xùn)練學(xué)習(xí)的過程從數(shù)小時(shí)降到幾分鐘。每一循環(huán)無人機(jī)走100步。在每一循環(huán)的開始,我們會(huì)隨機(jī)分配智能體和投遞的地點(diǎn)。
使用TensorFlow進(jìn)行Q-learning
下面所示的Q-learning的TensorFlow的實(shí)現(xiàn)是該算法的一個(gè)異步版本。它允許多個(gè)智能體并行地學(xué)習(xí)。這種方法同時(shí)加速了訓(xùn)練的過程和健壯性。實(shí)現(xiàn)的代碼在這個(gè)Jupyter Notebook文件里。
使用由4個(gè)worker的機(jī)器進(jìn)行訓(xùn)練。在每個(gè)worker進(jìn)行6000次循環(huán)的訓(xùn)練后,我們最終得到的性能曲線應(yīng)該類似于圖2所示。智能體在每次循環(huán)可以持續(xù)投遞大約20個(gè)包裹??紤]到我們這個(gè)環(huán)境的尺寸大小,可以認(rèn)為這是在100步中近似最優(yōu)投遞數(shù)量。點(diǎn)擊這里觀看動(dòng)畫演示。

圖2.性能曲線。在4個(gè)worker上每個(gè)worker進(jìn)行6000次循環(huán)后的表現(xiàn)。來源:Arthur Juliani。
直接未來預(yù)測(cè)
一個(gè)真實(shí)世界中的無人機(jī)并不能無休止地投遞包裹,因?yàn)樗碾姵厝萘渴怯邢薜?,需要?jīng)常性地充電。每次移動(dòng),智能體的電池電量都會(huì)略有下降。因?yàn)殡姵厝萘坑邢?,耗盡電量就意味著從空中掉下來,不再能夠遞送包裹——沒有投遞更多的包裹就意味著沒有更多的獎(jiǎng)勵(lì)。
我們可以在環(huán)境中增加一個(gè)位置,讓我們的智能體飛到這個(gè)位置來給它的電池充電。現(xiàn)在所有的智能體都需要在電池電量不足時(shí),學(xué)會(huì)飛到充電站去充電,其他時(shí)候就正常地投遞包裹。
創(chuàng)造一個(gè)最優(yōu)的獎(jiǎng)勵(lì)函數(shù)
在有足夠的時(shí)間和正確的超參數(shù)調(diào)優(yōu)的情況下,Q-learning算法可能最終會(huì)發(fā)現(xiàn),對(duì)電池充電有利于在長(zhǎng)期內(nèi)投遞更多的包裹。這涉及到要學(xué)習(xí)采取一系列復(fù)雜的沒有立刻的獎(jiǎng)勵(lì)的行動(dòng),并學(xué)會(huì)理解更大的獎(jiǎng)勵(lì)在后面。在這種情況下,增加鼓勵(lì)電池獎(jiǎng)勵(lì)行為的信號(hào)是一個(gè)誘人的選擇。一種簡(jiǎn)單粗暴的方法可以是提供一個(gè)獎(jiǎng)勵(lì)(比如+0.5)給飛行到指定的位置充電。然而在這種情況下,我們的智能體會(huì)學(xué)到的是總飛去充電,因?yàn)槊看纬潆姷臅r(shí)候都保證有獎(jiǎng)勵(lì)。我們現(xiàn)在遇到的問題是想出一個(gè)獎(jiǎng)勵(lì)函數(shù)來描述我們認(rèn)為最優(yōu)的行為。雖然對(duì)于一些問題來說這很簡(jiǎn)單,但不正確的獎(jiǎng)勵(lì)函數(shù)卻常常會(huì)帶來意想不到的后果。想看一些例子的話,可以看看最近的這篇OpenAI的文章《Faulty Reward Functions(有缺陷的獎(jiǎng)勵(lì)函數(shù))》。
改變目標(biāo)
如果我們想要避免有缺陷的獎(jiǎng)勵(lì)工程的坑,我們需要一個(gè)更直觀的方式來將任務(wù)的結(jié)構(gòu)傳達(dá)給智能體。事實(shí)證明,通過給智能體提供一個(gè)明確的同時(shí)也能根據(jù)事件和特定的時(shí)刻變化的目標(biāo),我們可以更好地得到我們想要的動(dòng)態(tài)行為。在考慮電池的情況下,只要電量低于一定的值,我們就可以把目標(biāo)從“投遞包裹”改為“給電池充電”。這樣我們就不用擔(dān)心獎(jiǎng)勵(lì)方程,神經(jīng)網(wǎng)絡(luò)可以只專注于學(xué)習(xí)環(huán)境的動(dòng)態(tài)本身。

圖3.在加入電池充電情況下的投遞環(huán)境。來源:Arthur Juliani
形式化目標(biāo)搜索
為了使這個(gè)概念可行,我們需要讓描述更正式一些。在強(qiáng)化學(xué)習(xí)中,實(shí)現(xiàn)目標(biāo)的形式有多種。我關(guān)注的是在2017年International Conference on Learning Representations會(huì)議上發(fā)表的一篇論文。這篇論文的題目是《Learning to Act by Predicting the Future(通過預(yù)測(cè)未來來學(xué)習(xí)行動(dòng))》。而這正是我們想要訓(xùn)練我們的智能體去做的事情!
首先,有一點(diǎn)需要申明的是,這里展示的模型并不完全是論文作者——Alexey Dosovitskiy和Vladlen Koltun在他們的論文中描述的內(nèi)容。在論文中,他們將其網(wǎng)絡(luò)稱為“直接未來預(yù)測(cè)”(DFP)。我們所做的類似于DFP。我調(diào)整了一些因素,以使它們對(duì)本文中討論的例子更加直觀。
在原論文中,作者訓(xùn)練他們的智能體去玩第一人稱射擊游戲“Doom”。這是一個(gè)令人印象深刻但比本文介紹的內(nèi)容更復(fù)雜的環(huán)境。

圖4.“直接預(yù)測(cè)未來”的網(wǎng)絡(luò)架構(gòu)圖。來自論文Dosovitskiy and Koltun (2016),授權(quán)使用
這里我們并不是訓(xùn)練智能體去完成狀態(tài)(s)到Q值估計(jì)Q(s,a)的映射,然后獲得環(huán)境反饋的獎(jiǎng)勵(lì)(r)。相對(duì)的,在狀態(tài)(s)之外,我們還維護(hù)了一套測(cè)量(m)和目標(biāo)(g),然后訓(xùn)練網(wǎng)絡(luò)來預(yù)測(cè)每個(gè)行動(dòng)(a)導(dǎo)致的未來測(cè)量(f)的變化。
訓(xùn)練我們的網(wǎng)絡(luò)來預(yù)測(cè)期望的未來
在無人機(jī)場(chǎng)景里,我們需要維護(hù)兩個(gè)測(cè)量值:電池剩余電量和投遞的包裹數(shù)量。我們沒有預(yù)測(cè)像Q-learning這樣的值函數(shù),而是訓(xùn)練網(wǎng)絡(luò)來預(yù)測(cè)在未來的1、2、4、8、16和32步后期望的電量的和投遞數(shù)量的變化。這可以寫成公式:
f=<mT1–m0,mT2–m0…mTn–m0>
其中,T是我們的時(shí)間偏移量列表,[1, 2, 4, …等]。
在這個(gè)范式中,不再有明確的獎(jiǎng)勵(lì)。相反,衡量成功與否的標(biāo)準(zhǔn)是目標(biāo)和測(cè)量的一致程度。在投遞無人機(jī)的場(chǎng)景下,這將意味著最大化投遞包裹的數(shù)量和確保電量低的時(shí)候去充電。
如果我們的智能體在預(yù)測(cè)行為的未來測(cè)量方面是完美的,那么我們只需要采取優(yōu)化我們感興趣的測(cè)量值的操作。我們的目標(biāo)允許我們?cè)谌魏谓o定的時(shí)間指定我們關(guān)心的測(cè)量值。
制定更復(fù)雜的目標(biāo)
由于我們并不是簡(jiǎn)單地預(yù)測(cè)像Q-learning中的單個(gè)標(biāo)量值,我們可以制定更復(fù)雜的目標(biāo)。設(shè)想我們有一個(gè)測(cè)量向量[電池,投遞]。如果我們想要最大化電池電量而忽略投遞,那么我們的目標(biāo)向量將是[1,0],這會(huì)對(duì)應(yīng)于未來電池的正測(cè)量值,而不在乎投遞量。
但如果我們是想最大化投遞量,我們的目標(biāo)向量就會(huì)是[0,1]。因?yàn)槭俏覀?而不是環(huán)境或網(wǎng)絡(luò)本身)制定了目標(biāo),我們就可以隨時(shí)按照我們認(rèn)為合適的那一步去改變它。通過這種方式,只要電池測(cè)量低于某個(gè)閾值(在我們的例子中是30%),我們就可以明確地從優(yōu)化投遞量改變目標(biāo)為優(yōu)化剩余電量。通過這種方式結(jié)合目標(biāo)和測(cè)量,我們現(xiàn)在可以基于人類操作員的愿望,隨時(shí)靈活地調(diào)整智能體的行為。這與Q-learning相反。在Q-learning中,Q值在經(jīng)過訓(xùn)練就是固定的,只有一種行為模式是可能的。
這個(gè)新公式以幾種方式改變了我們的神經(jīng)網(wǎng)絡(luò)。不僅只有一個(gè)狀態(tài),我們還會(huì)提供給網(wǎng)絡(luò)當(dāng)前的測(cè)量和目標(biāo)作為輸入。我們的網(wǎng)絡(luò)現(xiàn)在將輸出一個(gè)形式為[測(cè)量 X 行動(dòng) X 偏移量]的預(yù)測(cè)張量,而不再是Q值。通過計(jì)算預(yù)測(cè)未來的變化的和與目標(biāo)乘積,我們可以選擇最能滿足目標(biāo)的行動(dòng):
a=gT?∑p(s,m,g)
其中?∑p(s,m,g)是對(duì)未來時(shí)間步驟的網(wǎng)絡(luò)輸出的求和,也是目標(biāo)向量的轉(zhuǎn)置。
通過利用簡(jiǎn)單的回歸損失來預(yù)測(cè)未來的真實(shí)測(cè)量變化,我就可以訓(xùn)練這種新型的智能體:
Loss=∑[P(s,m,g,a)?f(m)]2
其中P(s、m、g、a)是指所選動(dòng)作的網(wǎng)絡(luò)的輸出。
到此我們總結(jié)一下。我們有一個(gè)智能體可以熟練地投遞包裹,并同時(shí)維持一定的電量。我們將再次使用在TensorFlow中的異步實(shí)現(xiàn)??捎玫哪P蚽otebook文件可以在這里下載。
用TensorFlow的異步實(shí)現(xiàn)
在每個(gè)worker(共4個(gè)worker)進(jìn)行了1萬次循環(huán)訓(xùn)練后,我們最終得到了如圖5所示的訓(xùn)練曲線。該智能體已經(jīng)學(xué)會(huì)了保持一定的電量 (平均每一循環(huán)的長(zhǎng)度接近100步),以及在一次循環(huán)中提供近乎最優(yōu)的包裹投遞數(shù)量。點(diǎn)擊這里觀看動(dòng)畫演示。

圖5.每一循環(huán)的投遞量(左圖),和每一循環(huán)里的步驟數(shù)(右圖)。來源:Arthur Juliani
需要注意的是,這里提供的環(huán)境是真實(shí)世界場(chǎng)景的一個(gè)非常簡(jiǎn)化的版本。一個(gè)網(wǎng)格化的環(huán)境可以讓網(wǎng)絡(luò)在一個(gè)合理的時(shí)間內(nèi)完成訓(xùn)練,從而達(dá)到演示目標(biāo)學(xué)習(xí)的目的?,F(xiàn)實(shí)世界中的無人駕駛機(jī)很可能會(huì)利用平滑、連續(xù)控制,而這顯然是一個(gè)視覺上更加復(fù)雜的世界。
增強(qiáng)這一技術(shù)
如果您能夠接觸到更強(qiáng)大的計(jì)算資源,我鼓勵(lì)你嘗試使用更復(fù)雜的環(huán)境,例如OpenAI universe提供的環(huán)境。一個(gè)簡(jiǎn)單的變化是通過使用卷積層來為視頻流提供一個(gè)更好的編碼器,而不是使用本文里用的全連接層。但是,基本的架構(gòu)應(yīng)該是可擴(kuò)展的。
我希望本教程能夠?yàn)樽x者了解強(qiáng)化學(xué)習(xí)能夠解決的各種問題提供一些見解,以及在新環(huán)境中重新制定任務(wù)所帶來的好處。這里描述的多目標(biāo)方法可能并不是在所有情況下都是最好的方法,但是它提供了另一種可能的方法來設(shè)計(jì)智能體去應(yīng)對(duì)世界上復(fù)雜的任務(wù)。
這篇博文是O’Reilly和TensorFlow的合作產(chǎn)物。請(qǐng)閱讀我們的編輯獨(dú)立聲明。
Arthur Juliani
Arthur Juliani是一位交叉研究認(rèn)知神經(jīng)科學(xué)和深度學(xué)習(xí)的研究人員。他目前正在俄勒岡大學(xué)攻讀博士學(xué)位。


更多人工智能內(nèi)容請(qǐng)關(guān)注2018年4月10-13日人工智能北京大會(huì)。