Deep Reinforcement Learning 基礎知識

文章來源: http://blog.csdn.net/songrotek/article/details/50580904

Introduction

深度增強學習Deep Reinforcement Learning是將深度學習與增強學習結合起來從而實現從Perception感知到Action動作的端對端學習的一種全新的算法。簡單的說,就是和人類一樣,輸入感知信息比如視覺,然後通過深度神經網絡,直接輸出動作,中間沒有hand-crafted工作。深度增強學習具備使機器人實現完全自主的學習一種甚至多種技能的潛力。

雖然將深度學習和增強學習結合的想法在幾年前就有人嘗試,但真正成功的開端是DeepMind在NIPS 2013上發表的Playing Atari with Deep Reinforcement Learning一文,之後DeepMind在Nature上發表了改進版的DQN文章,引起了廣泛的關注。而Hinton,Bengio及Lecun三位大神在Nature上發表的Deep Learning 綜述一文最後也將Deep Reinforcement Learning作爲未來Deep Learning的發展方向。

Deep Reinforcement Learning因爲具備真正實現AI的潛力,受到了Google等企業的關注。DeepMind 50多人的團隊被Google以4億美元的價格收購。而15年12月份剛剛由Elon Musk牽頭成立的OpenAI,則一開始就獲得了10億美元的投資,而OpenAI中的好幾位成員都來自UC Berkerley的Pieter Abbeel團隊。

Pieter Abbeel團隊緊隨DeepMind之後,採用另一種方法直接實現了機器人的End-to-End學習,其成果也引起了大量的媒體報道和廣泛關注。今年的NIPS 2015 更是由Pieter Abbeel及DeepMind的David Silver聯合組織了Deep Reinforcement Learning workshop。可以說,目前在Deep Reinforcement Learning取得開拓性進展的主要集中在DeepMind和UC Berkerley團隊。

爲了深入地理解Deep Reinforcement Learning, 需要具備兩大背景知識:

  • 深度學習特別是CNN卷積神經網絡(由於感知Perception大多來自於視覺信息)
  • 增強學習基礎知識

本文將介紹理解Deep Q-network所需要的增強學習的背景知識。

What is Reinforcement Learning 增強學習是什麼

在人工智能領域,一般用Agent來表示一個具備行爲能力的物體,比如機器人,無人車,人等等。那麼增強學習考慮的問題就是Agent和環境environment$E$之間交互的任務。比如一個機械臂要拿起一個手機,那麼機械臂周圍的物體包括手機就是環境,機械臂通過外部的比如攝像頭來感知環境,然後機械臂需要輸出動作來實現拿起手機這個任務。再舉玩遊戲的例子,比如我們玩極品飛車遊戲,我們只看到屏幕,這就是環境,然後我們輸出動作(鍵盤操作)來控制車的運動。

那麼,不管是什麼樣的任務,都包含了一系列的動作action,觀察Observation還有反饋值Reward。所謂的Reward就是Agent執行了動作與環境進行交互後,環境會發生變化,變化的好與壞就用reward來表示。如上面的例子。如果機械臂離手機變近了,那麼reward就應該是正的,如果玩賽車遊戲賽車越來越偏離跑道,那麼reward就是負的。接下來這裏用了Observation觀察一詞而不是環境那是因爲Agent不一定能得到環境的所有信息,比如機械臂上的攝像頭就只能得到某個特定角度的畫面。因此,只能用Observation來表示Agent獲取的感知信息。

rl

上面這張圖(來自David Silver)可以很清楚的看到整個交互過程。事實上,這就是人與環境交互的一種模型化表示。在每個時間點time-step Agent都會從可以選擇的動作集合A中選擇一個a_t執行.這個動作集合可以是連續的比如機器人的控制也可以是離散的比如遊戲中的幾個按鍵。動作集合的數量將直接影響整個任務的求解難度,因此DeepMind才從玩最簡單的遊戲做起。

