深度學習算法 Q-learning 原理

Q-learning
Q-learning 是 value-based 的方法,在這種方法中我們不是要訓練一個 policy,而是要訓練一個critic網絡。critic 並不直接採取行爲,只是對現有的 actor ,評價它的好壞。

Value-Fuction
critic 給出了一個 value function ,代表在遇到遊戲的某個 state 後,採取策略爲的actor  一直玩到遊戲結束,所能得到的 reward 之和。

 (即critic)的輸入是某個state,輸出是一個scalar標量。上圖遊戲畫面中左邊的  很大,因爲當前怪物比較多,防護罩也沒被摧毀,從此時玩到遊戲結束得到的 reward 就會比較多;而相對的右邊的  就比較小。綜上 critic 的輸出取決於兩點:

state,這個就是左右圖對比,剛纔說過了
actor 的策略 ,如果是個很弱的actor即便左圖可能也得到很低的reward。
 

怎麼計算呢?

計算的2種方式:
 1、Monte-Carlo (MC) based approach :


將作爲的輸入最終輸出 ,而實際上應該得到的cumulative reward是。這其實和 regression problem 很相似,因爲我們的目標就是通過訓練讓  越來越接近  ,即理想情況下(這裏爲了方便,假設學習率爲1,原始的公式爲)。

注意:是一個網絡,因爲在遊戲中,不可能所有的image都看過,所以將做成網絡來提高泛化性。

2、Temporal-difference (TD) approach


MC based的方法要求遇到 後把遊戲玩到結束,如果遊戲太長的話,那就可能收集不到多少數據去讓網絡去擬合。

而 TD 只需要從  玩到  就行,因此只需要算 (這裏爲了方便,假設學習率和衰減係數都爲1,原始的公式爲)。

那麼 應該要越接近纔是正確的結果,所以將網絡往這個方向去train,就可以把這個function訓練出來。

MC v.s. TD :


MC 方法的問題在於最後得到的  的方差很大(  是 在遇到 的情況下使用策略 的actor一直玩遊戲直到結束得到的實際 reward,是一個隨機變量,因爲遊戲是有隨機性的,所以每一次得到  是不一樣的)。 

假設 是k步 reward 的求和,而根據公式 ,最終會相差 倍。所以最後  的方差很大,即每次算出來的   都會相差很多。

而用 TD base 中有隨機性的部分是 ,它的方差比較小。但 TD 的問題在於  可能不準確。

下面舉個例子看它們的區別:


可以看出,同一個actor,用MC based和TD,算出來的結果是不一樣的,兩種結果沒有絕對的正確與否。

其中,在第一個episode中,出現後的reward變爲0。

在Monte-Carlo方法中,就會認爲是一個不好的state,才導致後來的的reward變爲0,所以  爲0.

而TD方法中, 會認爲 後  得到 reward 爲 0 只是一個巧合,與  無關。大部分情況下  還是會得到 3/4 的 reward,所以認爲  爲3/4。(因爲)

Q-function:


的輸入是一個 (s, a) 的 pair,然後輸出一個cumulated reward的期望值。這裏的cumulated reward指的是在state s下強制採取 action a(不管這個actor認爲在state s下采取action a是不是好的,都強制採取a),然後用這個actor  一直玩到遊戲結束所得到的cumulated reward。

Q(s_t,a_t) = Q(s_t,a_t) + \alpha (r_t + \gamma maxQ(s_{t+1},a_{t+1})-Q(s_t,a_t))

   (這裏爲了方便,假設學習率和衰減係數都爲1,原始的公式爲)

Q(s_t,a_t) = Q(s_t,a_t) + \alpha (r_t + \gamma maxQ(s_{t+1},a_{t+1})-Q(s_t,a_t))

以上是Q function的兩種常見的寫法。

如果action可以窮舉,則可以使用右邊的寫法;否則,使用左邊的寫法。

