強化學習 - 詳細解讀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除了包含有這一信息,還有就是狀態轉移概率P\Rho
在這裏插入圖片描述

ii) Markov Process

在說MDP之前要說的就是Markov Process了。
在這裏插入圖片描述
下面是Markov Process的例子。
在這裏插入圖片描述
左面的圖是Markov Process的實際體現。圓圈中代表不同的state,以及曲線上的狀態轉移概率(state transition probability)。

我們可以從這個描述中隨機的取樣,以Class1Class 1爲初始狀態,上圖右側是部分sample的episodes(即從初始狀態到終止狀態的路徑,包含所有走過的中間狀態)。

描述了從Markov Process中sample episodes後,對應的就是在sample時各個state之間的轉移概率。下圖描述的便是狀態轉移概率。
在這裏插入圖片描述

iii) Markov Decision Process

說完了Markov PropertyMarkov Process,現在應該說一下Markov Decision Process了。
在這裏插入圖片描述
MDP中除了之前說的S,PS,P之外,還有A(action),R(reward),γA(action),R(reward),\gamma等信息,所有的這些才構成了MDP的要素。

強化學習問題是通過找到最優的策略(對應MDP的元素,也就是選擇最優的statestate,在不同的statestate上選擇最優的actionaction)來使獲得的rewardreward最大。

我們將會逐漸的說明所有要素後再回顧MDP的完整架構。

(2) R(reward)R(reward)

rewardreward的定義如下:
在這裏插入圖片描述
爲什麼是從Rt+1R_{t+1}開始呢,是因爲回報函數的意義是在tt時刻,執行一步actionaction後到下一狀態的回報值.
我們可以通過上面提到的那個例子, 把rewardreward的部分添加上, 來理解GtG_{t}式子的意義.
從圖中可以看到, 只有從一個狀態轉移到另一個狀態的時候, 纔會有獎勵值, 這個設置方式正是MDP的設置方式.
在這裏插入圖片描述
爲什麼需要有γ\gamma ?
在這裏插入圖片描述
γ\gamma越接近0,表示越注重當前回報,當γ=0\gamma=0時,Gt=Rt+1G_{t}=R_{t+1}, 表示只以執行一次actionaction後的rewardreward作爲最終的rewardreward, 此時系統只關注眼前的利益.
γ\gamma越接近1, 表示系統的眼光更長遠, 當γ=1\gamma=1時, GtG_{t}代表從當前步一直到目標所有的獎勵值之和, 考慮到所有的獎勵情況.

現在, 我們已經有個rewardreward的計算公式, 只要遍歷MDP結構的所有結點, 就可以得到GtG_t的最大值, 也就可以得到相應的最優的策略. 但問題是, 對於小規模的問題, 這樣計算沒有問題, 但是大規模的問題, 只有當某個statestate開始, 已知到目標全部遍歷完成, 纔可以得到這個statestate能獲得的最終的rewardreward, 計算效率很低.

因此, 再引入一個概念, valuefunctionvalue function.

(3) Value FunctionValue\ Function

在這裏插入圖片描述
從定義來看, value functionvalue \ function就是在StS_t狀態下回報的期望值.
從實際意義來理解,就是從StS_t狀態開始,能獲得總rewardreward的估計,體驗出了這個狀態的價值.
還是以上面提到的例子來解釋.
在這裏插入圖片描述
在這裏插入圖片描述
對於C1C1狀態的value functionvalue\ function,就是以C1C1爲初始狀態一直到終止狀態每個episode回報值的平均值.

value functionvalue\ function代替GtG_t作爲評價標準,來尋找最優的策略,那麼下面的問題就是求解value functionvalue\ function,只要能解出value functionvalue\ function的最大值,對應的episode就是最優的策略.

(4) BellmanEquationBellman Equation

爲了求解value functionvalue\ function,我們將value functionvalue\ function展開.
在這裏插入圖片描述
最後的一個等式是因爲期望體現在實際的MDP結構中,就是StS_tSt+1S_{t+1}不同的概率乘以v(St+1)v(S_{t+1}).
在這裏插入圖片描述
BellmanEquationBellman Equation表示的是以迭代的方式求解value functionvalue\ function.
爲了求解BellmanEquationBellman Equation,我們將其表示爲矩陣的形式.
通過此段文字上面的圖片的說明,就可以推出下面矩陣的表示形式.
在這裏插入圖片描述
因爲BellmanEquationBellman Equation是線性方程,所以對於簡單的MDP問題,可以直接求解.對於複雜的MDP問題,可以通過迭代的方式求解.
在這裏插入圖片描述

自此,已經說了MDP中的S,R,P,γS,R,P,\gamma,還有一個重要的元素沒有說:A(action)A(action).

