MDP概述
馬爾科夫決策過程(Markov Decision Process)是強化學習(reinforcement learning)最基本的模型框架。它對序列化的決策過程做了很多限制。比如狀態\(S_t\)和動作\(a_t\)只有有限個、\((S_t,a_t)\)對應的回報\(R_t\)是給定的、狀態轉移只依賴於當前狀態\(S_t\)而與之前的狀態\(S_{t-1},S_{t-2},...\)無關等等。
當給定一個MDP具體問題,常常需要計算在當前策略\(\pi\)之下,每個狀態的值函數的值。而自己真正計算的時候,又不知怎么計算,這里給出一個具體的計算值函數的例子。分別用矩陣運算和方程組求解兩種方式給出。
MDP問題設置
如圖所示(來源:UCL Course on RL)
該例子可以理解為一個學生的生活狀態,在不同的狀態,他可以選擇學習、睡覺、發文章等等動作,同時獲得相應的回報\(R\)(reward)。
- 其中狀態空間為{\(S_1,S_2,...,S_5\)},動作空間為{刷Facebook,睡覺,學習,發表文章,棄療}。
- 每個狀態有兩個可選動作(\(S_5\)為終止狀態),每個動作被選擇的概率都為0.5,折扣因子\(\gamma=1\)。\((\pi(a|s)=0.5,\gamma=1\))
矩陣解法
據圖可得如下轉移概率矩陣P
化簡可得
其中\(P_{11}=0.5\)即表示從狀態\(S_1\)轉移到狀態\(S_1\)的概率為0.5,其他同理。
每個狀態轉移的平均reward可如下計算,
例如\(R_{1}=P[Facebook|S_1]*R_{Facebook}+P[Quit|S_1]*R_{Quit}=0.5*(-1)+0.5*0=-0.5\)
則有R的向量如下
那么已知轉移概率矩陣\(P\)和回報向量\(R\),利用貝爾曼方程,則可求得值函數的解\(v\)。貝爾曼方程可矩陣表示如下
- 則有
其中\(\gamma=1\)
- 剩下的就只是矩陣運算。我們運用python numpy計算如下
則可得
即為所求。
列方程組求解
矩陣運算表達和計算都很簡便,但經常會忘記其緣由,為何可以這樣求解。那么還可以回歸最本質的解方程組的方式求解。即將所有的狀態轉移用方程的形式羅列出來,然后聯立方程組求解即可。這種情況下,我們不必去記貝爾曼方程的矩陣表示形式,只需知道值函數的一步轉移公式如下:
其中,\(\pi(a|s_t)\)表示在狀態\(s_t\)下選擇動作\(a\)的概率,\(R_{s_t}^a\)表示在狀態\(s_t\)下選擇動作\(a\)得到的回報,\(P_{s_ts_{t+1}}^a\)表示在狀態\(s_t\)下選擇動作\(a\)之后轉移到狀態\(s_{t+1}\)的概率(當前問題是確定性的馬爾科夫鏈,選擇固定的動作后就一定會轉移到確定的狀態,即\(P_{s_ts_{t+1}}^a=1\)),\(v_{\pi}(s_{t+1})\)表示狀態\(s_{t+1}\)的值函數。這個式子看起來很麻煩,其實它想表達的就是,前一個狀態的值函數等於它能轉移到的所有下一狀態的值函數和所采取的動作的回報的概率加權之和。
我們用狀態\(S_1\)舉例。
從圖中可以看出,在\(S_1\)狀態下,有兩個動作可以選擇:刷Facebook或者棄療。兩個動作的選取率都為0.5。刷Facebook的回報是-1,同時又轉移到狀態\(S_1\)。棄療的回報是0,同時轉移到狀態\(S_2\)。也就是說,在狀態\(S_1\)的時候,要么刷Facebook並轉移到狀態\(S_1\),要么棄療並轉移到狀態\(S_2\)。用上面的數學表達式表示,即是
對每個狀態作同樣的狀態轉移分析,則可求得狀態值函數的方程組。這里將\(v_{\pi}(S_i)\)記為\(v_i\),得到如下方程組:
化簡有:
求解方程組可得相同的結果:
注
需要注意,這里求解的MDP狀態值函數,每個狀態的回報(reward)是根據轉移概率計算的平均回報,這稱為貝爾曼期望方程(Bellman Expectation Equation)。而在強化學習中,通常是選取使得價值最大的動作執行,這種解法稱為最優值函數(Optimal Value Function),得到的解不再是期望值函數,而是理論最大值函數。此時相當於策略\(\pi\)已經改變,且非線性,線性方程組不再適用,需要通過數值計算的方式求出。通常的做法是設置狀態值函數\(v(s)\)和狀態-動作值函數\(q(s,a)\)迭代求解。最終得到
其中通過\(q^*(s,a)\)選擇動作即為最優策略\(\pi^*\):
這里只給出迭代求解的方程如下(Bellman Optimality Equation):
隨機設置初始值,通過迭代計算,即可收斂到最優解。