強化學習【三】:動態規劃問題

·目錄

Policy Evaluation(策略評估)

Iterative Policy Evaluation (迭代策略估計)

例子:方格遊戲

策略迭代 policy iteration

策略改進 Policy Improvement

Modified Policy Iteration

廣義的策略迭代

值迭代   Value Iteration

同步DP: Synchronous

異步DP :

In-place DP

Prioritised Sweeping:優先級sweeping

real-time DP : 實時動態規劃

Full-Width Backups

sample backups

Approximate DP

值函數空間 Value Function Space

壓縮映射

值函數的無窮範數  ∞-Norm

Bellman期望備份是一種 Contraction

Contraction Mapping Theorem 壓縮映射定理

策略估計和策略迭代的收斂

值迭代的收斂



Dynamic :sequential or temporal ;問題與時間/順序有關

Programming :

動態規劃是求解複雜問題的一類方法:它有兩個特性:

  • 最優子結構Optimal substructure:問題的最優解可以分解爲子問題的最優解
  • 重疊子問題Overlapping subproblems: 子問題重複出現多次,因此可以將其存儲起來並反覆利用。

而MDP【馬爾科夫決策過程,Markov decision processes】 滿足上述兩點,

  • Bellman 方程給出了MDP的遞歸分解方法
  • 值函數 存儲並反覆利用 解

動態規劃假設對MDP的結構、動態變化&獎勵,也就是完全瞭解環境的運行原理。

有兩類問題,分別是預測和控制

(1)預測:輸入 MDP和 \large \pi 或 MRP,輸出值函數。

(2)控制:輸入 MDP,輸出最優值函數和最優策略。

 

動態規劃的其他應用:Scheduling algorithms調度算法,字符串算法(序列對齊sequence alignment),圖論算法(最短路徑),圖模型( Viterbi算法),生物信息(晶格模型);這些字符串、晶格、圖通常具有最優子結構。


Policy Evaluation(策略評估)

Iterative Policy Evaluation (迭代策略估計)

  用於解決問題:評估一個給定的策略\large \pi

從任意一個值(通常取0)出發,在每一步都運用貝爾曼方程往前看一步,來得到新的值函數,最終得到 \large $$ v_{1} \rightarrow v_{2} \rightarrow \ldots \rightarrow v_{\pi} $$

每當進行一次迭代時,都要考慮到MDP中的所有狀態;即 同步備份【synchronous backups】,最終值函數會收斂到\large v_{\pi }

它 使用貝爾曼期望方程迭代更新值函數,公式如下:


  那些有一箇中止狀態的任務被稱爲episodic tasks。

例子:方格遊戲

估計一個方格上的隨機策略:假設可採取的動作有東南西北四個方向,方格上的兩個陰影區域代表終點,對於下圖的這個沒有折扣因子的 episodic MDP (γ = 1) ,有14個非終結狀態1,2,...,14,一個終止狀態(在圖中用了兩個方框表示,但它們是一個狀態。)移動到方格之外的動作不會改變狀態。在到達終止狀態之前,每移動一步帶來的回報是-1,agent遵循如下的均勻隨機策略(其中e,s,w,n分別代表東、南、西、北四個方向):\large $$ \pi(n | \cdot)=\pi(e | \cdot)=\pi(s | \cdot)=\pi(w | \cdot)=0.25 $$

k取無窮大時,值函數會穩定下來,收斂到最終表格所示的值,對錶格中的值求平均說明:如果採取隨機的動作,那麼走到最終狀態所花的時間步大致是多少。-——大致是20.

 

上圖中 右邊的那個帶箭頭方向的一欄告訴我們如何選擇更好的策略。

 

從k= 1到K=2處, -1.7 = -1.0 +0.25*(-1.0 -1.0 -1.0 + 0)=-1.75 ,也就是說,1.7那個位置對應的上一步的值爲-1.0 ,而它往四個方向移動的值分別爲三個-1.0 和0 ,爲0是因爲有一個會移到陰影框中,而移到方格之外的那次不改變它的值就還是-1.0.

同理可驗證,從k=2 到k=3,    在下圖的紅色框中,它的四個移動後的狀態是4個標號的藍色框這樣,這幾個位置在k=2時的值是-2.0,-2.0,-2.0,和一個0.0 .再更新value時由於每轉移一步的return都是-1, 所以要加上-1 .

           look one-step ahead!

 

 

策略迭代 policy iteration

怎麼優化一個策略?  不斷地 evaluate再 greedy !用貪心算法。策略的評估和改進交替進行。

先用值函數評估一個給定的策略\large \pi\large $$ v_{\pi}(s)=\mathbb{E}\left[R_{t+1}+\gamma R_{t+2}+\ldots | S_{t}=s\right] $$

再對 策略的值函數 用貪婪法優化策略 :  \large $$ \pi^{\prime}=\operatorname{greedy}\left(v_{\pi}\right) $$

策略迭代過程總能收斂到最優值函數 \large \pi _{*}

 

策略改進 Policy Improvement

不僅可以用狀態值函數,也可以用動作-值函數來更新策略!當更新停止後,狀態值函數、動作值函數和策略函數均爲最優。

考慮一個確定性策略:\large $$ a=\pi(s) $$ ,可以acting greedily 來改進策略: \large $$ \pi^{\prime}(s)=\underset{a \in \mathcal{A}}{\operatorname{argmax}} q_{\pi}(s, a) $$

      這樣能改進 任一狀態s在一個時間步上的值: \large $$ q_{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathcal{A}} q_{\pi}(s, a) \geq q_{\pi}(s, \pi(s))=v_{\pi}(s) $$

      因此也優化了值函數  \large $$ V_{\pi^{\prime}}(s) \geq v_{\pi}(s) $$

       \large $\begin{aligned} v_{\pi}(s) & \leq q_{\pi}\left(s, \pi^{\prime}(s)\right)=\mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma q_{\pi}\left(S_{t+1}, \pi^{\prime}\left(S_{t+1}\right)\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} q_{\pi}\left(S_{t+2}, \pi^{\prime}\left(S_{t+2}\right)\right) | S_{t}=s\right] \\ & \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\ldots | S_{t}=s\right]=v_{\pi^{\prime}}(s) \end{aligned}$

如果停止了優化改進,那麼 \large $ q_{\pi}\left(s, \pi^{\prime}(s)\right)=\max _{a \in \mathcal{A}} q_{\pi}(s, a)=q_{\pi}(s, \pi(s))=v_{\pi}(s)$

那麼也滿足了貝爾曼最優方程: \large $ v_{\pi}(s)=\max _{a \in \mathcal{A}} q_{\pi}(s, a)$

因此對所有狀態  \large $ s \in \mathcal{S}$\large $ v_{\pi}(s)=v_{*}(s)$,所以 \large \pi  是一個最優策略。

 

Modified Policy Iteration

在前面的基礎上,加上迭代停止條件。

策略估計需要收斂到 \large $ v_{\pi} 嗎?

或者需要引入一個停止條件嗎(比如,值函數的 \large \epsilon收斂)?

或者在策略估計迭代k次後停止迭代? 比如之前的方格遊戲在k=3時就足以找出最優策略。

爲什麼不在每輪迭代都更新策略,也就是說,在k=1之後停止  ——> 這樣做就相當於值迭代了。

 

廣義的策略迭代


任何一個最優策略可以分解爲兩個部分:

  • 一個最優的 first action  \large $ A_{*}$ ;
  •  Followed by an optimal policy from successor state  \large $ S^{\prime}$

當且僅當    對任一狀態 \large $ s^{\prime}$ 到狀態s(經有限步後)都是可達的。。。策略才能從狀態s處開始找出最優解。

如果我們知道子問題的解\large $ v_{*}\left(s^{\prime}\right)$  ,那麼可以通過向前看一步 【one-step lookahead】 來找出 \large $ v_{*}(s)               

                       \large $ v_{*}(s) \leftarrow \max _{a \in \mathcal{A}} \mathcal{R}_{s}^{a}+\gamma \sum_{s^{\prime} \in \mathcal{S}} \mathcal{P}_{s s^{\prime}}^{a} v_{*}\left(s^{\prime}\right)$

值迭代的思想:不斷地重複更新,apply these updates iteratively 。 值迭代方法對於loopy, stochastic MDPs仍然可用。

對於沒有終止狀態的MDP,通過乘以折扣因子,仍然可以用動態規劃求解/。

直覺上怎麼理解它的原理:  start with final rewards and work backwards 。從最終的回報開始,用逆序解法【回溯】。下面以最短路徑爲例:箭頭表示的最短路徑不唯一。


值迭代   Value Iteration

  • 用於解決問題:找出最優策略 \large \pi 【已知環境的運行原理】
  • 解法:迭代使用貝爾曼最優方程。
  • \large $ v_{1} \rightarrow v_{2} \rightarrow \ldots \rightarrow v_{*} $
  • 再用同步評估【 synchronous backups,如下圖描述。】這樣可以更快收斂到最優解。

  • 與策略迭代的不同是,他沒有具體的策略,中間過程產生的值函數可能不與任一策略相關。

 

同步DP: Synchronous

 

  • 算法是基於狀態-值函數 \large v_{\pi }(s) 或者 \large v_{* }(s),
  • 對於有m個和n個狀態的情形,每次迭代的複雜度爲 \large O(mn^{2})
  • 算法也同樣適用於\large q_{\pi }(s,a) 或者\large q_{ * }(s,a) :每次迭代的複雜度爲\large O(m^{2 } n^{2} )
  • 目前爲止所講的動態規劃都是同步動態規劃,它使用了  synchronous backups, 也就是所有狀態都並行備份了,一次性更新所有S的value。

異步DP :

只要持續地選擇所有的狀態,不論以怎樣的順序選擇,孫發會更高效地收斂到最優值函數。

顯著地減少了計算量,如果 all states continue to be selected 則算法保證收斂。