那麼知道了整個過程,任務的目標就出來了,那就是要能獲取儘可能多的reward。沒有目標,控制也就無從談起,因此,獲取reward就是一個量化的標準,reward越多,就表示執行得越好。每個時間片,Agent都是根據當前的觀察來確定下一步的動作。每次的觀察就作爲Agent的所處的狀態state,因此,狀態State和動作Action存在映射關係,也就是一個state可以對應一個action,或者對應不同動作的概率(常常用概率來表示,概率最高的就是最值得執行的動作)。那麼state到action的過程就稱之爲一個策略Policy。當然,也可以是之前的一系列的狀態動作集合到action的映射,在下一節我們會看到只要當前狀態就行)一般用π表示,也就是需要找到以下關係: 

a=π(s)

π(a|s)

其中a是action,s是state。

增強學習的任務就是找到一個最優的策略policy從而使reward最多。

我們一開始並不知道最優的策略是什麼,因此往往從隨機的策略開始,使用隨機的策略進行試驗,就可以得到一系列的狀態,動作和反饋: 

{s1,a1,r1,s2,a2,r2,...,at1,st}

這就是一系列的樣本Sample。增強學習的算法就是需要根據這些樣本來改進policy,從而使得得到的樣本中的reward更好。由於這種讓reward越來越好的特性,所以這種算法就叫做增強學習Reinforcement Learning。

MDP(Markov Decision Process)馬爾科夫決策過程

由於增強學習的樣本是一個時間序列,因此將增強學習的問題模型化,就引入了MDP。

所謂的MDP,是基於這樣一種假設:

The future is independent of the past given the present

也就是,一個狀態St是Markov當且僅當 

P(st+1|st)=P(st+1|s1,...,st)

P爲概率。

簡單的說就是下一個狀態僅取決於當前的狀態和當前的動作。注意這裏的狀態是完全可觀察的全部的環境狀態 
由MDP的假設,如果這個世界就是MDP的,如果再加上一個假設,每個動作都是由完全的環境(比如人的每個細胞導致的精神狀態,意識)決定,那麼有一個初始狀態,後繼狀態就是全部確定的。當然,現實情況環境一般不完全可觀察,然後有一些隨機性stochastic是人類無法確定的。

絕大多數的增強學習都可以模型化爲MDP的問題。

因爲前面我們看到,我們要根據當前的狀態來決定動作。而且由MDP我們知道我們只要使用當前的狀態進行估計。但是,這裏注意本節考慮的狀態是完全可觀察。對於部分可觀察的狀態,那麼只能進行估計。

既然一個狀態對應一個動作,或者動作的概率,而有了動作,下一個狀態也就確定了。這就意味着每個狀態可以用一個確定的值來進行描述。可以由此判斷一個狀態是好的狀態還是不好的狀態。比如,向左邊走就是懸崖,懸崖肯定不是好的狀態,再走一步可能就掛了,而向右走就是黃金,那麼右邊的狀態就是好的狀態。

那麼狀態的好壞其實等價於對未來回報的期望。因此,引入回報Return來表示某個時刻t的狀態將具備的回報:

Gt=Rt+1+λRt+2+...=k=0λkRt+k+1

上面有一個λ是discount factor折扣因子,就是說一般當下的反饋是比較重要的,時間越久,影響越小。

那麼實際上除非整個過程結束,否則顯然我們無法獲取所有的reward來計算出每個狀態的Return,因此,再引入一個概念估值函數Value Function,用value function v(s)來表示一個狀態未來的潛在價值。這就是變成是向左看感覺那麼是懸崖然後左邊的狀態的估值就低。

從定義上看,value function就是回報的期望: 

v(s)=E[Gt|St=s]

Bellman Equation

定義出value function代表問題解決了一半,接下來就是如何求解value function的問題。實際上發現,只要從定義出發,就可以找到解決辦法: 

