机器学习(二十八)——Monte-Carlo
動態規劃(續)
Value Iteration
vk+1(s)=maxa∈A(Ras+γ∑s′∈SPass′vk(s′))vk+1(s)=maxa∈A(Rsa+γ∑s′∈SPss′avk(s′))
state-value function迭代的復雜度是O(mn2)O(mn2),其中m為action的數量,n為state的數量。而action-value function迭代的復雜度是O(m2n2)O(m2n2)
動態規劃的主要局限在于:
1.它依賴于概率模型。
2.計算復雜度太高,只適合規模中等(<1M的狀態數)的情況。
DP的一些擴展
異步動態規劃(Asynchronous Dynamic Programming)
采樣更新(Sample Backups)
近似動態規劃(Approximate Dynamic Programming)
參考
http://www.cppblog.com/Fox/archive/2008/05/07/Dynamic_programming.html
動態規劃算法(Wikipedia中文翻譯版)
https://www.zhihu.com/question/23995189
什么是動態規劃?動態規劃的意義是什么?
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html
動態規劃算法
http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html
動態規劃
https://segmentfault.com/a/1190000004454832
動態規劃
http://www.cnblogs.com/jmzz/archive/2011/06/26/2090702.html
動態規劃
http://www.cnblogs.com/jmzz/archive/2011/07/01/2095158.html
DP之Warshall算法和Floyd算法
http://www.cnblogs.com/jmzz/archive/2011/07/02/2096050.html
DP之最優二叉查找樹
http://www.cnblogs.com/jmzz/archive/2011/07/02/2096188.html
DP之矩陣連乘問題
http://www.cnblogs.com/jmzz/archive/2011/07/05/2098630.html
DP之背包問題+記憶遞歸
http://www.cs.upc.edu/~mmartin/Ag4-4x.pdf
Bellman equations and optimal policies
https://mp.weixin.qq.com/s/a1C1ezL59azNfdM3TFGaGw
遞推與儲存,是動態規劃的關鍵
Monte-Carlo
概率算法
概率算法是和確定性算法相對的概念。概率算法的一個基本特征是對所求解問題的同一實例用同一概率算法求解兩次,可能得到完全不同的效果。這兩次求解問題所需的時間甚至所得到的結果,可能會有相當大的差別。
常見的概率算法主要有:數值概率算法,舍伍德(Sherwood)算法,蒙特卡羅(Monte Carlo)算法和拉斯維加斯(Las Vegas)算法。
在《數學狂想曲(三)》中我們已經提到了“統計模擬”的概念,這實際上就是數值概率算法的應用,它主要利用了大數定律與強大數定律。
這里有兩個容易混淆的概念:Monte Carlo method和Monte Carlo algorithm。
Monte Carlo method這個概念的范圍非常廣,它實際上就是概率算法的別名。諸如用隨機投針計算圓周率之類的算法,都可以看作是Monte Carlo method。
Monte Carlo algorithm就要狹義的多了,詳情見下文。
舍伍德(Sherwood)算法
設A是一個確定算法,f(x)f(x)是解某個實例x的執行時間,設n是一整數,XnXn是大小為n的實例的集合.假定XnXn中每一個實例是等可能出現的,則算法A解XnXn中一個實例的平均執行時間是:
f(x)ˉˉˉˉˉˉˉˉˉˉ=∑x∈Xnf(x)/nf(x)ˉ=∑x∈Xnf(x)/n
假如存在一個實例x0x0使得f(x0)?f(x)ˉˉˉˉˉˉˉˉˉˉf(x0)?f(x)ˉ,比如快速排序在最壞情況下的復雜度O(n)?O(nlogn)O(n)?O(nlog?n)。這時使用sherwood對原始算法進行改進是有價值的。
Sherwood算法通過增加一個較小的額外開銷從而使得算法的復雜度與具體實例x無關。例如,在快速排序中,我們是以第一個元素為基準開始排序時,為了避免這樣的情況,可以用舍伍德算法解決,也就是使第一個基準元素是隨機的。
蒙特卡羅(Monte Carlo)算法
舉個例子,假如筐里有100個蘋果,讓我每次閉眼拿1個,挑出最大的。于是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。這個挑蘋果的算法,就屬于蒙特卡羅算法——盡量找好的,但不保證是最好的。
拉斯維加斯(Las Vegas)算法
假如有一把鎖,給我100把鑰匙,只有1把是對的。于是我每次隨機拿1把鑰匙去試,打不開就再換1把。我試的次數越多,打開(最優解)的機會就越大,但在打開之前,那些錯的鑰匙都是沒有用的。這個試鑰匙的算法,就是拉斯維加斯算法——盡量找最好的,但不保證能找到。
比如N皇后的排列問題,除了順序枚舉法之外,隨機枚舉也是一種策略。
Monte Carlo method與RL
MDP的缺點在于model是已知的,但在實際應用中,更多的是Model未知(或部分未知)或者建模困難的情況,這種情況下就需要使用MC method來生成相應的Model。
MC method在RL中主要有兩種使用方式:
model-free:完全不依賴Model。
Simulated:簡單的模擬,而不需要完整的Model。
MC method用experience替代了MDP中的transitions/rewards(也可以說是用empirical mean替代了expected),但需要注意這些experience不能是重復采樣的,而且它只適用于周期性的MDP。
Monte Carlo Policy Evaluation
Monte Carlo Policy Evaluation的目標是對狀態s進行估值。它的步驟是:
當s被訪問到(visited)時:
增加計數:
N(s)←N(s)+1N(s)←N(s)+1增加總獎勵:S(s)←S(s)+GtS(s)←S(s)+Gt
V(s)=S(s)/N(s)V(s)=S(s)/N(s)
反復多次:N(s)→∞,V(s)→vπ(s)N(s)→∞,V(s)→vπ(s)
根據Visit的策略不同,Monte Carlo Policy Evaluation又可分為:First-visit MC和Every-Visit MC。
兩者的差別在于:First-visit MC的每次探索,一旦抵達狀態s,就結束了,Every-Visit MC到達狀態s之后還可以繼續探索。
Incremental Monte-Carlo Updates
借用《機器學習(二十六)》中,求均值的小技巧,我們可以得到Incremental Mean。
用Incremental Mean進行更新,被稱作Incremental Monte-Carlo Updates:
V(St)←V(St)+1N(St)(Gt?V(St))V(St)←V(St)+1N(St)(Gt?V(St))
對于非平穩(non-stationary)問題,我們也可采用如下公式更新:
V(St)←V(St)+α(Gt?V(St))V(St)←V(St)+α(Gt?V(St))
參考
https://mp.weixin.qq.com/s/F9VlxVV4nXELyKxdRo9RPA
強化學習——蒙特卡洛
https://www.zhihu.com/question/20254139
蒙特卡羅算法是什么?
http://www.cnblogs.com/2010Freeze/archive/2011/09/19/2181016.html
概率算法-sherwood算法
http://www.cnblogs.com/chinazhangjie/archive/2010/11/11/1874924.html
概率算法
https://mp.weixin.qq.com/s/wfCyii6bS-GxMZPg2TPaLA
蒙特卡洛樹搜索是什么?如何將其用于規劃星際飛行?
https://mp.weixin.qq.com/s/tqhPGG2Djl4gnd09RdHsUA
一個徹底改變世界的思想
https://mp.weixin.qq.com/s/vKVX-aJ7n7VVDXOpoTo1GQ
通過Python實現馬爾科夫鏈蒙特卡羅方法的入門級應用
https://mp.weixin.qq.com/s/TMHaIRFdgJxG__1oqRq70Q
蒙特卡羅樹搜索之初學者指南
Temporal-Difference Learning
TD
時序差分學習和蒙特卡洛學習一樣,它也從Episode學習,不需要了解模型本身;但是它可以學習不完整的Episode,通過bootstrapping,猜測Episode的結果,同時持續更新這個猜測。
最簡單的TD算法——TD(0)的更新公式如下:
V(St)←V(St)+α(Rt+1+γV(St+1)?V(St))V(St)←V(St)+α(Rt+1+γV(St+1)?V(St))
其中,Rt+1+γV(St+1)Rt+1+γV(St+1)被稱作TD target,而δt=Rt+1+γV(St+1)?V(St)δt=Rt+1+γV(St+1)?V(St)被稱作TD error。
下面用駕車返家的例子直觀解釋蒙特卡洛策略評估和TD策略評估的差別。
想象一下你下班后開車回家,需要預估整個行程花費的時間。假如一個人在駕車回家的路上突然碰到險情:對面迎來一輛車感覺要和你相撞,嚴重的話他可能面臨死亡威脅,但是最后雙方都采取了措施沒有實際發生碰撞。如果使用蒙特卡洛學習,路上發生的這一險情可能引發的負向獎勵不會被考慮進去,不會影響總的預測耗時;但是在TD學習時,碰到這樣的險情,這個人會立即更新這個狀態的價值,隨后會發現這比之前的狀態要糟糕,會立即考慮決策降低速度贏得時間,也就是說你不必像蒙特卡洛學習那樣直到他死亡后才更新狀態價值,那種情況下也無法更新狀態價值。
TD算法相當于在整個返家的過程中(一個Episode),根據已經消耗的時間和預期還需要的時間來不斷更新最終回家需要消耗的時間。
| 離開辦公室 | 0 | 30 | 30 | 
| 取車,發現下雨 | 5 | 35 | 40 | 
| 離開高速公路 | 20 | 15 | 35 | 
| 被迫跟在卡車后面 | 30 | 10 | 40 | 
| 到達家所在街區 | 40 | 3 | 43 | 
| 到家 | 43 | 0 | 43 | 
基于上表所示的數據,下圖展示了蒙特卡洛學習和TD學習兩種不同的學習策略來更新價值函數(各個狀態的價值)。這里使用的是從某個狀態預估的到家還需耗時來間接反映某狀態的價值:某位置預估的到家時間越長,該位置價值越低,在優化決策時需要避免進入該狀態。對于蒙特卡洛學習過程,駕駛員在路面上碰到各種情況時,他不會更新對于回家的預估時間,等他回到家得到了真實回家耗時后,他會重新估計在返家的路上著每一個主要節點狀態到家的時間,在下一次返家的時候用新估計的時間來幫助決策。
而對于TD學習,在一開始離開辦公室的時候你可能會預估總耗時30分鐘,但是當你取到車發現下雨的時候,你會立刻想到原來的預計過于樂觀,因為既往的經驗告訴你下雨會延長你的返家總時間,此時你會更新目前的狀態價值估計,從原來的30分鐘提高到40分鐘。同樣當你駕車離開高速公路時,會一路根據當前的狀態(位置、路況等)對應的預估返家剩余時間,直到返回家門得到實際的返家總耗時。這一過程中,你會根據狀態的變化實時更新該狀態的價值。
TD vs. MC—1
通過這個例子,我們可以直觀的了解到:
1.TD在知道結果之前可以學習,MC必須等到最后結果才能學習;
2.TD可以在沒有結果時學習,可以在持續進行的環境里學習。
TD vs. MC—2
Gt=Rt+1+γRt+2+?+γT?1RTGt=Rt+1+γRt+2+?+γT?1RT是Vπ(St)Vπ(St)的無偏估計值。
True TD target:Rt+1+γVπ(St+1)Rt+1+γVπ(St+1),也是Vπ(St)Vπ(St)的無偏估計值。
TD target:Rt+1+γV(St+1)Rt+1+γV(St+1),是Vπ(St)Vπ(St)的有偏估計值。
MC沒有bias,但有著較高的Variance,且對初始值不敏感;
TD低variance, 但有一定程度的bias,對初始值較敏感,通常比MC更高效;
總結
以上是生活随笔為你收集整理的机器学习(二十八)——Monte-Carlo的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 深度学习(二十三)——Fast Imag
- 下一篇: 机器学习(二十九)——Temporal-
