1. 前言
在策略迭代最后我們發現策略迭代的收斂過程比較慢,那我們就會想有沒更好更快的迭代方法,今天我們介紹的價值迭代就是另一種尋找最優策略的解決方案。
2. 動態規划
價值迭代需要用到動態規划的思想,那我們簡單的回顧下動態規划的特點。
-
最優子結構:是指一個子問題的最優解是可以得到的。對應蛇棋的問題,可以理解為是“從某個位置出發行走一步能夠獲得的最大獎勵”的問題,由於只走一步,這個問題很容易計算。
-
重復子結構:是指一個更大的問題是由一些小問題組成的,而求解不同的大問題時可能會用上同一個子問題,子問題被重復利用,計算量也就減少了。對應蛇棋的問題,可以理解為是“從某個位置出發行走兩步能夠獲得的最大獎勵”的大問題,利用前面已經得到的子問題,這個大問題可以用偽代碼表示:
“某個位置走兩步的最大獎勵”=max([這一步的獎勵+從這個位置出發走一步獲得的最大獎勵 for 走法 in 可能的走法])
3. 價值迭代原理
理解價值迭代原理的思路,可以從策略迭代的缺點出發。
- 策略迭代的策略評估需要值函數完全收斂才進行策略提升的步驟,能不能對策略評估的要求放低,這樣如果可以實現的話,速度會有所提升。
- 我們在策略迭代中關注的是最優的策略,如果說我們找到一種方法,讓最優值函數和最優策略同時收斂,那樣我們就可以只關注值函數的收斂過程,只要值函數達到最優,那策略也達到最優,值函數沒有最優,策略也還沒有最優。這樣能簡化了迭代步驟。
價值函數就是通過以上2點優化思路開發出來的,具體證明讀者可以自己搜索。
3.1 價值迭代公式
我們繼續先回顧策略迭代的公式
- 策略評估
- 策略提升
通過(2)(3)我們得到
有因為值函數和策略時同步提升的,這時候(4)就可以替換為
公式(5)就是我們價值迭代的推導公式。
價值迭代的大概過程:
4. 廣義策略迭代
- 策略迭代法的中心是策略函數,它通過反復執行“策略評估+策略提升”兩個步驟使策略變得越來越好;
- 價值迭代法的中心是值函數,它通過利用動態規划的方法迭代更新值函數,並最終求出策略函數。由此可以看出兩者有如下特點。
- 兩個方法最終都求出策略函數和值函數。
- 最優的策略函數都是由收斂的值函數得到的。
- 值函數通過Bellman公式收斂。
由此發現一個關鍵:兩者都需要訓練和更新策略函數和值函數,只是側重點不同。策略迭代的核心是策略,為了提升策略,值函數可以求解得准確,也可以求解得不那么准確;價值迭代的核心是價值,算法的核心部分根本沒有出現與策略有關的內容,直到算法最后通過值函數求出策略。
兩種方法都十分看重自己關心的那部分,可以選擇忽略另一部分,因此可以看出兩個方法都比較極端。既然找到了兩個極端的方法,可不可以找到兩種方法的中間地帶呢?當然可以,這就是本小節要介紹的廣義策略迭代法。
廣義策略迭代法:就是定義一個迭代算法族,其中的算法都是由策略迭代和價值迭代算法組合而成的。組合的方法有很多,可以形成的方法也有很多,而前面提到的兩種算法是廣義策略迭代法的一種特例。由於其中的算法很多,這些算法中很有可能存在一些比前面兩種算法速度更快的方法。