昨天時做了蒙地卡羅控制 (Monte Carlo Control),透過實作模擬我們可以得到各狀態下,適合的動作為何。今天針對昨天時做出的結果,說明一些蒙地卡羅控制的特色。
在相同的 GridWorld 任務中,相對於動態規劃方法可以穩定找到相同的最佳策略。蒙地卡羅方法下,昨天提供的是跑了 1000 次模擬的結果,發現其狀況並沒有非常好。以下是進行 10 萬次模擬的結果:
============================================================
[Policy]
Policy Type: Greedy
Episode: 100000
[['*' '<' '<' 'v']
['^' '^' '>' 'v']
['v' '^' 'v' 'v']
['>' '^' '>' '*']]
============================================================
我們可以發現就算在這樣的情況下,仍然會出現很有趣的策略。(ex: 在狀態 8 時,這次模擬所產生出的策略,要我們繞一圈之後再往終點前進。) 你可能會想「我們不是已經模擬很多次了嗎,為什麼還會出現這樣的結果?」,以下提供一些可能的答案:
狀態 8 沒有向上「探索」
這句話的意思並不是探索時,沒有產生往上的動作。而是我們走到狀態 8 時,剛好沒有遇到向上探索。以設定的情況來說,產生向上探索的機率只有 0.125 ( = 0.5/4),而且這個數值會隨著 episode 進行而減小。至此,還沒有考慮有些 episode 沒有移動到狀態 8,那些 episode 中狀態 8 的動作價值就不會更新。
某次狀態 8 的結果太悲劇了
假設在模擬的過程中,很幸運的有能夠更新 q(8, 上) 的情況,但又很不幸地遇到狀態 4 的策略是向下走,那麼這次更新的結果為 q(8, 上) 就變成 -39.499 (可以自行使用 GetValue 函數測試)。就算後面有一些比較好的探索結果,也會因為與這次的結果平均,使得動作價值偏低,不會被貪婪法選擇。
既然這個方法這麼不穩定,為什麼還要用這個方法呢?
避免 Curse of Dimensionality
之前有提到,在動態規劃方法中,會遇到狀態增加計算量增加的問題。然而對模擬而言,狀態增加並不會增加太多單次模擬的計算量。(當然,整體需要模擬的次數仍然會增加,不過模擬次數這個問題是可以解決的)。
可以分工
在動態規劃方法中,我們沒辦法整合大家估計的價值,並產生一個更好的策略。但在蒙地卡羅方法中,完全不會有這個問題。只要大家提供「估計的動作價值」與「更新該動作價值的次數」,即可用加權平均的方式,整合兩者的估計結果,並產生一個更好的策略。
上述說可以解決模擬次數的問題,也是因為蒙地卡羅方法可以分工。
至此,我們介紹完強化學習方法中的「動態規劃方法」以及「蒙地卡羅方法」,接下來會介紹 TD Learning。現今的強化學習方法,基本上都是奠基在這個方法上再做修改。(ex: DQN)