強化學習總結(3)--動態規劃

動態規劃是強化學習裏面最基礎的部分,其核心思想----通用策略迭代(Generalized Policy Iteration,GPI)。html

首先強調一點,動態規劃(Dynamic Programming)要求一個徹底已知的環境模型,所謂徹底已知,就是MDP的五元組所有已知,固然了,主要仍是指狀態轉移機率已知。這種學習方式就是有模型學習(Model-based learning)。git

這裏個人疑問仍是兩個。github

1.動態規劃和前面的有什麼聯繫?算法

答:強化學習前面已經說過,是一種序列決策問題,一開始不清楚環境的工做方式,不知道執行什麼動做是對的,什麼是錯的,而後就只好不斷的在環境試錯,進而發現一個好的策略。一樣,規劃(planning)也屬於序列決策問題,不一樣的是規劃的環境是已知的,好比遊戲的規則已知等,那麼agent就不須要靠與環境的交互來獲取下一個狀態了,而是知道本身執行某個動做後的狀態是什麼,而後再優化本身的策略。這二者是不同的。網絡

動態規劃能夠將一個複雜問題分爲一系列簡單的子問題,一旦解決了這些簡單的子問題,再將這些子問題的解結合起來就變成複雜問題的解了,而且同時將它們的解保存起來,若是下次遇到相同的子問題,就不用從新計算了。動態規劃本質上就是一種環境模型已知的規劃方法(planning)。less

2.動態規劃究竟是幹什麼的?異步

動態規劃的「動態」,指的是某個問題由序列化狀態組成,狀態的轉換是step-by-step進行的。所以,能夠step-by-step解決問題。「規劃」就是優化子問題。上一節咱們提到,經過Bellman方程MDP被遞歸的切分紅子問題,同時它有值函數,保存了每個子問題的解,所以它能經過動態規劃來求解。針對MDP,切分紅的子問題就是在每一個狀態下應該選擇的action是什麼,MDP的子問題是以一種遞歸的方式存在,這一時刻的子問題取決於上一時刻的子問題選擇了哪一個action。函數

 

動態規劃簡單說能夠分爲兩部分,一是預測(prediction),也就是已知MDP的狀態、動做、獎勵、轉移機率、折扣因子和策略,求出每個狀態下的值函數,也就是每一個狀態下能得到的reward是多少。第二就是控制,什麼意思呢,就是在前面的狀態、動做等等都已知,但策略未知的狀況下,計算出最優的值函數,而且藉此計算出最優的策略。動態規劃的目的就是完成上面的兩件事。適用於動態規劃的問題,通常狀態轉移矩陣都是已知的,簡單說就是環境模型已知了,這個時候就能夠看作planning問題了。學習

那麼,動態規劃解決問題的方法呢,就是GPI,也就是策略迭代、策略評估、策略迭代、策略評估.....知道策略收斂至最優。優化

1.策略迭代Policy Iteration

怎麼迭代呢?先有值,而後改進,再估計值,再改進.....這就是迭代。具體說就是:

策略評估policy evaluation:基於當前的policy計算出每一個狀態的值函數。

