1. 程式人生 > >馬爾科夫獎賞過程

馬爾科夫獎賞過程

0 前言

本文寫作目的:儘量通俗講解強化學習知識,使讀者不會被各種概念嚇倒!本文是第一篇,但是最關鍵的一篇是第二篇馬爾科夫決策過程(Markov Decision Process,MDP),只有充分理解了馬爾科夫決策過程,才能遊刃有餘的學習後續知識,所以希望讀者能夠將MDP深入理解後再去學習後續內容
由於本人水平有限,文章寫作順序幾乎是完全按照David Silver強化學習課程講解,但是會補充自己學習心得,所以文章會比較通俗易懂。由於本人接觸時間也不長,如有錯誤,歡迎指出,我及時修改!謝謝。
本文思路:

 1. 強化學習基本概念
 2. 強化學習與其他機器學習演算法區別和聯絡
 3. 馬爾科夫性質
 4. 馬爾科夫過程
 5. 馬爾科夫獎賞過程
 6. 總結

1 強化學習簡要說明

強化學習(Reinforcement Learning, RL)是一類演算法,發展歷史也很久了,只不過由於深度學習的快速發展,也快速推動了RL的發展,使得深度強化學習成為研究熱點,特別是Alpha go、遊戲AI等的廣泛傳播使得人盡皆知。由於這類文章特別多,這裡就不再贅述。這裡只介紹RL常見的概念和其他機器學習演算法區別。

1.1 強化學習基本概念

強化學習,從字面理解包括強化和學習過程,強化代表著提升即不斷提升自己,而學習代表著不斷感知周圍環境,並接收環境給予的反饋,強化和學習是一個不斷迴圈迭代的過程,直到達到最優決策。以上圖結合動物園猴子學騎車為例:圖中的大腦即為agent,對應的就是猴子;action表示動作,對應的就是猴子往哪個方向走,設action是{左,右,上,下};地球代表環境,環境是可以感知的,並且執行某個或者某些action後會給出reward獎勵,對應的就是猴子騎車到達了指定位置,就可以獲得香蕉reward;observation表示可觀測序列,對應的就是訓猴子的人看到的一系列猴子做出的動作。
在訓練猴子的過程中,一個完整的強化學習過程是:人督促猴子做出某個動作action,然後訓猴子的人觀察observation是否正確,在猴子執行了一系列動作到達目的地後給予香蕉reward,如果沒有到達就啥也不給。每次完成一次或者失敗一次後,重新恢復到原始位置,不斷迴圈重複,直到猴子學會了如何快速騎車到達目的地。
上述例子其實涉及到很大部分強化學習概念即:

1 agent 代理
  1.1 Executes action  可執行動作$At$
  1.2 Receives observation 可觀測序列$Ot$
  1.3 Receives scalar reward 可接收回報 $R_t$ 是一個標量,簡單來說就是數值,後面會詳細說明其意義
2 environment環境
  2.1 Receives action 可接收動作$At$
  2.2 Emits observation 發射觀測序列$Ot$
  2.3 Emits scalar reward 發射標量回報 $R_t$ 

其中 t 表示第 t

 個步驟或者階段,對應的就是猴子騎車的每一個時刻。 寫了一大堆,其實上面內容都不重要,因為太過概念化、官方化了。大家只需要瞭解大意即可,實際上我覺得對於RL的上述概念其實很好理解,一看就懂,無需多言!

1.2 強化學習與其他機器學習演算法區別與聯絡

需要了解一些強化學習和其他機器學習演算法的區別和聯絡。簡單來說強化學習特點是:

1 RL沒有supervisor,只有一個reward signal。它不需要提供標註的資料
2 RL問題中的feedback是延時的。對於上面的猴子騎車問題,猴子並不是每騎一個方向就有獎勵,只有當它騎了好多步並且到達目的地才有獎勵,是有延遲的
3 時序資料,不滿足iid獨立同分布性質
4 當前動作執行會影響後續接收資料

通過下面兩幅圖可以很容易看出區別:

1.3 強化學習目的

reward回報是強化學習中最重要的東西,它是一個標量反饋訊號,表示agent在當前t時刻做的有多好。給一支香蕉和不給香蕉就可以認為是reward,假設定義為{1,0},而強化學習演算法的目標或者說優化函式就是最大化累計回報(maximise cumulative reward),對於序列化決策問題,強化學習就是選擇一些action使得將來回報最大;對於訓練猴子問題,強化學習目的就是通過讓猴子知道只有騎車到達目的地才能得到最多香蕉;對於走迷宮問題,就是讓機器人學習出一條路徑,按照這條路徑走才能最快出迷宮。
總之,不管啥強化學習演算法,本質目的就是maximisation of expected cumulative reward,好比機器學習或者深度學習演算法,本質目的就是優化某個損失函式而已,而最大化累計回報也可以認為是函式,但是不能認為是損失函式(損失函式是要值下降的)。

