從零開始強化學(xué)習(xí)(五)——Deep Q-network(DQN)

五. Deep Q-network(DQN)

現(xiàn)實中強化學(xué)習(xí)面臨的狀態(tài)空間往往是連續(xù)的,存在無窮多個狀態(tài)。這種情況下,就不能再使用表格對價值函數(shù)進行存儲,采用價值函數(shù)近似(Value Function Approximation)的方式進行逼近

在連續(xù)的狀態(tài)和動作空間中,可以用函數(shù)Q_\phi(s,a)來表示近似計算:
Q_\phi(s,a) \approx Q^\pi(s,a)
其中函數(shù)Q_\phi(s,a)通常是一個參數(shù)為\phi的函數(shù),比如神經(jīng)網(wǎng)絡(luò)

5.1 狀態(tài)價值函數(shù)(State Value Function)

衡量這個狀態(tài)價值函數(shù)V^{\pi}(s),有兩種不同的做法:MC-based的方法和TD-based的方法:

5.1.1 蒙特卡洛法
  • 方法:

    • 輸入一個狀態(tài),輸出接下來的累計獎勵。是一個回歸問題。網(wǎng)絡(luò)的輸出就是一個值,你希望在輸入s_a的時候,輸出的值跟 G_a越近越好,輸入s_b的時候,輸出的值跟G_b越近越好,把網(wǎng)絡(luò)訓(xùn)練下去就是MC-based的方法
  • 問題:

    • 由于每次都要計算累積獎勵,所以必須等待游戲結(jié)束才能更新網(wǎng)絡(luò),這樣花的時間太長
    • 方差很大。本身具有隨機性,累積獎勵可以看成是一個隨機變量


5.1.2 時序差分法
  • 方法:

    • 假設(shè)在某一個狀態(tài)s_t,采取動作a_t得到獎勵r_t ,跳到狀態(tài)s_{t+1} ,則有:

    V^\pi(s_t) = V^\pi(s_{t+1})+r_t

    • 希望V^\pi(s_t)V^\pi(s_{t+1})相減的損失跟r_t相似,并以此更新V的參數(shù)

5.2 動作價值函數(shù)(State-action Value Function)

動作價值函數(shù)的輸入是狀態(tài)、動作對。表示在某一個狀態(tài)采取某一個動作,都是用演員\pi,得到的累計獎勵期望值
Q函數(shù)的兩種寫法:

  1. 輸入是狀態(tài)和動作,輸出是一個標(biāo)量
  2. 輸入是狀態(tài),輸出是多個值(只有離散動作才能使用)

方法:

  • 假設(shè)有一個Q函數(shù)和某一個策略\pi,根據(jù)策略\pi學(xué)習(xí)出的Q函數(shù),保證可以找到一個\pi好的新的策略\pi',在用相同方法找它的Q函數(shù)以及新的更好的策略\pi'(s) = \arg \max\limits_a Q^\pi(s,a)

證明:為什么用Q^\pi(s,a)決定出來的\pi'一定比\pi

  1. V π ( s ) = Q π ( s , a ) V^\pi(s)=Q^\pi(s,a)V
  2. \max_a Q^\pi(s,a) = Q^\pi(s,\pi'(s))max

由1、2式可得:

  1. V^{\pi}(s) \leq Q^\pi(s,\pi'(s))
  2. Q^\pi(s,\pi'(s)) = E[r_t+V^\pi(s_{t+1})|s_t=s,a_t=\pi'(s)]

綜合3、4可得:V^{\pi}(s) \leq E[r_t+r_{t+1}V^\pi(s_{t+2})|s_t=s,a_t=\pi'(s)]
=E[r_t+r_{t+1}+r_{t+2}+V^\pi(s_{t+3})|s_t=s,a_t=\pi'(s)]=E[r_t+r_{t+1}+r_{t+2}+\cdots|s_t=s,a_t=\pi'(s)]=V^{\pi'}(s)

即證畢,對于估計某一個策略的Q-function,接下來就可以找到另外一個策略\pi'比原來的策略還要更好


5.3 目標(biāo)網(wǎng)絡(luò)(target network)

在學(xué)習(xí)Q-function的時候,會用到TD的概念。那怎么用TD?在狀態(tài)s_t,采取動作a_t以后,得到獎勵r_t,然后跳到狀態(tài)s_{t+1}。根據(jù)這個Q-function:
\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) =r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)
但是實際上這樣的一個輸入并不好學(xué)習(xí),因為假設(shè)這是一個回歸問題,\mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right)是網(wǎng)絡(luò)的輸出,r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)是目標(biāo),實際上目標(biāo)是可變的。在做反向傳播的時候,Q^{\pi}的參數(shù)會被更新,并會把兩個更新的結(jié)果加在一起,這樣會導(dǎo)致訓(xùn)練變得不太穩(wěn)定

