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