反向強化學習3——求解線性規劃

反向強化學習3——求解線性規劃

來自專欄無痛的機器學習7 人贊了文章

本文收錄在無痛的機器學習第二季目錄中。

線性規劃求解過程

在上一節我們介紹了反向強化學習的公式形式,接下來我們就要完成求解了。這個問題本質上是一個線性規劃的問題,但是目前的公式形式還不是一個易於求解的形式,於是我們要把公式進行轉變,採用變數替換的方式,將問題變換成標準的線性規劃形式。這裡涉及兩個變數替換:

t leftarrow mathrm{min}_a{(pmb P_{s,pi^*(s)} -pmb P_{s,a})(pmb I-gamma pmb P_{pi^*})^{-1}pmb R}?

? u leftarrow |pmb R|

於是可以得到:

max{sum_{i=1}^{|S|} {t_i - lambda u_i}} ?

s.t.

(pmb P_{s, pi^*(s)}(i) - pmb P_{s,a}(i))(pmb I - gamma pmb P_{pi^*})^{-1}pmb R geqslant t_i ?,? forall a in pmb A - pi^*(s),i=1,…|pmb S|

? (pmb P_{s, pi^*(s)}(i) - pmb P_{s,a}(i))(pmb I - gamma pmb P_{pi^*})^{-1}pmb R geqslant 0 ,? forall a in pmb A - pi^*(s),i=1,…,|pmb S|

? -u leqslant pmb R leqslant u

?  |pmb R_i| leqslant pmb R_{max}

當我們將公式變成這個形式後,就可以進行求解了。我們可以從項目github.com/MatthewJA/In中找到關於這個問題的求解,具體的實現在irl/linear_irl.py中的irl函數,下面就來看看它是如何進行求解的。

代碼中使用了cvxopt這個庫,它實現常見的凸優化演算法,其中也包括線性規劃的求解方法。想要使用這個演算法庫進行求解,我們需要將問題整理成下面的形式:

? mathrm{max} 	ext{ } c^mathrm{T}x

s.t.

? pmb Ax leqslant b

其中A?為矩陣,b、c?為向量。最終我們將?A、b?、c?三部分輸入到函數中,就可以利用演算法庫中的線性規劃演算法進行求解。

那麼,上面的公式該怎麼變成這個樣子呢?我們可以看到,為了方便計算,此時我們共有三組變數R?,T?和U?,三組變數的長度都是? |pmb S| ,所以我們的目標函數就變成了:

? mathrm{max}[0…0, 1,…1, -lambda,…,-lambda]^mathrm{T} [pmb R, pmb T, pmb U]

接下來按照這樣的形式,我們可以得到下面的條件約束,其中每一個表達式的維度都是(? pmb N,|pmb S| ),每個表達式的N?有所不同,但是 |pmb S| ?是一樣的:

[-(pmb P_{s, pi^*(s)}(i) - pmb P_{s,a}(i))(pmb I - gamma pmb P_{pi^*})^{-1}, -1, 0]^mathrm{T} [pmb R,pmb T,pmb U] leqslant 0

[-(pmb P_{s, pi^*(s)}(i) - pmb P_{s,a}(i))(pmb I - gamma pmb P_{pi^*})^{-1}, 0, 0]^mathrm{T} [pmb R,pmb T,pmb U] leqslant 0

[-1, 0, -1]^mathrm{T} [pmb R,pmb T,pmb U] leqslant 0

[1,0,-1]^mathrm{T} [pmb R,pmb T,pmb U] leqslant 0

[-1,0,0]^mathrm{T} [pmb R,pmb T,pmb U] leqslant pmb R_{mathrm{max}}

[1,0,0]^mathrm{T} [pmb R,pmb T,pmb U] leqslant pmb R_{mathrm{max}}

?上面的公式還是不夠詳細,更為更詳細的內容如圖所示。

按照圖14-1將數據組織好,我們就可以求解得到回報向量了。

實際案例

看完了上面的演算法,我們來看一個具體的例子,這個例子是Grid World。Grid World是一個很簡單的問題,我們給定一個?N* N的棋盤格,這個棋盤格上的每一個格子都可以作為落腳地。如圖所示,我們可以用5 * 5?的格子舉例子。

站在棋盤的格子上會產生不同的效果,棋盤格的最右下方是一個會得到獎勵的格子,站在上面會獲得1分,遊戲結束。站在其他的格子上不會獲得獎勵,遊戲仍會繼續。

玩家在初始狀態下會隨機站在某個格子上,接下來的每一個時刻,玩家都可以做出決定,選擇上下左右4個方向行進。但是世事無常,有時我們並不能到達我們想去的地方,遊戲中存在著一股「妖風」,它會以一定的概率觸發。觸發後玩家的行進將不受控制,會任意選擇一個方向前進,如果撞到棋盤的邊緣,玩家將被阻擋在那裡,停止前進。

整個遊戲的規則並不複雜,站在我們的角度看,因為右下角是得分點,因此我們只要不停地向那個方向前進就可以了;如果已經到達了那裡,那麼保持停留就可以。

如果我們換一個思路:我們並不知道遊戲的得分規則,只能看到一個老玩家的操作(這樣簡單的遊戲,相信老玩家也不會太老)。我們能不能通過老玩家的操作推斷出得分規則呢?這就是基於Grid World的反向強化學習問題。

由於這個問題並不複雜,我們可以用表格的方式表示問題中的策略、回報和價值向量,運用上面的演算法,我們可以得到最終的結果,如圖所示。

從圖的結果可以看出,我們復原的這個?的Reward結果和真實結果相差很小,或者說這點差距並不能阻礙我們選出正確的策略。這樣我們就完成了對這個問題的介紹。


推薦閱讀:

【學習筆記】斯坦福大學公開課:cs229 Part 6 Learning Theory【上】
self-attention! A Structured Self-attentive Sentence Embedding
人工智慧-深度學習數據集補充

TAG:深度學習DeepLearning | 機器學習 | 強化學習ReinforcementLearning |