深度強化學習——DQN
一、DRL
原因:在普通的Q-learning中,當狀態和動作空間是離散且維數不高時可使用Q-Table儲存每個狀態動作對的Q值,而當狀態和動作空間是高維連續時,使用Q-Table不現實。
通常做法是把Q-Table的更新問題變成一個函式擬合問題,相近的狀態得到相近的輸出動作。如下式,通過更新引數 θ 使Q函式逼近最優Q值
DRL是將深度學習(DL)與強化學習(RL)結合,直接從高維原始資料學習控制策略。而DQN是DRL的其中一種演算法,它要做的就是將卷積神經網路(CNN)和Q-Learning結合起來,CNN的輸入是原始影象資料(作為狀態State),輸出則是每個動作Action對應的價值評估Value Function(Q值)。
二、DL與RL結合的問題
- DL需要大量帶標籤的樣本進行監督學習;RL只有reward返回值,而且伴隨著噪聲,延遲(過了幾十毫秒才返回),稀疏(很多State的reward是0)等問題;
- DL的樣本獨立;RL前後state狀態相關;
- DL目標分佈固定;RL的分佈一直變化,比如你玩一個遊戲,一個關卡和下一個關卡的狀態分佈是不同的,所以訓練好了前一個關卡,下一個關卡又要重新訓練;
- 過往的研究表明,使用非線性網路表示值函式時出現不穩定等問題。
三、DQN解決問題方法
- 通過Q-Learning使用reward來構造標籤(對應問題1)
- 通過experience replay(經驗池)的方法來解決相關性及非靜態分佈問題(對應問題2、3)
- 使用一個CNN(MainNet)產生當前Q值,使用另外一個CNN(Target)產生Target Q值(對應問題4)
1、構造標籤
前面提到DQN中的CNN作用是對在高維且連續狀態下的Q-Table做函式擬合,而對於函式優化問題,監督學習的一般方法是先確定Loss Function,然後求梯度,使用隨機梯度下降等方法更新引數。DQN則基於Q-Learning來確定Loss Function。
Q-Learning
有關RL的基礎知識不再囉嗦,直接看Q-Learning的更新公式:
而DQN的Loss Function為 L
其中 θ 是網路引數,目標為 TargetQ=r+γmaxa′Q(s′,a′;θ)
顯然Loss Function是基於Q-Learning更新公式的第二項確定的,兩個公式意義相同,都是使當前的Q值逼近Target Q值。
接下來,求 L(θ) 關於 θ 的梯度,使用SGD等方法更新網路引數 θ。
2、經驗池(experience replay)
經驗池的功能主要是解決相關性及非靜態分佈問題。具體做法是把每個時間步agent與環境互動得到的轉移樣本 (st,at,rt,st+1) 儲存到回放記憶單元,要訓練時就隨機拿出一些(minibatch)來訓練。(其實就是將遊戲的過程打成碎片儲存,訓練時隨機抽取就避免了相關性問題)
3、目標網路
在Nature 2015版本的DQN中提出了這個改進,使用另一個網路(這裡稱為TargetNet)產生Target Q值。具體地,Q(s,a;θi) 表示當前網路MainNet的輸出,用來評估當前狀態動作對的值函式;Q(s,a;θ−i) 表示TargetNet的輸出,代入上面求 TargetQ 值的公式中得到目標Q值。根據上面的Loss Function更新MainNet的引數,每經過N輪迭代,將MainNet的引數複製給TargetNet。
引入TargetNet後,再一段時間裡目標Q值使保持不變的,一定程度降低了當前Q值和目標Q值的相關性,提高了演算法穩定性。
四、DQN演算法流程
1、網路模型
輸入的是被處理成灰度圖的最近4幀 84×84 影象,經過幾個卷積層(沒有池化層)後接兩個全連線層,輸出是所有動作的Q值。
2、演算法虛擬碼
NIPS 2013版
Nature 2015版
2、演算法流程圖(2015版)
主要流程圖
Loss Function 的構造
五、總結
DQN是第一個將深度學習模型與強化學習結合在一起從而成功地直接從高維的輸入學習控制策略。
創新點:
- 基於Q-Learning構造Loss Function(不算很新,過往使用線性和非線性函式擬合Q-Table時就是這樣做)。
- 通過experience replay(經驗池)解決相關性及非靜態分佈問題;
- 使用TargetNet解決穩定性問題。
優點:
- 演算法通用性,可玩不同遊戲;
- End-to-End 訓練方式;
- 可生產大量樣本供監督學習。
缺點:
- 無法應用於連續動作控制;
- 只能處理只需短時記憶問題,無法處理需長時記憶問題(後續研究提出了使用LSTM等改進方法);
- CNN不一定收斂,需精良調參。