天天看點

強化學習(reforcement learning)之Deep Q-network(DQN)算法簡介

Deep Q-network(DQN)是一項實用度很高的強化學習算法,下面進行一個簡介,後期還會持續更新。

這個是DQN的一個算法僞代碼表示:

強化學習(reforcement learning)之Deep Q-network(DQN)算法簡介

首先初始化,我們初始化2個網絡:Q 和Q^​,其實Q^​就等于Q。一開始Q^​這個目标 Q 網絡,跟我們原來的Q網絡是一樣的。在每一個episode(回合),我們用actor(演員)去跟環境做互動,在每一次互動過程中,我們都會得到一個狀态st​,那我們會采取某一個動作at​。怎麼知道采取哪一個動作at​呢?我們就根據我們現在的 Q-function。但是我們要有探索的機制。比如說我們用 Boltzmann探索或是 Epsilon Greedy的探索。那接下來我們得到獎勵rt​,然後跳到狀态st+1​。現在收集到一些資料,這些資料是(st​,at,rt​,st+1​)。把這些資料塞到我們的 buffer(緩沖區)裡面去。如果buffer 滿的話,我們就再把一些舊的資料丢掉。接下來我們就從我們的buffer裡面去采樣資料,那我們采樣到的是 (si​,ai​,ri​,si+1​)。值得注意的是這些資料跟我們剛放進去的不一定是同一批資料,我們可能抽到一個舊的資料。其實我們采樣出來不是一筆資料,我們采樣出來的是一個batch的資料,我們采樣一個batch 出來,接下來就是計算我們的目标。假設我們采樣出這麼一筆資料。根據這筆資料去算我們的目标。我們的目标是什麼呢?目标要用目标網絡Q^​來算。目标是:y=ri+maxa Q(si+1, a)

下面解釋一下幾個詞的意思:

Q網絡:

為了在連續的狀态和動作空間中計算值函數Qπ(s,a),我們可以用一個函數Qϕ​(s,a)來表示近似計算,稱為價值函數近似(Value Function Approximation)。

Qϕ​(s,a)≈Qπ(s,a)

其中

  • s,a分别是狀态ss和動作aa的向量表示,
  • 函數Qϕ​(s,a)通常是一個參數為ϕ的函數,比如神經網絡,輸出為一個實數,稱為Q 網絡(Q-network)。

Epsilon Greedy:

Epsilon Greedy的意思是說,我們有1 −ε的機率會按照Q-function來決定動作,通常ε就設一個很小的值,1-ε可能是90%,也就是90%的機率會按照 Q-function 來決定動作,但是我們有10%的機率是随機的。通常在實作上ε會随着時間遞減。在最開始的時候。因為還不知道那個動作是比較好的,是以我們會花比較大的力氣在做探索。接下來随着訓練的次數越來越多。已經比較确定說哪一個Q是比較好的。我們就會減少我們的探索,我們會把ε的值變小,主要根據Q-function來決定我們的動作,比較少随機決定動作,這是Epsilon Greedy。

Boltzmann Exploration:

還有一個方法叫做

Boltzmann Exploration

,這個方法就比較像是政策梯度。在政策梯度裡面,網絡的輸出是一個期望的動作空間上面的一個的機率分布,再根據機率分布去做采樣。那其實我們也可以根據Q值去定一個機率分布,假設某一個動作的Q值越大,代表它越好,我們采取這個動作的機率就越高。但是某一個動作的Q值小,不代表我們不能嘗試。簡單來說就是給各個動作配置設定機率,機率大的動作更容易做,機率小一點的動作做的幾率跟小一些。

繼續閱讀