1. 程式人生 > >強化學習系列之九:Deep Q Network (DQN)

強化學習系列之九:Deep Q Network (DQN)

      我們終於來到了深度強化學習。

reinforcement learning

1. 強化學習和深度學習結合

      機器學習=目標+表示+優化。目標層面的工作關心應該學習到什麼樣的模型,強化學習應該學習到使得激勵函式最大的模型。表示方面的工作關心資料表示成什麼樣有利於學習,深度學習是最近幾年興起的表示方法,在影象和語音的表示方面有很好的效果。深度強化學習則是兩者結合在一起,深度學習負責表示馬爾科夫決策過程的狀態,強化學習負責把控學習方向。

      深度強化學習有三條線:分別是基於價值的深度強化學習,基於策略的深度強化學習和基於模型的深度強化學習。這三種不同型別的深度強化學習用深度神經網路替代了強化學習的不同部件。基於價值的深度強化學習本質上是一個 Q Learning 演算法,目標是估計最優策略的 Q 值。 不同的地方在於 Q Learning 中價值函式近似用了深度神經網路。比如 DQN 在 Atari 遊戲任務中,輸入是 Atari 的遊戲畫面,因此使用適合影象處理的卷積神經網路(Convolutional Neural Network,CNN)。下圖就是 DQN 的框架圖。

dqn-atari

2. Deep Q Network (DQN) 演算法

      當然了基於價值的深度強化學習不僅僅是把 Q Learning 中的價值函式用深度神經網路近似,還做了其他改進。

      這個演算法就是著名的 DQN 演算法,由 DeepMind 在 2013 年在 NIPS 提出。DQN 演算法的主要做法是 Experience Replay,其將系統探索環境得到的資料儲存起來,然後隨機取樣樣本更新深度神經網路的引數。

experience_replay

      Experience Replay 的動機是:1)深度神經網路作為有監督學習模型,要求資料滿足獨立同分布,2)但 Q Learning 演算法得到的樣本前後是有關係的。為了打破資料之間的關聯性,Experience Replay 方法通過儲存-取樣的方法將這個關聯性打破了。

      DeepMind 在 2015 年初在 Nature 上釋出了文章,引入了 Target Q 的概念,進一步打破資料關聯性。Target Q 的概念是用舊的深度神經網路 去得到目標值,下面是帶有 Target Q 的 Q Learning 的優化目標。

(1)\begin{eqnarray*} J = min (r+\gamma max_{a'} Q(s', a',w^{-})) -Q(s,a,w))^2 \nonumber  \end{eqnarray*}

      下圖是 Nature 論文上的結果。可以看到,打破資料關聯性確實很大程度地提高了效果。

nature-result

3. 後續發展

      DQN 是第一個成功地將深度學習和強化學習結合起來的模型,啟發了後續一系列的工作。這些後續工作中比較有名的有 Double DQN, Prioritized Replay 和 Dueling Network。

3.1 Double DQN

      Thrun 和 Schwartz 在古老的 1993 年觀察到 Q-Learning 的過優化 (overoptimism) 現象 [1],並且指出過優化現象是由於 Q-Learning 演算法中的 max 操作造成的。令 (Q^{target}(s,a)) 是目標 Q 值;我們用了價值函式近似, 是近似 Q 值;令 Y 為近似值和目標之間的誤差,即

(2)\begin{eqnarray*} Q^{approx}(s,a) = Q^{target}(s,a) + Y_{s,a} \nonumber  \end{eqnarray*}

Q-learning 演算法更新步驟將所有的 Q 值更新一遍,這個時候近似值和目標值之間的差值

(3)\begin{eqnarray*} Z &=& r_{s,a}+\gamma max_{a1} Q^{approx}(s',a1) - r_{s,a}+\gamma max_{a2} Q^{target}(s',a2) \\ \nonumber    &=& \gamma max_{a1} Q^{approx}(s',a1) - \gamma max_{a2} Q^{target}(s',a2)  \\ \nonumber    &\ge&\gamma  Q^{approx}(s',a') - Q^{target}(s',a') = \gamma Y_{s',a'} \nonumber  \end{eqnarray*}

其中 。這時候我們發現,即使 也就是一開始是無偏的近似, Q Learning 中的 max 操作也會導致 E[Z] > 0。這就是過優化現象。為了解決這個問題,Thrun 和 Schwartz 提出了 Double Q 的想法。

      Hasselt 等進一步分析了過優化的現象,並將 Double Q 的想法應用在 DQN 上,從而提出了 Double DQN。Double DQN 訓練兩個 Q 網路,一個負責選擇動作,另一個負責計算。兩個 Q 網路交替進行更新,具體演算法如下所示。

double-q-algorithm

下圖是 Hasselt 在論文中報告的實驗結果。從實驗結果來看,Double DQN 擁有比 DQN 好的效果。

double_dqn

3.2 Prioritized Replay

      DQN 用了 Experience Replay 演算法,將系統探索環境獲得的樣本儲存起來,然後從中取樣出樣本以更新模型引數。對於取樣,一個常見的改進是改變取樣的概率。Prioritized Replay [3] 便是採取了這個策略,採用 TD-err 作為評判標準進行取樣。

(4)\begin{eqnarray*} TD-err = |r_{s,a}+\gamma max_{a'} Q(s',a')  - Q(s,a) | \end{eqnarray*}

      下圖是論文中採用的例子。例子中有 n 個狀態,在每個狀態系統一半概率採取 “正確” 或者一半概率 “錯誤”,圖中紅色虛線是錯誤動作。一旦系統採取錯誤動作,遊戲結束。只有第 n 個狀態 “正確” 朝向第 1 個狀態,系統獲得獎勵 1。在這個例子訓練過程中,系統產生無效樣本,導致訓練效率底下。如果採用 TD-err 作為評判標準進行取樣,能夠緩解這個問題。

priorized-example

      論文報告了 Prioritized Replay 演算法效果。從下圖來看,Prioritized Replay 效果很好。

prioritized

3.3 Dueling Network

      Baird 在 1993 年提出將 Q 值分解為價值 (Value) 和優勢 (Advantage) [4]。

(5)\begin{eqnarray*} Q(s,a) = V(s) + A(s,a) \nonumber  \end{eqnarray*}

這個想法可以用下面的例子說明 [5]。上面兩張圖表示,前方無車時,選擇什麼動作並不會太影響行車狀態。這個時候系統關注狀態的價值,而對影響動作優勢不是很關心。下面兩張圖表示,前方有車時,選擇動作至關重要。這個時候系統需要關心優勢了。這個例子說明,Q 值分解為價值和優勢更能刻畫強化學習的過程。

value-advantage

      Wang Z 將這個 idea 應用在深度強化學習中,提出了下面的網路結構 [5]。

dueling-structure

這種網路結構很簡單,但獲得了很好的效果。

dueling

       Dueling Network 是一個深度學習的網路結構。它可以結合之前介紹的 Experience Replay、 Double DQN 和 Prioritized Replay 等方法。 作者在論文中報告 Dueling Network 和 Prioritized Replay 結合的效果最好。

4. 總結

      上次本來想把基於價值的深度強化學習的 Double DQN, Prioritized Replay 和 Dueling Network 也寫了的,寫到晚上 2 點。現在補上這部分內容。

      從上面介紹來看,DQN、 Double DQN、Prioritized Replay 和 Dueling Network 都能在深度學習出現之前的工作找到一些淵源。深度學習的出現,將這些方法的效果提高了前所未有的高度。

      文章結尾歡迎關注我的公眾號 AlgorithmDog,每次更新就會有提醒哦~