異步動態規劃的三種類型:In-place dynamic programming、 Prioritised sweeping 、Real-time dynamic programming

In-place DP

同步動態規劃會保存兩份值函數的copies, 且對所有S中的狀態s,

但 In-place 值迭代只保存一份值函數的copies, 且對所有S中的狀態s,

i.e.(由於本輪的value本就是上一輪優化的結果 ),不對上一輪的value進行備份,直接使用這一週期的value)

 

Prioritised Sweeping:優先級sweeping

使用貝爾曼誤差的大小 衡量 值函數與最優的差距,每次只備份使貝爾曼誤差最大的狀態,然後更新這個狀態,再計算相應的貝爾曼誤差。貝爾曼誤差可以定義如下(不唯一):

  •  i.e.計算優化目標值和現實值之差,對多個S計算後排成一列,差值大的在前,依次優化對應的s的value。
  • 這種方法需要已知reverse dynamics (predecessor states)的信息,可以通過 maintaining a priority queue來高效地實現。

real-time DP : 實時動態規劃

  • real-time 實際上是 real time step【在環境中運行一個agent,選擇那些被agent真正訪問過的狀態,來蒐集到真是實樣本】:,只更新經歷過的S,不管其它的。
  • 與agent有關的只有狀態,因此用agent的經驗來指導狀態的選擇,在每個時間步\large S_{t} \, ,\, A_{t} \, ,\, R_{t+1} \, 之後,更新\large S_{t}

 

Full-Width Backups

     DP使用Full-Width Backups,也就是在每次同步or異步備份時,會考慮到所有的動作和所有的後續狀態,並使用MDP的轉移和回報函數的信息。

DP非常適合中等規模的問題求解,也就是狀態數爲百萬級的。對於大規模問題DP會 有Bellman維災難的問題。也就是狀態數目\large n = \left | S \right |隨着狀態變量的數目增加承指數增長。即便是一次備份的成本也會很高。

sample backups

在後續課程裏會考慮用樣本備份:用樣本回報和樣本轉移 \large < S,A,R,S^{{}'}> 而不是用回報函數R和轉移概率陣P。

它的優勢在於:

  • model-free :不需要MDP的先驗知識。
  • 通過採樣解決了 維災難【 curse of dimensionality】
  • 每次備份的花銷是常數級,與狀態數目無關。

Approximate DP

它使用一個函數近似器 \large \hat{\textup{v}}(s,\mathbf{w}) 來近似值函數,對\large \hat{\textup{v}}(\bullet ,\mathbf{w})運用DP求解,比如,

  • 在每/(第k)輪 迭代時重複用 Fitted Value Iteration,
  • 從S中採樣得到狀態 \large \tilde{S}\subseteq S,
  • 對每一個狀態 \large s\in \tilde{S} 使用貝爾曼最優等式【Bellmanoptimality equation】估計目標值。

           

  • 使用目標值\large \left \{ \left \langle s\, , \tilde{\textup{v}_{k} } (s)\, \right \rangle \right \}   訓練下一個值函數\large \hat{\textup{v}}(\cdot \: ,\: \mathbf{w}_{k+1})

 

值函數空間 Value Function Space

值函數上的向量空間 \large V\large \left | S \right |維的,這個空間中的每個店都對應一個值函數\large \textup{v}\left ( s \right ),在這個向量空間中, Bellman backup 使得這些值函數更近,因此備份最終會收斂到唯一解。

壓縮映射

值函數的無窮範數  ∞-Norm

    對於狀態-值函數u和v的距離,我們用無窮範數來衡量:也就是狀態值的largest difference

Bellman期望備份是一種 Contraction

定義一個貝爾曼期望備份算子【Bellman expectation backup operator】,它是 \large \gamma -contraction ,能使值函數至少以\large \gamma 的速度互相靠攏。

Contraction Mapping Theorem 壓縮映射定理

這個定理可以回答一下問題:

策略估計和策略迭代的收斂

由於 貝爾曼期望算子 \large T^{\pi }有唯一 一個固定點,並且 【由貝爾曼期望方程可知】\large \textup{v}_{\pi }\large T^{\pi }的一個固定點,再根據壓縮映射定理,迭代策略估計 會收斂到 \large \textup{v}_{\pi } , 而 策略迭代會收斂到 \large \textup{v}_{*} .

 

定義一個貝爾曼最優備份算子【Bellman optimality backup operator】,

它是 \large \gamma -contraction ,能使值函數至少以\large \gamma 的速度互相靠攏。【證明過程與前面的類似】

值迭代的收斂

由於 貝爾曼最優 算子 \large T^{ *}有唯一 一個固定點,並且 【由貝爾曼最優方程 可知】\large \textup{v}_{* }\large T^{ *}的一個固定點,再根據壓縮映射定理,值迭代會收斂到 \large \textup{v}_{*} .

參考:【1】David silver 強化學習公開課的屁屁踢

【2】 David silver 強化學習公開課筆記(三):Planning by Dynamic Programming

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章