Intro
眾所周知,在2014年,Deepmind使用DQN刷新了強化學習在Atari游戲上的SOTA記錄。使DQN成為當年的SOTA,主要依靠兩大利器:ReplayBuffer和TargetNetwork。
ReplayBuffer
采樣與更新是這樣的: 更新是在采樣中的,更新和采樣靠replayBuffer進行聯系。連續多次采樣,當采樣數量每達到一次閾值,則進行一次更新。采樣得到的樣本扔進ReplayBuffer,更新使用ReplayBuffer中的數據。
至於它有什么好處,Paper中的原話是
To alleviate the problems of correlated data and non-stationary distributions
有兩點,一、打消采樣數據相關性。二、讓數據分布變得更穩定。這兩點都是針對Q-learning的缺點提出來的。
- 打消采樣數據相關性:同一個episode前后step的數據是高度相關的,如果按照Q-learning的每個step后緊着進行更新,那么迭代過程會出現較大方差。
- 采樣數據分布穩定性:DQN是連續多次采樣,然后進行一次更新。你將一沓(s,a,r,s)放在Buffer中后,那么就可以按照batch進行處理,按照batch投入神經網絡中進行計算更新。在Q-learning中每次更新只使用一個tuple啊!
想用神經網絡來搞RL,那就得有ReplayBuffer。2014年DQN中的ReplayBuffer准確講應該叫vanilla ReplayBuffer。它沒有作什么對buffer池中數據的處理,后面也出了一些改進,現在大家用的都是Priority Replay Buffer了。
TargetNetwork
在Q-learning中,用來更新的TD Target是\(r + \gamma*Q_{max}\),這里的MAXQ是即時查表獲得。
DQN用神經網絡把這個Q表取代掉了,那么假如我們使用被更新的network來產出\(Q_{max}\),那這個TD Target是頻繁變動,穩定性沒了。出於這一點考慮,我們分出來targetNet和evalNet。讓targetNet的更新頻率比evalNet更低,那么我們的td target就不會頻繁變動了,不就解決了嗎?
