學習筆記:
Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016html
數學符號看不懂的,先看看這裏:算法
蒙特卡洛是一個賭城的名字。馮·諾依曼給這方法起了這個名字,增長其神祕性。
蒙特卡洛方法是一個計算方法,被普遍的用於許多領域,用於求值。
相對於肯定性的算法,蒙特卡洛方法是基於抽樣數據來計算結果。bootstrap
蒙特卡洛方法的總體思路是:模擬 -> 抽樣 -> 估值。app
示例:
好比:如何求\(\pi\)的值。一個使用蒙特卡洛方法的經典例子以下:
咱們知道一個直徑爲1的圓的面積爲\(\pi\)。
把這個圓放到一個邊長爲2的正方形(面積爲4)中,圓的面積和正方形的面積比是:\(\frac{\pi}{4}\)。
若是能夠測量出這個比值\(c\),那麼\(\pi=c \times 4\)。
如何測量比值\(c\)呢?用飛鏢去扎這個正方形。紮了許屢次後,用圓內含的小孔數除以正方形含的小孔數能夠近似的計算比值\(c\)。ide
說明:
模擬 - 用飛鏢去扎這個正方形爲一次模擬。
抽樣 - 數圓內含的小孔數和正方形含的小孔數。
估值 - 比值\(c\) = 圓內含的小孔數 / 正方形含的小孔數oop
環境是可模擬的
在實際的應用中,模擬容易實現。相對的,瞭解環境的完整知識反而比較困難。
因爲環境可模擬,咱們就能夠抽樣。學習
只適合情節性任務(episodic tasks)
由於,須要抽樣完成的結果,只適合有限步驟的情節性任務。優化
只要知足蒙特卡洛方法的使用條件,就可使用蒙特卡洛方法。
好比:遊戲類都適合:徹底信息博弈遊戲,像圍棋、國際象棋。非徹底信息博弈遊戲:21點、麻將等等。idea
蒙特卡洛方法的總體思路是:模擬 -> 抽樣 -> 估值。spa
如何應用到強化學習中呢?
強化學習的目的是獲得最優策略。
獲得最優策略的一個方法是求\(v_{pi}(s), \ q_{pi}{s, a}\)。 - 這就是一個求值問題。
結合通用策略迭代(GPI)的思想。
下面是蒙特卡洛方法的一個迭代過程:
解釋
Exploring Starts 假設 - 指有一個探索起點的環境。
好比:圍棋的當前狀態就是一個探索起點。自動駕駛的汽車也許是一個沒有起點的例子。
on-policy method - 評估和優化的策略和模擬的策略是同一個。
off-policy method - 評估和優化的策略和模擬的策略是不一樣的兩個。
有時候,模擬數據來源於其它處,好比:已有的數據,或者人工模擬等等。
behavior policy - 行爲策略。off policy method中,模擬數據來源的策略。
根據上面的不一樣情境,在強化學習中,提供了不一樣的蒙特卡洛方法。
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(\pi(s) \gets\) arbitrary
\(Returns(s, a) \gets\) empty listRepeat forever:
Choose \(S_0 \in \mathcal{S}\) and \(A_0 \in \mathcal{A}(S_0)\) s.t. all pairs have probability > 0
Generate an episode starting from \(S_0, A_0\), following \(\pi\)
For each pair \(s,a\) appearing in the episode:
$G \gets $ return following the first occurrence of s,a
Append \(G\) to \(Returns(s, a)\)
\(Q(s, a) \gets average(Returns(s, a))\)
For each s in the episode:
\(\pi(s) \gets \underset{a}{argmax} Q(s,a)\)
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(\pi(a|s) \gets\) an arbitrary \(\epsilon\)-soft policy
\(Returns(s, a) \gets\) empty listRepeat forever:
(a) Generate an episode using \(\pi\)
(b) For each pair \(s,a\) appearing in the episode:
$G \gets $ return following the first occurrence of s,a
Append \(G\) to \(Returns(s, a)\)
\(Q(s, a) \gets average(Returns(s, a))\)
(c) For each s in the episode:
\(A^* \gets \underset{a}{argmax} \ Q(s,a)\)
For all \(a \in \mathcal{A}(s)\):
if \(a = A^*\)
\(\pi(a|s) \gets 1 - \epsilon + \frac{\epsilon}{|\mathcal{A}(s)|}\)
if \(a \ne A^*\)
\(\pi(a|s) \gets \frac{\epsilon}{|\mathcal{A}(s)|}\)
Initialize, for all \(s \in \mathcal{S}, \ a \in \mathcal{A}(s)\):
\(Q(s,a) \gets\) arbitrary
\(C(s,a) \gets\) 0
\(\mu(a|s) \gets\) an arbitrary soft behavior policy
\(\pi(a|s) \gets\) a deterministic policy that is greedy with respect to QRepeat forever:
Generate an episode using \(\mu\):
\(S_0,A_0,R_1,\cdots,S_{T-1},A_{T-1},R_T,S_T\)
\(G \gets 0\)
\(W \gets 1\)
For t = T - 1 downto 0:
\(G \gets \gamma G + R_{t+1}\)
\(C(S_t, A_t) \gets C(S_t, A_t) + W\)
\(Q(S_t, A_t) \gets Q(S_t, A_t) + \frac{W}{C(S_t, A_t)} |G - Q(S_t, A_t)|\)
\(\pi(S_t) \gets \underset{a}{argmax} \ Q(S_t, a)\) (with ties broken consistently)
If \(A_t \ne \pi(S_t)\) then ExitForLoop
\(W \gets W \frac{1}{\mu(A_t|S_t)}\)
動態規劃是基於模型的,而蒙特卡洛方法是無模型的。
注:基於模型(model-base)仍是無模型(model-free)是看(狀態或者行動)價值(\(G, v(s), q(s,a)\))是如何獲得的?
若是是已知的、根據已知的數據計算出來的,就是基於模型的。
若是是取樣獲得的、試驗獲得的,就是無模型的。
動態規劃的計算的,而蒙特卡洛方法的計算是取樣性的(sampling)。
注:引導性的(bootstrapping)仍是取樣性的(sampling)是看(狀態或者行動)價值(\(G, v(s), q(s,a)\))是如何計算的?
若是是根據其它的價值計算的,就是引導性的。
若是是經過在實際環境中模擬的、取樣的,就是取樣性的。
引導性和取樣性並非對立的。能夠是取樣的,而且是引導的。
若是價值是根據其它的價值計算的,可是有部分值(好比:獎賞)是取樣獲得的,就是無模型、取樣的、引導性的。
解釋:
上面兩個區別,能夠從計算狀態價值\(v_{\pi}(s), q_{\pi}(s, a)\)的過程來看:
動態規劃是從初始狀態開始,一次計算一步可能發生的全部狀態價值,而後迭代計算下一步的全部狀態價值。這就是引導性。
蒙特卡洛方法是從初始狀態開始,經過在實際環境中模擬,獲得一段情節(從頭到結束)。
好比,若是結束是失敗了,這段情節上的狀態節點,本次價值都爲0,;若是成功了,本次價值都爲1。
下面的比喻(雖然不太恰當,可是比較形象)
想象一棵樹,動態規劃是先算第一層的全部節點價值,而後算第二層的全部節點價值。
蒙特卡洛方法,隨便找一個從根到葉子的路徑。根據葉子的值,計算路徑上每一個節點價值。
能夠看出蒙特卡洛方法比較方便。
蒙特卡洛方法能夠從交互中直接學習優化的策略,而不須要一個環境的動態模型。
環境的動態模型 - 彷佛表示環境的狀態變化是能夠徹底推導的。代表瞭解環境的全部知識。
說白了,就是能夠計算\(v(s), q(s, a)\)這意味着必須瞭解全部狀態變化的可能性。
蒙特卡洛方法只須要一些(多是大量的)取樣就能夠。
蒙特卡洛方法的每一個狀態價值計算是獨立的。不會影響其餘的狀態價值。