策略改進policy improvement:基於當前的值函數,利用貪心算法找到當前最優的policy。

 迭代公式爲:\[{v_{k + 1}}(s) = \sum\limits_{a \in A} {{\rm{\pi }}(a|s)(R_s^a + \gamma \sum\limits_{s' \in S} {P_{ss'}^a{v_k}(s')} )} \]

用語言描述上式就是:對於一次迭代,狀態s的價值等於前一次迭代該狀態的即時獎勵與全部s的下一個可能狀態s’的價值與其機率成績的和。

矩陣形式表示就是:\[{{\bf{v}}^{k + 1}} = {{\bf{R}}^{\rm{\pi }}} + \gamma {{\bf{P}}^{\rm{\pi }}}{{\bf{v}}^k}\]

下面以grid world爲例來講明上面式子是如何運用的:

 已知條件:

              狀態空間S:如圖所示,S1-S14均爲非終止狀態,ST爲終止狀態,就是灰色方格所示兩個位置。

              動做空間A:{上,下,左,右}對於任何非終止狀態能夠進行四個方向的動做。

              轉移機率P:任何試圖離開方格世界的動做,其位置將不會發生變化,也就是所謂的在邊界執行向外的動做時,位置不變,其他條件下將以1的機率轉移到動做指定的狀態。(這裏確定是機率爲1了,由於規則指制定的很明確,動做會直接跳轉下一個位置。但其餘MDP問題則不必定啊,好比執行一個動做後,可能會面臨多個狀態,這時候對於執行完動做後下一個可能的狀態就會有一個機率)。

                即時獎勵R:任何在非終止狀態間的轉移獲得的即時獎勵均爲-1,進入終止狀態的即時獎勵爲0.    

                衰減係數γ:1.

                當前策略π:Agent初始採起隨機行動策略,在任何一個非終止狀態下有均等的概率採起任一方向的移動動做。

   問題:評估在這個方格世界裏給定的策略。

   這個問題就等同於:求解該方格世界在給定策略下的狀態價值問題,也就是求解在給定策略下該方格世界裏每個狀態的價值。

                                                     

                       

上面介紹的就是值迭代的所有過程,經過已知的模型,對全局狀態對應的值函數進行迭代更新,在不須要實際一次一次嘗試的狀況下,只根據模擬運算迭代,就能夠藉助值函數評估,利用貪婪策略得到執行動做的最優策略,若是迭代次數足夠多的狀況下,能夠獲得一個近似收斂的所有狀態的值函數表,就像上圖最後一個所示。

上面是一個基本的策略評估過程,沒有進行策略改進,主要是由於這個問題太簡單了,策略在第3次迭代就已經收斂到最優狀態了,沒有必要進行策略改進了。

但實際上,更多的問題在長時間的值迭代後,策略收斂並不明顯,這個時候,咱們該怎麼作呢?先狀態值函數估計一段時間,而後看看策略怎麼樣,根據各個狀態的值函數,給出一個相對比初始隨機要好一點的策略,而後根據這個策略再次進行值函數評估,通過一段時間迭代後,繼續調整策略,如此反覆,直至最終策略收斂。這就是策略迭代的思想。

根據上面的內容,總結一下,什麼是策略迭代呢?策略迭代就是在當前策略上迭代計算v值,再根據v值貪婪地更新策略,如此反覆屢次,最終獲得最優策略π*和最優狀態價值函數V*。這裏須要說明一下,貪婪的意思就是指僅採用某個動做,這個動做使得狀態價值獲得最大的行爲。下面放上那兩個經典的示意圖。

       上圖已經清晰地說明了策略迭代的含義,那麼,問題來了,不少時候,策略的更新收斂速度會比狀態價值函數值的收斂速度快不少,那麼這個時候,還有必要必定要迭代計算直到狀態價值獲得收斂嗎?由於這個時候策略早已經收斂了啊,繼續迭代值函數是否是一種資源浪費呢?

        答:固然沒有必要繼續迭代了,咱們須要的就是最優策略,至於狀態的最優值函數,則根據需求肯定是否繼續迭代,以及迭代到什麼程度。當不須要持續迭代至最優價值函數時,咱們能夠設置一些條件提早終止迭代,好比設定一個e,比較兩次迭代的價值函數平方差,小於e便可;此外,還能夠直接設置迭代次數;或者說每迭代一次就更新一次策略。這就是修飾過的策略迭代,英文是Modified Policy Iteration.

 

2.價值迭代Value Iteration

      有了策略迭代,就確定有價值迭代了。先介紹一下基本定理。

      優化原則:一個最優策略能夠被分解爲兩部分,一部分從狀態s到下一個s’採起了最優行爲A*,另外一部分就是在狀態s’時遵循一個最優策略。

     定理:一個策略可以使得狀態s得到最優價值,當且僅當:對於從狀態s能夠到達的任何狀態s’,該策略可以使得狀態s’的價值是最優價值:\[{v_*}(s) \leftarrow \mathop {\max }\limits_{a \in A} R_s^a + \gamma \sum\limits_{s'} {P_{ss'}^a{v_*}(s')} \]

      肯定性價值迭代 

      在前一個定理的基礎上,若是咱們清楚地知道咱們指望的最終(goal)狀態的位置以及反推須要明確的狀態間關係,那麼能夠認爲是一個肯定性的價值迭代。此時,咱們能夠把問題分解成一些列的子問題,從最終目標狀態開始分析,逐漸往回推,直至推至全部狀態。

       價值迭代,從初始狀態價值開始同步迭代計算,最終收斂,整個過程當中沒有遵循任何策略。與策略迭代不一樣,在值迭代過程當中,算法不會給出明確的策略,迭代過程其間獲得的價值函數,不對應任何策略。價值迭代雖然不須要策略參與,但仍然須要知道狀態之間的轉移機率,也就是須要知道模型。

       最後,再說回來,動態規劃的兩個問題:預測和控制。預測問題就是在給定策略下迭代計算各個狀態的價值函數,控制問題就是經過策略迭代,先給定或隨機策略下計算狀態價值函數,根據狀態函數貪婪更新策略,屢次反覆找到最優策略。此外,單純的價值迭代,全程沒有策略參與也能得到最優策略,但須要知道狀態轉移矩陣,即狀態s在行爲a後到達的全部後續狀態及機率。

       接下來,說一下複雜度問題,使用狀態價值函數或者行爲價值函數兩種價值迭代的算法時間複雜度都較大,爲O(mn2)或者O(m2n2).一種改進方案是使用異步動態規劃,其餘方法即放棄使用動態規劃。

3.動態規劃的一些擴展

    異步動態規劃

     a.原位動態規劃(In-place dynamic programming):直接原地更新下一個狀態的v值,而不像同步迭代那樣須要額外存儲新的v值。在這種狀況下,按何種次序更新狀態價值有時候會比較有意義。

       

     b.重要狀態有先更新(Priortised Sweeping):對那些重要的狀態有先更新。這個時候可使用Bellman error來肯定哪些狀態是比較重要的。Bellman error反映的是當前狀態價值與更新後的狀態價值差的絕對值。Bellman error越大,越有必要優先更新。對那些Bellman error較大的狀態進行備份,這種算法使用優先級隊列可以較獲得有效的實現。

        

      c.real-time programming:更新那些僅與個體關係密切的狀態,同時使用個體的經驗來知道更新狀態的選擇。有些狀態雖然理論上存在,但在現實中幾乎不會出現,利用已有現實經驗。

        

      採樣更新Sample Backups

      動態規劃使用full-width backups。意味着使用DP算法,對於每一次狀態更新,都要考慮到其全部後繼狀態及全部可能的行爲,同時還要使用MDP中的狀態轉移矩陣、獎勵函數(信息)。DP解決MDP問題的這一特色決定了其對中等規模(百萬級別的狀態數)的問題較爲有效,對於更大規模的問題,會帶來Bellman維度災難。所以在面對大規模MDP問題是,須要尋找更加實際可操做的算法,主要的思想是Sample Backups,後續會詳細介紹。這類算法的優勢是不須要完整掌握MDP的條件(例如獎勵機制、狀態轉移矩陣等),經過Sampling(舉樣)能夠打破維度災難,反向更新狀態函數的開銷是常數級別的,與狀態數無關。

        近似動態規劃(Approximate Dynamic Programming)

        使用其餘技術手段(例如神經網絡)創建一個參數較少、消耗計算資源較少、同時雖然不徹底精確但卻可以用的近似價值函數。

         

           本節內容主要仍是以理解基本概念爲主,在實際中不多用動態規劃來解決大規模強化學習問題。但ADP用來發文章,尤爲是控制領域,近幾年來仍是很是好的。  

參考文獻

[1]. Reinforcement learning: an introduction.2017 Draft.

[2].http://www.cnblogs.com/steven-yang/p/6493328.html

[3].http://blog.csdn.net/zz_1215/article/details/44138843

[4].http://chenrudan.github.io/blog/2016/06/17/reinforcementlearninglesssion3.html

相關文章
相關標籤/搜索