1. 前言
在強化學習-MDP(馬爾可夫決策過程)算法原理中我們已經介紹了強化學習中的基石--MDP,本文的任務是介紹如何通過價值函數,去尋找到最優策略,使得最后得到的獎勵盡可能的多。
2. 回顧MDP
通過學習MDP我們得到了2個Bellman公式:
- 狀態值函數:
- 狀態-行動值函數:
和2個\(v_{\pi}(s_t),q_{\pi}(s_t,a_t)\)之間的推導關系。
3. 策略迭代法
我們發現如果想知道最優的策略,就需要能夠准確估計值函數。然而想准確估計值函數,又需要知道最優策略,數字才能夠估計准確。所以實際上這是一個“雞生蛋還是蛋生雞”的問題。
所以策略迭代法通過迭代的方式,去不斷的靠近最優策略。
策略迭代法的思路:
- 以某種策略\(\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公式,我們就能寫出策略迭代中,計算當前狀態值函數的公式了。
公式中的T代表迭代的輪數,有了這個公式,我們計算出了當前的\(v^T_{\pi}(s)\),然后如何去更新策略\(\pi*\)呢?
其實也比較簡單,需要兩個步驟:
- 計算當前的狀態-動作值函數:
- 通過當前的狀態-動作值函數,找出比較好的策略序列:
到這里策略迭代的基本過程在邏輯上已經走通了,這里其實還有一個概念,在策略迭代的算法中,其實大家把整個過程分為兩個大的步驟。
- 計算當前的狀態值函數的過程,即公式(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. 總結
策略迭代的思想比較簡單,先策略評估,再策略提升,直到策略不再變化為止。
但是策略迭代有點缺點,策略迭代的主要時間都花費在策略評估上,對一個簡單的問題來說,在策略評估上花費的時間不算長;但對復雜的問題來說,這個步驟的時間實在有些長。一個最直接的想法就是,我們能不能縮短在策略評估上花的時間呢?有,就是價值迭代,我們下一篇要講解的內容。