這一小節我們簡要介紹一下引出蒙特卡洛方法的實際場景。
機器學習/深度學習中的影象疊加文字識別需要大量的訓練樣本,自動生成樣本(使用程式在背景上疊加文字)是一種樣本的獲取方式。但色彩值(為了兼顧各方向的同學,原諒我用乙個這麼不專業的詞彙,此值可以是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 的舉例,只不過可能對於有的同學來說,閱讀起來比較難,所以我們來更加詳盡的翻譯或...