上篇文章介紹了 Model-based 的通用方法——動態規劃,本文內容介紹 Model-Free 狀況下 Prediction 問題,即 "Estimate the value function of an unknown MDP"。html
蒙特卡洛方法(Monte-Carlo Methods,簡稱MC)也叫作蒙特卡洛模擬,是指使用隨機數(或更常見的僞隨機數)來解決不少計算問題的方法。其實本質就是,經過儘量隨機的行爲產生後驗,而後經過後驗來表徵目標系統。web
以下圖爲使用蒙特卡羅方法估算 \(\pi\) 值,放置30000個隨機點後,\(\pi\) 的估算值與真實值相差0.07%。
bootstrap
在Model-Free的狀況下,MC在強化學習中的應用就是獲取價值函數,其特色以下:app
First-Visit Monte-Carlo Policy Evaluation:ide
評估狀態 \(s\) 在給定策略 \(\pi\) 下的價值函數 \(v_{\pi}(s)\) 時,在一次 episode 中,狀態 \(s\) 在時刻 \(t\) 第一次被訪問時,計數器 \(N(s) ← N(s) + 1\),累計價值 \(S(s) ← S(s) + G_t\)
當整個過程結束後,狀態 \(s\) 的價值 \(V(s) = \frac{S(s)}{N(s)}\)
根據大數定理(Law of Large Numbers):\(V(s) → v_{\pi}(s) \text{ as } N(s) → \infty\)函數
Every-Visit Monte-Carlo Policy Evaluation:學習
評估狀態 \(s\) 在給定策略 \(\pi\) 下的價值函數 \(v_{\pi}(s)\) 時,在一次 episode 中,狀態 \(s\) 在時刻 \(t\) 每次被訪問時,計數器 \(N(s) ← N(s) + 1\),累計價值 \(S(s) ← S(s) + G_t\)
當整個過程結束後,狀態 \(s\) 的價值 \(V(s) = \frac{S(s)}{N(s)}\)
根據大數定理(Law of Large Numbers):\(V(s) → v_{\pi}(s) \text{ as } N(s) → \infty\)ui
咱們先看下增量式求平均:
The mean \(\mu_1, \mu_2, ...\) of a sequence \(x_1, x_2, ...\) can be computed incrementally:
\[ \begin{align} \mu_k &= \frac{1}{k}\sum_{j=1}^{k}x_j\\ &= \frac{1}{k}\Bigl(x_k+\sum_{j=1}^{k-1}x_j \Bigr)\\ &= \frac{1}{k}(x_k + (k-1)\mu_{k-1})\\ &= \mu_{k-1} + \frac{1}{k}(x_k - \mu_{k-1}) \end{align} \]google
根據上式咱們能夠得出增量式進行MC更新的公式:
每次 episode 結束後,增量式更新 \(V(s)\),對於每一個狀態 \(S_t\),其對應的 return 爲 \(G_t\)
\[ N(S_t) ← N(S_t) + 1 \\ V(S_t) ← V(S_t) + \frac{1}{N(S_t)}(G_t - V(S_t)) \]lua
在非靜態問題中,更新公式形式能夠改成以下:
\[V(S_t) ← V(S_t) + \alpha (G_t - V(S_t))\]
時序差分方法(Temporal-Difference Methods,簡稱TD)特色:
下圖爲 TD target 在不一樣 n 下的示意圖:
n-step returns 能夠表示以下:
\(n=1\) 時:\(G_{t}^{(1)} = R_{t+1} + \gamma V(S_{t+1})\)
\(n=2\) 時:\(G_{t}^{(2)} = R_{t+1} + \gamma R_{t+2} + \gamma^2 V(S_{t+2})\)
...
\(n=\infty\) 時:\(G_{t}^{\infty} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{T-1} R_T)\)
所以,n-step return \(G_{t}^{(n)} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n}V(S_{t+n}))\)
n-step TD 更新公式:
\[V(S_t) ← V(S_t) + \alpha (G_t^{(n)} - V(S_t))\]
咱們可否把全部的 n-step return 組合起來?答案確定是能夠,組合後的return被稱爲是\(\lambda\)-return,其中\(\lambda\)是爲了組合不一樣的n-step returns引入的權重因子。
\(\lambda\)-return:
\[G_t^{\lambda} = (1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}\]
Forward-view TD(\(\lambda\)):
\[V(S_t) ← V(S_t) + \alpha\Bigl(G_t^{\lambda} - V(S_t)\Bigr)\]
TD(\(\lambda\))對應的權重公式爲 \(( 1-\lambda)\lambda^{n-1}\),分佈圖以下所示:
Forward-view TD(\(\lambda\))的特色:
帶有資格跡的TD(\(\lambda\)):
\[ \delta_t = R_{t+1} + \gamma V(S_{t+1} - V(S_t))\\ V(s) ← V(s) + \alpha \delta_t E_t(s) \]
其中\(\delta_t\)爲TD-error,\(E_t(s)\)爲資格跡。
資格跡(Eligibility Traces)
資格跡本質就是對於頻率高的,最近的狀態賦予更高的信任(credit)/ 權重。
下圖是對資格跡的一個描述:
關於TD(\(\lambda\))有一個結論:
The sum of offline updates is identical for forward-view and backward-view TD(λ).
這一塊的內容再也不深刻介紹了,感興趣的能夠看Sutton的書和David的教程。
相同點:都是從經驗中在線的學習給定策略 \(\pi\) 的價值函數 \(v_{\pi}\)
不一樣點:
下圖以 Drive Home 舉例說明二者的不一樣,MC 只能在回家後才能改變對回家時間的預判,而 TD 在每一步中不斷根據實際狀況來調整本身的預判。
關於 MC 和 TD 中方差和誤差問題的解釋:
- MC 更新基於真實的 return \(G_t = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{T-1}R_{T}\) 是 \(v_{\pi}(S_t)\) 的無偏估計。
- 真實的TD target \(R_{t+1} + \gamma v_{\pi}(S_{t+1})\) 也是 \(v_{\pi}(S_t)\) 的無偏估計。可是實際更新時用的 TD target \(R_{t+1} + \gamma V(S_{t+1})\) 是 \(v_{\pi}(S_t)\) 的有偏估計。
- TD target 具備更低的誤差:
- Return 每次模擬依賴於許多的隨機動做、轉移機率以及回報
- TD target 每次只依賴一次隨機動做、轉移機率以及回報
首先咱們從 backup tree 上去直觀地認識三者的不一樣。
DP backup tree:Full-Width step(完整的step)
MC backup tree:完整的episode
TD(0) backup tree:單個step
Bootstrapping:基於已預測的值進行更新
Sampling:基於採樣的指望來更新
下圖從宏觀的視角顯示了 RL 的幾種基本方法的區別:
[1] 維基百科-蒙特卡洛方法
[2] Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto, 2018
[3] David Silver's Homepage