強化學(xué)習(xí)(Reinforcement learning)潛力無窮,能解決許多開發(fā)應(yīng)用上面臨的艱難決策問題,包括產(chǎn)業(yè)自動化、自主駕駛、電玩競技遊戲以及機器人等,因此備受矚目。
強化學(xué)習(xí)是機器學(xué)習(xí)(Machine learning)的一種,指的是電腦透過與一個動態(tài)(dynamic)環(huán)境不斷重複地互動,來學(xué)習(xí)正確地執(zhí)行一項任務(wù)。這種嘗試錯誤(trial-and-error)的學(xué)習(xí)方法,使電腦在沒有人類干預(yù)、沒有被寫入明確的執(zhí)行任務(wù)程式下,就能夠做出一系列的決策。最著名的強化學(xué)習(xí)案例就是AlphaGo,它是第一支打敗人類圍棋比賽世界冠軍的電腦程式。
強化學(xué)習(xí)的運作主要是仰賴動態(tài)環(huán)境中的資料—也就是會隨著外部條件變化而改變的資料,像是天氣或交通流量。強化學(xué)習(xí)演算法的目標(biāo),即是於找出能夠產(chǎn)生最佳結(jié)果的策略。強化學(xué)習(xí)之所以能達(dá)成目標(biāo),是藉著軟體當(dāng)中被稱為主體 (agent)的部分在環(huán)境中進(jìn)行探索、互動和學(xué)習(xí)的方法。
自動駕駛範(fàn)例
自助停車(self-parking)是自動駕駛功能中極為重要的一環(huán),目標(biāo)是要讓車輛中的電腦(主體,agent)能準(zhǔn)確地尋找位置並將車輛停入正確的停車格。
在以下的範(fàn)例中,「環(huán)境」指的是主體之外的所有事物—比如車輛本身的動態(tài)、附近的車輛、天候條件等等。訓(xùn)練過程中,主體使用從各種感測器如攝影機、GPS、光學(xué)雷達(dá)(LiDAR)以及其他感測器讀取的資料來產(chǎn)生駕駛、煞車與加速指令(動作)。為了學(xué)習(xí)如何從觀察去產(chǎn)生正確的動作(也就是策略調(diào)整,policy tuning),主體會不斷反覆地嘗試錯誤來試著停車,而正確的動作會得到一個獎賞(reward)(強化,reinforced)以數(shù)值訊號表示(圖1)。
以此範(fàn)例來說,訓(xùn)練是透過一個訓(xùn)練演算法(training algorithm)來監(jiān)督。這個訓(xùn)練演算法(即主體的大腦)負(fù)責(zé)根據(jù)從感測器收集而來的資料、動作、與獎賞來調(diào)整主體的策略。經(jīng)過訓(xùn)練之後,車輛上的電腦應(yīng)該只要使用調(diào)整過的策略和感測器資料便能進(jìn)行自主停車。
用於強化學(xué)習(xí)的演算法
到目前為止,已經(jīng)有許多強化學(xué)習(xí)訓(xùn)練演算法被開發(fā)出來,其中某些最熱門的演算法是以深度類神經(jīng)網(wǎng)路來建構(gòu)。類神經(jīng)網(wǎng)路最大的優(yōu)勢,是可以將複雜的行為編譯為代碼,讓強化學(xué)習(xí)可以處理許多對傳統(tǒng)演算法來說可能是非常具有挑戰(zhàn)性的任務(wù)。
舉例來說,在自動駕駛?cè)蝿?wù)上,類神經(jīng)網(wǎng)路可以取代駕駛者,透過攝影機的畫面、和光學(xué)雷達(dá)的量測值等多種感測器的輸入資料進(jìn)行解讀,並決定如何轉(zhuǎn)動方向盤(圖2)。