v(s)=E[Gt|St=s]=E[Rt+1+λRt+2+λ2Rt+3+...|St=s]=E[Rt+1+λ(Rt+2+λRt+3+...)|St=s]=E[Rt+1+λGt+1|St=s]=E[Rt+1+λv(St+1)|St=s]

因此 

v(s)=E[Rt+1+λv(St+1)|St=s]

這就是Bellman 方程的基本形態,它表明value function是可以通過迭代來進行計算的。

Action-Value function 動作估值函數

前面我們引出了估值函數,考慮到每個狀態之後都有多種動作可以選擇,每個動作之下的狀態又多不一樣,我們更關心在某個狀態下的不同動作的估值。顯然。如果知道了每個動作的估值,那麼就可以選擇估值最好的一個動作去執行了。這就是Action-Value functionQπ(s,a)。那麼同樣的道理,也是使用reward來表示,只是這裏的reward和之前的reward不一樣,這裏是執行完動作action之後得到的reward,之前state對應的reward則是多種動作對應的reward的期望值。顯然,動作之後的reward更容易理解。

那麼,有了上面的定義,動作估值函數就爲如下表示: 

Qπ(s,a)=E[rt+1+λrt+2+λ2rt+3+...|s,a]=Es[r+λQπ(s,a)|s,a]

Optimal value function 最優動作估值函數

能計算動作估值函數是不夠的,因爲我們需要的是最優策略,現在求解最優策略等價於求解最優的value function,找到了最優的value function,自然而然策略也就是找到。(當然,這只是求解最優策略的一種方法,也就是value-based approach,由於DQN就是value-based,因此這裏只講這部分,之後我們會看到還有policy-based和model-based方法。一個就是直接計算策略函數,一個是估計未來的環境變化,從而可以計算出最優策略) 
那麼套用上一節得到的value function,可以得到 

Q(s,a)=Es[r+λmaxaQ(s,a)|s,a]

因爲最優的Q值必然爲最大值,所以,等式右側的Q值必然爲使a取最大的Q值。 
很多增強學習的算法都是基於上面這個公式來估計出action value function,使用Bellman 公式來迭代更新,看下一小節。

Value iteration 估值迭代

上面的公式揭示了Q值可以通過迭代來進行計算,那麼接下來我們就考慮如何迭代,因爲等式右側是下一個狀態和動作的Q值。那麼,直觀的理解,我們還在計算當前的Q值,怎麼能有下一個Q值呢?沒有錯。所以,我們只能用之前的Q值。也就是沒次根據新得到的reward和原來的Q值來更新現在的Q值。根據這個思想,就可以得到下面的迭代公式: 

Qi+1(s,a)=Es[r+λmaxaQi(s,a)|s,a]

理論上可以證明這樣的value iteration能夠使Q值收斂到最優的action-value function。即當iQ_iQ

Q Learning

Q Learning的思想完全根據value iteration得到。但要明確一點是value iteration每次都對所有的Q值更新一遍,也就是所有的狀態和動作。但事實上在實際情況下我們沒辦法遍歷所有的狀態,還有所有的動作,我們只能得到有限的系列樣本。因此,只能使用有限的樣本進行操作。那麼,怎麼處理?Q Learning提出了一種更新Q值的辦法: 

Q(St,At)Q(St,At)+α(Rt+1+λmaxaQ(St+1,a)Q(St,At))

雖然根據value iteration計算出target Q值,但是這裏並沒有直接將這個Q值(是估計值)直接賦予新的Q,而是採用漸進的方式類似梯度下降,朝target邁近一小步,取決於α,這就能夠減少估計誤差造成的影響。類似隨機梯度下降,最後可以收斂到最優的Q值。

具體的算法如下:


初始化Q(s,a),sS,aA(s), 任意的數值,並且Q(terminalstate,)=0 
重複(對每一節episode): 
    初始化 狀態S 
    重複(對episode中的每一步): 
        使用某一個policy比如(ϵgreedy)根據狀態S選取一個動作執行 
        執行完動作後,觀察reward和新的狀態S 
        Q(St,At)Q(St,At)+α(Rt+1+λmaxaQ(St+1,a)Q(St,At)) 
        SS 
     循環直到S終止


