机器学习(三十六)——Integrating Learning and Planning(2)
Integrating Learning and Planning(續)
Table Lookup Model
查表模型適用于MDP的P,R都為已知的情況。我們通過visit得到各狀態行為的轉移概率和獎勵,把這些數據存入表中,使用時直接檢索。狀態轉移概率和獎勵計算方法如下:
P^s,s′a=1N(s,a)∑t=1T1(St,At,St+1=s,a,s′)\hat{P}^a_{s,s'}=\frac{1}{N(s,a)}\sum_{t=1}^T 1(S_t,A_t,S_{t+1}=s,a,s')P^s,s′a?=N(s,a)1?t=1∑T?1(St?,At?,St+1?=s,a,s′)
R^sa=1N(s,a)∑t=1T1(St,At=s,a)Rt\hat{R}^a_{s}=\frac{1}{N(s,a)}\sum_{t=1}^T 1(S_t,A_t=s,a)R_tR^sa?=N(s,a)1?t=1∑T?1(St?,At?=s,a)Rt?
其中的N(s,a)N(s,a)N(s,a)表示state action pair<s,a><s,a><s,a>在visit中出現的次數。
這里也可以采用如下變種:
-
在每個time-step:t,記錄experience tuple:<St,At,Rt+1,St+1><S_t, A_t, R_{t+1}, S_{t+1}><St?,At?,Rt+1?,St+1?>。
-
從模型采樣構建虛擬經歷時,從tuples中隨機選擇符合<s,a,?,?><s,a,\cdot,\cdot><s,a,?,?>的一個tuple。
這種方法,不再以Episode為最小學習單位,而是以時間步(time-step)為單位,一次學習一個狀態轉換。
Planning with a Model
規劃的過程相當于求解一個MDP的過程,即給定一個模型Mη=<Pη,Rη>M_\eta = <P_\eta, R_\eta>Mη?=<Pη?,Rη?>,求解MDP<S,A,Pη,Rη><S, A, P_\eta, R_\eta><S,A,Pη?,Rη?>,找到基于該模型的最優價值函數或最優策略,也就是在給定的狀態s下確定最優的行為a。
我們可以使用之前介紹過的價值迭代,策略迭代方法;也可以使用樹搜索方法(Tree Search)。
Sample-Based Planning
Sample-Based Planning使用Model生成采樣數據,即一個time-step的虛擬經歷。
有了這些虛擬采樣,隨后使用model-free RL方法來學習得到價值或策略函數。
Planning with an Inaccurate Model
由于實際經歷的不足或者一些無法避免的缺陷,我們通過實際經歷學習得到的模型不可能是完美的模型,即:<Pη,Rη>=<P,R><P_\eta, R_\eta> = <P,R><Pη?,Rη?>=<P,R>
而model-based RL的性能取決于Model的準確度,如果Model不準確的話,往往只能得到一些次優解。
使用近似的模型解決MDP問題與使用價值函數或策略函數的近似表達來解決MDP問題并不沖突,他們是從不同的角度來近似求解MDP問題,有時候構建一個模型來近似求解MDP比構建一個近似的價值函數或策略函數要更加方便,這是model-based RL的可取之處。
同時由于個體經歷的更新,模型處在一個動態變化的過程,當利用早期經歷構建的模型后來被認為存在很大錯誤,不適用于當下經歷的時候,需要放棄模型,轉而使用model-free RL。
此外,可以在模型中,增加一些不確定性,以跳出次優解。
model-based RL適用于連續變量的狀態和行為空間。
Dyna-Q Algorithm
當構建了一個環境的模型后,個體可以有兩種經歷來源:
- 實際經歷(real experience)。
S′~Ps,s′a,R=RsaS'\sim P_{s,s'}^a, R=R_s^aS′~Ps,s′a?,R=Rsa?
- 模擬經歷(simulated experience)。
S′~Pη(S′∣S,A),R=Rη(R∣S,A)S'\sim P_\eta(S' | S,A), R=R_\eta(R | S,A)S′~Pη?(S′∣S,A),R=Rη?(R∣S,A)
對于Model-Free RL來說,所有的知識都來源于real experience。
對于Model-Based RL來說,Model來源于real experience,而planning相關的知識來源于simulated experience。
于是我們很自然的想到,是否可以把real experience和simulated experience結合起來呢?
上圖是Dyna算法的流程圖。它從實際經歷中學習得到模型,然后聯合使用實際經歷和模擬經歷,一邊學習,一邊規劃更新價值和(或)策略函數。
Dyna-Q算法流程如下:
Initialize Q(s,a)Q(s, a)Q(s,a) and Model(s,a)Model(s, a)Model(s,a) for all s∈Ss \in Ss∈S and a∈A(s)a \in A(s)a∈A(s)
Do forever:
(a) S←S \leftarrowS← current (nonterminal) state
(b) A←??greedy(S,Q)A \leftarrow \epsilon-greedy(S, Q)A←??greedy(S,Q)
? Execute action A; observe resultant reward, R, and state S’
(d) Q(S,A)←Q(S,A)+α[R+γmax?aQ(S′,a)?Q(S,A)]Q(S, A) \leftarrow Q(S, A)+\alpha[R+\gamma \max_a Q(S', a)-Q(S, A)]Q(S,A)←Q(S,A)+α[R+γmaxa?Q(S′,a)?Q(S,A)]
(e) Model(S,A)←R,S′Model(S, A) \leftarrow R,S'Model(S,A)←R,S′(assuming deterministic environment)
(f) Repeat n times:
S←S \leftarrowS← random previously observed state
A←A \leftarrowA← random action previously taken in S
R,S′←Model(S,A)R, S' \leftarrow Model(S, A)R,S′←Model(S,A)
Q(S,A)←Q(S,A)+α[R+γmax?aQ(S′,a)?Q(S,A)]Q(S, A) \leftarrow Q(S, A)+\alpha[R+\gamma \max_a Q(S', a)-Q(S, A)]Q(S,A)←Q(S,A)+α[R+γmaxa?Q(S′,a)?Q(S,A)]
這個算法賦予了個體在與實際環境進行交互式時有一段時間用來思考的能力。其中的步驟:a,b,c,d和e都是從實際經歷中學習,d過程是學習價值函數,e過程是學習模型。
在f步,給以個體一定時間(或次數)的思考。在思考環節,個體將使用模型,在之前觀測過的狀態空間中隨機采樣一個狀態,同時從這個狀態下曾經使用過的行為中隨機選擇一個行為,將兩者帶入模型得到新的狀態和獎勵,依據這個來再次更新行為價值函數。
上圖是細化后的Dyna框架圖。從上面的分析可以看出,Dyna與其說是一個算法,倒不如說是一個算法框架,兩者的區別在于:框架的每個組成部分,可以采用不同的算法,只要各部分之間的關系不變,就還算是同一個框架。
上圖比較了在Dyna算法中一次實際經歷期間采取不同步數的規劃時的個體表現。橫坐標是Episode序號,縱坐標是特定Episode所花費的步數。可以看出,當直接使用實際經歷時,個體在早期完成一個Episode需要花費較多步數,而使用5步或50步思考步數時,個體完成一個Episode與環境發生的實際交互的步數要少很多。不過到了后期,基本上就沒什么差別了。
可以看出Dyna算法可以有效提升算法的收斂速度,但不會提高最終的性能。
上面的例子模擬了某時刻(虛線所示)環境發生了改變,變得更加困難,此時使用Dyna-Q算法在經歷過一段時間的平臺期后又找到了最優解決方案。在平臺期,模型持續的給以個體原先的策略,也就是錯誤的策略,但個體通過與實際的交互仍然能夠找到最優方案。
上二個例子表明,Dyn-Q算法賦予了個體一定的應對環境變化的能力,當環境發生一定改變時,個體一方面可以利用模型,一方面也可以通過與實際環境的交互來重新構建模型。
上2個示例圖中的Q+算法與Q的差別體現在:Q+算法鼓勵探索,給以探索額外的獎勵。
Simulation-Based Search
Planning主要有兩個用途:
-
改善policy或value function。這種方式通常叫做background planning。它不在乎當前的狀態,而在乎對于所有狀態都有效的policy或value function。
-
直接根據當前狀態選擇動作。這種方式通常叫做decision-time planning。它更在乎于當前狀態。
這里以最簡單的前向搜索(Forward Search)算法來討論一下decision-time planning的特點。
上圖是Forward Search的示意圖,圖中綠色方格節點指的是終止狀態。
這種算法以當前狀態StS_tSt?作為根節點構建了一個搜索樹(Search Tree),使用MDP模型進行前向搜索。前向搜索不需要解決整個MDP,而僅僅需要構建一個從當前狀態開始與眼前的未來相關的次級(子)MDP。這相當于一個登山運動員的登山問題,在某一個時刻,他只需要關注當前位置(狀態)時應該采取什么樣的行為才能更有利于登山(或者下撤),而不需要考慮第二天中飯該吃什么,那是登頂并安全撤退后才要考慮的事情。
從中可以看出,background planning相當于是廣度優先遍歷,雖然考慮的比較全面,但決策的深度較淺,而decision-time planning雖然只考慮當前狀態的情況,但決策的深度較深(通常是一個完整的episode),相當于是深度優先遍歷。
sample-based planning+Forward search就得到了Simulation-Based Search。
首先,從Model中采樣,形成從當前狀態開始到終止狀態的一系列Episode:
{stk,Atk,Rt+1k,…,STk}k=1K~Mv\{s_t^k, A_t^k, R_{t+1}^k, \dots, S_T^k\}_{k=1}^K\sim M_v{stk?,Atk?,Rt+1k?,…,STk?}k=1K?~Mv?
有了這些Episode資源,我們可以使用Model-Free的強化學習方法,如果我們使用Monte-Carlo control,那么這個算法可以稱作蒙特卡羅搜索(Monte-Carlo Search),如果使用Sarsa方法,則稱為TD搜索(TD Search)。
Monte-Carlo Search
我們首先看一下Simple Monte-Carlo Search的步驟:
-
給定一個模型M和一個模擬的策略π\piπ。
-
針對行為空間里的每一個行為a∈Aa\in Aa∈A:
從這個當前狀態sts_tst?開始模擬出K個Episodes:
{stk,a,Rt+1k,St+1k,At+1k,…,STk}k=1K~Mv,π\{s_t^k, a, R_{t+1}^k, S_{t+1}^k, A_{t+1}^k,\dots, S_T^k\}_{k=1}^K\sim M_v,\pi{stk?,a,Rt+1k?,St+1k?,At+1k?,…,STk?}k=1K?~Mv?,π
使用平均收獲(蒙特卡羅評估)來評估當前行為a的行為價值:
Q(st,a)=1K∑k=1KGt→Pqπ(st,a)Q(s_t, a)=\frac{1}{K}\sum_{k=1}^KG_t\xrightarrow[]{P} q_\pi(s_t, a)Q(st?,a)=K1?k=1∑K?Gt?P?qπ?(st?,a)
- 選擇一個有最大Q值的行為作為實際要采取的行為:
at=arg?max?a∈AQ(st,a)a_t = \mathop{\arg\max}_{a\in A}Q(s_t, a)at?=argmaxa∈A?Q(st?,a)
Simple Monte-Carlo Search的主要問題在于模擬出的Episodes的質量依賴于Model的質量,如果Model不準確,就會導致一系列的偏差,最終會導致結果的不準確。
我們可以采用優化領域常用的Evaluate/Improve方法來改進Monte-Carlo Search,于是就得到了Monte-Carlo Tree Search(MCTS)方法。
這里先看一下MCTS的Evaluation階段的流程:
-
給定一個模型M。
-
從當前狀態sts_tst?開始,使用當前的模擬策略π\piπ,模擬生成K個Episodes:
{stk,a,Rt+1k,St+1k,At+1k,…,STk}k=1K~Mv,π\{s_t^k, a, R_{t+1}^k, S_{t+1}^k, A_{t+1}^k,\dots, S_T^k\}_{k=1}^K\sim M_v,\pi{stk?,a,Rt+1k?,St+1k?,At+1k?,…,STk?}k=1K?~Mv?,π
-
構建一個包括所有個體經歷過的狀態和行為的搜索樹。
-
對于搜索樹種每一個狀態行為對(s,a)(s,a)(s,a),計算從該(s,a)(s,a)(s,a)開始的所有完整Episode收獲的平均值,以此來估算該狀態行為對的價值Q(s,a)Q(s,a)Q(s,a):
Q(st,a)=1N(s,a)∑k=1K∑u=tT1(Su,Au=s,a)Gu→Pqπ(s,a)Q(s_t, a)=\frac{1}{N(s,a)}\sum_{k=1}^K \sum_{u=t}^T 1(S_u,A_u=s,a) G_u\xrightarrow[]{P} q_\pi(s, a)Q(st?,a)=N(s,a)1?k=1∑K?u=t∑T?1(Su?,Au?=s,a)Gu?P?qπ?(s,a)
- 選擇一個有最大Q值的行為作為實際要采取的行為:
at=arg?max?a∈AQ(st,a)a_t = \mathop{\arg\max}_{a\in A}Q(s_t, a)at?=argmaxa∈A?Q(st?,a)
MCTS的一個特點是在構建搜索樹的過程中,更新了搜索樹內狀態行為對的價值,積累了豐富的信息,利用這些信息可以更新模擬策略,使得模擬策略得到改進。換句話說,MCTS的策略不是一成不變的。
MCTS的Simulation也是有講究的。
首先,改進策略時要分情況對待:
-
樹內(in-tree)確定性策略(Tree Policy):對于在搜索樹中存在的狀態行為對,策略的更新傾向于最大化Q值,這部分策略隨著模擬的進行是可以得到持續改進的。
-
樹外(out-of-tree)默認策略(Default Policy):對于搜索樹中不包括的狀態,可以使用固定的隨機策略。
隨著不斷地重復模擬,狀態行為對的價值將得到持續地得到評估。同時基于??greedy(Q)\epsilon-greedy(Q)??greedy(Q)的搜索策略使得搜索樹不斷的擴展,策略也將不斷得到改善。
總結
以上是生活随笔為你收集整理的机器学习(三十六)——Integrating Learning and Planning(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(三十五)——Actor-Cri
- 下一篇: 机器学习(三十七)——Integrati