從簡單例子理解DQN的最佳化目標更新引數從而使網路收斂的機制。
我一直不理解Q網路最佳化的目標target =
獎勵值 + gamma
*
下一個狀態的最大Q值
是怎麼使網路往reward最大的方向改變的。看了這個簡單的例子有恍然大悟的感覺。
強化學習,求解bellman方程:值迭代
假設有 A B 三部分按上右下的方式如左邊排列,需要得到讓A到達C而不經過B的最優策略。
C
首先隨機初始化ABC的狀態對應的值,即Q值 A 0
B 0
C 0
然後設定A到B 到C的獎勵值和轉移機率,計算A的Q函式:
Q(s,a) = 轉移機率*
(獎勵值 + gamma
*
下一個狀態的Q值
)
(這是不是和DQN的目標函式很像!)
這樣計算A的Q值為0。3,用得到的Q值更新Q表,
這不就是DQN的估計網路的引數更新嗎!
同理,計算所有狀態-行為對的Q值,並取狀態-行為值最大的Q值更新每個狀態的值函式,我把這裡的值函數理解為每個狀態的值。DQN中我認為對應的是用
下一個狀態的最大Q值作為目標的一部分,
用估計網路得到的狀態-行為對的Q值與該目標求loss,來達到更新引數的目的,更新引數也就是相當於更新了Q表,也就是更新了Q值。
獲得最優策略的方法就是,在該Q函式中,取每個狀態中有最大值的行為。
那麼如何理解DQN的最佳化過程呢?
Q網路最佳化的目標target =
獎勵值 + gamma
*
下一個狀態的最大Q值
我常常想不通,當獎勵是很大的時候,是可以讓估計網路向該目標擬合的,擬合的引數也是可以獲得最大獎勵的。但是如果獎勵值是負的,是懲罰,那豈不是讓估計網路向一個很不好的值擬合了嗎。這樣得到的引數豈不是更傾向於不好的結果?
終於明白了,我忽略了這個網路是有輸入的,網路輸入state,得到action機率值,再用action加以選擇,最終選擇到的就是state-action的對應的q值,這時,將這個q值向目標函式:
target =
獎勵值 + gamma
*
下一個狀態的最大Q值
擬合,本質上是將這個state-action對的q值向
獎勵值 + gamma
*
下一個狀態的最大Q值
擬合,也就是,希望估計網路在這個state下得到的這個action的價值(q值代表該動作的價值)趨近於
獎勵值 + gamma
*
下一個狀態的最大Q值。
而
獎勵值 + gamma
*
下一個狀態的最大Q值的
含義是:當前state下使用這個action會得到的下一個state的最大價值(q值)+當前state下使用這個action得到的及時獎勵,也就是這個s-a的未來累計獎勵。
如果這個獎勵很大,那麼肯定是順理成章的合適。如果這個獎勵很小或者是負值懲罰,那麼!更新引數後,使得輸入這個state,採用這個action對應的q值也很小!然後 ,最重要的來了,
q估計網路每次選擇動作時,會選最大的q值對應的action!!!!!!
(很簡單的話吧,我一直很熟悉然而一直沒真的理解。) 所以由於這個state,採用這個action對應的q值經過更新引數後(相當於更新q表)變得很小,網路下一次再在同樣state的情況下就不會輸出這個action了!!!而是輸出q值最大的action!所以就避開了這個未來累計獎勵不好的s-a!
在這種機制下,每次都選擇最大的q值對應的action,就慢慢向最大的未來累計獎勵邁進~
參考:
最後求關注一下自家的小店:LGDuan小段家珍珠鋪。物美價廉,不用買,漲漲粉絲嘛~
每關注一次LGDuan小段家珍珠鋪,你可以告訴自己是在幫LGD加油一次哦~