強化學習(十七) 基於模型的強化學習與Dyna演算法框架

劉建平Pinard發表於2019-02-15

    在前面我們討論了基於價值的強化學習(Value Based RL)和基於策略的強化學習模型(Policy Based RL),本篇我們討論最後一種強化學習流派,基於模型的強化學習(Model Based RL),以及基於模型的強化學習演算法框架Dyna。

    本篇主要參考了UCL強化學習課程的第8講和Dyna-2的論文

 1. 基於模型的強化學習簡介

    基於價值的強化學習模型和基於策略的強化學習模型都不是基於模型的,它們從價值函式,策略函式中直接去學習,不用學習環境的狀態轉化概率模型,即在狀態$s$下采取動作$a$,轉到下一個狀態$s'$的概率$P_{ss'}^a$。

    而基於模型的強化學習則會嘗試從環境的模型去學習,一般是下面兩個相互獨立的模型:一個是狀態轉化預測模型,輸入當前狀態$s$和動作$a$,預測下一個狀態$s'$。另一個是獎勵預測模型,輸入當前狀態$s$和動作$a$,預測環境的獎勵$r$。即模型可以描述為下面兩個式子:$$S_{t+1} \sim P(S_{t+1}|S_t,A_t)$$$$R_{t+1} \sim R(R_{t+1}|S_t,A_t)$$

    如果模型$P,R$可以準確的描述真正的環境的轉化模型,那麼我們就可以基於模型來預測,當有一個新的狀態$S$和動作$A$到來時,我們可以直接基於模型預測得到新的狀態和動作獎勵,不需要和環境互動。當然如果我們的模型不好,那麼基於模型預測的新狀態和動作獎勵可能錯的離譜。

    從上面的描述我們可以看出基於模型的強化學習和不基於模型的強化學習的主要區別:即基於模型的強化學習是從模型中學習,而不基於模型的強化學習是從和環境互動的經歷去學習。

    下面這張圖描述了基於模型的強化學習的思路:

 

2. 基於模型的強化學習演算法訓練流程

    這裡我們看看基於模型的強化學習演算法訓練流程,其流程和我們監督學習演算法是非常類似的。

    假設訓練資料是若干組這樣的經歷:$$S_1,A_1,R_2,S_2,A_2,R_2,...,S_T$$

    對於每組經歷,我們可以將其轉化為$T-1$組訓練樣本,即:$$S_1,A_1 \to S_2,\;S_1,A_1 \to R_2$$$$S_2,A_2 \to S_3,\;S_2,A_2 \to R_3$$$$......$$$$S_{T-1},A_{T-1} \to S_T,\;S_{T_1},A_{T-1} \to R_T$$

    右邊的訓練樣本一起組成了一個分類模型或密度估計模型,輸入狀態和動作,輸出下一個狀態。 右邊的訓練樣本一起組成了一個迴歸模型訓練集,輸入狀態和動作,輸出動作獎勵值。

    至此我們的強化學習求解過程和傳統的監督學習演算法沒有太多區別了,可以使用傳統的監督學習演算法來求解這兩個模型。

    當然還可以更簡單,即通過對訓練樣本進行查表法進行統計,直接得到$P(S_{t+1}|S_t,A_t)$的概率和$R(R_{t+1}|S_t,A_t)$的平均值,這樣就可以直接預測。比使用模型更簡單。

    此外,還有其他的方法可以用來得到$P(S_{t+1}|S_t,A_t)$和$R(R_{t+1}|S_t,A_t)$,這個我們後面再講。

    雖然基於模型的強化學習思路很清晰,而且還有不要和環境持續互動優化的優點,但是用於實際產品還是有很多差距的。主要是我們的模型絕大多數時候不能準確的描述真正的環境的轉化模型,那麼使用基於模型的強化學習演算法得到的解大多數時候也不是很實用。那麼是不是基於模型的強化學習就不能用了呢?也不是,我們可以將基於模型的強化學習和不基於模型的強化學習集合起來,取長補短,這樣做最常見的就是Dyna演算法框架。

