序列二次规划_最优控制与规划
(以下內(nèi)容均來源于 CS 294 Lecture 8)
首先我們假設環(huán)境是確定性的,即在某個狀態(tài)執(zhí)行某個動作之后,轉(zhuǎn)移到的下一個狀態(tài)是確定的,不存在任何隨機性。而在這種情況下,我們想做的是在環(huán)境給了我們一個初始狀態(tài)的條件下,根據(jù)我們需要完成的任務以及環(huán)境模型,直接得出從初始狀態(tài)到任務完成狀態(tài)中間最優(yōu)的動作序列。因為環(huán)境是確定的,而我們又已知環(huán)境模型,因而以上想法是自然且可行的。下圖展示了我們想做的事情:
現(xiàn)在我們將以上問題抽象成一個正式的優(yōu)化問題:
其中
就代表環(huán)境模型。但是一旦環(huán)境不再是確定的,即正在某個狀態(tài)執(zhí)行某個動作之后,轉(zhuǎn)移到的下一個狀態(tài)是從一個狀態(tài)分布中隨機采樣的。對于這種情況,上述的優(yōu)化問題就會轉(zhuǎn)變?yōu)樽畲蠡缦滦问降钠谕?#xff1a;但是在隨機環(huán)境下,解決與確定環(huán)境的類似的如上優(yōu)化問題并不能得到與確定環(huán)境一樣的最優(yōu)解。原因在于我們只接受環(huán)境反饋回來的初始狀態(tài),接著便憑借著我們掌握的環(huán)境模型在腦海中進行規(guī)劃。這種方法在確定環(huán)境下沒有任何問題,但在隨機環(huán)境下,智能體實際會轉(zhuǎn)移到的狀態(tài)可能并不符合我們的預期,因為它是從一個條件狀態(tài)分布中隨機采樣的。而一旦從某一個狀態(tài)開始與我們的預期產(chǎn)生偏差,那么后續(xù)的所有狀態(tài)都會產(chǎn)生偏差,而我們設想的最優(yōu)動作序列便不是最優(yōu)了。從優(yōu)化函數(shù)的角度來看,我們優(yōu)化的只是一個期望值,而不是某一次隨機采樣的值。
我們把上述解決問題的方法叫做開環(huán)方法,與之對應的叫做閉環(huán)方法。那么這個“環(huán)”具體是指什么呢?具體示意圖如下:
開環(huán)方法是只在最開始時接收環(huán)境反饋的初始狀態(tài),然后開始規(guī)劃從開始到任務完成的過程中所經(jīng)歷的所有狀態(tài)對應的最優(yōu)動作,并不需要一個基于狀態(tài)產(chǎn)生動作的策略;反之,閉環(huán)方法在每一個時間步都會接收環(huán)境反饋的狀態(tài),然后利用一個根據(jù)狀態(tài)輸出動作的策略來產(chǎn)生一個動作。我們可以看出,對于一個隨機環(huán)境,閉環(huán)方法顯然比開環(huán)方法更具優(yōu)勢,因為其可以根據(jù)所處的狀態(tài)隨時調(diào)整自己的動作。
但接下來我們還是首先假定一個確定性的環(huán)境,因而采用開環(huán)方法來解決上述問題。下面將介紹三種優(yōu)化方法:隨機優(yōu)化方法、蒙特卡洛樹搜索法以及軌跡優(yōu)化方法。
隨機優(yōu)化方法
對于隨機優(yōu)化方法來講,上述優(yōu)化問題可以簡化為如下等價優(yōu)化問題:
隨機優(yōu)化方法完全不關系優(yōu)化目標的特殊結(jié)構等信息,而是把任何優(yōu)化問題都當作上圖右半邊這樣的一般優(yōu)化問題。
隨即發(fā)射方法
最簡單的隨機優(yōu)化方法就是隨機瞎猜,即隨機選擇一個動作序列,然后評估其累積的代價。如上過程不斷進行,最后選擇一個累積代價最小的動作序列作為上述優(yōu)化問題的最優(yōu)解,因而這類方法也叫做“隨機發(fā)射方法”:
CMA算法
但是這種方法在相對高維的情況下效率會很低,因為搜索空間太大但是目標區(qū)域比較小?;仡櫼幌律鲜龇椒?#xff0c;我們可以在采樣分布上做些文章。假設第一次從一個均勻分布采樣一些動作序列之后,得到的累積代價分別為如下情況:
那么下一次我們可以不再繼續(xù)從一個均勻分布中采樣了,我們可以聚焦于累積代價較小(累積回報較大)的區(qū)域,然后估計那個區(qū)域的分布,在這里我們假設分布是一個高斯分布:
接下來的采樣我們就從這個新的分布中進行采樣:
然后在下一次采樣之前,我們再次聚焦于性能更好的區(qū)域然后估計其分布:
就這樣不斷迭代,直到滿足停止條件。以上方法就是Cross-Entropy Method(CEM)算法,其偽代碼如下:
該方法還有個進階版的算法叫做CMA-ES算法,后者可以看作是CMA算法帶動量的版本。CMA算法會直接舍棄之前采樣的數(shù)據(jù)點,但是CMA-ES算法會保留部分之前采樣的數(shù)據(jù)點的相關信息,用來指導后續(xù)的采樣。可以類比一下梯度下降法以及帶動量的梯度下降法。
總結(jié)
隨機優(yōu)化方法具有以下優(yōu)點:
- 并行化后效率極高
- 實現(xiàn)起來十分簡單
但是也存在如下不可避免地缺點:
- 極易受到維度災難的影響
- 只適用于開環(huán)情形
隨即優(yōu)化方法雖然可以同時適用于連續(xù)變量以及離散變量的情況,但不是專門為離散情況設計的。下面我們將介紹一種專門為離散動作空間設計的強大的優(yōu)化方法(嚴格來講叫做啟發(fā)式搜索算法):蒙特卡洛樹搜索MCTS方法。
蒙特卡洛樹搜索算法
MCTS方法本質(zhì)是一個搜索算法:
假設我們想要訓練一個智能體能夠自動去玩上面這個游戲(擊沉敵方潛水艇將會獲得分數(shù),但是潛水艇自身的氧氣儲存量是逐漸減少的,需要不時地去浮出水面補充氧氣。被敵方潛水艇撞上會損失生命值,游戲目標就是獲得盡可能多的分數(shù))。一個簡單的暴力搜索算法可能會包含上圖右邊的過程,假設一段最優(yōu)動作序列僅僅包含十個時間步,每個狀態(tài)下僅僅包含兩個可能動作,那么最后一個時間步就包含1024個可能性。但對于大多數(shù)問題來說,十個時間步遠遠不足以完成目標,因而暴力搜索算法是不可行的。
那么蒙特卡洛算法是如何在不窮舉所有可能性直到到達終點的情況下對一個動作序列進行評估的呢?考慮潛水艇游戲,在潛水艇做出攻擊指令后,由于炮彈的運行需要時間,因而幾個時間步之后敵方潛水艇才會被擊沉從而受到獎勵,在潛水艇做出攻擊指令那個時間步是沒有任何獎勵的,因而智能體可能認為這個動作并不是一個優(yōu)秀的動作。對于以上情況,其實我們只需要在做出攻擊指令后,如果要評估這個動作的優(yōu)劣,“等待”幾個時間步 即可。蒙特卡洛樹搜索算法正是采用這種思想,同樣用上圖右邊的過程舉例,當動作執(zhí)行到第三層時,如何評估這四個動作序列的性能好壞呢?算法進行了某種“等待”,即從第三層開始,不再把樹進行完全的擴展了,而是采用一個隨機策略隨機執(zhí)行動作直到游戲結(jié)束或者到達某個設定的時間步。這就類似于在潛水艇游戲中,潛水艇在發(fā)出炮彈后,隨機執(zhí)行一些動作,直到炮彈擊中敵方潛水艇。
而蒙特卡洛算法正是通過這種評估方法來避免暴力搜索,具體來說,蒙特卡洛樹搜索算法會根據(jù)評估結(jié)果的好壞以及訪問次數(shù)來決定下一步應該搜索哪一條路徑:
可能以上描述有點難以理解,那么下面我們過一遍蒙特卡洛樹搜索方法的搜索過程。我們首先給出算法的執(zhí)行步驟:
首先我們處于一個初始狀態(tài):
然后我們進行算法第一步,根據(jù)一個“樹策略”找到一個葉子節(jié)點,注意這里找到一個葉節(jié)點的意思是找到一個**新的*葉節(jié)點。樹策略的具體形式如下:
根據(jù)以上策略,由于初始狀態(tài)沒有被完全擴展,因而隨機選擇一個動作,并執(zhí)行第二步使用默認策略來評估執(zhí)行這個動作的好壞,這里默認策略使用的是隨機采樣策略:
假設評估結(jié)果如下:
這里Q代表環(huán)境定義的回報,N代表訪問這個狀態(tài)的次數(shù)。**這里值得注意的是,N記錄的并不是某個具體的狀態(tài)的訪問次數(shù),而是執(zhí)行某個動作的次數(shù),執(zhí)行這個動作后在隨機環(huán)境下可能轉(zhuǎn)移到很多個不同的狀態(tài),但在樹中均顯示為一個節(jié)點。**評估完之后,我們需要更新根節(jié)點到這個新加入的葉節(jié)點之間所有節(jié)點的Q值以及N值。由于這里兩者之間并沒有其他的節(jié)點,因而跳過這一步。然后以上過程開始循環(huán),我們再將狀態(tài)跳回到初始狀態(tài),遵循樹策略,找到下一個新的葉節(jié)點。由于初始狀態(tài)還是沒有擴展完畢,因此這一次執(zhí)行下一個未被執(zhí)行過的狀態(tài):
再采用默認策略對其進行評估,假設我們得到了以下結(jié)果:
由于根節(jié)點與新的葉節(jié)點之間的路徑并沒有其他節(jié)點,因而更新步驟略過。再次重復以上過程,將狀態(tài)跳回到初始狀態(tài),執(zhí)行樹策略找到一個新的葉節(jié)點。首先根據(jù)樹策略,初始狀態(tài)已經(jīng)被完全擴展開了(即所有可能的動作均已經(jīng)執(zhí)行過),這個時候我們根據(jù)樹策略中的公式計算每一條路徑的一個分數(shù)。從分數(shù)計算公式可以看出,這個分數(shù)是同時考慮動作的回報以及動作的執(zhí)行次數(shù),更加傾向于執(zhí)行被執(zhí)行次數(shù)少的回報高的動作。在這里,由于兩個動作被執(zhí)行次數(shù)均為1,因而我們選擇回報更高的第二個動作執(zhí)行,然后再根據(jù)樹策略(在沒有找到新的葉節(jié)點之前,循環(huán)執(zhí)行樹策略),第二層的狀態(tài)沒有被完全擴展,因而隨機選擇一個動作執(zhí)行:
依據(jù)默認策略進行評估:
注意,到了這一步,根節(jié)點到新的葉節(jié)點之間的路徑存在其他節(jié)點了,我們就要用最新的葉節(jié)點的評估值以及訪問次數(shù)加到這些中間節(jié)點的評估值以及訪問次數(shù)上:
再次重復上述過程,將狀態(tài)跳回到初始狀態(tài),調(diào)用樹策略,這時候根據(jù)分數(shù)計算公式,在假設一些超參數(shù)的情況下,我們假定這個時候更加側(cè)重于執(zhí)行被執(zhí)行次數(shù)更小的動作并評估:
然后再更新再跳回......
如果想詳細了解蒙特卡洛樹搜索算法的擴展以及應用,可以參考下面這篇綜述:
這里講一個比較有意思的案例:
其思想其實是將DAgger算法與MCTS算法進行結(jié)合。由于DAgger算法需要人工的不斷參與進行新數(shù)據(jù)的標注,以上案例將專家標注的過程用MCTS算法進行替代,學習一個MCTS的策略估計器:
那么為什么不直接使用MCTS算法呢?其實是基于以下兩點考慮的:
- 實時性要求較高的任務中MCTS太慢了
- 采用類似神經(jīng)網(wǎng)絡的策略估計器具有更好的泛化性
路徑優(yōu)化算法
讓我們再次回顧以下優(yōu)化問題:
直接丟棄掉以上優(yōu)化問題中的特殊結(jié)構顯然不是十分恰當?shù)?#xff0c;接下來讓我們回到一般解決以上優(yōu)化問題的思路。我們一看到以上問題,就會首先想到能不能利用類似梯度下降的方法呢?為了與最優(yōu)控制中路徑優(yōu)化算法的一般符號記法一致,我們將以上問題重寫為以下形式:
我們可以將約束部分放進優(yōu)化函數(shù)中從而將以上問題轉(zhuǎn)變?yōu)橐粋€無約束問題:
對于以上問題,只要我們知曉以下四項,即可根據(jù)鏈式法則得出其最優(yōu)解:
LQR算法
確定性環(huán)境
為了解決以上優(yōu)化問題,我們接下來將介紹一種路徑優(yōu)化算法LQR,此算法假設環(huán)境模型是線性的,并且代價函數(shù)是二次的:
為了解決這種特殊形式的以上優(yōu)化問題,我們采用動態(tài)規(guī)劃的思想,先找出最優(yōu)的最后一個時間步的動作。之所以這樣做,是因為我們可以發(fā)現(xiàn),以上連加項中只有最后一項是與最后一個時間步的動作相關的。如果我們首先解決第一個時間步的最優(yōu)動作,那么連加項的所有項都與第一個時間步的動作相關。接下來,我們把最后一項中連續(xù)的函數(shù)求值簡寫為
,注意這個值是未知的。進行了以上的準備工作后,求解最后一個時間步的最優(yōu)動作對應的優(yōu)化目標如下,我們把其記為:然后我們將線性項系數(shù)以及二次項系數(shù)展開:
然后,為了得出最優(yōu)動作,我們令這個優(yōu)化目標關于最后一個時間步動作的梯度等于0:
求解以上線性方程,可以得出最后一個時間步的最優(yōu)動作為:
將其進行簡單的轉(zhuǎn)化,我們可以看出,最后一個時間步的最優(yōu)動作是最后一個時間步狀態(tài)(現(xiàn)在還是未知項)的線性函數(shù)(以上關系適用于所有時間步):
其中:
由于最后一步的最優(yōu)動作完全可以用最后一步的狀態(tài)表示,我們可以得出最后一個時間步的最優(yōu)的Q值,這里我們將其記為V:
這里的Q值以及V值其實是和強化學習中的定義是一致的。接下來,我們將上式展開:
將上式合并同類項可得:
其中:
因而我們可以得到另一個關系,**最后一個時間步的V值(最優(yōu)Q值)是最后一個時間步狀態(tài)的二次函數(shù)(以上關系適用于所有時間步)。**進行到這里,我們已經(jīng)解出最后一個時間步的最優(yōu)動作了。接下來,我們要在此基礎上解出倒數(shù)第二個時間步的最優(yōu)動作。首先我們注意到,倒數(shù)第二個時間步的Q值函數(shù)可以記為:
將環(huán)境模型引入可將V值展開:
我們將展開后的V值代入倒數(shù)第二時間步的Q值函數(shù)中:
其中:
同樣,為了求出倒數(shù)第二個時間步的最優(yōu)動作,我們令相關梯度為零:
解得倒數(shù)第二個時間步的最優(yōu)動作為:
其中:
讓我們不斷地重復以上過程,直到第一個時間步。值得注意的是,由于每一時間步的最優(yōu)動作與那個時間步的狀態(tài)有關,但是狀態(tài)是未知的。
當整個過程回溯到初始時間步時,情況發(fā)生了變化,**初始狀態(tài)我們是已知的!**因而,我們就可以算法初始時間步的最優(yōu)動作。利用環(huán)境模型,我們就可以得知第二個時間步的狀態(tài),如此循環(huán)下去,我們就可以得知所有時間步的最優(yōu)動作:
以上就是整個LQR算法的執(zhí)行過程。
非確定性環(huán)境 (未完成)
對于非確定性環(huán)境,假設我們的環(huán)境模型如下:
那么LQR算法依舊是完全可行的。
iLQR算法
LQR算法由于假設環(huán)境模型以及代價函數(shù)是線性以及二次的,表達能力有限,對于更加復雜的任務顯然不能很好的估計。因而,解決這個問題的iLQR算法應運而生。其基本思想很簡單,既然線性以及二次函數(shù)不足以估計全局的真實函數(shù),那么估計局部的總是足夠的。因而我們可以對環(huán)境模型以及代價函數(shù)分別做一階以及二階的泰勒展開!:
那么我們的問題其實又轉(zhuǎn)變回了原始的LQR設定:
其中:
iLQR算法的具體框架如下:
**該算法之所以采用迭代的形式,是因為其需要不斷地用真實樣本來去”矯正“其對于環(huán)境模型以及代價函數(shù)的估計。**更嚴格來講,該算法之所以能夠達到很好的效果,是因為它和牛頓方法的本質(zhì)是一樣的(通過泰勒展示來估計一個復雜的非線性函數(shù)的局部特性):
而如果我們對環(huán)境模型估計時也進行二階泰勒展開:
那么我們的算法就變?yōu)槲⒎謩討B(tài)規(guī)劃算法(DDP)。但是在實際情況中,代價函數(shù)的形式一般比較簡單,因而進行二階泰勒展開代價不大。但是環(huán)境模型一般是十分復雜的,一階展開還好,一旦進行二階展開其復雜性將會大大增加。事實表明一階展開其實是足夠的。
但是以上算法還存在一個問題,考慮以下估計誤差:
對于這種情況,其實我們只要簡單的在原始iLQR算法中加一個line search過程即可:
最后我們看一個iLQR算法在實際情況應用的實例:
為了保證iLQR更加穩(wěn)定,這個工作采用了如下形式的改進:
即在每一步都進行一個完整的規(guī)劃,但是考慮到iLQR的估計誤差隨著時間會產(chǎn)生累積,因而每次只執(zhí)行規(guī)劃的第一步。
總結(jié)
以上是生活随笔為你收集整理的序列二次规划_最优控制与规划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017韩老师计算机网络,2017年计算
- 下一篇: java递归栈_java-66-用递归颠