標准dqn的策略網絡參數更新所采用的規則為Q-learning中的更新規則,總所周知的是Q-learning是異策略算法,異策略算法就是行為策略和評估策略(更新所得策略)是不同的。
更新規則:
![]()
q-learning 如果使用不使用函數近似來表示Q值,那么存在:

也就是說,只要運行迭代的次數足夠多,趨近於無窮的情況那么我們得到最優策略下的Q值,而最優策略又必是確定性策略,那么我們就可以獲得最優策略了。
但是如果不使用函數近似來表示Q值,那么算法就沒有泛化性,由於實際問題中狀態空間十分巨大,所以這樣做是不現實的。面對實際問題唯一可行的就是使用函數近似來表示Q值,如果使用函數近似后的Q-learning能夠收斂並獲得最優解,那么就有:

那么,我們就可以獲得最優Q值。
但是現實是使用函數近似后的Q-learning往往難以收斂,就連獲得局部最優解都難以保證,尤其是使用非線性的函數表示Q值,也就是說實際使用函數近似后的Q-learning得到的最終策略並不是確定性策略,因為只有得到最優解我們才會獲得最優策略,也就是說只有最終獲得最優策略才是確定性策略,而算法在中間的迭代過程(計算過程)所進行評估得到的策略(中間策略)都不是確定性策略,都是隨機策略。
這里面就有一個誤區,那就是Q-learning學習到的策略就一定是確定性策略,其實不然,Q-learning只是在迭代計算的時候更新規則使用的是確定性的更新規則( 使用后一狀態的最大Q值來代替V值而不是計算各Q值的期望, 即 max Q'(s,a) ),也只用Q-learning算法最終得到最優策略的時候我們才會獲得確定性策略,其中的迭代過程中所評估的策略都不是確定性的策略。而使用函數近似的Q-learning算法是難以獲得最優解的,或者說使用函數近似后的Q-learning最終能得到的策略都是隨機策略,這也是為什么我們在評估函數近似的Q-learning的時候是使用隨機策略(epilon-greedy策略)而不是確定性策略(greedy策略)。
那么為什么在標准dqn中要將epilon設置為0.05呢???
在Q-learning的更新規則可以看到,在迭代計算中所進行評估的策略是當前epilon下的epilon-greedy策略,但是需要注意的一點是雖然中間迭代計算過程中的評估策略是epilon-greedy策略,但是它的Q值並不是該策略下的真實值。那么又該如何評價計算過程中的策略性能呢,這時當然是使用epilon-greedy策略,也就是當前所得Q值確定的epilon-greedy策略,又由於當前評估策略的Q值並不是當前epilon下的最優解或者說並不是當前epilon下的真實Q值,這也就導致此時進行測評時epilon並沒有一個很好的依據,但是有一點就是訓練策略的epilon和測試策略的epilon相近那么此時測試所得性能表現就會越好。但由於我們實際測試算法性能時需要對比的是不同算法的性能,那么只要保證每個算法在相同訓練時間下測試策略使用的epilon保持一致就可(各算法在相同訓練時間下對應的測試epilon相同即可),至於單獨一個算法在不同訓練時間下測試策略的epilon的設置和訓練epilon設置是否相近並不能太多影響各算法間性能的對比,因此我們可以在整個測試期間都將epilon設置為一個固定值。由於在標准dqn中在運行一段時間后訓練epilon固定為0.1,那么我們最終評估策略時epilon都是等於0.1的,而此時的Q值所對應的真實策略應該是epilon小於0.1的epilon-greedy策略(由於Q-learning的更新規則導致),同時由於最終設定統一的測試epilon應該更多的考慮運算后期的真實性能測評,因此測試epilon設置最好為小於最終訓練epilon=0.1的一個值,因此這里設置為0.05(當然這也是小於0.1大於0的一個中間值,由於最終策略不是epilon=0的確定性策略也不是最后訓練策略epsilon=0.1,因此取中間值0.05)。
------------------------------------------------------
