在前面咱們討論了基於價值的強化學習(Value Based RL)和基於策略的強化學習模型(Policy Based RL),本篇咱們討論最後一種強化學習流派,基於模型的強化學習(Model Based RL),以及基於模型的強化學習算法框架Dyna。web
本篇主要參考了UCL強化學習課程的第8講和Dyna-2的論文。算法
基於價值的強化學習模型和基於策略的強化學習模型都不是基於模型的,它們從價值函數,策略函數中直接去學習,不用學習環境的狀態轉化機率模型,即在狀態$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$到來時,咱們能夠直接基於模型預測獲得新的狀態和動做獎勵,不須要和環境交互。固然若是咱們的模型很差,那麼基於模型預測的新狀態和動做獎勵可能錯的離譜。學習
從上面的描述咱們能夠看出基於模型的強化學習和不基於模型的強化學習的主要區別:即基於模型的強化學習是從模型中學習,而不基於模型的強化學習是從和環境交互的經歷去學習。優化
下面這張圖描述了基於模型的強化學習的思路:3d
這裏咱們看看基於模型的強化學習算法訓練流程,其流程和咱們監督學習算法是很是相似的。blog
假設訓練數據是若干組這樣的經歷:$$S_1,A_1,R_2,S_2,A_2,R_2,...,S_T$$get
對於每組經歷,咱們能夠將其轉化爲$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算法框架。
Dyna算法框架並非一個具體的強化學習算法,而是一類算法框架的總稱。Dyna將基於模型的強化學習和不基於模型的強化學習集合起來,既從模型中學習,也從和環境交互的經歷去學習,從而更新價值函數和(或)策略函數。若是用和第一節相似的圖,能夠表示以下圖,和第一節的圖相比,多了一個「Direct RL「的箭頭,這正是不基於模型的強化學習的思路。
Dyna算法框架和不一樣的具體的不基於模型的強化學習一塊兒,能夠獲得具體的不一樣算法。若是咱們使用基於價值函數的Q-Learning,那麼咱們就獲得了Dyna-Q算法。咱們基於Dyna-Q來看看Dyna算法框架的通常流程.
這裏咱們給出基於價值函數的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次模型的預測,一樣更新價值函數和(或)策略函數。這樣同時利用上了和環境交互的經歷以及模型的預測。
在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的算法流程:
基於模型的強化學習通常不單獨使用,而是和不基於模型的強化學習結合起來,所以使用Dyna算法框架是經常使用的作法。對於模型部分,咱們能夠用查表法和監督學習法等方法,預測或者採樣獲得模擬的經歷。而對於非模型部分,使用前面的Q-Learning系列的價值函數近似,或者基於Actor-Critic的策略函數的近似都是能夠的。
除了Dyna算法框架,咱們還可使用基於模擬的搜索(simulation-based search)來結合基於模型的強化學習和不基於模型的強化學習,並求解問題。這部分咱們在後面再討論。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)