Reinforcement Learning php
對於控制決策問題的解決思路:設計一個回報函數(reward function),若是learning agent(如上面的四足機器人、象棋AI程序)在決定一步後,得到了較好的結果,那麼咱們給agent一些回報(好比回報函數結果爲正),獲得較差的結果,那麼回報函數爲負。好比,四足機器人,若是他向前走了一步(接近目標),那麼回報函數爲正,後退爲負。若是咱們可以對每一步進行評價,獲得相應的回報函數,那麼就好辦了,咱們只須要找到一條回報值最大的路徑(每步的回報之和最大),就認爲是最佳的路徑。html
加強學習在不少領域已經得到成功應用,好比自動直升機,機器人控制,手機網絡路由,市場決策,工業控制,高效網頁索引等。本節的加強學習從馬爾科夫決策過程(MDP,Markov decision processes)開始。算法
Markov decision processes apache
馬爾科夫決策過程由一個五元組構成網絡
MDP的動態過程以下:某個agent的初始狀態爲,而後從A中挑選一個動做執行,執行後,agent按機率隨機轉移到了下一個狀態,。而後再執行一個動做,就轉移到了,接下來再執行…,咱們能夠用下面的圖表示整個過程app
咱們定義通過上面轉移路徑後,獲得的回報函數之和以下機器學習
若是R只和S有關,那麼上式能夠寫做異步
咱們的目標是選擇一組最佳的action,使得所有的回報加權和指望最大。分佈式
從上式能夠發現,在t時刻的回報值被打了的折扣,是一個逐步衰減的過程,越靠後的狀態對回報和影響越小。最大化指望值也就是要將大的儘可能放到前面,小的儘可能放到後面。函數
已經處於某個狀態s時,咱們會以必定策略來選擇下一個動做a執行,而後轉換到另外一個狀態s'。咱們將這個動做的選擇過程稱爲策略(policy),每個policy其實就是一個狀態到動做的映射函數。給定也就給定了,也就是說,知道了就知道了每一個狀態下一步應該執行的動做。
咱們爲了區分不一樣的好壞,並定義在當前狀態下,執行某個策略後,出現的結果的好壞,須要定義值函數(value function)也叫折算累積回報(discounted cumulative reward)
能夠看到,在當前狀態s下,選擇好policy後,值函數是回報加權和指望。這個其實很容易理解,給定也就給定了一條將來的行動方案,這個行動方案會通過一個個的狀態,而到達每一個狀態都會有必定回報值,距離當前狀態越近的其餘狀態對方案的影響越大,權重越高。這和下象棋差很少,在當前棋局下,不一樣的走子方案是,咱們評價每一個方案依靠對將來局勢(,,…)的判斷。通常狀況下,咱們會在頭腦中多考慮幾步,可是咱們會更看重下一步的局勢。
從遞推的角度上考慮,當期狀態s的值函數V,其實能夠看做是當前狀態的回報R(s)和下一狀態的值函數V'之和,也就是將上式變爲:
然而,咱們須要注意的是雖然給定後,在給定狀態s下,a是惟一的,但可能不是多到一的映射。好比你選擇a爲向前投擲一個骰子,那麼下一個狀態可能有6種。再由Bellman等式,從上式獲得
s'表示下一個狀態。
前面的R(s)稱爲當即回報(immediate reward),就是R(當前狀態)。第二項也能夠寫做,是下一狀態值函數的指望值,下一狀態s'符合分佈。
能夠想象,當狀態個數有限時,咱們能夠經過上式來求出每個s的V(終結狀態沒有第二項V(s'))。若是列出線性方程組的話,也就是|S|個方程,|S|個未知數,直接求解便可。
固然,咱們求V的目的就是想找到一個當前狀態s下,最優的行動策略,定義最優的V*以下:
就是從可選的策略中挑選一個最優的策略(discounted rewards最大)。
上式的Bellman等式形式以下:
第一項與無關,因此不變。第二項是一個就決定了每一個狀態s的下一步動做a,執行a後,s'按機率分佈的回報機率和的指望。
若是上式還很差理解的話,能夠參考下圖:
定義了最優的V*,咱們再定義最優的策略以下:
選擇最優的,也就肯定了每一個狀態s的下一步最優動做a。
根據以上式子,咱們能夠知道
解釋一下就是當前狀態的最優的值函數V*,是由採用最優執行策略的狀況下得出的,採用最優執行方案的回報顯然要比採用其餘的執行策略要好。
這裏須要注意的是,若是咱們可以求得每一個s下最優的a,那麼從全局來看,的映射便可生成,而生成的這個映射是最優映射,稱爲。針對全局的s,肯定了每個s的下一個行動a,不會由於初始狀態s選取的不一樣而不一樣。
Value iteration and policy iteration
本節討論兩種求解有限狀態MDP具體策略的有效算法。這裏,咱們只針對MDP是有限狀態、有限動做的狀況,。
值迭代法
|
值迭代策略利用了上節中bellman equation(2)
內循環的實現有兩種策略:
1)同步迭代法
拿初始化後的第一次迭代來講吧,初始狀態全部的V(s)都爲0。而後對全部的s都計算新的V(s)=R(s)+0=R(s)。在計算每個狀態時,獲得新的V(s)後,先存下來,不當即更新。待全部的s的新值V(s)都計算完畢後,再統一更新。
這樣,第一次迭代後,V(s)=R(s)。
2)異步迭代法
與同步迭代對應的就是異步迭代了,對每個狀態s,獲得新的V(s)後,不存儲,直接更新。這樣,第一次迭代後,大部分V(s)>R(s)。
無論使用這兩種的哪種,最終V(s)會收斂到V*(s)。知道了V*後,咱們再使用公式(3)來求出相應的最優策略,固然能夠在求V*的過程當中求出。
策略迭代法
值迭代法使V值收斂到V*,而策略迭代法關注,使收斂到。
|
(a)步中的V能夠經過以前的Bellman等式求得
這一步會求出全部狀態s的。
(b)步實際上就是根據(a)步的結果挑選出當前狀態s下,最優的a,而後對作更新。
對於值迭代和策略迭代很難說哪一種方法好,哪一種很差。對於規模比較小的MDP來講,策略通常可以更快地收斂。可是對於規模很大(狀態不少)的MDP來講,值迭代比較容易(不用求線性方程組)。
Learning a model for an MDP
在以前討論的MDP中,咱們是已知狀態轉移機率和回報函數R(s)的。但在不少實際問題中,這些參數不能顯式獲得,咱們須要從數據中估計出這些參數(一般S、A和是已知的)。
假設咱們已知不少條狀態轉移路徑以下:
其中,是i時刻,第j條轉移路徑對應的狀態,是狀態時要執行的動做。每一個轉移路徑中狀態數是有限的,在實際操做過程當中,每一個轉移鏈要麼進入終結狀態,要麼達到規定的步數就會終結。
若是咱們得到了不少上面相似的轉移鏈(至關於有了樣本),那麼咱們就可使用最大似然估計來估計狀態轉移機率。
分子是從s狀態執行動做a後到達s'的次數,分母是在狀態s時,執行a的次數。二者相除就是在s狀態下執行a後,會轉移到s'的機率。
爲了不分母爲0的狀況,咱們須要作平滑。若是分母爲0,則令,也就是說當樣本中沒有出現過在s狀態下執行a的樣例時,咱們認爲轉移機率均分。
上面這種估計方法是從歷史數據中估計,這個公式一樣適用於在線更新。好比咱們新獲得了一些轉移路徑,那麼對上面的公式進行分子分母的修正(加上新獲得的count)便可。修正事後,轉移機率有所改變,按照改變後的機率,可能出現更多的新的轉移路徑,這樣會愈來愈準。
一樣,若是回報函數未知,那麼咱們認爲R(s)爲在s狀態下已經觀測到的回報均值。
當轉移機率和回報函數估計出以後,咱們可使用值迭代或者策略迭代來解決MDP問題。好比,咱們將參數估計和值迭代結合起來(在不知道狀態轉移機率狀況下)的流程以下:
} |
在(b)步中咱們要作值更新,也是一個循環迭代的過程,在上節中,咱們經過將V初始化爲0,而後進行迭代來求解V。嵌套到上面的過程後,若是每次初始化V爲0,而後迭代更新,就會很慢。一個加快速度的方法是每次將V初始化爲上一次大循環中獲得的V。也就是說V的初值銜接了上次的結果。
參考文獻
[1] Machine Learning Open Class by Andrew Ng in Stanford http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning
[2] Yu Zheng, Licia Capra, Ouri Wolfson, Hai Yang. Urban Computing: concepts, methodologies, and applications. ACM Transaction on Intelligent Systems and Technology. 5(3), 2014
[3] Jerry Lead http://www.cnblogs.com/jerrylead/
[3]《大數據-互聯網大規模數據挖掘與分佈式處理》 Anand Rajaraman,Jeffrey David Ullman著,王斌譯
[4] UFLDL Tutorial http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
[5] Spark MLlib之樸素貝葉斯分類算法 http://selfup.cn/683.html
[6] MLlib - Dimensionality Reduction http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html
[7] 機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
[8] 淺談 mllib 中線性迴歸的算法實現 http://www.cnblogs.com/hseagle/p/3664933.html
[9] 最大似然估計 http://zh.wikipedia.org/zh-cn/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1
[10] Deep Learning Tutorial http://deeplearning.net/tutorial/
雪松
Microsoft MVP