圖2 : 自動駕駛的類神經(jīng)網(wǎng)路 |
|
若沒有類神經(jīng)網(wǎng)路,這種問題會被分解為更細(xì)微的部分:首先,一個能分析攝影機輸入資料並找出有用特徵的模組、另一個能過濾光學(xué)雷達(dá)量測值的模組、可能還需要一個將感測器的輸出資料進(jìn)行融合、並將車輛周邊環(huán)境繪製出來的元件、也就是一個「駕駛」模組等等。
強化學(xué)習(xí)的工作流程
利用強化學(xué)習(xí)來訓(xùn)練一個主體,主要包含五個步驟:
1.建立環(huán)境:定義出一個環(huán)境,讓主體可以在裡面進(jìn)行學(xué)習(xí),包含主體與環(huán)境之間的介面也須被定義出來。這個環(huán)境可以是一個模擬模型,也可能是真實的物理系統(tǒng)。經(jīng)過模擬的環(huán)境通常是作為第一步的較好選擇,因為它較為安全且容許實驗操作。
2.定義獎賞:具體定義獎賞的訊號,供主體用來衡量其表現(xiàn)(與執(zhí)行目標(biāo)相比),以及訊號如何在環(huán)境中被計算。獎賞的設(shè)計可能會需要經(jīng)過幾次的疊代才能達(dá)到完備。
3.建立主體:主體由策略和訓(xùn)練演算法組合而成,所以你會需要:
選擇一個代表策略的方法(比如利用類神經(jīng)網(wǎng)路或是查找表)。思考一下,你希望如何去建構(gòu)這些參數(shù)和邏輯以成為主體的決策部分。
選擇適當(dāng)?shù)挠?xùn)練演算法。現(xiàn)代大部分的強化學(xué)習(xí)演算法多仰賴類神經(jīng)網(wǎng)路,因為這是處理大量狀態(tài)/動作空間和複雜的問題的好方法。
4.訓(xùn)練及驗證主體:你還需要設(shè)置訓(xùn)練的選項(例如停止的標(biāo)準(zhǔn)),並訓(xùn)練主體來調(diào)整策略。驗證經(jīng)過訓(xùn)練策略最簡單的方法就是模擬了。
5.策略的佈署:如何呈現(xiàn)已經(jīng)被訓(xùn)練好的策略?舉例來說,可以用C/C++或CUDA程式碼等方式來表示。此時你已經(jīng)不需要擔(dān)心主體和訓(xùn)練演算法了—因為到此階段,策略已經(jīng)被轉(zhuǎn)為一個獨立的決策系統(tǒng)可直接執(zhí)行。
疊代流程
利用強化學(xué)習(xí)來訓(xùn)練主體,所牽涉到嘗試錯誤的次數(shù)是相當(dāng)可觀的,即使已經(jīng)到較後面的決策與結(jié)果階段了,你可能還會需要重新回到較早的學(xué)習(xí)工作流程步驟中。舉例來說,如果訓(xùn)練程序沒有在一段合理的時間之內(nèi)收斂到最佳的決策,你可能會需要在重新訓(xùn)練主體之前,先去更新下列某些項目:
--訓(xùn)練的設(shè)定
--學(xué)習(xí)演算法的配置
--策略的表現(xiàn)方式
--獎賞訊號的定義
--動作與觀察訊號
--環(huán)境動態(tài)
哪些情況適合使用強化學(xué)習(xí)?
雖然強化學(xué)習(xí)被視為大幅進(jìn)化的機器學(xué)習(xí),不過它卻不一定是適用於所有情況的最好方法。如果你考慮嘗試使用強化學(xué)習(xí),請記住以下三點:
--它不具備所謂的樣本效率(sample-efficient)。這指的是,如果要達(dá)到可接受的表現(xiàn),需要有大量的訓(xùn)練。即使是在相對簡單的應(yīng)用,可能會花費幾分鐘、幾小時、或甚至是幾天的訓(xùn)練的時間。AlphaGo就是經(jīng)過了好幾天沒有間斷、幾百萬次比賽的訓(xùn)練,等同人類幾千年知識的累積。
--問題的正確設(shè)定可能很棘手。可能會需要很多的設(shè)計決策、相當(dāng)次數(shù)的疊代來達(dá)到正確的行為。這些決策包含了選擇合適的類神經(jīng)網(wǎng)路架構(gòu)、調(diào)整超參數(shù)、以及塑造獎賞訊號等。
--訓(xùn)練過的深度神經(jīng)網(wǎng)路策略是一個「黑盒子」。也就是說,網(wǎng)路內(nèi)部的結(jié)構(gòu)(通常由幾百萬個參數(shù)構(gòu)成)可能複雜到幾乎難以了解及解釋、以及去評估它所做出的決定,這使得利用類神經(jīng)網(wǎng)路所建立的策略,很難用正式的性能表現(xiàn)來加以保證它的成效。
如果你所處理的專案攸關(guān)時間或安全性至上,你可能可以嘗試其他的替代方案,比如說控制設(shè)計,使用傳統(tǒng)的控制方法可能是較好的開始。
實際範(fàn)例:自學(xué)走路的機器人
南加州大學(xué)(University of Southern California)Valero Lab的研究人員建造了一個簡單的機械腿,利用以MATLABR編寫的強化學(xué)習(xí)演算法,幾分鐘之內(nèi)就讓它自己教導(dǎo)自己學(xué)會如何移動(圖3)。

