- AI自動化測試:技術(shù)原理、平臺搭建與工程實踐
- 騰訊TuringLab團(tuán)隊
- 743字
- 2020-08-13 13:47:05
3.2.2 DQN
在2015年,Mnih等人[1]提出了DQN(Deep Q-Network),其是利用深度學(xué)習(xí)進(jìn)行強(qiáng)化學(xué)習(xí)的網(wǎng)絡(luò)。DQN利用Q-learning訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò),并且添加目標(biāo)網(wǎng)絡(luò)提高模型的學(xué)習(xí)性能。
在DQN出現(xiàn)之前,利用神經(jīng)網(wǎng)絡(luò)逼近強(qiáng)化學(xué)習(xí)中的動作值函數(shù)時會出現(xiàn)不穩(wěn)定甚至不收斂的問題;DQN出現(xiàn)之后,使用經(jīng)驗回放和目標(biāo)網(wǎng)絡(luò)這兩種技術(shù)解決了這個問題。
(1)經(jīng)驗回放
經(jīng)驗回放的具體做法是在每個時間點存儲智能體的經(jīng)驗et=(st,at,rt,st+1),形成回放記憶序列D={e1,…,eN}。在訓(xùn)練時,每次從回放記憶序列D中隨機(jī)提取小批量的經(jīng)驗樣本,并使用隨機(jī)梯度下降算法更新網(wǎng)絡(luò)參數(shù)。經(jīng)驗回放通過重復(fù)采樣歷史數(shù)據(jù)增加了數(shù)據(jù)的使用效率,同時減少了數(shù)據(jù)之間的相關(guān)性。
(2)目標(biāo)網(wǎng)絡(luò)
DQN使用卷積神經(jīng)網(wǎng)絡(luò)逼近動作值函數(shù),我們將該卷積神經(jīng)網(wǎng)絡(luò)稱為Q網(wǎng)絡(luò),將動作值函數(shù)參數(shù)化表示為Q(s,a,θi),其中θi為Q網(wǎng)絡(luò)在第i次迭代時的參數(shù)。Q網(wǎng)絡(luò)每次迭代的優(yōu)化目標(biāo)值為:

該目標(biāo)值由另外一個單獨的目標(biāo)網(wǎng)絡(luò)產(chǎn)生,其中,
為下一時刻的狀態(tài),
為所有可能的動作,
為目標(biāo)網(wǎng)絡(luò)的參數(shù)。
在Q網(wǎng)絡(luò)的訓(xùn)練過程中,參數(shù)θi通過最小化以下目標(biāo)函數(shù)進(jìn)行更新:

對上式求偏導(dǎo)可得:

目標(biāo)網(wǎng)絡(luò)和Q網(wǎng)絡(luò)都為卷積神經(jīng)網(wǎng)絡(luò),二者可以使用相同的結(jié)構(gòu)。目標(biāo)網(wǎng)絡(luò)的參數(shù)每經(jīng)過N次迭代便用Q網(wǎng)絡(luò)的參數(shù)θi更新一次,在中間過程中目標(biāo)網(wǎng)絡(luò)的參數(shù)
保持不變。
DQN的網(wǎng)絡(luò)結(jié)構(gòu)如圖3-3所示。網(wǎng)絡(luò)的輸入是經(jīng)過預(yù)處理后的連續(xù)4幀游戲圖像,經(jīng)過3層卷積層和2層全連接層,輸出每個動作所對應(yīng)的Q值。與很多傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)不同,DQN所用的卷積神經(jīng)網(wǎng)絡(luò)沒有池化層。

圖3-3 DQN網(wǎng)絡(luò)結(jié)構(gòu)示意
與傳統(tǒng)的強(qiáng)化學(xué)習(xí)方法相比,DQN主要有兩個貢獻(xiàn)。
1)使用經(jīng)驗回放和目標(biāo)網(wǎng)絡(luò)來穩(wěn)定模型的訓(xùn)練過程。
2)設(shè)計了一種端到端的強(qiáng)化學(xué)習(xí)方法,即以原始像素和游戲比賽得分作為輸入,輸出每個動作對應(yīng)的Q值。
[1] Mnih V,Kavukcuoglu K,Silver D,et al.Playing Atari with Deep Reinforcement Learning[C].Proceedings of the Workshops at the 26th Neural Information Processing Systems,2013:201-220.
- DBA攻堅指南:左手Oracle,右手MySQL
- 新一代通用視頻編碼H.266/VVC:原理、標(biāo)準(zhǔn)與實現(xiàn)
- Cocos2d-x游戲開發(fā):手把手教你Lua語言的編程方法
- C語言程序設(shè)計基礎(chǔ)與實驗指導(dǎo)
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Python數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)實戰(zhàn)
- Hands-On GUI Programming with C++ and Qt5
- 大話Java:程序設(shè)計從入門到精通
- Clean Code in C#
- 區(qū)塊鏈架構(gòu)之美:從比特幣、以太坊、超級賬本看區(qū)塊鏈架構(gòu)設(shè)計
- 零基礎(chǔ)學(xué)Java第2版
- Java并發(fā)實現(xiàn)原理:JDK源碼剖析
- Android應(yīng)用開發(fā)攻略
- 面向物聯(lián)網(wǎng)的Android應(yīng)用開發(fā)與實踐
- Mastering VMware vSphere Storage