詳細解讀DQN
一. 強化學習
1. 什麼是強化學習問題?
強化學習是機器學習領域的三大分支之一,深度學習+強化學習也被認爲是通往通用AI的道路。
強化學習問題可以描述爲agent從environment中獲取觀察的state和獲取reward,併產生action作用於environment。如上圖描述所示。用數學語言描述就是Markov Decision Process(MDP)。
2. 強化學習的理論體系
(1) MDP
強化學習問題可以用MDP來描述。在說MDP之前,需要先了解Markov Property和Markov Process。
i) Markov Property
簡言之,當前狀態包含了過去所有狀態的信息,一旦當前狀態信息已知,過去狀態信息就可以拋棄。
Markov Property除了包含有這一信息,還有就是狀態轉移概率。
ii) Markov Process
在說MDP之前要說的就是Markov Process了。
下面是Markov Process的例子。
左面的圖是Markov Process的實際體現。圓圈中代表不同的state,以及曲線上的狀態轉移概率(state transition probability)。
我們可以從這個描述中隨機的取樣,以爲初始狀態,上圖右側是部分sample的episodes(即從初始狀態到終止狀態的路徑,包含所有走過的中間狀態)。
描述了從Markov Process中sample episodes後,對應的就是在sample時各個state之間的轉移概率。下圖描述的便是狀態轉移概率。
iii) Markov Decision Process
說完了Markov Property和Markov Process,現在應該說一下Markov Decision Process了。
MDP中除了之前說的之外,還有等信息,所有的這些才構成了MDP的要素。
強化學習問題是通過找到最優的策略(對應MDP的元素,也就是選擇最優的,在不同的上選擇最優的)來使獲得的最大。
我們將會逐漸的說明所有要素後再回顧MDP的完整架構。
(2)
的定義如下:
爲什麼是從開始呢,是因爲回報函數的意義是在時刻,執行一步後到下一狀態的回報值.
我們可以通過上面提到的那個例子, 把的部分添加上, 來理解式子的意義.
從圖中可以看到, 只有從一個狀態轉移到另一個狀態的時候, 纔會有獎勵值, 這個設置方式正是MDP的設置方式.
爲什麼需要有 ?
越接近0,表示越注重當前回報,當時,, 表示只以執行一次後的作爲最終的, 此時系統只關注眼前的利益.
越接近1, 表示系統的眼光更長遠, 當時, 代表從當前步一直到目標所有的獎勵值之和, 考慮到所有的獎勵情況.
現在, 我們已經有個的計算公式, 只要遍歷MDP結構的所有結點, 就可以得到的最大值, 也就可以得到相應的最優的策略. 但問題是, 對於小規模的問題, 這樣計算沒有問題, 但是大規模的問題, 只有當某個開始, 已知到目標全部遍歷完成, 纔可以得到這個能獲得的最終的, 計算效率很低.
因此, 再引入一個概念, .
(3)
從定義來看, 就是在狀態下回報的期望值.
從實際意義來理解,就是從狀態開始,能獲得總的估計,體驗出了這個狀態的價值.
還是以上面提到的例子來解釋.
對於狀態的,就是以爲初始狀態一直到終止狀態每個episode回報值的平均值.
以代替作爲評價標準,來尋找最優的策略,那麼下面的問題就是求解,只要能解出的最大值,對應的episode就是最優的策略.
(4)
爲了求解,我們將展開.
最後的一個等式是因爲期望體現在實際的MDP結構中,就是到不同的概率乘以.
表示的是以迭代的方式求解.
爲了求解,我們將其表示爲矩陣的形式.
通過此段文字上面的圖片的說明,就可以推出下面矩陣的表示形式.
因爲是線性方程,所以對於簡單的MDP問題,可以直接求解.對於複雜的MDP問題,可以通過迭代的方式求解.
自此,已經說了MDP中的,還有一個重要的元素沒有說:.
(5)
於之間是輸入輸出的關係,給一個,通過一個函數,輸出一個動作或者動作的概率,這個函數就是要說的.
一個環境中所有可行的一般稱爲,分爲(例如Atari遊戲的action)和(例如在真實的世界裏控制機器人的動作).
(6)
的定義如下:
一個是用來決定採取什麼樣的的規則,可以是確定性的策略,用來表示.
對於隨機策略,用來表示.
在深度強化學習中,我們會使用帶參數的,因爲在Deep RL中,的輸出是根據一系列參數來的(比如神經網絡的weights和bias),神經網絡通過優化參數,來調整朝着更優的動作優化.
在Deep RL中,我們用分別來表示確定性策略和隨機策略.
有了以後,就有對應的輸出,前面介紹了,用來表示某個狀態的價值.有了以後,可以根據規則得到相應的動作輸出,我們可以直接評定在某個狀態下某個動作的價值,這就是.
(7)
通過, 同樣可以使用迭代的式子來表示.
我們再來回顧下的原始表達式和迭代表達式.
現在有了和,還不足以得出最優的策略,所以需要找到最優的的算法.
(8)
怎樣通過最優的和找到最優的呢?
在某個策略下的value function和action-value function的值是最大的,那麼這個策略就是最優的策略.
所以只要求解出最優的value function或者action-value function,就可以得到最優的policy.
爲了求解optimal value function and optimal action-value function,我們需要先表示出這兩者的數學表達式,通常有下面幾種表示方式:
有了optimal value function的表達式,我們就可以應用optimal value function and optimal action-value function 來求解出optimal policy.
(9)
有很多種迭代的算法來求解optimal value function.我們說一下Value Iteration和Policy Iteration,這是兩個主要的思想,Q-learning也是基於Value Iteration來做的.
i) Dynamic Programming
說到迭代求解,會應用到動態規劃(Dynamic Programming),什麼是Dynamic Programming?
簡言之,動態規劃就是問題可以描述爲動態的序列或以時間順序組織起來的,就可以把複雜的問題分解爲一個個小問題來解決.
前面所說的Bellman Equation的形式,把原來需要求解全部的Reward的步驟,轉換爲求下一步的Reward和下一狀態的價值,即下面的式子化簡的形式,最後每次迭代,就可以求出每個狀態的Value.這是Dynamic Programming用在MDP的規劃中的prediction(預測)作用.下面求解最優Policy的時候還會看到Dynamic Programming在control方面的作用.
上圖總結了DP(Dynamic Programming,下文以DP代替)在規劃方面的兩個作用:prediction & control.上面求value function使用的DP的prediction,下面求optimal policy,就會用到DP的control作用.
ii) Policy Iteration
Policy Iteration的目的是迭代計算value function,找到最優的value function,從而得到optimal policy.
我們用另一種形式來表示value function.
value function的表示都是根據Bellman Equation變化得來的.
Policy Iteration一般分爲兩步:Policy evaluation & Policy improvement.
Policy evaluation的目的是更新value function,在當前的策略下不斷優化value function.
Policy improvement的目的是更新優化策略,使用greedy算法在當前的value function中找到最大的value.
具體的算法流程如下:
iii) Value Iteration
value iteration是使用最優Bellman Equation得到的
然後將其轉化爲迭代形式
具體算法如下:
value iteration和policy iteration有什麼區別呢?
從算法中可以看到,policy iteration的迭代規則是
在Policy Evaluation階段,V(s)的更新結果是在當前下的計算值,在Policy Improvement階段,使用計算的V(s)在當前狀態的action space中更新優化,然後優化的再在Evaluation階段更新V(s),所以其實是對進行優化,所以是Policy Iteration.
Value Iteration的迭代規則是一直對V(s)進行更新,最後選擇出最優的,所以value iteration相比policy iteration更加直接.
3 強化學習的算法體系
到此,強化學習的基本架構已經介紹完成,下面介紹Q-learning和DQN.
二. Q-Learning
1 什麼是Q-Leaning
Q-Learning是採用value iteration的思想來做的,但是value iteration每次都會對Q值更新一遍,實際情況我們沒法遍歷所有的狀態和動作,所以Q-Learning提出了一種新的更新Q值的方法:
將定義爲target Q value,Q-Learning並沒有將target q value直接賦給當前q值,而是採用漸進的方式靠近target q value,類似梯度下降的思想.
整個算法流程如下:
算法中需要一個policy來生成動作,這個policy並不是由Q值的迭代來更新的policy,所以q-learning算法也是off-policy的.那麼這個policy選取的規則是怎樣的?
- 隨機選取(exploration).隨機選取有利於擴大搜索的空間,可能會探索到更多的狀態和動作,有利於更加全局的更新q值.比如在一個區域內有很多餐館,爲了找到最好喫的那家,隨機選取的結果就是當你第一天覺着一家特別好喫的時候,但是以後你每天都去不同的一家,這樣就會更加全面的瞭解所有餐館的情況,也就是可以拿到相對全局最優的Q值.
- 貪婪選取(exploitation).根據當前的Q值選擇最優的動作,這個policy 稱爲greedy policy,即.
exploration有利於擴大搜索空間,找到更好的Q值,但是難收斂;exploitation可以快速收斂,但有可能不是最優的Q值,所以兩者折中,使用,通過調整的值來調整exploration和exploitation的比例.
2 分解Q-Learning的計算過程
假設agent在這樣的一個房子裏,注意房間4和房間5是相通的.房間5是agent的目標房間.
我們可以用下圖來表示這個房間的連通關係,注意現在的圖還不能叫markov process,因爲沒有狀態轉移概率.
然後我們給每一個動作賦予獎勵值Reward.因爲房間5是目標房間,所以到達房間5的動作的reward爲100,其他的reward都是0.
在學習的過程中,agent隨機選取一個位置,然後不斷學習,達到房間5.
我們假設agent從房間2開始,到達房間5.
從房間2,agent可以到房間3,獲得獎勵0,然後到房間4,獲得獎勵0,到房間5,獲得獎勵100.但是從房間2不能直接到房間1.所以下面這個表總結了上圖的可達房間和對應的獎勵.State表示所處的房間,Action表示到某個房間的動作,比如矩陣的第一行第五列表示在房間0,到達房間4,獲得獎勵0. -1代表不能直接到達這個房間.
上節我們說到Q-Learning的公式爲:
決定了當前Q值向target q值的漸進速度,如果讓,target q值將會全部賦給當前q值,這也是q-learning算法的簡化版本.我們將使用這個簡化公式來表示下面的計算過程.
對於當前走房間的問題,整個Q-Learning的算法流程如下:
1.設置lambda參數,reward矩陣R
2.初始化Q矩陣爲0
3.對於每一個episode(從開始到目標成爲一個episode):
● 隨機選擇一個初始房間
● 從當前狀態的所有可能的action中選擇一個
● 計算簡化公式
● 直到到達goal,結束
1.我們設置,然後手動計算Q-Learning的每個過程.設置初始房間爲房間1.
2.將Q矩陣全部初始化爲0
觀察R矩陣,我們可以看到從房間1可以通往房間3(reward=0)和房間5(reward=100),我們選擇去往房間5.
到達房間5後,可以看到有3個action可以選擇:去往房間1,房間4和房間5.
現在來計算Q值.
Q(1,5)=R(1,5)+0.8 * max[Q(5,1),Q(5,4),Q(5,5)]=100+0.8 * 0=100
現在房間5成爲當前狀態,因爲已經到達目標,所以一個episode完成,更新Q矩陣:
下一個episode,我們隨機選擇房間3爲我們的初始狀態,在房間3狀態下,我們有去往房間1,2,4三種選擇,我們隨機選擇去往房間1.(在這裏,我們採用的是policy中的隨機策略exploration,還有exploitation和可以選擇).
到達房間1後,我們有去往3,5兩種選擇,現在計算Q值:
Q(3,1)=R(3,1)+0.8 * max[Q(1,3),Q(1,5)] = 0 + 0.8 * 100 = 80
更新Q矩陣
一直持續這個過程,經過很多episode後,Q矩陣會到達一個收斂值
我們對Q矩陣的數據都除以裏面的最大值500進行歸一化操作
現在我們就可以把Q矩陣的數據體現在下圖中
不管在哪個狀態,選擇最大的Q值就會以最優的方式到達房間5.
三. DQN
直接從高維的數據輸入例如視覺和語音來控制agents一直是強化學習領域的具有挑戰性的工作。在DQN出現以前,大多數成功的RL應用案例是結合線性value function或者policy representation通過手動設計特徵來做到的,算法的性能很大程度上依賴於設計的特徵的質量。
深度學習的成功讓直接從原始數據中提取特徵成爲可能,所以DQN嘗試進行DL+RL。
強化學習中應用深度學習有以下一些挑戰:
① 深度學習(監督學習)需要大量的有標籤的訓練數據,應用到強化學習中去時,只能使用Reward來作爲標籤,但是reward通常來說是稀疏的、帶有噪音並且是延時性的信號(通常是進行很多episode之後纔給出reward)。
② 深度學習中標籤數據和訓練數據的聯繫是實時的,但是強化學習的reward是延時性的。
③ 大多數強化學習的問題都假設使用的數據是獨立同分布(i.i.d)的,但是強化學習會遇到序列間高度相關的情況,同時強化學習會學習到新的動作,這對於深度學習是基於同樣的動作分佈來說是個挑戰。
DQN使用以下操作來克服以上的困難:
① DQN使用的神經網絡(監督學習)是用變種Q-Learning算法來訓練,使用隨機梯度下降(SGD)來更新權重。
② 使用replay機制來消除數據間的關聯性,隨機的在過去的transitions中取樣。
③ 在Arcade Learning Environment中測試算法。
DQN的算法流程如下:
公式3如下:
爲什麼要用而不用呢?
在Q-Learning中,我們使用表格來表示Q(s,a),但是這個在現實的很多問題上是幾乎不可行的,因爲狀態實在是太多。使用表格的方式根本存不下。
舉Atari爲例子。
計算機玩Atari遊戲的要求是輸入原始圖像數據,也就是210x160像素的圖片,然後輸出幾個按鍵動作。總之就是和人類的要求一樣,純視覺輸入,然後讓計算機自己玩遊戲。那麼這種情況下,到底有多少種狀態呢?有可能每一秒鐘的狀態都不一樣。因爲,從理論上看,如果每一個像素都有256種選擇,那麼就有:
256210x160
這簡直是天文數字。所以,我們是不可能通過表格來存儲狀態的。我們有必要對狀態的維度進行壓縮,解決辦法就是 價值函數近似Value Function Approximation。1
價值函數近似Value Function Approximation 1
什麼是價值函數近似呢?說起來很簡單,就是用一個函數來表示Q(s,a)。即
f可以是任意類型的函數,比如線性函數:
其中是函數f的參數。
大家看到了沒有,通過函數表示,我們就可以無所謂s到底是多大的維度,反正最後都通過矩陣運算降維輸出爲單值的Q。
這就是價值函數近似的基本思路。
如果我們就用來統一表示函數f的參數,那麼就有
爲什麼叫近似,因爲我們並不知道Q值的實際分佈情況,本質上就是用一個函數來近似Q值的分佈,所以,也可以說是
DQN中,作者使用來預估action-value function。
DQN更加具體的介紹請參見原文paper:
Playing Atari with Deep Reinforcement Learning