所以可以把其中一個Q網(wǎng)絡(luò),通常是會把右邊這個Q網(wǎng)絡(luò)固定住。在訓(xùn)練的時候只更新左邊的Q網(wǎng)絡(luò)的參數(shù),而右邊的Q網(wǎng)絡(luò)的參數(shù)會被固定住。因為右邊的**Q網(wǎng)絡(luò)負(fù)責(zé)產(chǎn)生目標(biāo),所以叫目標(biāo)網(wǎng)絡(luò)**。因為目標(biāo)網(wǎng)絡(luò)是固定的,所以得到的目標(biāo)r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right)的值也是固定的。只調(diào)左邊網(wǎng)絡(luò)的參數(shù),它就變成是一個回歸問題。希望模型的輸出的值跟目標(biāo)越接近越好,可以最小化它的均方誤差(mean square error)

在實現(xiàn)的時候,把目標(biāo)網(wǎng)絡(luò)固定,只調(diào)模型輸出的網(wǎng)絡(luò)。在把輸出的網(wǎng)絡(luò)更新幾次以后,再去用更新的網(wǎng)絡(luò)替換目標(biāo)網(wǎng)絡(luò)

5.4 探索(Exploration)

這個問題其實就是探索-利用窘境(Exploration-Exploitation dilemma)問題

當(dāng)使用Q函數(shù)時,策略完全取決于Q函數(shù)。在采取動作的時候,會采取Q值最大的動作。這樣可能會一直采取相同的動作,所以需要探索機制,避免一直采取相同的動作

5.4.1 ε-貪心(ε-greedy)
  • 定義:

    • 有1-ε的概率會按照Q函數(shù)決定動作,主要根據(jù)Q函數(shù)決定動作,比較少隨機決定動作:
      \pi(a|s)= \begin{cases} \underset{a}{\operatorname{argmax}}Q(s,a)\ \ \ \ 1-ε\\ 隨機\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ε \end{cases}

    • 通常ε會隨時間遞減。隨著訓(xùn)練次數(shù)的增多可以減少探索

  • 對象:

    • 無法嘗試Q值比較差的動作,可能的動作有:
      • 最大Q值對應(yīng)動作
      • 隨機動作
5.4.2 玻爾茲曼探索(Bolzman Exploration)
  • 定義:

    • 輸出動作空間上的概率分布,根據(jù)概率分布采樣選擇動作(取指數(shù) --> 歸一化)
      P(a|s) = \frac{\exp(Q(s,a))}{\sum_a \exp(Q(s,a))}
  • 對象:

    • 根據(jù)Q值確定了動作空間的概率分布,可以通過采樣選擇任意動作

5.5 經(jīng)驗回放(Experience Replay)

思想:構(gòu)建一個回訪緩沖區(qū)(replay buffer),會將策略與環(huán)境互動收集的數(shù)據(jù)(狀態(tài)-動作-獎勵...)放到緩沖區(qū)中。循環(huán)迭代訓(xùn)練Q函數(shù)時,會從數(shù)據(jù)緩沖區(qū)隨機挑一個批量(batch)出來更新Q函數(shù)。

迭代地去訓(xùn)練這個Q-function,在每次迭代里面,從這個buffer里面隨機挑一個batch出來,根據(jù)這把經(jīng)驗去更新Q-function,就跟TD learning要有一個目標(biāo)網(wǎng)絡(luò)是一樣的

特點:

  • 回訪緩沖區(qū)內(nèi)的經(jīng)驗可能來自不同策略
  • 異策略(off-policy)
  • 減少了跟環(huán)境做互動的次數(shù),數(shù)據(jù)利用高效
  • 多樣化的訓(xùn)練數(shù)據(jù)

5.6 DQN原理

DQN使用深度卷積神經(jīng)網(wǎng)絡(luò)近似擬合狀態(tài)動作值函數(shù)Q(s,a),其網(wǎng)絡(luò)結(jié)構(gòu)如上圖所示。DQN模型的輸入是距離當(dāng)前時刻最近的4幀圖像,該輸入經(jīng)過3個卷積層和2個全連接層的非線性變化后,最終在輸出層輸出每個動作對應(yīng)的Q值


算法:

  1. 初始化兩個網(wǎng)絡(luò)Q,\hat{Q},開始目標(biāo)網(wǎng)絡(luò)\hat{Q}等于Q
  2. 基于Q函數(shù)探索機制Q(ε,玻爾茲曼)選擇動作,獲得獎勵,狀態(tài)從s_t跳到s_{t+1}
  3. 將數(shù)據(jù)經(jīng)驗(s_t,a_t,r_{t+1},s_{t+1})塞到數(shù)據(jù)緩沖區(qū)中
  4. 從緩沖區(qū)中采樣一批量的數(shù)據(jù),根據(jù)數(shù)據(jù)計算目標(biāo):y=r_i+\max_a \hat{Q}(s_{i+1},a)
  5. 更新Q的參數(shù)使得Q(s_i,a_i)盡可能接近于y(回歸)
  6. 每C步更新目標(biāo)網(wǎng)絡(luò)\hat{Q}=Q
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容