大家好,我是huanhu_data,我們經(jīng)常在各類算法中看到”蒙特卡羅”(Monte Carlo)的字樣, 比如MCMC(Markov Chain Monte Carlo) , 還有AlphaGo使用的蒙特卡洛搜索樹. 其實, “蒙特卡羅”并不是一個特定算法, 它是一個思想或者方法的統(tǒng)稱. 聽起來很神秘, 其實用正?!比嗽挕本湍芎唵谓忉?
維基百科對蒙特卡羅方法(英語:Monte Carlo method)給出的解釋是:
二十世紀四十年代中期由于科學技術(shù)的發(fā)展和電子計算機的發(fā)明,而被提出的一種以概率統(tǒng)計理論為指導(dǎo)的一類非常重要的數(shù)值計算方法。是指使用隨機數(shù)(或更常見的偽隨機數(shù))來解決很多計算問題的方法。
與它對應(yīng)的是確定性算法。
所以說, 蒙特卡羅算出的值, 不是精確的而是一個估計, 但是在人們可以接受的錯誤范圍.
下面是維基百科上一個很直觀的例子:
使用蒙特卡洛方法估算π值. 放置30000個隨機點后,π的估算值與真實值相差0.07%.
這張圖其實很簡單, 就像我們玩飛鏢一樣, 隨機地在一個方形平面上投擲30000個飛鏢, 事先我們并不知道圓周率π的值究竟是多少, 但是我們知道這里有1/4的圓, 于是我們把紅色面積上的點數(shù)m, 和藍色面積上的點數(shù)n, 以及圓周率π的關(guān)系, 可以寫出一個約等于的式子:
π ≈ 4m/(n+m)
隨著m+n的投射點的逐漸增加, π值的計算也越來越精確, 最后我們就估計出一個不錯的比較精確的π值啦
大家看這個是不是在哪里很熟悉? 沒錯, 就是大數(shù)定律的思想嘛… 只不過大數(shù)定理強調(diào)統(tǒng)計學中的極限和期望, Monte Carlo方法這是計算機中的模擬, 用有限隨機數(shù)去計算估計值.
所以Monte Carlo只是這種思想的統(tǒng)稱, 與特定算法結(jié)合會有不同表現(xiàn)形式.
當然Monte Carlo不只是能估計值那么簡單, 它可以用來估計未知分布, 未知模型參數(shù), 等等, 所以在很多抽樣方法中有Monte Carlo的身影, 比如大名鼎鼎的MCMC.
接下來我們環(huán)湖醫(yī)院數(shù)據(jù)中心來趴一趴蒙特卡羅方法的歷史:
20世紀40年代,在馮·諾伊曼,斯塔尼斯拉夫·烏拉姆和尼古拉斯·梅特羅波利斯在洛斯阿拉莫斯國家實驗室為核武器計劃工作時,發(fā)明了蒙特卡洛方法。因為烏拉姆的叔叔經(jīng)常在蒙特卡洛賭場輸錢得名,而蒙特卡羅方法正是以概率為基礎(chǔ)的方法。
蒙特卡羅方法的名字來源于摩納哥的一個城市蒙地卡羅,該城市以賭博業(yè)聞名,大家都知道, 賭錢這個問題, 一般是沒有精確解的. 但是, 只要你是個老賭徒, 那最后, 你會對整個賭局有更全面的認識, 不是嗎?