1. 程式人生 > >從馬爾科夫決策過程到強化學習(From Markov Decision Process to Reinforcement Learning)

從馬爾科夫決策過程到強化學習(From Markov Decision Process to Reinforcement Learning)

從馬爾科夫決策過程到強化學習(From Markov Decision Process to Reinforcement Learning)

作者:Bluemapleman([email protected])

Github:https://github.com/bluemapleman (歡迎star和fork你喜歡的專案)

知識無價,寫作辛苦,歡迎轉載,但請註明出處,謝謝!


前言:強化學習本身的設定其實和馬爾科夫決策過程(Markov Decision Process,簡稱MDP)很像,可以說,就是條件簡化版的馬爾科夫決策過程。因此,學習MDP模型,會很有助於我們理解強化學習的動機與意義。

文章目錄

提前規劃:馬爾科夫決策過程

馬爾科夫決策過程,是這樣一類問題——它由以下幾個集合或者函式定義——:

  • 狀態集合(Set of states):s \in S
  • 行動集合(Set of Actions):a \in A
  • 狀態轉換函式(Transition function) T(s,a,s’)
  • 回報函式(Reward function) R(s,a,s’)
  • 初始狀態(Start state) s 0 s_0
  • 終點狀態(Terminal state) (可有可無/optional)

用一個形象的機器人迷宮例子來說明以上這些概念的含義:

機器人迷宮

pic1

圖來自Berkeley CS188教案

假設有如上這麼一個網格遊戲,主角是一個機器人,它從Start字樣的方格開始出發,可以任意以1個方格為單位四處走動。而機器人走到有寶石的地方(4,3)會獲得加分,並結束遊戲;走到有陷阱的地方(4,2)會減分,並結束遊戲。(2,2)位置是一個障礙,無法通過。

那麼在以上場景裡:

  • 狀態集合

機器人所可處的所有網格的集合:S={(1,1),(1,2),(1,3),(2,1)…}

  • 行動集合

機器人可以採取的行動集合: A={上,下,左,右}

  • 狀態轉換函式:

在這裡我們有一個重要設定:當機器人採取某個行動,它並不一定達到該行動預期應當到達的狀態,而是有一定可能到達其它狀態。

舉例來說,如果機器人當前在如上圖所示的(3,1)位置,當它採取行動{上},它不會百分之百到達(3,2)位置,而是還有一定概率到達鄰近的其它位置(比如(2,1),(4,1))。

停詞,狀態轉換函式T(s,a,s’)描述了:機器人在狀態s下采取行動a時,它到達不同後繼狀態的概率分佈。

例如:

s a s’ T(s,a,s’)/Probability(s’)
(3,1) (2,1) 0.2
(3,1) (3,2) 0.7
(3,1) (4,1) 0.1

這個設定的意義在於,它在原本確定的搜尋問題裡引入了隨機因素(不確定性)。如果這個問題的目標是找到一個行動策略序列,使得機器人的分值可以最大化,並且問題是確定的(即每個狀態下的行動有確定的結果/後繼狀態),那麼這個問題其實就是一個簡單的搜尋問題,我們可以依據給定的資訊的程度,決策用非智慧搜尋(uninformed search)演算法如BFS/DFS/Uniform Cost Search,或者用智慧搜尋(informed search)演算法如A* Search來解決問題。(以上搜索演算法詳情請參考CS188教案)。

