深度學習與量子蒙特卡洛(1)
10 人贊了文章
1) 讓我們從一個簡單的高斯積分開始. 一維情況下:
考慮 的期望:
多維情況下:
現在我們嘗試用數值的方法計算方程 。這裡我們使用蒙特卡洛方法,而不是通常的離散求和的方法。原因是 對於以後將要討論的高維積分,通常的方法將會失效,而蒙特卡洛的方法依舊適用。
2) 為了計算 的期望,我們需要去按照一下分布隨機生成 的值
例如產生了100000個 , 那麼 的期望w值為:
因而重點是如何按照分布 快速抽樣出100000個點。
這裡我們使用 Hybrid Monte-Carlo 方法來實現這個目的。(2017/12/28/0:27)
代碼詳見附錄B。可以看出無論是1維積分還是5維積分,蒙特卡洛的方法都可以在幾乎相同的時間內給出很好的結果。這是傳統的均勻畫網格的方法所不可及的。
3) 總結
在物理中,我們經常遇到如下積分
當 為實數時,可以賦予因子 概率解釋。利用蒙特卡洛方法產生分布 , 此時
當 是複數時,概率解釋不成立,蒙特卡洛方法失效。這個問題被稱為符號問題。
如何解決符號問題? 待續 (2017/12/28/12:34)
附錄)
這裡我們給出上文提到的一些結果的代碼。
A. 對於高斯積分 (Mathematica code):
s1 = Integrate[Exp[-x^2/2], {x, -Infinity, Infinity}]s2 = Integrate[x^2 Exp[-x^2/2], {x, -Infinity, Infinity}]I1 = s1/Sqrt[2 Pi]x2 = s2/s1
B. Hybrid Monte-Carlo 數值積分 (python3 code):
# K.J. Sun 2017/12/28 copyright reserved.from __future__ import print_functionimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.image as mpingfrom pyhmc import hmc # one can install hybrid monte-carlo by pip3 install pyhmcdef logprob(x, ivar): logp = -0.5 * np.sum(ivar * x**2) # log of probability function grad = -ivar * x # first derivative oflog of probability function return logp, gradivar = 1. # np.random.rand(5)dimx = 1 # dimension of xsamples = hmc(logprob, x0=np.random.randn(dimx), args=(ivar,), n_samples=100000)# generating 100000*dimx array of xx2 = np.mean(np.power(samples,2),0) # expectation value of x^2print(x2)
把該代碼保存為 hmc_integral.py, 然後運行 python3 hmc_integral.py,
dimx = 1 時 輸出結果為 0.966
dimx = 2 時 輸出結果為 [ 1.017 0.967]
dimx = 5 時 輸出結果為 [ 1.02 1.036 0.983 0.989 1.022]
推薦閱讀:
※『A 』關於Python機器學習,一套無敵的體系是怎樣的?
※機器學習筆記019 | 反向傳播演算法與神經網路的梯度
※【機器視覺】6. 圖像處理的基礎知識
※2018年5月Top 10 機器學習開源項目
※吳恩達機器學習第十一周課後感