圖3 : Valero Lab的新機械肢。圖片提供:USC。 |
|
這個機械肢含有三條腱、兩個關(guān)節(jié)會自主地進(jìn)行學(xué)習(xí),首先是先建立它的動態(tài)屬性模型,接下來則使用強化學(xué)習(xí)來進(jìn)行學(xué)習(xí)。
在物理設(shè)計方面,機械腿採用了一個肌腱架構(gòu),大致上相當(dāng)於驅(qū)動動物活動的肌肉和肌腱結(jié)構(gòu)。接著研究人員利用強化學(xué)習(xí)去了解動態(tài)行為以達(dá)成在跑步機上行走的目標(biāo)。
強化學(xué)習(xí)與運動蹣跚
透過運動蹣跚(motor babbling)與強化學(xué)習(xí)的結(jié)合,系統(tǒng)會試圖進(jìn)行隨機的動作,並透過執(zhí)行這些動作產(chǎn)生的結(jié)果來學(xué)習(xí)其動態(tài)的屬性。以這項研究來說,研究團(tuán)隊一開始先讓系統(tǒng)進(jìn)行隨機的運動,或運動蹣跚(motor babble)。只要每一次系統(tǒng)正確地執(zhí)行了指定任務(wù)—在這個範(fàn)例中,是在跑步機上向前移動,研究人員就會給予系統(tǒng)獎賞。
這個經(jīng)由學(xué)習(xí)產(chǎn)生的演算法被稱為G2P(general to particular,從一般到特定的縮寫),它複製了生物神經(jīng)系統(tǒng)從移動去控制肌腱移動時會遇到的一般問題(圖4)。隨後再強化(給予獎賞)任務(wù)的特定行為。在這個範(fàn)例,任務(wù)是要成功地在跑步機上移動。系統(tǒng)透過運動蹣跚建立了自身動態(tài)的一般性理解,接著從每一次的經(jīng)驗或G2P學(xué)習(xí),最終開發(fā)出達(dá)到「特定」任務(wù)的行為。

圖4 : G2P演算法。圖片提供:Marjaninejad, et al. |
|
這個類神經(jīng)網(wǎng)路,是利用MATLAB和深度學(xué)習(xí)工具箱(Deep Learning Toolbox?)來完成的,它使用了從運動蹣跚得來的結(jié)果,建立一個輸入(運動學(xué))和輸出(運動觸發(fā))的反向地圖。該網(wǎng)路會依據(jù)強化學(xué)習(xí)階段所做的每一次嘗試來更新模型,而趨向期望的結(jié)果。網(wǎng)路會記住每一次的最佳結(jié)果,當(dāng)新的輸入值創(chuàng)造出更好的結(jié)果,網(wǎng)路則會以新的設(shè)定來覆蓋原本的模型設(shè)定。
G2P演算法在僅僅5分鐘的無特定結(jié)構(gòu)地執(zhí)行運動蹣跚後,就可以自己學(xué)習(xí)新的步行任務(wù),然後,它也不需要任何額外的編程,便能夠適應(yīng)其他任務(wù)。
(本文由鈦思科技提供;作者Emmanouil Tzorakoleftherakis任職於MathWorks公司)