python求pai的近似值_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现
PR 采樣分章 第一節:蒙特卡洛采樣、重要性采樣
引言
還記得我們之前學過的貝葉斯推斷嗎?
劉浚嘉:PR Ⅱ:貝葉斯估計/推斷及其與MAP的區別?zhuanlan.zhihu.com貝葉斯推斷要解決的不是如何估計參數,而是用來估計新測量數據出現的概率,對于新出現的數據
:那么實際項目中,我們如何計算貝葉斯估計里這個積分呢?
- 基于采樣的馬爾可夫鏈蒙特卡羅 (Markov Chain Monte Carlo,簡稱MCMC)方法
- 基于近似的變分推斷 (Variational Inference,簡稱VI)方法
本文主要介紹采樣方法,其余的會在后續文章出現。
采樣 —— 一種近似技術
當我們需要以較小的代價近似許多項的和或某個積分時,采樣是一種很靈活且明智的選擇。所以這不只是貝葉斯推斷特有的方法,是一種普適性的積分近似技術。對于近似一個分布來說,從其中按概率分布采樣來實現是一個非常自然的想法。
蒙特卡洛采樣基礎
簡述Monto Carlo:1. 蒙特卡洛方法Monte Carlo 可以通過采用隨機投點法來求解不規則圖形的面積。求解結果并不是一個精確值,而是一個近似值。當投點的數量越來越大時,該近似值也越接近真實值。
2. 蒙特卡洛方法也可以用于根據概率分布來隨機采樣的任務。
思路
把和或者積分視作某分布下的期望,然后通過估計對應的平均值來近似這個期望
或
這種思路就是加權求和,其權重為隨機變量 x 的概率分布(求和時)或者概率密度函數(求積分時)。概率越高的地方,該變量被采樣的幾率越大,對應函數值的權重越大,故通過采樣數據的經驗平均可以近似整體的和或積分。
開始采樣
我們根據
抽取 n 個樣本 計算期望從而得到 s 的近似:理論保障
問題
這種方法過于理想,所有結論依賴于我們可以從基準分布 p(x) 中輕易地采樣,因為大部分時候 p(x) 都是未知的或者是形狀詭異的分布 。一個直觀的改進方法是:能不能通過某種變換,將概率分布函數轉化成我們熟知的一些簡單分布,這樣我們從標準分布中采樣即可得到 p(x) 中采樣一樣的結果。
重要性采樣 Importance Sampling (IS)
在上一節我們理所當然的把 p(x) 當成概率分布,f(x) 視為被積函數。 p(x)f(x)當然不是唯一的分解方式啦,當從 p(x) 中采樣不可行時,我們也可以構造一個分解:
這樣我們就可以把更便于采樣的 q(x) 視作采樣概率,然后估計
在此分布下的期望。相當于在新的采樣函數下,函數值 f(x) 被乘上了一個采樣權重或likelihood ratio 。學RL的同學應該很熟悉重要性采樣,在off-policy的算法中用來處理產生動作的策略和學習策略不一致的問題。通過一個簡單的可預測的分布去估計一個服從另一個分布的隨機變量的均值。
在實際應用off-policy時,迭代過程通常會有兩個策略:
- Behavior policy,用于生成學習過程所需要選擇的動作,這一個簡單的,探索性非常強的關于動作選擇的分布;
- Target policy,這是我們最終希望得到的最優動作選擇分布。
應用Importance Sampling可以通過Behavior policy估計Target policy可能反饋回來的收益的均值,即用一個簡單分布去估計服從另一個分布的隨機變量的均值。
Implementation
# 定義一個函數 f(x) def f_x(x):return 1/(1 + np.exp(-x))# 定義兩個分布 p(x), q(x) def distribution(mu=0, sigma=1):# return probability given a valuedistribution = stats.norm(mu, sigma)return distribution# 采樣點數 n = 1000 mu_target = 3.5 sigma_target = 1 mu_appro = 3 sigma_appro = 1p_x = distribution(mu_target, sigma_target) q_x = distribution(mu_appro, sigma_appro)# 從 p(x) 采樣,這里為了圖方便p(x)也設定成了正態分布,所以看起來采樣很容易,對于非高斯還是很麻煩的 s = 0 for i in range(n):# draw a samplex_i = np.random.normal(mu_target, sigma_target)s += f_x(x_i) print("simulate value", s/n) # 0.954# 從 q(x) 進行重要性采樣 value_list = [] for i in range(n):# sample from different distributionx_i = np.random.normal(mu_appro, sigma_appro)value = f_x(x_i)*(p_x.pdf(x_i) / q_x.pdf(x_i))value_list.append(value) # mean: 0.949, variance: 0.304從構造出的近似分布采樣得到的均值很接近原分布的采樣期望,驗證了重要性采樣的理論。
這個q(x)難道就可以隨意設定嗎?我們試驗一下,當兩個分布dissimilar的時候:
# 采樣點數 n = 5000mu_target = 3.5 sigma_target = 1 mu_appro = 1 sigma_appro = 1p_x = distribution(mu_target, sigma_target) q_x = distribution(mu_appro, sigma_appro)通過 q(x) 得到的均值為 0.995,方差為83.86。
方差過大的原因是,當兩個分布過于不同時,p(x)/q(x) 的值會有巨大的差異,從而增加了方差。正如PRML中所述:
Hence a major drawback of the importance sampling method is the potential to produce results that are arbitrarily in error and with no diagnostic indication. This also highlights a key requirement for the sampling distribution , namely that it should not be small or zero in regions where may be significant.即,approximate distribution的大體趨勢應該和desired distribution保持一致,不能出現差別很大的分布特性。
一個好的 q 分布的選擇可以顯著地提高蒙特卡羅估計的效率,而一個糟糕的 q 分布選擇則會使效率更糟糕。一般的經驗是 q(x) 定義在 p(x)|f(x)| 較大的地方,由此我們引出了最優采樣函數的概念。
最優采樣函數——方差最小
我們可以推導出最優的采樣函數
,對于任意蒙特卡洛采樣:可以轉化為重要性采樣:
顯然,估計的期望和采樣分布 q 的選擇無關,
。但是方差卻有關:方差想要最小,q 就應該滿足:
Z 為歸一化常數,選擇適當的 Z 使得
之和或者積分為 1。一個好的采樣函數,應該把更多的權重放在被積函數較大的地方。
觀察上式,如果 f(x) 的符號一致,
,這意味著采樣一個樣本就足以得到原來的積分或和的值了。理論上確實是很美好,但這也意味著計算 和計算之前的 p(x)f(x) 沒區別,這并沒有什么實際意義。有偏重要性采樣
最優采樣函數并不一定是適合采樣的那個,只是方差最小的一個而已,其他能降低方差的 q 其實都可以。這種方法有一個優勢,即不需要歸一化的 p 或 q 分布。在處理離散變量時,有偏重要采樣估計可以表示為
有偏是指
,只有當 且上式分母收斂到 1 時,等式才漸進成立。故也稱為漸進無偏。實際中,我們會傾向于將采樣函數構造成常用的分布形式——高斯分布等,以方便采樣。故有偏重要性采樣更為常見。
延伸閱讀
Importance Sampling for Keras?www.idiap.ch在神經網絡訓練中,通過重要性采樣來取代之前的uniform data sampling,從而加速訓練收斂。
關聯閱讀
劉浚嘉:PR Sampling Ⅱ:馬爾可夫鏈蒙特卡洛 MCMC及python實現?zhuanlan.zhihu.com劉浚嘉:PR Sampling Ⅲ: M-H and Gibbs 采樣?zhuanlan.zhihu.com劉浚嘉:Reinforcement-Learning-in-Robotics 專欄目錄?zhuanlan.zhihu.com更多系列文章見關聯庫
Reinforcement-Learning-in-Robotics?github.comReference
總結
以上是生活随笔為你收集整理的python求pai的近似值_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: b类 蚂蚁金服_【面经】超硬核面经,已拿
- 下一篇: 不同品牌的内存条可以混用吗_混用不同品牌