(5) ActionAction

statestateactionaction之間是輸入輸出的關係,給一個statestate,通過一個函數,輸出一個動作或者動作的概率,這個函數就是要說的PolicyPolicy.
一個環境中所有可行的actionaction一般稱爲action spacesaction\ spaces,分爲discrete action spacesdiscrete\ action\ spaces(例如Atari遊戲的action)和continuous action spacecontinuous\ action\ space(例如在真實的世界裏控制機器人的動作).

(6) PolicyPolicy

PolicyPolicy的定義如下:
在這裏插入圖片描述
一個policypolicyagentagent用來決定採取什麼樣的actionaction的規則,可以是確定性的策略(deterministicpolicy)(deterministic policy),用at=μ(st)a_t=\mu(s_t)來表示.
對於隨機策略(stochastic policy)(stochastic\ policy),用atπ(st)a_t\backsim\pi(\cdot|s_t)來表示.
在深度強化學習中,我們會使用帶參數的policypolicy,因爲在Deep RL中,policypolicy的輸出是根據一系列參數來的(比如神經網絡的weights和bias),神經網絡通過優化參數,來調整policypolicy朝着更優的動作優化.
在Deep RL中,我們用at=μθ(st),atπθ(st)a_t=\mu_\theta(s_t),\quad a_t\backsim\pi_\theta(\cdot|s_t)分別來表示確定性策略和隨機策略.

有了policypolicy以後,就有對應的actionaction輸出,前面介紹了value functionvalue\ function,用來表示某個狀態的價值.有了policypolicy以後,可以根據規則得到相應的動作輸出,我們可以直接評定在某個狀態下某個動作的價值,這就是ActionValue FunctionAction-Value\ Function.

(7) ActionValue FunctionAction-Value\ Function

在這裏插入圖片描述
通過Bellman EquationBellman\ Equation, qπ(s,a)q_\pi(s,a)同樣可以使用迭代的式子來表示.
在這裏插入圖片描述
我們再來回顧下value functionvalue\ function的原始表達式和迭代表達式.
在這裏插入圖片描述
在這裏插入圖片描述
現在有了value functionvalue\ functionactionvalue functionaction-value\ function,還不足以得出最優的策略,所以需要找到最優的policypolicy的算法.

(8) Optimal Value FunctionOptimal\ Value\ Function

在這裏插入圖片描述
怎樣通過最優的value functionvalue\ functionactionvalue functionaction-value\ function找到最優的policypolicy呢?
在這裏插入圖片描述
在某個策略下的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 PolicyOptimal\ Policy

在這裏插入圖片描述
有很多種迭代的算法來求解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)的更新結果是在當前π(s)\pi(s)下的計算值,在Policy Improvement階段,使用計算的V(s)在當前狀態的action space中更新優化π(s)\pi(s),然後優化的π(s)\pi(s)再在Evaluation階段更新V(s),所以其實是對π(s)\pi(s)進行優化,所以是Policy Iteration.

Value Iteration的迭代規則是一直對V(s)進行更新,最後選擇出最優的π(s)\pi(s),所以value iteration相比policy iteration更加直接.

3 強化學習的算法體系

在這裏插入圖片描述

到此,強化學習的基本架構已經介紹完成,下面介紹Q-learning和DQN.

二. Q-Learning

1 什麼是Q-Leaning

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))Q(S_t,A_t)\gets Q(S_t,A_t)+\alpha(R_{t+1}+\lambda\max\limits_aQ(S_{t+1},a)-Q(S_t,A_t))
Rt+1+λmaxaQ(St+1,a)R_{t+1}+\lambda\max\limits_aQ(S_{t+1},a)定義爲target Q value,Q-Learning並沒有將target q value直接賦給當前q值,而是採用漸進的方式靠近target q value,類似梯度下降的思想.
整個算法流程如下:
在這裏插入圖片描述
算法中需要一個policy來生成動作,這個policy並不是由Q值的迭代來更新的policy,所以q-learning算法也是off-policy的.那麼這個policy選取的規則是怎樣的?

  1. 隨機選取(exploration).隨機選取有利於擴大搜索的空間,可能會探索到更多的狀態和動作,有利於更加全局的更新q值.比如在一個區域內有很多餐館,爲了找到最好喫的那家,隨機選取的結果就是當你第一天覺着一家特別好喫的時候,但是以後你每天都去不同的一家,這樣就會更加全面的瞭解所有餐館的情況,也就是可以拿到相對全局最優的Q值.
  2. 貪婪選取(exploitation).根據當前的Q值選擇最優的動作,這個policy π\pi稱爲greedy policy,即π(St+1)=argmaxaQ(St+1,a)\pi(S_{t+1})=arg\max\limits_aQ(S_{t+1},a).
    exploration有利於擴大搜索空間,找到更好的Q值,但是難收斂;exploitation可以快速收斂,但有可能不是最優的Q值,所以兩者折中,使用ϵgreedy policy\epsilon-greedy\ policy,通過調整ϵ\epsilon的值來調整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(St,At)Q(St,At)+α(Rs+1+λmaxaQ(St+1,a)Q(St,At))Q(S_t,A_t)\gets Q(S_t,A_t)+\alpha (R_{s+1}+\lambda \max \limits_a Q(S_{t+1},a)-Q(S_t,A_t))α\alpha決定了當前Q值向target q值的漸進速度,如果讓α=1\alpha=1,target q值將會全部賦給當前q值,這也是q-learning算法的簡化版本.我們將使用這個簡化公式來表示下面的計算過程.
Q(St,At)Rt+1+λmaxaQ(St+1,a)Q(S_t,A_t) \gets R_{t+1}+\lambda \max \limits_a Q(S_{t+1},a)
對於當前走房間的問題,整個Q-Learning的算法流程如下:

1.設置lambda參數,reward矩陣R
2.初始化Q矩陣爲0
3.對於每一個episode(從開始到目標成爲一個episode):
● 隨機選擇一個初始房間
● 從當前狀態的所有可能的action中選擇一個
● 計算簡化公式
● 直到到達goal,結束

1.我們設置λ=0.8\lambda=0.8,然後手動計算Q-Learning的每個過程.設置初始房間爲房間1.
2.將Q矩陣全部初始化爲0

在這裏插入圖片描述
在這裏插入圖片描述
觀察R矩陣,我們可以看到從房間1可以通往房間3(reward=0)和房間5(reward=100),我們選擇去往房間5.
到達房間5後,可以看到有3個action可以選擇:去往房間1,房間4和房間5.
現在來計算Q值.
Q(St,At)Rt+1+λmaxaQ(St+1,a)Q(S_t,A_t) \gets R_{t+1}+\lambda \max \limits_a Q(S_{t+1},a)
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和ϵgreedy policy\epsilon -greedy\ policy可以選擇).
到達房間1後,我們有去往3,5兩種選擇,現在計算Q值:Q(St,At)Rt+1+λmaxaQ(St+1,a)Q(S_t,A_t) \gets R_{t+1}+\lambda \max \limits_a Q(S_{t+1},a)
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(s,a,θ)Q(s,a,\theta)而不用Q(s,a)Q(s,a)呢?

在Q-Learning中,我們使用表格來表示Q(s,a),但是這個在現實的很多問題上是幾乎不可行的,因爲狀態實在是太多。使用表格的方式根本存不下。

舉Atari爲例子。
在這裏插入圖片描述

計算機玩Atari遊戲的要求是輸入原始圖像數據,也就是210x160像素的圖片,然後輸出幾個按鍵動作。總之就是和人類的要求一樣,純視覺輸入,然後讓計算機自己玩遊戲。那麼這種情況下,到底有多少種狀態呢?有可能每一秒鐘的狀態都不一樣。因爲,從理論上看,如果每一個像素都有256種選擇,那麼就有:
256210x160
這簡直是天文數字。所以,我們是不可能通過表格來存儲狀態的。我們有必要對狀態的維度進行壓縮,解決辦法就是 價值函數近似Value Function Approximation。1

價值函數近似Value Function Approximation 1
什麼是價值函數近似呢?說起來很簡單,就是用一個函數來表示Q(s,a)。即
Q(s,a)=f(s,a)Q(s,a)=f(s,a)
f可以是任意類型的函數,比如線性函數:
Q(s,a)=ω1s+ω2a+bQ(s,a)=\omega_1 s + \omega_2 a + b
其中ω1,ω2,b\omega_1,\omega_2,b是函數f的參數。

大家看到了沒有,通過函數表示,我們就可以無所謂s到底是多大的維度,反正最後都通過矩陣運算降維輸出爲單值的Q。

這就是價值函數近似的基本思路。

如果我們就用ω\omega來統一表示函數f的參數,那麼就有
Q(s,a)=f(s,a,w)Q(s,a) = f(s,a,w)
爲什麼叫近似,因爲我們並不知道Q值的實際分佈情況,本質上就是用一個函數來近似Q值的分佈,所以,也可以說是
Q(s,a)f(s,a,w)Q(s,a)\approx f(s,a,w)

DQN中,作者使用Q(s,a,;θ)Q(s,a)Q(s,a,;\theta) \approx Q^*(s,a)來預估action-value function。

DQN更加具體的介紹請參見原文paper:
Playing Atari with Deep Reinforcement Learning


  1. https://zhuanlan.zhihu.com/p/21421729 ↩︎ ↩︎

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