然而,因為有了這個設定,這個問題有了不確定性,這也是我們為什麼專門設立了MDP這個新概念來描述這一類問題的動機所在。(而我們要費力氣把問題搞得複雜,也正是為了讓問題越來越貼近現實情況,強化學習也是把不確定問題近一步抽象化,使得更貼近實際情況,當然這是後話

  • 回報函式

當機器人在狀態s下采取了行動a,到達後繼狀態s’後,會獲得一個回報值,該值由R(s,a,s’)定義。

更一般的情況下,R(s,a,s’)可能只由s’決定,因此R(s,a,s’)=R(s’)。

比如在上圖中,R((4,3))=1, R((4,2))=-1, R(other states)=0。

如何解決機器人迷宮的最優化問題

定義MDP搜尋樹

pic2

我們嘗試把MDP問題貼近到確定性問題的搜尋問題:可以定義如上這麼一個MDP搜尋樹,每個三腳結點代表一個狀態(根三角結點代表初始狀態)。而每個橢圓結點代表一個“狀態-行動”結點,它表示在狀態s下采取行動a後,機器人可能處於的各種後繼狀態的總集,這個總集按照T(s,a,s’)的分佈,分支出子結點。

而我們的目標就是:找到最優的葉子狀態結點,它具有最高的reward值。

策略(Policy)

我們需要定義一個新概念:策略(Policy)

如其字面意義,我們需要有一個參考,這個參考告訴機器人:當機器人處在狀態s時,應當採取哪一個行動。

它可以表示為 π : S > A \pi^*:S->A

所以策略本質上也是一個函式 π ( s ) = a \pi(s)=a 。而一個**最優策略(optimal policy)**是一個只要機器人遵從,就會獲得最大期望效益/得分的策略。

  • 策略效用折現(Discounting)

pic3

我們每次往MDP搜尋樹的下一層進發時,我們都需要對下一層的效用進行一次折現。因為直覺來說,我們對於數量相同的效用,它出現在未來和出現在現在的價值可能完全是不一樣的,(考慮給你兩個選擇,現在給你100塊,和10年後給你105塊,你選哪一個?肯定是前者對不對?畢竟有通貨膨脹,而且指不定10年後我還給不給你這筆錢。)

而從問題解決來說,對後續的回報進行折現,也是有利於我們的演算法儘快收斂到最優解上的。

解決方案:Value Iteration

pic4

總結一下,我們現在面對的MDP問題的設定是如上圖這樣的。

而我們接下來將給出的第一個解決MDP問題的方法是Value Iteration。在瞭解這個方法的具體做法之前,我們還需要定義幾個新的重要函式

pic5

  • 狀態s的效用:

V ( s ) V^*(s) =從狀態s開始,並保證每一步行動最優的情況下的期望效用。

  • q狀態(s,a)的效用:

Q ( s , a ) Q^*(s,a) =從狀態s開始,採取行動a,這之後的後續每一步行動都是最優的情況下的期望效用。

  • 最優策略

π ( s ) \pi^*(s) =在狀態s應該採取的最優行動。

結合上圖右邊的搜尋樹幫助理解:給定任意一個狀態s,我們可以選擇採取行動a,而(s,a)就構成一個q-state,這個q-state會有(s,a,s’)的概率轉移到後續狀態s’上。

核心:貝爾曼方程(Bellman Equation)

pic6

如上圖,Richard Bellman給出了我們新定義的函式之間的轉換關係,這個轉換關係由遞迴的形式給出,我們稱這個轉換關係為貝爾曼方程

V ( s ) = m a x a Q ( s , a ) ( 1 ) V^*(s)=max_aQ^*(s,a) - (1)

而: Q ( s , a ) = Σ s T ( s , a , s ) [ R ( s , a , s ) + γ V ( s ) ] ( 2 ) Q^*(s,a)=\Sigma_{s'}T(s,a,s')[R(s,a,s')+\gamma V^*(s')] - (2)

(1)+(2)式匯出:

V ( s ) = m a x a Σ s T ( s , a , s ) [ R ( s , a , s ) + γ V ( s ) ] V^*(s)=max_a\Sigma_{s'}T(s,a,s')[R(s,a,s')+\gamma V^*(s')]

我們來理解一下這個貝爾曼方程的含義:

方程左邊:從狀態s開始,保證每一步行動最優的情況下的期望效用。

方程右邊:選取最好的action,使得q-state(s,a)的期望效用(【從s開始,通過action轉移到各個後續狀態s’的概率(T(s,a,s’))】與【對應後續狀態下的回報+折現率*後續狀態s’開始,保證每一步行動最優的情況下的期望效用】的和)取到最大時的那個值。

聽起來有點拗口,其實憑感覺來理解的話,意思很明白:我們如何評估一個狀態s,在最優情況下會給我們帶來的效用是多少呢?Easy,只要我們把這個狀態下所有的可以採取的行動試一遍,然後看哪個行動會給我們帶來最大的效用,而這個最大的效用也就是該狀態s的最大評估效用 V ( s ) V^*(s) 。而計算每個可能行動帶來的最大的效用的方式是:將該行動可能引發的各種後續狀態的期望效用,這個期望效用內含折現過的後續狀態s’的最大評估效用 V ( s ) V^*(s') 。(這裡需要對概率論與數理統計中的期望的概念有一定了解)

對貝爾曼方程大概有一個感覺後,我們來看:我們求解每個狀態的最大評估值 V ( s ) V^*(s) 時,其計算都依賴於可能的後續狀態的最大評估值 V ( s ) V^*(s') ,而這也就是貝爾曼方程的遞迴特性的體現處。

pic6-2

因此,要計算 V ( s ) V^*(s) ,我們肯定是需要有一個初始狀態,並且所有狀態的最大評估值是要有一個初始化值的,我們將利用貝爾曼方程的遞迴,逐漸讓所有狀態的最大評估值收斂,以獲得我們所需要的問題解決方案。

為了解決這個遞迴問題,更易操作的實現方式其實是反向迭代,即我們定義 V t ( s ) V_t(s) ,V的下標t表示我們迭代更新到了第幾輪,我們會設定第一輪的所有 V 0 ( s ) V_0^*(s) 初始值為0。而我們每一輪更新 V t ( s ) V_{t}^*(s) 會用到上一輪更新得到的 V t 1 ( s ) V_{t-1}^*(s) 值。我們重複這個迭代更新過程,直到值收斂。這個過程就是Value Iteration。

Value Iteraion的虛擬碼與python程式碼如下:

pic7

pic8

匯出策略

現在我們有評估每個狀態的效用的方法了,但是我們依然不知道機器人該如何行動,因為我們還不知道如何根據狀態的效用來匯出最優策略。

因此,與其算狀態效用,我們不如直接算q-state效用,因為q-state效用是包含最優效用對應的action的!

於是,以q-state的效用為計算核心的Q-Value Iteration演算法如下:

pic9

pic10

幾乎與Value Iteration一樣,使用Q-Value Iteration達到收斂後,我們就獲得了所有q-state的最大效用評估值。那麼當我們處於任何狀態s下時,我們只要比較該狀態的所有action延伸出來的q-state對應的Q值,選擇最大值對應的action去執行就可以了。

pic11

邊試邊學:強化學習

我們的Q-Value Iteration看起來是個很好的演算法,能夠幫助我們解決機器人如何在迷宮裡最優化行動的問題,但是發現了嗎,這個演算法是要求我們擁有T(s,a,s’)和R(s,a,s’)這兩個函式的具體知識的,即如果我們不知道這兩個函式的具體值域/形式,我們是不可能使用這個演算法的。

於是,我們就在想:既然不知道這兩個函式,那麼能不能這樣,我們不提前做Iteration了,直接讓機器人上!我們讓機器人在隨機探索迷宮的過程中,根據迷宮給它的反饋來學習和這個迷宮有關的特性,並且慢慢找到最優策略。(題外話,是不是覺得這種思路更接近於人類學習的方式,我們預先是不可能對這個世界有任何先天知識的,我們只能靠隨機的探索慢慢了解這個世界的規律,並逐漸形成做人處事的策略。這也就是強化學習設定的魅力!)

pic12

pic13

至於強化學習的具體演算法,那就單獨看我的相關文章了~。

參考:

[1] UC Berkeley CS188:Artificial Intelligence教案

[2] Artificial Intelligence: A Modern Approach (Third Edition)