好久沒(méi)寫(xiě)了,看了一下中間隔了居然有一個(gè)月,這種沒(méi)有活水流入的生活,確實(shí)會(huì)讓人feel bad;
這篇要講到DQN,主要是Nature2015那版(在這之前還有一版NIPS2013):
為什么要把Q-learning從用表格來(lái)記錄每個(gè)狀態(tài)的價(jià)值升級(jí)到神經(jīng)網(wǎng)絡(luò)呢,因?yàn)闋顟B(tài)和動(dòng)作空間如果是高維連續(xù)的,那么表格顯然記錄不過(guò)來(lái);
整個(gè)DQN的過(guò)程是這樣的,首先將當(dāng)前狀態(tài)s輸入網(wǎng)絡(luò)得到所有action的Q值,以argmax選擇Q值最大的那個(gè)a作為當(dāng)前動(dòng)作,然后environment又會(huì)轉(zhuǎn)移到下一個(gè)狀態(tài)s’,并得到reward;將(s,a,s',r)作為一條記錄,放入經(jīng)驗(yàn)池,然后每次從經(jīng)驗(yàn)池取一定數(shù)目的訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練。
神經(jīng)網(wǎng)絡(luò)最重要的是loss的設(shè)計(jì),這里從Q-learning的貝爾曼公式出發(fā):

每一次Q值的迭代,都是用當(dāng)前動(dòng)作可能得到的最大價(jià)值去迭代當(dāng)前的Q值,這里我們可以認(rèn)為函數(shù)的目標(biāo)就是使當(dāng)前的Q估計(jì)值不斷接近Q目標(biāo)值;那么loss即如此:這里的y是r+r*maxQ(s',a),

當(dāng)前網(wǎng)絡(luò)得到在s采取動(dòng)作a的Q值,那么yi需要的是在s采取動(dòng)作a后到達(dá)s'的最大可能Q值,是根據(jù)上一個(gè)迭代周期得到的;所以這里用到了雙網(wǎng)絡(luò)結(jié)構(gòu),即把s‘輸入target網(wǎng)絡(luò),用target網(wǎng)絡(luò)的參數(shù)計(jì)算出q-target值:

然后梯度下降:

這里的雙網(wǎng)絡(luò)結(jié)構(gòu)也是從NIPS2013到Nature2015的一大改進(jìn),“引入target_net后,再一段時(shí)間里目標(biāo)Q值保持不變,一定程度降低了當(dāng)前Q值和目標(biāo)Q值的相關(guān)性,提高了算法穩(wěn)定性”。
所以說(shuō)如果用單網(wǎng)絡(luò)的話(huà)就是把s'和a'輸?shù)骄W(wǎng)絡(luò)里?這里目標(biāo)值在單網(wǎng)絡(luò)的得到如何得到的?就是把s‘輸入當(dāng)前網(wǎng)絡(luò)得到,然后用得到的q值去和s得到的做loss。
RL和DL結(jié)合還有一個(gè)問(wèn)題是DL都是樣本獨(dú)立的,但是RL前后狀態(tài)相關(guān),這里用到了經(jīng)驗(yàn)回放的策略解決該問(wèn)題,說(shuō)白了就是把樣本存起來(lái),然后每次拿個(gè)mini-batch訓(xùn)練。