強化學習-策略迭代

1. 前言

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

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})] \]lua

3. 策略迭代法

咱們發現若是想知道最優的策略,就須要可以準確估計值函數。然而想準確估計值函數,又須要知道最優策略,數字纔可以估計準確。因此實際上這是一個「雞生蛋仍是蛋生雞」的問題。spa

因此策略迭代法經過迭代的方式,去不斷的靠近最優策略。htm

策略迭代法的思路:blog

  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) \]get

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

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

  • 計算當前的狀態-動做值函數:
    \[ 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. 總結

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

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

相關文章
相關標籤/搜索