3. Dyna演算法框架

    Dyna演算法框架並不是一個具體的強化學習演算法,而是一類演算法框架的總稱。Dyna將基於模型的強化學習和不基於模型的強化學習集合起來,既從模型中學習,也從和環境互動的經歷去學習,從而更新價值函式和(或)策略函式。如果用和第一節類似的圖,可以表示如下圖,和第一節的圖相比,多了一個“Direct RL“的箭頭,這正是不基於模型的強化學習的思路。

    

     Dyna演算法框架和不同的具體的不基於模型的強化學習一起,可以得到具體的不同演算法。如果我們使用基於價值函式的Q-Learning,那麼我們就得到了Dyna-Q演算法。我們基於Dyna-Q來看看Dyna演算法框架的一般流程.

4. Dyna-Q演算法流程

    這裡我們給出基於價值函式的Dyna-Q演算法的概要流程。假設模型使用的是查表法。

    1.  初始化任意一個狀態$s$,和任意一個動作$a$對應的狀態價值$Q(s,a)$, 初始化獎勵模型$R(s,a)$和狀態模型$P(s,a)$

    2. for i=1 to 最大迭代次數T:

      a) S $\gets$ current state

      b) A $\gets$ $\epsilon-greedy(S,Q)$

      c) 執行動作$A$,得到新狀態$S'$和獎勵$R$

      d) 使用Q-Learning更新價值函式:$Q(S,A) =Q(S,A) + \alpha[R +\gamma\max_aQ(S',a) -Q(S,A)]$

      e) 使用$S,A,S'$更新狀態模型$P(s,a)$,使用$S,A,R$更新狀態模型$R(s,a)$

      f)  for j=1 to 最大次數n:

        i)  隨機選擇一個之前出現過的狀態$S$, 在狀態$S$上出現過的動作中隨機選擇一個動作$A$

        ii) 基於模型$P(S,A)$得到$S'$, 基於模型$R(S,A)$得到$R$

        iii) 使用Q-Learning更新價值函式:$Q(S,A) =Q(S,A) + \alpha[R +\gamma\max_aQ(S',a) -Q(S,A)]$

 

    從上面的流程可以看出,Dyna框架在每個迭代輪中,會先和環境互動,並更新價值函式和(或)策略函式,接著進行n次模型的預測,同樣更新價值函式和(或)策略函式。這樣同時利用上了和環境互動的經歷以及模型的預測。

5. Dyna-2演算法框架

    在Dyna演算法框架的基礎上後來又發展出了Dyna-2演算法框架。和Dyna相比,Dyna-2將和和環境互動的經歷以及模型的預測這兩部分使用進行了分離。還是以Q函式為例,Dyna-2將記憶分為永久性記憶(permanent memory)和瞬時記憶(transient memory), 其中永久性記憶利用實際的經驗來更新,瞬時記憶利用模型模擬經驗來更新。

    永久性記憶的Q函式定義為:$$Q(S,A) = \phi(S,A)^T\theta$$

    瞬時記憶的Q函式定義為:$$Q'(S,A) = \overline{\phi}(S,A)^T\overline{\theta }$$

    組合起來後記憶的Q函式定義為:$$\overline{Q}(S,A) = \phi(S,A)^T\theta + \overline{\phi}(S,A)^T\overline{\theta }$$

    Dyna-2的基本思想是在選擇實際的執行動作前,智慧體先執行一遍從當前狀態開始的基於模型的模擬,該模擬將模擬完整的軌跡,以便評估當前的動作值函式。智慧體會根據模擬得到的動作值函式加上實際經驗得到的值函式共同選擇實際要執行的動作。價值函式的更新方式類似於$SARSA(\lambda)$

    以下是Dyna-2的演算法流程:

6. 基於模型的強化學習總結

    基於模型的強化學習一般不單獨使用,而是和不基於模型的強化學習結合起來,因此使用Dyna演算法框架是常用的做法。對於模型部分,我們可以用查表法和監督學習法等方法,預測或者取樣得到模擬的經歷。而對於非模型部分,使用前面的Q-Learning系列的價值函式近似,或者基於Actor-Critic的策略函式的近似都是可以的。

    除了Dyna演算法框架,我們還可以使用基於模擬的搜尋(simulation-based search)來結合基於模型的強化學習和不基於模型的強化學習,並求解問題。這部分我們在後面再討論。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com) 

相關文章