從簡單例子理解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加油一次哦~