1. 程式人生 > >換個角度理解DQN

換個角度理解DQN

話說有2個同學小明和大明,小明三年級,大明四年級。
有一天,大明做一道語文填空,填一句三年級背誦的古文句子,大明三年級的書早就扔掉了,只好求助附近的小明,小明剛背誦過這篇古文,馬上就給出了填空答案,大明恍然大悟,順利的填上了答案。
舉一反三,這個道理告訴我們,特別是程式設計師,只要涉及到數學,十年工作經驗有什麼用,數學公式你還能看懂幾個?再比如打CS,打得越久就越剛?所以別羨慕人家比你年輕工資拿的比你高,像我一樣打了19年CS還不是照樣排天梯時不時被打自閉?
扯遠了,開頭的例子其實想表達一個DQN不太好理解的一個關鍵,為什麼會用2個一模一樣的網路Q預測和Q現實(也叫目標網路)呢?
論文裡面的虛擬碼先不停的實驗得到一些<s1,a1,r1,s2>這樣的經驗資料儲存起來,比如儲存2000條,一旦達到2000條就可以進行訓練,這裡不是每2000條開始一次訓練,而是達到2000條之後每一條都即時更新Q預測網路,但是Q現實網路比如每50條更新一次,為什麼這樣做,這樣做有一個名稱叫做時間差分演算法(TD),為什麼要用TD,如果不用TD計算LOSS又會怎樣?來,看看這個核心的Q值更新函式:
換個角度理解DQN


Q值等於現在的Q值加上學習率(當先獎勵+衰減度未來能夠獲得的最大獎勵-當前的Q值)
對了,還有一點沒說,Q現實網路是不會反向更新的,所有的更新和學習都是再Q預測網路上進行的。前面談到的Q現實網路每50條更新只是簡單的把Q預測的每層網路權重值複製給Q現實網路。
那Q現實網路有什麼作用呢?它的作用就是參與計算LOSS:
換個角度理解DQN
因為如果不用2個網路,只用一個Q預測網路,你想想看,Q預測網路是即時更新的,他的經驗和最近的動作有關聯,這樣的預測就像是大明要填對那道三年級的題,但是他最近都是學習的四年級的課程,以前的課程早就忘了,怎麼能做對呢?