critic 看上去只能評價某個 action 的好壞,但是實際上可以直接用它來做 reinforcement learning。方法是隻要學到一個  的 Q function  ,就能有辦法找到一個更好的 actor ,這樣就能不斷更新policy   。

什麼叫  比 π 好呢?

就是說面對所有 state s 時,使用策略  得到的 value 一定比使用策略  得到的Q value 大,即: 

找  的方法是,對於已經學到的 Q function  ,在某個給定的 state 下,分別帶入可能的 action,看看哪一個 action 使得Q value最大,把使得函數值Q value最大的 a,作爲以後面對該 state 時採取的 action。

下圖證明了 :

Q-Learning使用技巧:
技巧1:使用Target network


Q-function的訓練,參考了TD的方法,即。

現在以、作爲輸入,則輸出的結果,由上圖可以得出,這個結果應該儘可能接近以、作爲輸入,則輸出的結果再加上的結果。

也是一個類似迴歸的問題,但是這裏不同於前面的Monte-Carlo (MC) based approach和Temporal-difference (TD) approach的迴歸問題,這裏的是一直在變化的,即要去擬合的目標,其實是一直在變化,這就對訓練產生很大的干擾。

所以

將以、作爲輸入的網絡(也叫Target network)固定住,這樣也變成一個固定的值,然後讓以、作爲輸入的網絡去擬合這個固定的值。
經過N次訓練後,將左邊的網絡的參數覆蓋掉Target network,形成新的Target network
重複1、2的步驟一直訓練下去。

技巧2:使用exploration


Q-learning方法是根據查表來估值的,只有在狀態執行過動作之後,我們才能估得出。即便是使用DQN(就是說將Q-function改爲一個network,把查表的過程變成network的輸入輸出)減緩了這個問題,但也可能存在一些狀態沒執行過動作,沒辦法估出。

現在在狀態s下,都沒有采取過action 、、,所以所有的Q-value都爲0。接下來與環境的互動中,sample到在狀態s下,採取動作,會使得Q-value從0變成1。

可以知道,接下去在狀態s下就會一直採取動作,而不會去嘗試可能未來會獲得更大reward的、。

爲了解決這個問題可以使用以下兩種方法:

1、Epsilon Greedy


假設爲0.3,那就會有0.7(1-0.3)的機率會使用以往的經驗去執行動作,而剩下0.3的概率隨機去試探新的動作

會隨着訓練的進行不斷減少,就是說在一開始的時候的值會大一點,因爲還不知道哪個action是好的,所以還要提高探索(exploration)的次數。隨着訓練的進行,開始知道哪些action是好的哪些是不好的,就可以減少探索(exploration)的次數。

 2、Boltzmann Exploration


因爲Q-value可能有正有負,所以先取exp全部轉成正的。然後除以分母,做Normalization。

這樣就將所有動作的Q value轉化爲概率,概率的大小和Q value的大小有關。然後通過概率的大小去選擇不同動作a,概率大的被選到的次數就會多,概率小的被選到的次數就會少,這樣即便Q value小的action也還是有可能會被選到。

技巧3:使用Replay Buffer


把actor的每筆experience (st,at,rt,st+1)放到一個buffer裏面,其中buffer裏面的exp可能來自採取不同policy的actor(假設actor和環境互動一萬次後就更新參數,而buffer裏面能存放5萬個的exp,就會導致buffer裏有5種不同的actor的exp),當buffer滿了再替換舊的exp。訓練過程時每次從buffer裏面sample一個batch(比如說100個exp)出來訓練。

因爲buffer裏有采取不同policy的actor的exp,所以導致這個訓練過程變成off-policy的。但是因爲我們只用一個exp訓練,並不是整個trajectory,所以off-policy也沒關係。

這樣做的好處:

1、訓練過程中與環境交互很耗時間,而Replay Buffer可以使得之前的actor的exp被反覆利用到,減少很Env互動次數;

2、增加數據多樣性,降低batch內相關性,提高泛化性能,訓練效果更好。

 

最後放一張完整的Q-Learing的過程圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章