DQN(Deep Q-learning)入門教程(三)之蒙特卡羅法算法與Q-learning算法

蒙特卡羅法

在介紹Q-learing算法之前,我們還是對蒙特卡羅法(MC)進行一些介紹。MC方法是一種無模型(model-free)的強化學習方法,目標是得到最優的行為價值函數\(q_*\)。在前面一篇博客中,我們所介紹的動態規划算法則是一種有模型的算法。那麼問題來了,什麼是模型(model)?模型其實就是我們在第一篇博客:DQN(Deep Q-learning)入門教程(一)之強化學習介紹種所介紹的狀態轉化模型: \(P_{ss’}^a\)

在動態規劃解決問題的時候,我們是已知\(P_{ss’}^a\),但是實際上我們也可能對於\(P_{ss’}^a\)我們是未知的。那麼怎麼辦呢?此時,我們使用經驗平均來解決這個問題。其中的思想有點類似大數定理,儘管我不知道模型概率是什麼,但是我可以使用無數次的實驗來逼近這個概率。

任然是分為兩個部分:

  1. 策略評估
  2. 策略控制
    • 探索性
    • 無探索性

策略評估

前面我們說了,我們使用多次實驗來解決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)\):

    1. 第一次訪問蒙特卡羅方法:只是使用每次實驗第一次出現狀態\(s\)的放回值。比如說上圖中\(G_{11},G_{21}\),但是不使用\(G_{12}\)

      \[\begin{equation}v(s)=\frac{G_{11}(s)+G_{21}(s)+\cdots}{N(s)}\end{equation} \\
      N(s)代表出現的次數
      \]

    2. 每次訪問蒙特卡羅方法:則就是只要出現過,就使用,比如說上圖中的\(G_{11},G_{12},G_{21}\)

      \[\begin{equation}v(s)=\frac{G_{11}(s)+G_{12}(s)+\cdots+G_{21}(s)+\cdots}{N(s)}\end{equation}
      \]

不過我們可以想一想,這樣計算平均值會有什麼問題?浪費內存空間,因為我們需要儲存該狀態所有歷史實驗數據然後再取平均。因此我們對取平均值的方法進行改進,改進的原理如下:

\[\begin{equation}\mu_{k}=\frac{1}{k} \sum_{j=1}^{k} x_{j}=\frac{1}{k}\left(x_{k}+\sum_{j=1}^{k-1} x_{j}\right)=\frac{1}{k}\left(x_{k}+(k-1) \mu_{k-1}\right)=\mu_{k-1}+\frac{1}{k}\left(x_{k}-\mu_{k-1}\right)\end{equation}
\]

也就是說,狀態價值公式可以改寫為:

\[\begin{equation}\begin{array}{c}
N\left(s\right)=N\left(s\right)+1 \\
V_{k+1}\left(s\right)=V_{k}\left(S\right)+\frac{1}{N\left(S\right)}\left(G_{t}-V_{k}\left(S\right)\right)
\end{array}\end{equation}
\]

這樣我們存儲上一步的狀態價值函數就🆗了。若\(N(s)\)越大,則\(\frac{1}{N(s)}\)越小,則新樣本對總體均值的影響小,反之亦然。實際上,我們也可以使用一個學習率\(\alpha\)代替\(V\left(s\right)=V\left(S\right)+\alpha\left(G_{t}-V\left(S\right)\right)\)

探索性初始化MC控制

探索性初始是指每個狀態都有一定幾率作為初始狀態。因此這裡有一個前提就是對於所有的狀態我們都是已知的,這樣我們才能夠從狀態集中隨機的選取\(s \in \mathcal{S}\)

算法的流程圖如下:

無探索性初始化MC控制

ES的方法有一點問題,因為有時候agent是不可能在任意狀態開始的,比如說你玩電游,初始狀態是確定的,只有一個或者幾個,ES方法是一個不現實的假設,同時我們也不知道所有的狀態集\(\mathcal{S}\)

無探索性初始是指初始狀態是固定的,然後我們在裏面加入探索率 \(\epsilon\) (隨着試驗次數的增加而逐漸減小)來對\(action\)選擇:使用\(1 – \epsilon\)的概率貪婪地選擇目前認為是最大行為價值的行為,而使用 \(\epsilon\)的概率隨機的從所有\(m\) 個可選的行為中隨機選擇行為。該方法稱之為\(\epsilon-greedy\)

用公式可以表示為:

\[\pi(a|s)= \begin{cases} \epsilon/m + 1- \epsilon & {if\; a_{*} = \arg\max_{a \in A}Q(s,a)}\\ \epsilon/m & {else} \end{cases}
\]

而方法又可以分為兩種:

  • On-Policy:直接對我們的策略進行估值和改進
  • Off-Policy:結合一個其他的策略,來對我們的決策策略進行估值和改進。

On-Policy的算法如下所示:

輸入:狀態集 \(S,\) 動作集 \(A,\) 即時獎勵 \(R,\) 哀減因子 \(\gamma,\) 探索率 \(\epsilon\)
輸出:最優的動作價值函數 \(q_{*}\) 和最優策略 \(\pi_{*}\)

  1. 初始化所有的動作價值Q \((s, a)=0,\) 狀態次數 \(N(s, a)=0,\) 採樣次數 \(k=0,\) 隨機初始化一個策略 \(\pi\)

  2. \(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}
\]

  1. 對於該狀態序列里出現的每一狀態行為對 \(\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}
\]

  1. 基於新計算出的動作價值, 更新當前的 \(\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.
\]

  1. 如果所有的Q \((s, a)\) 收斂, 則對應的所有 \(Q(s, a)\) 即為最優的動作價值函數 \(q_{* \circ}\) 對應的策略 \(\pi(a | s)\) 即為最優策略 \(\pi_{* \circ}\) 否則轉到第二步。

Off-Policy的介紹可以看這裡

蒙特卡羅方法解決了狀態轉移模型\(P\)未知的問題,但是其有一個特點,算法需要一個完整的\(episode\)才能夠進行策略更新。

Q-learning簡介

下面是維基百科上面關於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說明

首先先說一下Q-learning 中的Q,Q代表這動作價值函數\(q(a,s)\),Q的更新公式如下:

\[{\displaystyle Q^{new}(s_{t},a_{t})\leftarrow \underbrace {Q(s_{t},a_{t})} _{\text{舊的值}}+\underbrace {\alpha } _{\text{學習率}}\cdot \overbrace {{\bigg (}\underbrace {\underbrace {r_{t}} _{\text{獎勵}}+\underbrace {\gamma } _{\text{獎勵衰減因子}}\cdot \underbrace {\max _{a}Q(s_{t+1},a)} _{\text{estimate of optimal future value}}} _{\text{new value (temporal difference target)}}-\underbrace {Q(s_{t},a_{t})} _{\text{舊的值}}{\bigg )}} ^{\text{temporal difference}}}
\]

這裡藉助莫煩教程裏面的一些圖來進行說明:

  • Q現實:表示我們執行Action得到的動作價值
  • Q估計:表示這個值是由我們進行迭代估計的

算法步驟

算法的步驟如下:

算法輸入:迭代輪數T,狀態集S, 動作集 \(A,\) 步長 \(\alpha,\) 哀減因子 \(\gamma,\) 探索率 \(\epsilon\)
輸出:所有的狀態和動作對應的價值 \(Q\)

  1. 隨機初始化所有的狀態和動作對應的價值Q,對於終止狀態其Q值初始化為0.

  2. 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算法具體進行實踐。

參考

Tags: