Berkeley CS294-112 深度增強學習 筆記 (10) 基於模型的增強學習的策略訓練
前言:我個人向大家推薦伯克利大學的這門深度增強學習課程。這門課程的內容非常精彩,乾貨滿滿。事實上這門課程的完整版已經開設兩個學期,廣受關注,知乎內外已不乏點評,也有不錯的學習筆記。本筆記試圖較詳細地談談我自己的學習過程和理解,形成補充。課程內容的版權由伯克利大學所有,中文解釋說明的版權由我保留。由於該課程比較傾向於機器人學的應用,本人非工科專業,水平有限,有疏漏錯誤之處還請各路高手不吝賜教。如果能對大家有點滴用途,自當欣喜不已。
上一篇:謝天:Berkeley CS294-112 深度增強學習 筆記 (9) 用數據擬合模型
使用基於模型的增強學習訓練策略
在上兩篇中,我們對基於模型的深度學習進行了大致的探討,包括如果我們已知模型信息如何進行利用來做出正確的決策(如MCTS和iLQR),在不知道確切模型的情況下如何收集數據學習模型。其中在上一篇中,我們給出了收集數據學習模型的框架,並使用iLQR(包括加入雜訊成為Linear-Gaussian)進行規劃;我們分別探討了如何訓練全局模型(如高斯過程GP,神經網路等)、如何通過控制舊軌跡和新軌跡的KL散度的方法在一個信賴域中訓練局部模型(如線性模型),也可以用諸如貝葉斯回歸的方法將全局模型作為先驗更好地訓練局部模型。在訓練模型之外,我們討論的控制基本上局限於v1.5版本以下的在線執行某些規划過程,主要是v1.5版本的閉環MPC方法,是具有相當的魯棒性的。
在這一篇中,我們將探討通過基於模型的增強學習演算法來訓練策略,如何像v2.0版本一樣使用策略來做決策。獲得一個策略有很多好處,首先使用策略來進行在線行動選擇是一個輕量級的方法,遠比v1.5的每步在線重新使用規劃方法求解快;此外更重要的是,訓練策略可能有比訓練模型有更好的泛化能力(但不一定,取決於問題)。舉個例子,考慮到(譬如在棒壘球中)我們去接一個球,基於模型的演算法考慮物體的飛行軌跡,譬如如何受重力和風力影響,然後求解運動問題,確定落地點,然後過去接球;而事實上人類去解這個問題更簡單,如我們只需要追趕這個球,保持一定的速度使得球在視野裡面就行了,我們沒必要關注具體的物理動態,也能接住這個球。這個例子說明了有可能使用策略的話,觀測和行動之間會是一個比較簡單的關係,從而訓練一個不錯的策略比搞清楚模型具體是什麼更容易泛化,更容易提煉出某種意義上的「知識」作為策略以適應新情況:人類的接球策略可以在物體不是球的時候也通用,而根據物理模型規劃計算則需要做很大變化了。
我們繼續祭出之前多次使用過的計算圖。這個計算圖本質上體現了策略函數和模型動態影響代價(收益)的形式(包含了三個重要組成部分,注意這裡換成最小化代價了,其實是一樣的)。在v2.0版框架中,我們考慮使用反向傳播的方法來優化策略函數:如果這三個東西都是可微的,那麼我們就可以求出代價關於的梯度(對於確定性策略更容易,對於有些隨機策略也是可行的,如之前所講的PILCO方法匹配前兩階矩),從而反向傳播是可以做到的。但不幸的是,直接這樣簡單的做法通常並不可行。
考慮最早期的行動,最早期的行動通常對整個軌跡有非常大的影響(如上圖,第一個動作變化可能會使得整條軌跡有很大的晃動),可能會影響所有後續的狀態和動作,因此關於它的梯度應該是非常大的;而在後期的行動,在整個序貫決策問題中關於總代價起到的作用就比較小了,因此關於它的梯度就小:從而,這個梯度會相當病態。這個參數敏感問題在射擊法 (shooting method) 中也同樣存在,在射擊法中我們同樣也不使用一階演算法而使用類似LQR的二階演算法,但是在這裡我們就不再有一個類似LQR的容易的二階方法來求解這個問題了:因為引入了含參的複雜的策略函數,這些參數在整個問題中將非常糾結,因此不再能用簡單的動態規劃方法求解了;我們會發現,其實這樣的求解序貫問題和訓練RNN非常相似,而訓練RNN的一個重要方法就是BPTT:因此,訓練這個問題所遇到的問題和BPTT中梯度爆炸/消失的問題本質上非常相似,但是RNN我們可以通過選擇類似LSTM的表達結構來使得梯度變好,而對於我們的問題來說,系統動態是外生的客觀存在的,我們只能去學習而並不能自主選擇。因此我們遇到的問題相對來說更棘手。
引導策略搜索 (GPS)
相比射擊法,搭配法 (collocation methods) 優化每個時刻的狀態或者同時優化狀態和行動,並使用約束來表示狀態轉移的關係。這樣的方法相對射擊法而言,就沒有那麼參數敏感了,但是困難在於它不是一個無約束優化問題了。有一個特點是,我們可以將策略引入優化問題中,作為約束條件,而不再成為射擊法一樣的計算圖的一環,便有了(這裡先假設都是確定性的)。這個表達形式還是同時優化狀態和行動的,也可以只去優化狀態,,這樣行動就是相鄰兩個狀態的產物。
為了讓這個問題容易求解,我們可以先把這個問題分離出來,一方面去優化,這是普通的軌跡優化問題,可以用之前講過的LQR等方法進行優化;同時又施以的約束。為了求解這樣的問題,我們使用增廣拉格朗日乘子法 (augmented Lagrangian method),非常類似於上一篇中的DGD演算法,只是求解問題時,拉格朗日函數變成了增廣拉格朗日函數,加了一個二次懲罰項,使得在嚴重違反約束條件時更傾向於控制約束條件以增加穩定性(這個函數最常見在ADMM演算法中被涉及到,這個演算法也算是ADMM的一個特例)。增廣拉格朗日演算法的總體框架還是和之前一樣,迭代進行以下步驟:
- 在給定拉格朗日乘子下,求解最優的。
- 求解。
- 拉格朗日乘子走一個梯度步。
我們記,則優化問題可以簡寫為。它的增廣拉格朗日函數可以寫成。這個函數有兩塊未知參數和一塊乘子,因此考慮形式上非常接近於ADMM的這樣一個演算法:
- 固定,使用諸如iLQR的方法優化軌跡。
- 固定,使用諸如SGD的方法優化策略參數。
- 拉格朗因為日乘子走一個梯度步。
其中第一步相當於重新構建一個代價函數,把後面部分包進去,然後執行iLQR。第二步注意到只和後兩項有關,而後兩項的形式簡單,且能完全按時間分解:這樣的好處是不需要再做反向傳播了,而稍作變形,本質上只是一個非常傳統的最小二乘監督學習問題,可以用一些SGD方法進行求解。因此整個過程是交替使用軌跡優化和監督學習,不需要再做BPTT。這樣的方法理論上需要凸性,但是如果沒有凸性的話有些時候實踐中效果也還可以。當然,要讓這樣的演算法在實際中可用,還需要做一些其他工作。
這樣的演算法屬於引導策略搜索 (Guided Policy Search, GPS),這樣的叫法主要因為策略訓練是跟著軌跡優化的結果而來的。有意思的是,該演算法一方面可以被理解成在約束下的軌跡優化演算法,同時因為第二步就是一個監督學習過程,另一方面可以被理解成對最優控制的模仿學習。這也建立起了基於模型的增強學習與模仿學習之間的關係。最優控制扮演了老師的角色,同時最優控制又需要去適應學習者(因為第一步軌跡優化是與給定策略有關的),避免一些學習者不能模仿的行動,屬於一種自適應學習。廣義的GPS演算法的一般結構是這樣的:
- 關於某些修改後的代價函數進行軌跡分布的優化。
- 關於某些監督學習的目標函數優化策略參數。
- 修改對偶變數。
本質上只是之前演算法的推廣泛化,第一步修改代價函數以加入增廣拉格朗日函數的兩項,第二步不需要考慮原始代價函數因為原始代價函數只與軌跡有關,而與策略參數無關。我們需要選擇的是軌跡分布的形式(或者乾脆確定性的,確定性形式比較容易,而隨機形式一般需要使用比較簡單的分布類如高斯分布去近似)、分布或者的優化演算法(第一步的軌跡優化演算法)、修改後的代價函數、用來訓練監督學習的目標函數。舉例來說,確定性形式其他部分就跟我們剛才所說一致,問題為,我們的第一步中修改的目標函數就是 。
我們有時候也會遇到需要從多條軌跡中學習策略的問題。以上圖為例,我們從小紅點出發,想走到小綠叉位置。然而從一個點出發的路徑容易規劃,但是這樣一條單一的路徑可能對策略學習不太好,所以我們想從多個不同的出發點開始學習策略以提高策略的泛化能力。這樣的問題又可以被表述為,同時優化一組軌跡,減少它們的共同代價,並將它們限制在同一策略之下。這個時候GPS演算法的第一步只需要改成對所有的,關於進行軌跡優化:這一步其實可以並行完成,因為它們只與被固定下來的有關,而互相之間其實沒有聯繫。第二步需要把這些數據全部拿過來放在一起進行監督學習。Mordatch et al. (2015) 發表在NIPS上的文章"Interactive Control of Diverse Complex Characters with Neural Networks"就利用了這一併行(在多台機器上訓練,然後合起來)的約束下的軌跡優化的方法來訓練神經網路策略,在MuJoCo模擬器上完成了複雜生物(如類似蝙蝠翅膀,更複雜的如人形機器人的步態)的運動 (locomotion) 學習,可以做到向某一目標移動的實時控制。在訓練策略之外,這樣的介入策略的做法還提高了軌跡優化本身:策略的介入迫使行動成為狀態的函數,使得軌跡優化會做出周期性的穩定控制,而不僅僅是一個不穩定的只為了到達目標的控制。在這裡,不同的軌跡意味著不同的起點和終點。
對於隨機GPS問題,控制器從單一策略變成了一個策略分布。我們僅以最簡單的(局部)線性均值加高斯噪音的控制器為例,,這類形式比較容易求解。第一步優化,目標函數我們上一篇中在一個信賴域中擬合局部模型相似,。使用這樣的方法訓練策略,相當於在原來的結構上多出一塊訓練的部分。
首先第一步使用我們現在的線性-高斯控制器來運行機器人,以收集一些軌跡樣本;第二步去用這堆軌跡去擬合模型動態(一些回歸的方法),然後在信賴域中更新線性-高斯控制器。在信賴域中找新控制器的時候,我們同時使用上了用這堆軌跡數據訓練的神經網路策略。在機器人學的背景下,Levine et al. (2016) 等人投稿於JMLR的"End-to-End Training of Deep Visuomotor Policies"一文提供了一種端到端的策略訓練機器人做事情的方法。此時我們的神經網路不再訓練,而改為訓練,也就是以機器人的視覺圖像為一段,輸出直接為策略函數,這樣的端到端學習,下圖即為端到端的CNN結構。
因此我們的GPS問題變為了。我們使用局部模型進行(低維度的)軌跡優化作為老師來得到策略,但是我們在真正訓練神經網路的時候則把輸入替換為機器人看到的圖像,然後進行監督學習,重複這個過程。在訓練神經網路時候我們把輸入從狀態偷偷替換成了原始圖像,這樣的技巧叫做輸入重映射 (input remapping trick):在軌跡優化的時候我們採用狀態,而在訓練策略的時候我們使用圖像,這種方法有助於我們訓練從感測器(如攝像機)直接得到的高維輸入的策略。比如說在移動方塊的任務中,在訓練的時候,機器人可能可以通過某種方法知道木塊在哪裡(也就是知道狀態是什麼),但是在測試的時候則只能通過圖像來確定策略,這樣的方法就可以用上了。
PLATO演算法
在這一塊,我們介紹另一種使用模仿學習的方法。這個想法是基於之前我們提到的約束下的軌跡優化問題又可以理解為一種對最優控制的模仿學習。那麼說到模仿學習,那麼演算法就不只有一種了,在之前的模仿學習中我們就介紹過DAgger演算法,一個模仿最優控制的應用就是之前提到過的Guo et al. (2014) 使用MCTS來提供Atari遊戲樣本,並使用DAgger演算法來實現模仿學習MCTS策略。
最原始的DAgger存在一些問題。譬如該方法的第三步要求人工標註新樣本,這非常不自然的,因此我們使用某些如最優控制的方法讓計算機自動標註這些新樣本,算是得到了解決。DAgger的另一個很大的問題是我們在一開始需要通過人工數據來訓練一個策略,然後運行這個策略來得到數據。但是這個策略在一開始可能是非常糟糕的,我們只有在反覆增加數據之後才能緩解分布不匹配的問題,而分布不匹配問題在一開始非常嚴重,甚至是災難性的(如駕車)。如果我們能用一些基於模型的增強學習演算法來「更好地」運行這些策略,使得安全係數提高,那麼不失為一件好事。
Kahn et al. (2016) 在"PLATO: Policy Learning using Adaptive Trajectory Optimization"提出的PLATO演算法正為解決這個問題而存在。該演算法將MPC思想引入到DAgger演算法中,而MPC的每步重新規劃正是為了克服誤差的。DAgger演算法的第二步嘗試執行監督學習訓練出來的來獲取數據集,就是我們學出來什麼策略就運行什麼策略,來克服分布不匹配問題;而事實上PLATO演算法告訴我們,我們可以稍微做一點妥協,且同樣也能得到收斂性保證:我們嘗試使用一個近似的策略,而這個策略出自使用LQR來求出,和之前一樣,結果是一個線性均值的高斯分布。譬如在駕車過程中,如果發生碰撞就會得到一個很高的代價,這樣的策略就會以降低代價函數為目標,同時也保證新策略不與就策略差別過大。我們在每一步中執行這樣的新策略作為校正,均衡長期代價和與當前策略的接近程度。注意到,我們的策略在每一步最小化的是長期的期望代價和當前階段的KL散度(兩者的一種權衡),因此它實際想做到的是做出一個不背離當前階段策略太遠的長期期望代價最低的決策。因此,我們將該演算法結合MPC進行使用,在每一步就需要重新規劃。
在這裡,我們和前面GPS中所提到的一樣,使用了輸入重映射的技巧,控制和 之間的KL散度,這是因為我們學到的策略可能只是關於觀測到的圖像,而我們實際發生的控制策略則需要根據狀態得到。PLATO演算法想做到的是,在訓練階段,我們可以有一些外部的觀察者來給出車輛的狀態信息,使相對來說比較聰明,以避免很多不必要的損失;但是還是要根據原始的感測器等信息來學的,這個可能比較難學,但是我們在真實測試環境中還是要靠。我們知道觀測是由狀態決定的,但是我們的模型是用來預測未來的狀態的,如果我們有模型的話我們可以知道,但是觀測的分布是不知道且極難的:相對預測下一幀圖像而言,我們更容易弄清楚下一個狀態是什麼。因此我們也不是對未來的觀測做規劃,而是對未來的狀態做規劃。我們知道下一階段的狀態是什麼,但是不知道下一幀觀察是什麼:因此我們執行一步操作後,我們就能得到下一階段的觀測,然後重新規劃,進行這樣的循環。
這樣一個訓練四旋翼躲避障礙物的任務中,在訓練過程中,四旋翼被監視器等設備所控制(或者使用激光測距儀等),因此它能很好地得到自己的狀態進行重新規劃,同時也使用輸入重映射技巧,端到端地訓練直接的從觀測到行動的策略;在實際測試中,則使用原始觀測圖像。總體來說,這種DAgger的變種演算法中,我們代價函數中的使得我們能去學習改進策略,直到最後變成一個完全在線的行為,這意味著分布不匹配問題得到了解決;使得我們能避免高代價(如碰撞損毀),即便我們的策略和原始策略有差異,哪怕產生分布不匹配的問題,我們也不想產生太高的代價。
一些總結
在本篇中,我們首先提到可以使用反向傳播的方法訓練策略,但是由於梯度爆炸/消失等問題效果不佳。接著我們通過將策略作為約束條件來進行搭配法的方式,使得基於模型的增強學習非常像對最優控制(軌跡優化等)的模仿學習,並具體講了DAgger類演算法和GPS演算法。DAgger演算法不需要一個能自適應策略變化的專家,因此如果我們有一個很難去修改目標函數等以適應策略的規劃演算法的話,DAgger是一個很好的選擇。但是DAgger也有自己的假定,它假設我們的學習者可以學到一個策略,使得和專家行為之間的差距是可以被控制在一個很小的範圍之內的,也就是說假設不存在學習者怎麼都學不會的情形。事實上,這樣差距不可控的情形是存在的,如在部分觀測的問題中。一個極端的例子是在駕車時不給車任何觀測信息,也有可能我們的策略簇根本無法學會專家行為。而GPS演算法則需要專家去適應學習者,也需要修改軌跡優化演算法來加入策略的損失信息,但是正因如此,專家時刻跟著學習者走,它不需要控制差距的範圍。
我們之所以想去模仿最優控制,主要是因為這樣做相對比較穩定且好用:我們現在已經能把監督學習演算法做得很好了,最優控制演算法通常來說也效果不錯,因此兩者結合通常也可以期望能有不錯的結果。我們可以使用輸入重映射的技巧,在做最優控制時候使用低維度的狀態信息,而在訓練策略時候可以引入高維觀測信息。它也能克服直接做反向傳播方法的諸多困難。此外,這樣的做法通常樣本利用率高,且對於實際物理系統可行。
我們對迄今為止討論的兩大類基於模型的增強學習演算法進行總結。第一類是不引入策略,光學習模型並使用模型進行規劃。這類方法迭代逐漸收集數據來克服分布不匹配的問題,同時我們也可以使用MPC的方法在每一步進行重新規劃來克服模型誤差帶來的影響。第二類更先進點的演算法是引入並學習策略。當然我們可以使用反向傳播的方法來訓練策略函數,這類演算法的代表是使用高斯過程匹配兩階矩的PILCO,相對簡單但是不穩定。更通用的方法是模仿最優控制,可以像GPS一樣做約束下的最優化,也可以使用DAgger類的演算法諸如PLATO。還有一類沒有提及的方法是Dyna方法,是介於有模型方法和無模型方法之間的混合方法:大意如訓練一個模型(神經網路)作為模擬器來生成樣本,但是使用無模型的方法進行學習。如果我們已經有了一個無模型的演算法,但是苦於數據不足的話,是個不錯的選擇。
當然,基於模型的增強學習演算法也有局限性。首先顧名思義,我們必須要有某種模型,但不見得總能得到某種模型:有的時候模型簡單,但有的時候就很複雜;而且有時候學好模型比學好策略更難(模型複雜但策略不複雜)。學習一個模型需要很多時間和數據,而且比無模型的方法求解計算代價更高。雖然基於模型的方法通常需要的數據量較少也能得到一個還可以的控制,但也取決於學習模型和策略哪個更容易。速度和表達力通常需要有一個權衡:有時候一個表達能力很強的模型(如神經網路)速度很慢(取決於具體問題),有時候一個速度較快的模型(如線性模型)去處理非常複雜動態系統的表達力不夠。同時,基於模型的增強學習演算法需要引入很多額外的假設,這在無模型演算法中通常沒有。如需要認為(局部某種意義上的)可線性化或者連續,這個在很多真實物理系統還是可以的,但是對一些離散系統(如Atari遊戲)就不適用了;尤其是對於線性局部模型,需要能夠重置系統以在同一狀態下多次嘗試,雖然有些無模型的方法也需要這個假設,但是通常在在線處理就夠好了;在有些模型(如GP類全局模型)中,需要假設光滑性,不能不可微;等等。
我們也對基於模型的方法和無模型的方法進行綜合比較。因為要進行增強學習,我們必須要收集數據,要麼是在廉價的模擬器上,要麼是在昂貴的真實物理系統,所以首先比較樣本效率。通常樣本效率最低的是不基於梯度的演算法(如NES (Natural Evolution Strategies)、CMA-ES等),這類演算法是無模型的演算法,且不計算神經網路的梯度,但依賴於隨機優化。完全在線的演算法(如A3C演算法)雖然比前者要好一些但是樣本效率還是較低,這類演算法在線學習,不使用基於策略的回放緩衝池,依賴大規模的並行。策略梯度法(如TRPO等)的樣本效率較前者再進一步,雖然也是在線但是使用批量處理的方法提高效率。樣本效率更好一些是基於回放緩衝池的值函數方法(如Q學習、DDPG、NAF等),這類方法是離線的。基於模型的深度增強學習演算法(如GPS)和基於模型的「淺度」增強學習演算法(如PILCO,不使用深度神經網路)則遞進提高了樣本效率,但在這塊也意味著引入了越來越嚴格的假設。這邊差不多每一級基本上是樣本效率差了10倍。Salimans et al. (2017) 的"Evolution Strategies as a Scalable Alternative to Reinforcement Learning"一文說明cheetah任務中進化演算法樣本效率比完全在線的演算法低十幾倍。Wang et al. (2017) 的"Sample Efficient Actor-Critic with Experience Replay"一文訓練A3C演算法約需一億步(完全真實時間15天)。Schulman et al. (2016) 使用TRPO+GAE方法約需一千萬步(完全真實時間1.5天),十倍的效率提升。Gu et al. (2016) 的"Continuous Deep Q-Learning with Model-based Acceleration" 使用DDPG方法(完全真實時間3小時)達到十倍的效率提升,使用NAF完全真實時間2.5小時。到了基於模型的增強學習,計算的時間可能比數據收集時間更多,因此瓶頸重點轉移到了計算。Chebotar et al. (2017) 的"Combining Model-Based and Model-Free Updates for Trajectory-Centric Reinforcement Learning"一文體現了對於真實控制問題GPS比DDPG有10倍的樣本效率提升。對於淺層方法,效率提升大約也是10倍,但是相對來說問題更簡單了。注意到有很多時候我們不能只看真實時間,模擬器可能非常快,因此如果我們能並行得到很多計算資源,那麼可能樣本效率低的演算法反而更快,都是一些權衡。
最後我們來討論如何根據問題選擇合適的增強學習演算法。最重要的問題可能是我們是否是從模擬器中學習,因為這決定了演算法樣本效率的重要性。如果是的話,我們要看模擬成本是不是相對訓練成本是可以忽略不計的(決定樣本效率有多不重要):如果是,我們會考慮樣本效率較低的演算法如策略梯度法TRPO/PPO,和完全在線的演算法如A3C,這樣實際運行時間可能較少,而且如策略梯度法可能更容易調參;如果模擬成本不低,那麼我們可能希望使用如Q學習/DDPG/NAF的基於值函數的方法來提高樣本利用率。值得一提的是,如果使用模擬器,另一個問題是我們某種意義上可以用模擬器來算出梯度,哪怕不能直接得到也可以得到一個數值解(尤其是如果我們在求解連續問題)我們可能不是在需要無模型的演算法,而是需要MCTS或者軌跡優化這樣的方法;也並不總是這樣,有時如策略梯度法的無模型方法可能比這些規劃演算法要效果好,但無論如何是值得討論的。回到我們不使用模擬器的情形,此時樣本效率可能很重要,取決於我們有多少時間(或者能否自動收集數據,是否需要在工作時有人監督)。如果我們沒什麼時間,那麼可能會傾向於諸如GPS的基於模型的演算法,此時對模型的選擇和假設很重要;如果我們時間還是很充裕的,那麼可以使用可能更有效的值函數法。
推薦閱讀:
※機器學習中,序列問題是否都能轉變為回歸或者分類問題?
※對比全球,中國人工智慧技術在近兩年有什麼大的進展?
※強化學習中,off policy和on policy方法有優劣之分嗎?
※如何看待DeepMind發布升級版阿爾法狗:AlphaGo Zero?
※學習強化學習需要哪些數學基礎?我學習神經網路基本就是複習了線性代數,微積分,那麼RL該學什麼呢?
TAG:强化学习ReinforcementLearning | 人工智能 | 最优控制 |