【强化学习入门】马尔科夫决策过程
本文介紹了馬爾可夫決策過程,首先給出了馬爾可夫決策過程的定義形式,其核心是在時序上的各種狀態(tài)下如何選擇最優(yōu)決策得到最大回報的決策序列,通過貝爾曼方程得到累積回報函數(shù);然后介紹兩種基本的求解最優(yōu)決策的方法,值迭代和策略迭代,同時分析了兩種方法的適用場景;最后回過頭來介紹了馬爾科夫決策過程中的參數(shù)估計問題:求解-即在該狀態(tài)下采取該決策到底下一狀態(tài)的概率。
作者 | 文杰
編輯 | yuquanle
馬爾科夫決策過程
A、馬爾科夫決策過程
機器學(xué)習(xí)算法(有監(jiān)督,無監(jiān)督,弱監(jiān)督)中,馬爾科夫決策過程是弱監(jiān)督中的一類叫增強學(xué)習(xí)。增加學(xué)習(xí)與傳統(tǒng)的有監(jiān)督和無監(jiān)督不同的地方是,這些方法都是一次性決定最終結(jié)果的,而無法刻畫一個決策過程,無法直接定義每一次決策的優(yōu)劣,也就是說每一次的決策信息都是弱信息,所以某種程度上講,強化學(xué)習(xí)也屬于弱監(jiān)督學(xué)習(xí)。從模型角度來看,也屬于馬爾科夫模型,其與隱馬爾科夫模型有非常強的可比性。
下面是一個常用的馬爾科夫模型的劃分關(guān)系
| 狀態(tài)完全可見 | 馬爾科夫鏈(MC) | 馬爾科夫決策過程(MDP) |
| 狀態(tài)不完全可見 | 隱馬爾科夫模型(HMM) | 不完全可觀察馬爾科夫決策過程(POMDP) |
馬爾科夫決策過程:
馬爾科夫決策過程由五元組組成
:表示狀態(tài)集合
:表示一組動作
:表示在某一狀態(tài)下,采取動作,轉(zhuǎn)移到轉(zhuǎn)態(tài)的概率,也就是說在確定的狀態(tài)下采取相應(yīng)的動作之后不能完全確定下一狀態(tài),而是以一定的概率確定下一狀態(tài)。
:表示決策過程的一個阻尼系數(shù),用戶定義回報在決策過程中隨時間打折扣,加快決策國產(chǎn)的收斂
:表示在該狀態(tài)下的一個回報,有時由動作和狀態(tài)共同決定回報該時刻的回報。
有了上面的定義之后,一個完整的馬爾科夫決策過程狀態(tài)轉(zhuǎn)移圖如下:
該過程表示從出發(fā),有決策函數(shù)來選擇相應(yīng)的動作,然后以概率到達下一狀態(tài),這里的只是表示第時刻的狀態(tài),而的值屬于狀態(tài)集。
回報函數(shù)定義之后,整個決策過程的累積回報如下:
當回報函數(shù)與狀態(tài)無關(guān)累積回報如下:
其中為折扣因子,隨著決策不斷進行,回報不斷打折扣。
當定義不同決策函數(shù)時,我們會得到不同的回報,因此就定義了一個決策到回報的函數(shù)。在整個決策過程中,給定決策函數(shù)—在狀態(tài)下采取動作。因此,從狀態(tài)出發(fā),采用決策函數(shù),有累積回報函數(shù)如下:
直接最大化累積回報函數(shù)不易,從遞推角度來看,由貝爾曼方程有:
其中為立即回報,表示由采取動作之后轉(zhuǎn)移到下一個狀態(tài)集中,具體到哪個狀態(tài)的概率為。其解釋性可以理解為下象棋最終的累積回報為輸贏,在第狀態(tài)下的累積回報則是當前狀態(tài)下的立即回報以及未來的回報。第一項為立即回報,第二項就是未來的回報。
有了上面的貝爾曼方程,我們的目標就是最大化任意狀態(tài)下出發(fā)的累積回報函數(shù),其中也是一個決策函數(shù),但是在累積回報函數(shù)中它是我們需要優(yōu)化的變量。目標函數(shù)如下:
由目標函數(shù)可以看出,最優(yōu)回報和最優(yōu)決策一一對應(yīng)。最大化累積回報對應(yīng)的決策函數(shù)就是最有決策,最有決策對應(yīng)的累積回報也是最大累積回報,所以最有決策如下:
有了最優(yōu)決策和最大累積回報,那么必定有下式:
也就是說最優(yōu)決策下對應(yīng)的累積回報一定不小于一般的決策下的累積回報。
值得注意是,最優(yōu)決策是出于全局考慮的,是從所有狀態(tài)下出發(fā)到得到的累積回報的加和最大,這就意味著決策函數(shù)不保證其中每一個狀態(tài)出發(fā)根據(jù)決策函數(shù)得到的累積回報都是最大的。
最優(yōu)決策:
也許上面的目標函數(shù)還不清晰,如何求解最有決策,如何最大化累積回報
下面結(jié)合例子來介紹如何求解上面的目標函數(shù)。且說明累積回報函數(shù)本身就是一個過程的累積回報,回報函數(shù)才是每一步的回報。
下面再來看求解上述最優(yōu)問題,其中 就是以s為初始狀態(tài)沿著決策函數(shù)走到結(jié)束狀態(tài)的累積回報。
值迭代:
將每一個初始狀態(tài)為s的初始化為0,目標狀態(tài)累積回報為1
循環(huán)直到收斂{
對于每一個初始狀態(tài),對進行更新:
}
可以看出,更新第一次所有的,也就是說都只看眼下的立即回報,然后由于獎勵狀態(tài)和懲罰狀態(tài)的分布不同,由靠近獎勵狀態(tài)和懲罰狀態(tài)的狀態(tài)決策逐漸導(dǎo)向到初始狀態(tài)的決策,這也就是累積回報不斷更新的原因(動力)。但是值得思考的還是最終會不會收斂到最優(yōu)累積回報(暫時不作討論)。
內(nèi)循環(huán)迭代的的處理方法有兩種:
同步迭代:即在一次循環(huán)過程中,累積回報不更新,而是計算完所有的累積回報之后,再統(tǒng)一更新。
異步迭代,即在一次循環(huán)過程中,每計算完一個初始狀態(tài)下累積回報就立即更新,不需要等到所有的累積回報都計算出來之后再更新。
可以看出兩種迭代方式造成不同的原因是第二項,因為立即更新之后,再計算下一個初始狀態(tài)下的累積回報與暫時不更新得到的累積回報肯定不一樣,拿第一次更新為例,同步更新第一次?,而異步更新則第一次內(nèi)循環(huán)中,除了第一次更新的s會出現(xiàn)?,剩下的都有?,值得肯定的是異步迭代的收斂速度肯定是快于同步迭代。
策略迭代:
值迭代是使累積回報值最優(yōu)為目標進行迭代,而策略迭代是借助累積回報最優(yōu)即策略最優(yōu)的等價性,進行策略迭代。
隨機指定一個策略??。
循環(huán)直到收斂{
a:令
b:對于每一個狀態(tài)s,對做更新
}
這里要說明的是a步是通過前面的貝爾曼方程,以解方程的形式求解出每一個狀態(tài)下的累積回報:
在b步則是根據(jù)累積回報值,重新更新決策?。
同樣,收斂性也是值得探討的,這里簡單的思考一下,由于獎勵狀態(tài)和懲罰狀態(tài)的分布,以及累積回報唯一確定決策函數(shù),那么未達到最優(yōu)決策,必然累積回報和決策函數(shù)處于不穩(wěn)定的狀態(tài),而只有當?shù)竭_最優(yōu)決策時,才有:
所以該過程就是在a步由決策函數(shù)確定累積回報,然后最大化累積回報來更新決策,如此反復(fù),則有最優(yōu)決策。值迭代和策略迭代比較:可以看出策略迭代涉及從決策函數(shù)到累積回報的解線性方程組的步驟,值迭代則是反復(fù)的,所以策略迭代更適合處理少量狀態(tài)的情況,一般10000以內(nèi)還是可以接受的。
MDP中的參數(shù)估計:
回過頭來再來看前面的馬爾科夫決策過程的定義是一個五元組,一般情況下,五元組應(yīng)該是我們更加特定的問題建立馬爾科夫決策模型時該確定的,并在此基礎(chǔ)上來求解最優(yōu)決策。所以在求解最優(yōu)決策之前,我們還需更加實際問題建立馬爾科夫模型,建模過程就是確定五元組的過程,其中我們僅考慮狀態(tài)轉(zhuǎn)移概率,那么也就是一個參數(shù)估計過程。(其他參數(shù)一般都好確定,或設(shè)定)。
假設(shè),在時間過程中,我們有下面的狀態(tài)轉(zhuǎn)移路徑:
其中表示步,第條轉(zhuǎn)移路徑對應(yīng)的狀態(tài),是狀態(tài)下執(zhí)行的動作,每一條轉(zhuǎn)移路徑中狀態(tài)數(shù)都是有限的,在實際過程中,每一個狀態(tài)轉(zhuǎn)移路徑都要進入終結(jié)狀態(tài)。如果我們獲得了很多上面的轉(zhuǎn)移路徑,那么我們就可以來估計參數(shù)。
分子是在狀態(tài)下采取動作都轉(zhuǎn)移到的次數(shù),分母是在狀態(tài)下采取動作的次數(shù)。為了避免的情況,同樣采用拉普拉斯平滑。也就是說當?shù)竭_的狀態(tài)是樣本中為為到達過的狀態(tài),那么在該狀態(tài)下的執(zhí)行的動作達到下一狀態(tài)的概率均分。上面的這種估計方法是從歷史數(shù)據(jù)中進行統(tǒng)計的,同樣該方法適合于在線更新。對于立即回報函數(shù)的估計,一般根據(jù)實際情況學(xué)習(xí)或者設(shè)定。
所以整個馬爾科夫決策過程流程如下(以策略迭代為例):
隨機初始化策略 ??? 。
循環(huán)直到收斂{
a 在樣本上統(tǒng)計該策略下每個狀態(tài)轉(zhuǎn)移的次數(shù),來估計和
b 使用估計到參數(shù)來更新對應(yīng)決策函數(shù)下的累積回報
c 根據(jù)更新的累積回報重新進行決策,即更新
}
整個流程就是在策略迭代的基礎(chǔ)上,同時進行了參數(shù)估計。
代碼實戰(zhàn)
A、馬爾可夫決策過程值迭代
/***馬爾科夫決策過程值迭代,關(guān)鍵在于第一次迭代要例外,因為目標狀態(tài)是一個終止狀態(tài),放到迭代循環(huán)里面會出現(xiàn)臨近的狀態(tài)回報函數(shù)無限的,發(fā)散。迭代過程采用的是異步迭代,即每一次內(nèi)層循環(huán)找到更優(yōu)的回報就立即更新最大回報,以便與之相鄰的狀態(tài)能立即更新到最優(yōu)*/?/****值迭代同步更新12*12*7*/?while(!flag){flag=1;for(i=0; i<size; i++){if(action[i]>0||action[i]==0)maxreward[i]=reward[i]+maxreward[action[i]];else?maxreward[i]=reward[i];}//放到這意味著同步更新,count=1008是12*12的7倍,即掃了7遍for(i=0; i<size; i++)//對每一個狀態(tài)求最大的V(s){for(j=0; j<size; j++)//策略迭代的話這里其實可以換做掃一遍策略集,這也就是和值迭代不同的地方{//cout<<"i="<<i<<" "<<maxreward[i]<<" "<<endl;if(matrix[i][j]==1&&maxreward[j]>maxreward[i]-reward[i]+0.0001)//更新累積回報{action[i]=j;//if(action[i]>0||action[i]==0)//maxreward[i]=reward[i]+maxreward[action[i]];//放到這是異步更新,//else// maxreward[i]=reward[i];flag=0;//當累積回報不再更新,即不進入該if,那么就結(jié)束迭代}count++;}}}B、馬爾可夫決策過程策略迭代
while(!flag){flag=1;for(i=0; i<size; i++)//對每一個狀態(tài)求最大的V(s){for(j=0; j<ACTION; j++)//策略迭代的話這里其實可以換做掃一遍策略集,這也就是和值迭代不同的地方{//cout<<"i="<<i<<" "<<maxreward[i]<<" "<<endl;if(matrix[i][ac[j]+i]==1&&maxreward[ac[j]+i]>maxreward[i]-reward[i]+0.0001){action[i]=j;//if(reward[i]!=1&&reward[i]!=-1)maxreward[i]=reward[i]+maxreward[ac[j]+i];//else// maxreward[i]=reward[i];flag=0;}count++;}}}C、馬爾可夫決策過程動態(tài)規(guī)劃版
/**4 非遞歸動態(tài)規(guī)劃從最終狀態(tài)出發(fā),采用廣度遍歷不斷的更新其上一狀態(tài)的累積回報*/?/*while(q!=NULL)//這里圖的廣度遍歷沒有用到隊列,但也用到了隊列的思想//對于當前步能到達的節(jié)點用鏈表連接起來,然后逐漸進行下一步的能到達的節(jié)點進行入鏈(入隊列),同樣是一種先進先出思想{for(i=0; i<size; i++) //由于不是策略迭代,只能遍歷所有的狀態(tài),找出能到的,且更優(yōu)的{if(matrix[i][q->data]==1&&maxreward[i]<0)//double類型比較大小的偏差,加上一個小數(shù)作為精度{maxreward[i]=reward[i]+maxreward[q->data];p=(subset *)malloc(sizeof(subset)*1);p->data=i;p->next=NULL;q=maxsubset;while((q->next)!=NULL)q=q->next;q->next=p;}count++;}maxsubset->next=maxsubset->next->next;//刪除當前節(jié)點,即當前步下能到達的節(jié)點都已經(jīng)走完了,可出隊列了q=maxsubset->next;//}The End
備注:公眾號菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧2019年公眾號文章精選適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請回復(fù)“加群”加入知識星球(4500+用戶,ID:92416895),請回復(fù)“知識星球”喜歡文章,點個在看
總結(jié)
以上是生活随笔為你收集整理的【强化学习入门】马尔科夫决策过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas_profiling :教你
- 下一篇: 玩转Python? 一文总结30种Pyt