Exploration and Exploitation 探索與利用

在上面的算法中,我們可以看到需要使用某一個policy來生成動作,也就是說這個policy不是優化的那個policy,所以Q-Learning算法叫做Off-policy的算法。另一方面,因爲Q-Learning完全不考慮model模型也就是環境的具體情況,只考慮看到的環境及reward,因此是model-free的方法。

回到policy的問題,那麼要選擇怎樣的policy來生成action呢?有兩種做法:

  • 隨機的生成一個動作
  • 根據當前的Q值計算出一個最優的動作,這個policy π稱之爲greedy policy,也就是 
    π(St+1)=argmaxaQ(St+1,a)

使用隨機的動作就是exploration,也就是探索未知的動作會產生的效果,有利於更新Q值,獲得更好的policy。而使用greedy policy也就是target policy則是exploitation,利用policy,這個相對來說就不好更新出更好的Q值,但可以得到更好的測試效果用於判斷算法是否有效。

將兩者結合起來就是所謂的ϵgreedy policy,ϵ一般是一個很小的值,作爲選取隨機動作的概率值。可以更改ϵ的值從而得到不同的exploration和exploitation的比例。

Value function approximation 估值函數估計

有了Q-Learning,已經可以解決一些增強學習的任務了。但是依然有個根本的問題就是狀態空間和動作空間的量級問題。如果狀態空間特別大,那麼Q(s,a)這個矩陣就會非常大,僅通過反覆的測試無法獲得足夠的樣本來遍歷每個狀態,這必然導致算法失敗。聯繫到人類的行爲特點,我們也不可能遍歷所有的情況,更多的是將新的情況與記憶進行比對,如果相似,那麼就可以採用相似的做法。因此,自然而然的,如果能用一個函數來表示value function,輸入任意的狀態都能輸出結果,那麼就可以把Q矩陣的更新問題變成一個函數擬合問題,相近的狀態也就可以得到相近的輸出動作。這就是value function approximator:Q(s,a;w)Q(s,a),我們需要更新參數w來使得Q函數逼近與最優的Q值。

既然是函數優化問題,那麼就可以使用監督學習supervised learning的做法:

  1. 確定一個loss function
  2. 計算w關於loss function的梯度
  3. 使用梯度下降比如隨機梯度下降SGD等方法來更新θ

關於Supervised Learning可以參考Andrew Ng的cousera 機器學習Machine Learning的課程

通常情況下增強學習使用線性的函數估計,但有時候可以使用非線性的函數。那麼如果使用深度神經網絡來作爲這個value function approximator呢?這樣,我們就可以得到Deep Q-Learning,也就是Deep Reinforcement Learning的基本思想了。

Deep Q-Learning

Step 1: 用一個深度神經網絡來作爲Q值的網絡,參數爲w:

Q(s,a,w)Qπ(s,a)

Step 2: 在Q值中使用均方差mean-square error 來定義目標函數objective function也就是loss function

L(w)=E[(r+γmaxaQ(s,a,w)TargetQ(s,a,w))2]

可以看到,這裏就是使用了Q-Learning要更新的Q值作爲目標值。有了目標值,又有當前值,那麼偏差就能通過均方差來進行計算。

Step 3:計算參數w關於loss function的梯度

這個可以直接計算得到 

L(w)w=E[(r+γmaxaQ(s,a,w)Q(s,a,w))Q(s,a,w)w]

Step 4: 使用SGD實現End-to-end的優化目標

有了上面的梯度,而Q(s,a,w)w可以從深度神經網絡中進行計算,因此,就可以使用SGD 隨機梯度下降來更新參數,從而得到最優的Q值。

小結

本文比較詳細的總結了理解DQN所需要的增強學習的基礎知識。主要根據David Silver的課程ppt及其講座以及Reinforcement Learning:An introduction進行整理總結。


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