2 馬爾科夫性質

看到這裡,您才算真正進入了強化學習了,恭喜你!
既然RL是一個時序決策問題,那麼就涉及到歷史決策資訊,如果每一步決策都要考慮歷史前n多步的決策,可想而知,解決這類問題非常複雜,故而為了簡化問題或者說實際上很多情況都是可以這樣近似的而引入馬爾科夫鏈(Markov chain,MC)性質。實際上對於熟悉機器學習演算法的人應該很清楚這部分,在貝葉斯網路、隱馬爾科夫模型、文件主題生成模型LDA、貝葉斯決策等演算法中都有用到該性質。其定義為:

如果說狀態 S_t 是馬爾科夫的,當前僅當滿足上述式子。意思是處於 S_t 狀態下, S_{t+1} 出現的概率只與 S_t 狀態有關,而和 S_t 之前的狀態無關,或者說給定當前狀態 S_t ,將來的狀態與 t 時刻之前的狀態沒有關係。這樣的性質使得時序決策問題瞬間簡單很多。但是需要說明的是這種性質是有依據的,並不是說故意簡化,例如走迷宮問題,每一步做出的決策,都是基於站在當前位置看到的資訊而言的,是非常符合實際的。

3 狀態轉移矩陣

在上一節中,概率P實際上是狀態轉移矩陣(State Transition Matrix),表示從 S_t 狀態轉移到 S_{t+1}狀態存在的概率,完整的狀態轉移矩陣表徵的是所有狀態的轉移概率,是非常重要的矩陣,可以看出它是滿足馬爾科夫性質的。
對於一個馬爾科夫狀態 S 和下一個狀態 S^{'} ,狀態轉移可以定義為: \\ P_{ss^{'}}=P[S_{t+1}=S^{'}|S_t=S]

從而狀態轉移矩陣可以寫成如下形式:

注意:每一行概率和肯定是1,因為從當前狀態轉移到其他所有狀態的概率和必然是1。

上圖是本文分析的核心狀態轉移圖,也是從David Silver強化學習課程的PPT中而來,後面的每一個過程都會用這副圖來講解。對應上圖的狀態轉移矩陣是:

空白的地方可以填入-1或者0,表示不可轉移。

4 馬爾科夫過程

馬爾科夫過程Markov Process或者馬爾科夫鏈是一個無記憶隨機過程,是一些具有馬爾科夫性質的隨機狀態序列構成,可以用一個元組 <S,P> 表示,其中S是有限數量的狀態集,P是狀態轉移概率矩陣。如下:

上面的狀態轉移圖就是一個關於學生的馬爾科夫隨機過程(馬爾科夫鏈)。每一個圓圈代表一個state,圖中一共7個state,分別是{facebook,calss1,class2,class3,pass,pub,sleep},sleep是吸收狀態,可以保證馬爾科夫序列是一個有限序列,箭頭表示狀態轉移,箭頭上方的資料表示轉移概率值。例如當學生處於class2狀態,他有0.2的概率進入sleep狀態,有0.8的概率進入class3狀態,其他分析同理。

5 馬爾科夫獎賞過程

5.1 馬爾科夫獎賞過程定義

馬爾科夫獎勵過程Markov Reward Process是在馬爾科夫過程的基礎上增加了獎勵R和衰減係數γ,其定義如下:

R 是獎勵函式, S 狀態下的獎勵 R_s 是在時刻 t 處,在當前狀態 s 下,下一個時刻 t+1 能獲得的獎勵期望。這個 R_{t+1} 不好理解,David指出這僅是一個約定,一般我們都是說 R_{t+1} 是離開該狀態能夠獲得的立即獎勵。

上圖中的 R 就是獎勵,是自己定義的。例如當學生處在第一節課(Class1)時,他參加第2節課(Class2)後獲得的Reward是-1;同時進入到瀏覽facebook這個狀態中獲得的Reward也是-1,一般我們是說:他從class1狀態離開,進入到class2狀態所得到的離開立即獎勵是-2,如果大家統一說法,其實就非常好理解了。由於作者認為最終目的是通過考試,所以在pass狀態下離開獲得的立即獎勵是非常大的=10。

5.2 Return

下面引出一個非常重要的公式,這個公式是後續推導的最原始形式。Return 定義:收穫 G_{t} 為在一個馬爾科夫獎勵過程中上從t時刻開始往後所有的獎勵的有衰減的收益總和。其定義為:

\gamma 指的是衰減因子,體現的是未來的獎勵在當前時刻的價值比例, \gamma 接近0,則表明趨向於“近視”性評估; \gamma 接近1則表明偏重考慮遠期的利益,很好理解,當 \gamma =0時收穫的回報就是隻考慮當前一步,有可能陷入誤區,當 \gamma =1時收穫的回報考慮了未來,當前一步的回報並不是佔主要地位。和機器學習中常用的滑動平均模型其實原理是一樣,你對未來更信任一點,那麼 \gamma 就設定大一些,你對未來沒有信心,只關心目前狀況,那麼 \gamma 小一點即可。在David PPT裡面也有解釋為何要引入 \gamma :

1.數學表達的方便,這也是最重要的
2.避免陷入無限迴圈
3.遠期利益具有一定的不確定性
4.在金融學上,立即的回報相對於延遲的彙報能夠獲得更多的利益
5.符合人類更看重眼前利益的性格

需要注意的是 G_{t} 並不只是一條路徑,從t時刻到終止狀態或者吸收時刻,可能會有多條路。
依然以上面的學生狀態轉移圖為例:一個學生的樣本片段序列episodes是從class1開始,終止於sleep狀態,其觀測得到的出現的狀態轉移序列是(還有其他很多可能序列,但是可能沒有觀測到):

 

所以實際上你想計算出精確的 G_{t} 是不可能的,因為你無法窮盡所有序列,但是可以通過取樣來近似計算。具體計算看後面。

5.3 狀態值函式 State Value function

上面說過 G_{t} 是不好算的,因為路徑是非常多條的,而值函式的引入就是為了解決上述問題。值函式給出了某一狀態或某一行為的長期價值,其定義是:一個馬爾科夫獎勵過程中某一狀態的價值函式為從該狀態開始的馬爾可夫鏈收穫的期望。

值函式是一個數值,而且包括了多條路徑,這樣就可以解決上述難題了。期望的作用就是把從t時刻到終止狀態的馬爾科夫鏈的每一條對應的概率和Return收益進行求平均得到一個定值,方便後續優化。以學生狀態轉移圖為例:

以第二條路徑進行分析:圖中的v1其實寫成 G_1 更好一些

v1=C1狀態離開的即時獎勵+  \gamma × FB狀態離開的即時獎勵+  \gamma ^2 ×
FB狀態離開的即時獎勵+  \gamma ^3 × C1狀態離開的即時獎勵+  \gamma ^4 × C2狀態離開的即時獎勵
-2 + (-1)× \frac {1}{2}+(-1) * \frac {1}{4}+(-2) * \frac {1}{8}+(-2) * \frac {1}{16}=-3.125

如果僅僅觀測到以上4條序列,那麼在狀態Class1處學生的值函式v(s)就是上述4個值除以4即可, v(s) = (-2.25+(-3.125)+(-3.41)+(-3.20))/4 =2.996 。
再次以下圖為例,闡述一下狀態值函式的計算方法:

v(pass)=10
v(class3)=0.6(-2+0.9*10)+0.4*(-2+0.9*1.9)=4.1

可能你存在疑問:計算v(class3)直接使用了v(pub)的值,但是目前來說v(pub)是還沒有計算出來的。確實如果採用上面的計算方法確實是沒法計算的,但是就上面問題而言,實際上是可以通過線性代數直接求出來或者通過迭代化求解,在下一小結會講解。這裡先提前說明一個知識點:假設你已經算出來上面的各個狀態下的值函式,那麼對於強化學習而言,假設是找到一條最優路徑,起點狀態是class1,那麼很明顯最優狀態鏈是class1->class2->class3->pass->sleep,也就是說這條路徑的累計回報最大,也就是說值函式求出來了,其實強化學習問題就解決了,對應的就是後續的值迭代法、Q-learning等思路了。這些演算法後面會細說,大家不用著急。

5.4 貝爾曼期望方程Bellman Equation

狀態值函式的引入解決了Return G_t 路徑有很多條,不容易優化的問題,將其轉化為期望就變成固定標量了,很明顯的轉化。但是現在又出現另一個問題了,狀態值函式也不好算,因為在計算某個狀態時候需要使用到將來所有狀態的 G_t ,這明顯是不科學的。那麼憑藉大家學習演算法思想,既然是狀態更新,既然是馬爾科夫的,很容易想到應用迭代思想求解,而貝爾曼期望方程就是一個迭代方程,目的是使得狀態值函式容易求解。
設離開某狀態的立即回報是 R_{t+1} ,後繼狀態的折扣價值函式是 \gamma v(S_{t+1}) ,那麼有:

對於倒數第二步推導到最後一步的推導,可能很多人有疑問,我推導一下:
\\v(s)=E[R_{t+1}+\gamma G_{t+1} | S_t=s]

\\=E[R_{t+1} | S_t=s]+E[\gamma G_{t+1} | S_t=s]

\\=R_{t+1} +\gamma v(S_{t+1})

\\=E[R_{t+1} | S_t=s]+E[\gamma v(S_{t+1}) | S_t=s]

\\=E[R_{t+1}+\gamma v(S_{t+1}) | S_t=s]

第1步到第2步是直接將加法拆開;第2步到第3步是因為回報 R_{t+1} 是離開該狀態的立即回報,不管進入哪個狀態,例如上述學生處於狀態calss2,根據狀態轉移函式,狀態可以轉移到sleep和clsaa3,只要離開了class2,就會得到立即回報 R_{t+1} ,所以實際上有兩個 R_{t+1} ,所以期望就是 R_{t+1} ;第3步到第4步,因為前面說過值函式就是一個標量,它的期望還是自身,所以還可以進一步求期望;第4步到第5步是合併加法而已。
好的,現在得出結論:針對馬爾科夫獎賞過程MRP的Bellman Equation方程是:

\\v(s) = E[R_{t+1} + γv(S_{t+1}) | S_t = s]

通過方程可以看出 v(s)由兩部分組成,一是該狀態的立即獎勵期望,立即獎勵期望等於立即獎勵;另一個是下一時刻狀態的價值期望,可以根據下一時刻狀態的概率分佈乘以價值期望得到。
下面把期望E去掉,假設下一時刻狀態是 S^{'} ,那麼有:

上圖的空心圓圈表示狀態,說個題外話:我希望大家立即公式能夠把對應的狀態連線圖記住,類似上面那個圖,因為從這個圖很容易推匯出公式,很容易理解記憶。去掉期望後,v(s)就等於離開該狀態的立即回報 R_{s} 加上各條後繼狀態的轉移概率乘以對於的 v(s^{'}) ,再乘以衰減因子。上述公式非常重要。依然以學生為例:

在狀態class3處的狀態值函式計算就非常簡單了。這裡還是需要說明:其實一開始計算時候0.8肯定是不存在的,實際計算可以採用迭代法,一開始任意初始化,後面學習更新即可,這就是所謂的值迭代法。當然對於這個問題,可以採用下面的方法直接求解。

5.5 貝爾曼期望方程的矩陣形式Bellman Equation in Matrix Form

將上述的不含期望的貝爾曼期望方程寫成矩陣形式,可以看出它是一個線性方程,那麼可以直接採用線性代數的方法求解,無需迭代。可能有同學有疑問:明明是 v=R+\gamma P v^{'} 才對啊?其實是這樣的, v^{'} 是後繼狀態的值函式,但是它肯定也是由v(1)~v(n)構成的呀,所以可以直接寫成上述矩陣形式。那麼求解後得到的解是:

\\v=(I-\gamma P)^{-1}R

對於剛才的學生問題是完全可以一步解決得到的,但是如果狀態非常多,例如10000,那麼這個逆矩陣的解法就不合適了,整個求解的複雜度是 O(n^3) ,所以上述解法只時候一些小規模,已知P和R的MRP問題,有很大侷限。對於大規模的MRP問題,通常可以採用動態規劃Dynamic Programming,將複雜問題分治迭代求解;蒙特卡洛評估Monte-Carlo evaluation,採用取樣計算近似計算;時序差分學習Temporal-Difference。當然這些方法是後面要講的。
下一篇文章是馬爾科夫決策過程,是強化學習的最核心內容,請注意查收!

6 總結

本文講的內容其實可以簡單歸納為:

對於某個馬爾科夫過程,如果已知模型,那麼就是馬爾科夫鏈;如果不知道模型,那麼就是隱馬爾科夫模型;如果引入了回報,那麼就轉化為馬爾科夫獎賞過程;如果再引入Action,就轉化為了馬爾科夫決策過程,對於MDP問題,如果已知model(P,R),那麼就是planning問題,如果不知道model(P,R),那麼就是強化學習問題了。強化學習的方向主要也就是該分支部分。如有疑問,歡迎加群交流678455658。

參考文獻

[1] David Silvr強化學習課程,b站有視訊