在介紹Q-learing算法以前,咱們仍是對蒙特卡羅法(MC)進行一些介紹。MC方法是一種無模型(model-free)的強化學習方法,目標是獲得最優的行爲價值函數\(q_*\)。在前面一篇博客中,咱們所介紹的動態規劃算法則是一種有模型的算法。那麼問題來了,什麼是模型(model)?模型其實就是咱們在第一篇博客:DQN(Deep Q-learning)入門教程(一)之強化學習介紹種所介紹的狀態轉化模型: \(P_{ss'}^a\)。html
在動態規劃解決問題的時候,咱們是已知\(P_{ss'}^a\),可是實際上咱們也可能對於\(P_{ss'}^a\)咱們是未知的。那麼怎麼辦呢?此時,咱們使用經驗平均來解決這個問題。其中的思想有點相似大數定理,儘管我不知道模型機率是什麼,可是我可使用無數次的實驗來逼近這個機率。git
任然是分爲兩個部分:github
前面咱們說了,咱們使用屢次實驗來解決model-free,所以咱們將歷史實驗數據稱之爲經驗,而後進行平均求得的價值函數當成價值函數看成結果。算法
經驗:咱們使用策略作不少次實驗,每次實驗都是從最初狀態到終止狀態。假如一次實驗所得獲得的數據以下:\(S_1,A_1,R_2,S_2,A_2,...S_t,A_t,R_{t+1},...R_T, S_T\),則在狀態\(s\)處得到的回報是:\(G_{t}(s)=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-1} R_{T}\)。而咱們就能夠進行屢次實驗,就能夠獲得多份數據。函數
平均:平均有兩種方式,第一次訪問蒙特卡羅方法和每次訪問蒙特卡羅方法。假如咱們作實驗的到的數據以下,如今須要來計算\(G(s)\):學習
第一次訪問蒙特卡羅方法:只是使用每次實驗第一次出現狀態\(s\)的放回值。好比說上圖中\(G_{11},G_{21}\),可是不使用\(G_{12}\)。ui
每次訪問蒙特卡羅方法:則就是隻要出現過,就使用,好比說上圖中的\(G_{11},G_{12},G_{21}\)。spa
不過咱們能夠想想,這樣計算平均值會有什麼問題?浪費內存空間,由於咱們須要儲存該狀態全部歷史實驗數據而後再取平均。所以咱們對取平均值的方法進行改進,改進的原理以下:htm
也就是說,狀態價值公式能夠改寫爲:blog
這樣咱們存儲上一步的狀態價值函數就🆗了。若\(N(s)\)越大,則\(\frac{1}{N(s)}\)越小,則新樣本對整體均值的影響小,反之亦然。實際上,咱們也可使用一個學習率\(\alpha\)代替\(V\left(s\right)=V\left(S\right)+\alpha\left(G_{t}-V\left(S\right)\right)\)。
探索性初始是指每一個狀態都有必定概率做爲初始狀態。所以這裏有一個前提就是對於全部的狀態咱們都是已知的,這樣咱們纔可以從狀態集中隨機的選取\(s \in \mathcal{S}\)。
算法的流程圖以下:
ES的方法有一點問題,由於有時候agent是不可能在任意狀態開始的,好比說你玩電遊,初始狀態是肯定的,只有一個或者幾個,ES方法是一個不現實的假設,同時咱們也不知道全部的狀態集\(\mathcal{S}\)。
無探索性初始是指初始狀態是固定的,而後咱們在裏面加入探索率 \(\epsilon\) (隨着試驗次數的增長而逐漸減少)來對\(action\)選擇:使用\(1 - \epsilon\)的機率貪婪地選擇目前認爲是最大行爲價值的行爲,而使用 \(\epsilon\)的機率隨機的從全部\(m\) 個可選的行爲中隨機選擇行爲。該方法稱之爲\(\epsilon-greedy\)
用公式能夠表示爲:
而方法又能夠分爲兩種:
On-Policy的算法以下所示:
輸入:狀態集 \(S,\) 動做集 \(A,\) 即時獎勵 \(R,\) 哀減因子 \(\gamma,\) 探索率 \(\epsilon\)
輸出:最優的動做價值函數 \(q_{*}\) 和最優策略 \(\pi_{*}\)
初始化全部的動做價值Q \((s, a)=0,\) 狀態次數 \(N(s, a)=0,\) 採樣次數 \(k=0,\) 隨機初始化一個策略 \(\pi\)
\(k=k+1\), 基於策略 \(\pi\) 進行第k次蒙特卡羅採樣,獲得一個完整的狀態序列:
\[S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, \ldots S_{t}, A_{t}, R_{t+1}, \ldots R_{T}, S_{T} \]
- 對於該狀態序列裏出現的每一狀態行爲對 \(\left(S_{t}, A_{t}\right),\) 計算其收穫 \(G_{t},\) 更新其計數 \(N(s, a)\) 和行爲價值函數 \(Q(s, a)\)
\[\begin{array}{c} G_{t}=R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots \gamma^{T-t-1} R_{T} \\ N\left(S_{t}, A_{t}\right)=N\left(S_{t}, A_{t}\right)+1 \\ Q\left(S_{t}, A_{t}\right)=Q\left(S_{t}, A_{t}\right)+\frac{1}{N\left(S_{t}, A_{t}\right)}\left(G_{t}-Q\left(S_{t}, A_{t}\right)\right) \end{array} \]
- 基於新計算出的動做價值, 更新當前的 \(\epsilon-貪婪\)策略:
\[\epsilon=\frac{1}{k} \]\[\pi(a | s)=\left\{\begin{array}{ll} \epsilon / m+1-\epsilon & \text { if } a^{*}=\arg \max _{a \in A} Q(s, a) \\ \epsilon / m & \text { else } \end{array}\right. \]
- 若是全部的Q \((s, a)\) 收斂, 則對應的全部 \(Q(s, a)\) 即爲最優的動做價值函數 \(q_{* \circ}\) 對應的策略 \(\pi(a | s)\) 即爲最優策略 \(\pi_{* \circ}\) 不然轉到第二步。
Off-Policy的介紹能夠看這裏
蒙特卡羅方法解決了狀態轉移模型\(P\)未知的問題,可是其有一個特色,算法須要一個完整的\(episode\)纔可以進行策略更新。
下面是維基百科上面關於Q-learning的介紹。
Q-learning is a model-free reinforcement learning algorithm to learn a policy telling an agent what action to take under what circumstances. It does not require a model (hence the connotation "model-free") of the environment, and it can handle problems with stochastic transitions and rewards, without requiring adaptations.
Q-learning和MC方法都是model-free的方法。與MC方法相似的是,它兩都是使用價值迭代來更新價值函數,最後更新策略。不過與MC方法不一樣的是:MC方法須要完整的\(episode\)才能進行更新,而Q-learning則不須要。
首先先說一下Q-learning 中的Q,Q表明這動做價值函數\(q(a,s)\),Q的更新公式以下:
這裏藉助莫煩教程裏面的一些圖來進行說明:
算法的步驟以下:
算法輸入:迭代輪數T,狀態集S, 動做集 \(A,\) 步長 \(\alpha,\) 哀減因子 \(\gamma,\) 探索率 \(\epsilon\)
輸出:全部的狀態和動做對應的價值 \(Q\)
隨機初始化全部的狀態和動做對應的價值Q,對於終止狀態其Q值初始化爲0.
for i in range(0,T), 進行迭代:
a) 初始化S爲當前狀態序列的第一個狀態。
b) 用\(\epsilon-貪婪法\)在當前狀態\(S\)選擇出動做 \(A\)
c) 在狀態\(S\)執行當前動做 \(A,\) 獲得新狀態 \(S^{\prime}\) 和獎勵 \(R\)
d) 更新價值函數:\(Q(S, A)+\alpha\left(R+\gamma \max _{a} Q\left(S^{\prime}, a\right)-Q(S, A)\right)\)
e) \(S=S^{\prime}\)
f) 若是S'是終止狀態, 當前輪迭代完畢,不然轉到步驟b
這篇博客主要是介紹了無模型下的問題求解方式:蒙特卡羅法和Q-learning法。在下篇博客中,將使用q-learning算法具體進行實踐。