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
- 以某種策略\(\pi\)開始,計算當前策略下的值函數\(v_{\pi}(s)\)。
- 利用這個值函數,更新策略,獲得\(\pi*\)。
- 再用這個策略\(\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)稱爲--策略評估(policy evaluation)
- 計算最優策略的過程,即公式(2)(3)稱爲--策略提高(policy improvement)
3.1 策略評估步驟
- 輸入:策略\(\pi^{T-1}\),狀態轉移機率\(p(s_{t+1}|s_t,a_t)\),獎勵\(r\),衰減因子\(\gamma\),值函數\(v^{T-1}(s)\)
- \(v_{0}(s) = v^{T-1}(s)\)
- \(Repeat\;\;k=0,1...\)
- \(for\;\;every\;\;s\;\;do\)
- \(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})]\)
- \(Until\;\;v_{k+1}(s) = v_{k}(s)\)
- 輸出\(v^{T}(s)=v_{k+1}(s)\)
3.2 策略迭代步驟
- 輸入:策略\(\pi_{0}\),狀態轉移機率\(p(s_{t+1}|s_t,a_t)\),獎勵\(r\),衰減因子\(\gamma\),值函數\(v_{0}(s)\)
- \(Repeat\;\;k=0,1...\)
- \(policy\;\;evaluation\)
- \(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})]\)
- \(\pi_{k+1}(s) = argmax_aq_{k}(s,a)\)
- \(Until\;\;\pi_{k+1}(s) = \pi_{k}(s)\)
- 輸出\(\pi^{*}(s)=\pi_{k+1}(s)\)
3.3 策略迭代圖形化展現

其中橫軸X表示值函數的收斂效果,數值到達∞時完成收斂,縱軸Y表示策略的優異度,數值到達∞時策略到達最優。每一次迭代的過程,首先達到值函數的收斂,再提高一些策略的優異度。
從圖中也能夠看出,策略評估在橫軸X反向上的截距比較長,因此它花費的時間比較多,策略提高是在縱軸Y上的截距,因此花費的時間比較短。
4. 總結
策略迭代的思想比較簡單,先策略評估,再策略提高,直到策略再也不變化爲止。
可是策略迭代有點缺點,策略迭代的主要時間都花費在策略評估上,對一個簡單的問題來講,在策略評估上花費的時間不算長;但對複雜的問題來講,這個步驟的時間實在有些長。一個最直接的想法就是,咱們能不能縮短在策略評估上花的時間呢?有,就是價值迭代,咱們下一篇要講解的內容。