強化學習讀書筆記 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
學習筆記:
Reinforcement Learning: An Introduction, Richard S. Sutton and Andrew G. Barto c 2014, 2015, 2016
數學符號看不懂的,先看看這里:
蒙特卡洛方法簡話
蒙特卡洛是一個賭城的名字。馮·諾依曼給這方法起了這個名字,增加其神秘性。
蒙特卡洛方法是一個計算方法,被廣泛的用於許多領域,用於求值。
相對於確定性的算法,蒙特卡洛方法是基於抽樣數據來計算結果。
蒙特卡洛方法的基本思路
蒙特卡洛方法的整體思路是:模擬 -> 抽樣 -> 估值。
示例:
比如:如何求\(\pi\)的值。一個使用蒙特卡洛方法的經典例子如下:
我們知道一個直徑為1的圓的面積為\(\pi\)。
把這個圓放到一個邊長為2的正方形(面積為4)中,圓的面積和正方形的面積比是:\(\frac{\pi}{4}\)。
如果可以測量出這個比值\(c\),那么\(\pi=c \times 4\)。
如何測量比值\(c\)呢?用飛鏢去扎這個正方形。扎了許多次后,用圓內含的小孔數除以正方形含的小孔數可以近似的計算比值\(c\)。
說明:
模擬 - 用飛鏢去扎這個正方形為一次模擬。
抽樣 - 數圓內含的小孔數和正方形含的小孔數。
估值 - 比值\(c\) = 圓內含的小孔數 / 正方形含的小孔數
蒙特卡洛方法的使用條件
-
環境是可模擬的
在實際的應用中,模擬容易實現。相對的,了解環境的完整知識反而比較困難。
由於環境可模擬,我們就可以抽樣。 -
只適合情節性任務(episodic tasks)
因為,需要抽樣完成的結果,只適合有限步驟的情節性任務。
蒙特卡洛方法在強化學習中的用例
只要滿足蒙特卡洛方法的使用條件,就可以使用蒙特卡洛方法。
比如:游戲類都適合:完全信息博弈游戲,像圍棋、國際象棋。非完全信息博弈游戲:21點、麻將等等。
蒙特卡洛方法在強化學習中的基本思路
蒙特卡洛方法的整體思路是:模擬 -> 抽樣 -> 估值。
如何應用到強化學習中呢?
強化學習的目的是得到最優策略。
得到最優策略的一個方法是求\(v_{pi}(s), \ q_{pi}{s, a}\)。 - 這就是一個求值問題。
結合通用策略迭代(GPI)的思想。
下面是蒙特卡洛方法的一個迭代過程:
- 策略評估迭代
1. 探索 - 選擇一個狀態(s, a)。
1. 模擬 - 使用當前策略\(\pi\),進行一次模擬,從當前狀態(s, a)到結束,隨機產生一段情節(episode)。
1. 抽樣 - 獲得這段情節上的每個狀態(s, a)的回報\(G(s, a)\),記錄\(G(s, a)\)到集合\(Returns(s, a)\)。
1. 估值 - q(s, a) = Returns(s, a)的平均值。
(因為狀態(s, a)可能會被多次選擇,所以狀態(s, a)有一組回報值。) - 策略優化 - 使用新的行動價值\(q(s, a)\)優化策略\(\pi(s)\)。
解釋
- 上述的策略評估迭代步驟,一般會針對所有的狀態-行動,或者一個起始(\(s_0, a_0\))下的所有狀態-行動。
這也說明持續探索(continual exploration)是蒙特卡洛方法的主題。 - 模擬過程 - 會模擬到結束。是前進式的,隨機選擇下一個行動,一直前進到結束為止。
因此可以看出蒙特卡洛方法需要大量的迭代,才能正確的找到最優策略。 - 策略評估是計算行動價值(\(q(s, a)\))。
(也可以是狀態價值,則\(\pi(s)\)為狀態\(s\)到其下一個最大價值狀態\(s‘\)的任意行動。)
計算方法:
一些概念
-
Exploring Starts 假設 - 指有一個探索起點的環境。
比如:圍棋的當前狀態就是一個探索起點。自動駕駛的汽車也許是一個沒有起點的例子。 -
first-visit - 在一段情節中,一個狀態只會出現一次,或者只需計算第一次的價值。
-
every-visit - 在一段情節中,一個狀態可能會被訪問多次,需要計算每一次的價值。
-
on-policy method - 評估和優化的策略和模擬的策略是同一個。
-
off-policy method - 評估和優化的策略和模擬的策略是不同的兩個。
有時候,模擬數據來源於其它處,比如:已有的數據,或者人工模擬等等。 -
target policy - 目標策略。off policy method中,需要優化的策略。
-
behavior policy - 行為策略。off policy method中,模擬數據來源的策略。
根據上面的不同情境,在強化學習中,提供了不同的蒙特卡洛方法。
- 蒙特卡洛(起始點(Exploring Starts))方法
- On-policy first visit 蒙特卡洛方法(for \(\epsilon\)-soft policies)
- Off-policy every-visit 蒙特卡洛方法
蒙特卡洛(起始點(Exploring Starts))方法
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)\)
On-policy first visit 蒙特卡洛方法(for \(\epsilon\)-soft policies)
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)|}\)
Off-policy every-visit 蒙特卡洛方法
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)\)這意味着必須了解所有狀態變化的可能性。
蒙特卡洛方法只需要一些(可能是大量的)取樣就可以。 -
蒙特卡洛方法可以用於模擬(樣本)模型。
-
蒙特卡洛方法可以只考慮一個小的狀態子集。
-
蒙特卡洛方法的每個狀態價值計算是獨立的。不會影響其他的狀態價值。
蒙特卡洛方法的劣勢
- 需要大量的探索(模擬)。
- 基於概率的,不是確定性的。