30分鐘了解蒙特卡洛方法

2021-07-26 03:04:15 字數 3267 閱讀 8996

這一小節我們簡要介紹一下引出蒙特卡洛方法的實際場景。

機器學習/深度學習中的影象疊加文字識別需要大量的訓練樣本,自動生成樣本(使用程式在背景上疊加文字)是一種樣本的獲取方式。但色彩值(為了兼顧各方向的同學,原諒我用乙個這麼不專業的詞彙,此值可以是rgb到[0,1]區間的對映,讓它能代表顏色的性質)的選擇很重要,為了防止(控制)發生疊加文字與背景的色彩值相近的情況發生,疊加文字的色彩值最好服從我們指定的概率分布。這樣就需要根據指定的概率分布來產生色彩值——蒙特卡洛方法擅長解決的問題。

蒙特卡洛方法的應用場景很多,橫跨物理、金融、計算機。拿電腦科學來舉例,自然語言處理中的lda模型,hinton較早提出的深度學習模型dbn都用到了蒙特卡洛方法。此文第一部分簡要介紹了實際問題,簡而言之蒙特卡洛方法就是生成樣本,即蒙特卡洛取樣。即根據某已知分布的概率密度函式f(

x),產生服從此分布的樣本

x 。

下面首先介紹一種最簡單最易理解的蒙特卡洛方法——accept-rejection method(下文稱接受拒絕取樣),然後給出這個方法的直觀解釋,最後證明方法的正確性。

為了方便理解,我們使用u(

0,1)

來作為「建議分布」

g ,這樣g(

x)=1

∀x∈[

0,1]

。如下圖所示,我們每次生成的兩個樣本

y 與

u,對應下圖中矩形內的一點p(

y,u∗

c∗g(

y)) 。接受條件u≤

f(y)

c∗g(

y),即u∗

c∗g(

y)≤f

(y) 的幾何意義是點

p 在f(

x)下方,不接受y的幾何意義是點

p 在f(

x)的上方。在f(

x)下方的點(

o 形狀)滿足接受條件,上方的點(

+形狀)不滿足接受條件。

y)的條件下,

y 的概率分布服從f(

y),即證明p(

y≤y|

u≤f(

y)c∗

g(y)

)=f(

y).證明過程如下 p(

y≤y|

u≤f(

y)c∗

g(y)

) =p

(u≤f

(y)c

∗g(y

)|y≤

y)∗p

(y≤y

)p(u

≤f(y

)c∗g

(y))

=p(u≤

f(y)

c∗g(

y)|y

≤y)∗

p(y≤

y)1c

=c∗p(

u≤f(

y)c∗

g(y)

,y≤y

) =

c∗∫y

−∞∫f

(y)c

∗g(y

)0g(

y)dudy=

∫y−∞

f(y)dy=

f(y)

證畢。(假設目標概率密度函式為f(

x)=(

x−0.4)4∫

10(x

−0.4)4

dx,據此分布生成樣本。(為什麼用這個目標函式?因為它氣質好,不是,是效果好,並且非常簡單)

import random

import math

import matplotlib.pyplot as plt

class

rndgenerator:

"""docstring for rndgenerator"""

@staticmethod

defaceeptreject

(split_val):

power = 4

scale = max(math.pow(split_val, power), math.pow(1 - split_val, power))

while

true:

x = random.uniform(0, 1)

y = random.uniform(0, 1)

if y*scale <= math.pow(x - split_val, power):

return x

if __name__ == "__main__":

count = 101

power2 = 4

t = 0.4

sum_ = (math.pow(1-t, power2 + 1) - math.pow(-t, power2 + 1)) / (power2 + 1)

x = [xi*1.0/(count-1) for xi in range(count)]

#常數值

c = max(math.pow(-t, power2), math.pow(1-t, power2))/sum_

cc = [c for xi in x]

p1, = plt.plot(x, cc, '--')

#目標概率密度函式的值f(x)

xx = [math.pow(xi - t, power2)/sum_ for xi in x]

p2, = plt.plot(x, xx)

plt.legend([p1, p2], ["g(x)=c*f(x)", "f(x)"], loc=6)

#取樣10000個點

samples =

for i in range(10000):

p3 = plt.hist(samples, bins=40, normed=true)

plt.show()

關於蒙特卡洛取樣的效率問題,大家可以思考下接受一次取樣需要迴圈多少次?等式p(

u≤f(

y)c∗

g(y)

)=1c

的意義是什麼?這個等式與取樣效率有什麼關係?建議分布

g 與取樣效率有什麼關係?

這篇文章是蒙特卡洛方法入門介紹,接受-拒絕取樣是蒙特卡洛方法最簡單的一種,也是所有方法的基礎。蒙特卡洛方法的精髓就是隨機取樣,擬合分布。有了樣本點之後就可以做很多事情了,最重要的就是近似複雜積分。此方法在深度學習領域內應用甚廣,值得大家深入學習。

最後年假將至,預祝大家新年快樂。

蒙特卡洛方法

蒙特卡洛方法 monte carlo method,也有翻譯成 蒙特卡羅方法 是以概率和統計的理論 方法為基礎的一種數值計算方法,將所求解的問題同一定的概率模型相聯絡,用計算機實現統計模擬或抽樣,以獲得問題的近似解,故又稱隨機抽樣法或統計試驗法。上述就是蒙特卡洛方法的基本概念,比較抽象,下面結合實際...

蒙特卡洛方法

這個演算法是用來求解積分和一些運算的,主要就是通過概率模擬的方法,比如對於 或者積分 import random def calpai n 1000000 r 1.0 a,b 0.0,0.0 x neg,x pos a r,a r y neg,y pos b r,b r count 0 for i ...

蒙特卡洛方法 蒙特卡洛方法概率密度函式

簡介 為了更加清楚的讓同學們深刻的理解pbr裡面那些公式背後的東西,同學們務必先來擼一遍光線追蹤,畢竟我們這裡舉例的這些蒙特卡洛方法都是光線追蹤第三卷裡 ray tracing the rest of your life 的舉例,只不過可能對於有的同學來說,閱讀起來比較難,所以我們來更加詳盡的翻譯或...