強化學習-策略迭代


1. 前言

強化學習-MDP(馬爾可夫決策過程)算法原理中我們已經介紹了強化學習中的基石--MDP,本文的任務是介紹如何通過價值函數,去尋找到最優策略,使得最后得到的獎勵盡可能的多。

2. 回顧MDP

通過學習MDP我們得到了2個Bellman公式:

  • 狀態值函數:

\[v_{\pi}(s_t)=\sum_{a_t}\pi(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{\pi}(s_{t+1})] \]

  • 狀態-行動值函數:

\[q_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * \sum_{a_{t+1}}\pi(a_{t+1}|s_{t+1})q_{\pi}(s_{t+1},a_{t+1})] \]

和2個\(v_{\pi}(s_t),q_{\pi}(s_t,a_t)\)之間的推導關系。

\[v_{\pi}(s_t)=\sum_{a_t}\pi(a_t|s_t)q_{\pi}(s_t,a_t) \]

\[q_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{\pi}(s_{t+1})] \]

3. 策略迭代法

我們發現如果想知道最優的策略,就需要能夠准確估計值函數。然而想准確估計值函數,又需要知道最優策略,數字才能夠估計准確。所以實際上這是一個“雞生蛋還是蛋生雞”的問題。

所以策略迭代法通過迭代的方式,去不斷的靠近最優策略。

策略迭代法的思路:

  1. 以某種策略\(\pi\)開始,計算當前策略下的值函數\(v_{\pi}(s)\)
  2. 利用這個值函數,更新策略,得到\(\pi*\)
  3. 再用這個策略\(\pi*\)繼續前行,更新值函數,得到\(v'_{\pi}(s)\),一直到\(v_{\pi}(s)\)不在發生變化。

如何計算當前的狀態值函數\(v^T_{\pi}(s)\)呢?比較正常的思路是通過上一次的迭代的\(v^{T-1}_{\pi}(s)\),來計算當前這一輪迭代的值函數\(v^T_{\pi}(s)\)。那我們結合下之前的狀態值函數的Bellman公式,我們就能寫出策略迭代中,計算當前狀態值函數的公式了。

\[v^T_{\pi}(s_t)=\sum_{a_t}\pi^{T-1}(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v^{T-1}_{\pi}(s_{t+1})]\;\;\;\;\;\;(1) \]

公式中的T代表迭代的輪數,有了這個公式,我們計算出了當前的\(v^T_{\pi}(s)\),然后如何去更新策略\(\pi*\)呢?

其實也比較簡單,需要兩個步驟:

  • 計算當前的狀態-動作值函數:

\[q^T_{\pi}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v^T_{\pi}(s_{t+1})]\;\;\;\;\;\;(2) \]

  • 通過當前的狀態-動作值函數,找出比較好的策略序列:

\[\pi^{T+1}(s) = argmax_aq^T_{\pi}(s,a)\;\;\;\;\;\;(3) \]

到這里策略迭代的基本過程在邏輯上已經走通了,這里其實還有一個概念,在策略迭代的算法中,其實大家把整個過程分為兩個大的步驟。

  1. 計算當前的狀態值函數的過程,即公式(1)稱為--策略評估(policy evaluation)
  2. 計算最優策略的過程,即公式(2)(3)稱為--策略提升(policy improvement)

3.1 策略評估步驟

  1. 輸入:策略\(\pi^{T-1}\),狀態轉移概率\(p(s_{t+1}|s_t,a_t)\),獎勵\(r\),衰減因子\(\gamma\),值函數\(v^{T-1}(s)\)
  2. \(v_{0}(s) = v^{T-1}(s)\)
  3. \(Repeat\;\;k=0,1...\)
  4. \(for\;\;every\;\;s\;\;do\)
  5.   \(v_{k+1}(s_t)=\sum_{a_t}\pi^{T-1}(a_t|s_t)\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{k}(s_{t+1})]\)
  6. \(Until\;\;v_{k+1}(s) = v_{k}(s)\)
  7. 輸出\(v^{T}(s)=v_{k+1}(s)\)

3.2 策略迭代步驟

  1. 輸入:策略\(\pi_{0}\),狀態轉移概率\(p(s_{t+1}|s_t,a_t)\),獎勵\(r\),衰減因子\(\gamma\),值函數\(v_{0}(s)\)
  2. \(Repeat\;\;k=0,1...\)
  3. \(policy\;\;evaluation\)
  4. \(q_{k}(s_t,a_t)=\sum_{s_{t+1}}p(s_{t+1}|s_t,a_t)[r_{a_t}^{s_{t+1}} + \gamma * v_{k}(s_{t+1})]\)
  5. \(\pi_{k+1}(s) = argmax_aq_{k}(s,a)\)
  6. \(Until\;\;\pi_{k+1}(s) = \pi_{k}(s)\)
  7. 輸出\(\pi^{*}(s)=\pi_{k+1}(s)\)

3.3 策略迭代圖形化展示

image

其中橫軸X表示值函數的收斂效果,數值到達∞時完成收斂,縱軸Y表示策略的優異度,數值到達∞時策略到達最優。每一次迭代的過程,首先達到值函數的收斂,再提升一些策略的優異度。

從圖中也可以看出,策略評估在橫軸X反向上的截距比較長,所以它花費的時間比較多,策略提升是在縱軸Y上的截距,所以花費的時間比較短。

4. 總結

策略迭代的思想比較簡單,先策略評估,再策略提升,直到策略不再變化為止。

但是策略迭代有點缺點,策略迭代的主要時間都花費在策略評估上,對一個簡單的問題來說,在策略評估上花費的時間不算長;但對復雜的問題來說,這個步驟的時間實在有些長。一個最直接的想法就是,我們能不能縮短在策略評估上花的時間呢?有,就是價值迭代,我們下一篇要講解的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM