強化學習(十)Double DQN DDQN

2022-03-17 06:03:14 字數 2913 閱讀 8514

在強化學習(九)deep q-learning高階之nature dqn中,我們討論了nature dqn的演算法流程,它通過使用兩個相同的神經網路,以解決資料樣本和網路訓練之前的相關性。但是還是有其他值得優化的點,文字就關注於nature dqn的乙個改進版本: double dqn演算法(以下簡稱ddqn)。

本章內容主要參考了icml 2016的deep rl tutorial和ddqn的**。

在ddqn之前,基本上所有的目標q值都是通過貪婪法直接得到的,無論是q-learning, dqn(nips 2013)還是 nature dqn,都是如此。比如對於nature dqn,雖然用了兩個q網路並使用目標q網路計算q值,其第j個樣本的目標q值的計算還是貪婪法得到的,計算入下式:$$y_j= \begin r_j& \\ r_j + \gamma\max_q'(\phi(s'_j),a'_j,w') & \end$$

使用max雖然可以快速讓q值向可能的優化目標靠攏,但是很容易過猶不及,導致過度估計(over estimation),所謂過度估計就是最終我們得到的演算法模型有很大的偏差(bias)。為了解決這個問題, ddqn通過解耦目標q值動作的選擇和目標q值的計算這兩步,來達到消除過度估計的問題。

ddqn和nature dqn一樣,也有一樣的兩個q網路結構。在nature dqn的基礎上,通過解耦目標q值動作的選擇和目標q值的計算這兩步,來消除過度估計的問題。

在ddqn這裡,不再是直接在目標q網路裡面找各個動作中最大q值,而是先在當前q網路中先找出最大q值對應的動作,即$$a^(s'_j, w) = \arg\max_q(\phi(s'_j),a,w)$$

然後利用這個選擇出來的動作$a^(s'_j, w) $在目標網路裡面去計算目標q值。即:$$y_j = r_j + \gamma q'(\phi(s'_j),a^(s'_j, w),w')$$

綜合起來寫就是:$$y_j = r_j + \gamma q'(\phi(s'_j),\arg\max_q(\phi(s'_j),a,w),w')$$

除了目標q值的計算方式以外,ddqn演算法和nature dqn的演算法流程完全相同。

這裡我們總結下ddqn的演算法流程,和nature dqn的區別僅僅在步驟2.f中目標q值的計算。

演算法輸入:迭代輪數$t$,狀態特徵維度$n$, 動作集$a$, 步長$\alpha$,衰減因子$\gamma$, 探索率$\epsilon$, 當前q網路$q$,目標q網路$q'$, 批量梯度下降的樣本數$m$,目標q網路引數更新頻率$c$。

輸出:q網路引數

1. 隨機初始化所有的狀態和動作對應的價值$q$.  隨機初始化當前q網路的所有引數$w$,初始化目標q網路$q'$的引數$w' = w$。清空經驗回放的集合$d$。

2. for i from 1 to t,進行迭代。

a) 初始化s為當前狀態序列的第乙個狀態, 拿到其特徵向量$\phi(s)$

b) 在q網路中使用$\phi(s)$作為輸入,得到q網路的所有動作對應的q值輸出。用$\epsilon-$貪婪法在當前q值輸出中選擇對應的動作$a$

c) 在狀態$s$執行當前動作$a$,得到新狀態$s'$對應的特徵向量$\phi(s')和獎勵$r$,是否終止狀態is_end

d) 將$\$這個五元組存入經驗回放集合$d$

e) $s=s'$

f)  從經驗回放集合$d$中取樣$m$個樣本$\, j=1,2.,,,m$,計算當前目標q值$y_j$:$$y_j= \begin r_j& \\ r_j + \gamma q'(\phi(s'_j),\arg\max_q(\phi(s'_j),a,w),w')& \end$$

g)  使用均方差損失函式$\frac\sum\limits_^m(y_j-q(\phi(s_j),a_j,w))^2$,通過神經網路的梯度反向傳播來更新q網路的所有引數$w$

h) 如果i%c=1,則更新目標q網路引數$w'=w$

i) 如果$s'$是終止狀態,當前輪迭代完畢,否則轉到步驟b)

注意,上述第二步的f步和g步的q值計算也都需要通過q網路計算得到。另外,實際應用中,為了演算法較好的收斂,探索率$\epsilon$需要隨著迭代的進行而變小。

下面我們用乙個具體的例子來演示dqn的應用。仍然使用了openai gym中的cartpole-v0遊戲來作為我們演算法應用。cartpole-v0遊戲的介紹參見這裡。它比較簡單,基本要求就是控制下面的cart移動使連線在上面的pole保持垂直不倒。這個任務只有兩個離散動作,要麼向左用力,要麼向右用力。而state狀態就是這個cart的位置和速度, pole的角度和角速度,4維的特徵。堅持到200分的獎勵則為過關。

完整的**參見我的github: 

#step 2: calculate y

y_batch =

current_q_batch = self.q_value.eval(feed_dict=)

max_action_next = np.argmax(current_q_batch, axis=1)

target_q_batch = self.target_q_value.eval(feed_dict=)

for i in

range(0,batch_size):

done = minibatch[i][4]

ifdone:

else

: target_q_value =target_q_batch[i, max_action_next[i]]

而之前的nature  dqn這裡的目標q值計算是如下這樣的:

#step 2: calculate y

y_batch =

q_value_batch = self.target_q_value.eval(feed_dict=)

for i in

range(0,batch_size):

done = minibatch[i][4]

ifdone:

else

:除了上面這部分的區別,兩個演算法的**完全相同。

強化學習(十)Double DQN DDQN

在強化學習 九 deep q learning高階之nature dqn中,我們討論了nature dqn的演算法流程,它通過使用兩個相同的神經網路,以解決資料樣本和網路訓練之前的相關性。但是還是有其他值得優化的點,文字就關注於nature dqn的乙個改進版本 double dqn演算法 以下簡稱...

強化學習 強化學習基礎

為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...

強化學習 1 1 0 強化學習介紹

abstract 本文介紹reinforcement learning的具體特點和與其他機器學習演算法不同之處,本文是乙個骨架性的文章,所有專有名詞都保持英文原始單詞,具體內容會在後續中給出詳細解答。keywords reinforcement learning,situation,action,e...