一、引入
之前說過推斷問題主要是已知一些變量求別的變量的概率,在圖模型中主要是求隱變量的后驗概率會用到。
有一些隱變量之間的關系沒那么復雜,可以精確計算出來,雖然麻煩,但是好歹是可計算的,這種方法就是精確推斷,精確推斷比較簡單,不會多寫;還有的是真的沒法算出來的,又不可缺,就只能近似推斷,而近似推斷又主要有環路信念傳播,引入變分分布的變分推斷,通過模擬來采樣符合某個分布的樣本的采樣方法。采樣方法又有直接采樣和間接采樣,如果能直接采樣,說明概率分布比較簡單;這里主要討論間接采樣,就是通過采樣一個比較簡單的分布,然后加上一些條件來采樣的過程。
二、精確推斷
(一)變量消除法

這種就是變量消除法求邊際概率的一種方式,可以看見,我們把條件較多的,比如上圖的x1,先進行計算,然后再計算x2的和,x3的和,保證了當我們算到比較高級的部分的時候,涉及的算式較少
(二)信念傳播法
信念傳播(Belief Propagation,BP)算法,也稱為和積(Sum-Product)算法或消息傳遞(Message Passing)算法,是將變量消除法中的和積(Sum-Product)操作看作是消息(Message),並保存起來,這樣可以節省大量的計算資源。
通俗來說,變量消除法的缺點是,當我們計算X3的邊際概率$P(x_{3})$和X4的邊際概率$P(x_{4})$時,很有可能出現一些式子的重復計算。
按上一個截圖的式子來說,我們至少需要在分別計算$P(x_{3})$和$P(x_{4})$時重復計算$P(x_{2}\mid x_{1})$和$P(x_{1})$,聰明的人就會心想,如果我把每個用到的式子都先計算出來,放進我的表格里,然后要算什么,就按需拿出來合並計算就好了。
下圖就展示了鏈式無向圖上,信念傳播方法。

鏈式無向圖的最大團中節點數目為2,也就是每相鄰兩個節點構成一個最大團,一共有T-1個團,即T-1個勢能函數。

可以看到,$P(x_{t})$的計算可以分為前一個變量$X_{t-1}$傳來的’消息’和后一個變量$X_{t+1}$傳來的’消息’的乘積,具體這個消息指的是【對前一個變量進行邊際求和】,它們之間是有一個嵌套的關系。

三、近似推斷
近似推斷解決一些精確推斷無法解決的問題,當圖結構中變量的局部關系比較復雜的時候,就會采用近似推斷。主要有三種:
- 環路信念傳播,是相對於上面的鏈式信念傳播方法,消息會在環路里一直流動,沒法收斂計算,環路信念傳播就是把信念傳播方法用在有環路的圖模型中,得到一個近似解;
- 變分推斷,是引入一個簡單的分布稱為變分分布,用來近似模型中難以計算的條件概率分布,然后通過迭代的方法進行計算;
- 采樣法,是通過模擬的方法采樣一些樣本,用於期望計算等。
(一)變分推斷

在包含有觀測變量和隱變量的圖模型中,一個困難就來自於計算隱變量的后驗$P(z\mid x)$.。為什么要算后驗?首先不管是機器學習模型還是其他的模型,主要就是通過讓模型學習一些樣本,然后給個新的樣本,模型也能很好的處理,如果目前給了一些已知樣本X,然后讓我們預測新樣本x的概率,可以寫成如下形式:
$P(x\mid X)=\int_{\theta }^{ }P(x,\theta \mid X)d\theta =\int_{\theta }^{ }P(x\mid\theta, X)P(\theta \mid X)d\theta =E_{\theta \mid X}\left [ P(x\mid \theta ) \right ]$
所以最關鍵的步驟就是求出后驗概率$P(\theta \mid X)$,而且上式寫成了期望的形式,所以后面我們可以直接用采樣法來近似這個期望,在變分推斷里主要就是想辦法求解這個復雜的后驗概率。

我們的目標是求解$P(x;\theta )$,然而通常的似然函數求導的方法無法執行,因為我們無法計算$\sum_{z}^{ }P(z,x;\theta )$。
於是想了一個辦法,把原似然函數轉化成ELBO和KL散度的和,雖然轉化后最終的式子依然含有隱變量z和可觀測變量x的聯合概率分布,但是這時候計算theta已經不需要用到聯合概率$P(x,z;\theta )$了。
可以由最后一段話看出,現在的任務就是找到一個q(z),這個分布要等於z的后驗$P(z\mid x;\theta )$,其實這個轉化就把求聯合概率分布的問題轉化成了求z的后驗而已,這么做之后,求原似然函數最值問題就可以轉換為求ELBO最大值的問題,因為ELBO是原似然函數的下界,只要ELBO不斷增大,就會推着原函數增大。
現在的問題就是求$P(z\mid x;\theta )$,在上一篇博客里,用EM算法來迭代計算上述最大化問題的時候,是默認$P(z\mid x;\theta )$是可以被精確的用數學式子表達出來;這里變分推斷就要解決那些【不能被精確表達的$P(z\mid x;\theta )$】,由於無法精確表達,就要思考兩個問題:
- 如何衡量我找到的q(z),和$P(z\mid x;\theta )$的差異,也就是確定我找的這個分布很像?
- 如何找到一個簡單的q(z)?
首先,KL散度可以衡量兩個分布之間的差異性,所以只要KL散度最小即可,反應到11.49式子中就是讓ELBO最大即可。當然肯定ELBO需要進行一些轉化,不然問題又會繞回去求聯合概率分布$P(x,z;\theta )$(這個沒法求),問題就繞回去了。
要對ELBO做如下處理:

這個假設先把Z內部拆分,我們要求解其中單個的$q_{i}(z_{i})$,到時候再合並就可以了。

截至11.89以上都是在簡單的套用,從11.90開始,因為只關心$q_{j}(z_{j})$,只有它才是變量,所以積分也之用對$z_{j}$積分。

11.94說明了如果要找到一個最優的$q_{j}(z_{j})$,那么我們就讓原聯合概率分布$P(x,z;\theta )$在除了$q_{j}(z_{j})$外的$q_{m}(z_{m})$聯合概率分布中的期望最大即可,因為$q_{j}(z_{j})$相互依賴,所以可以用迭代的方法來計算。
也可以用神經網絡的擬合能力來擬合這個后驗,后面會寫變分自編碼器就是用來做這個的。
(二)基於采樣的推斷
我們有時候做推斷,並不是為了知道這個后驗分布本身,有時候是為了求復雜分布下的期望。采樣是為了評估一個函數在某個分布上的期望值。

上圖我們做4次隨機采樣,得到樣本$x_{1}$,$x_{2}$,$x_{3}$,$x_{4}$,每個樣本都是對原函數值的一種近似。然后我們計算一下曲線和x軸圍成的面積,還是用這四個樣本點來近似:
$S=\frac{1}{4}\left [ f(x_{1})(b-a)+f(x_{2})(b-a)+f(x_{3})(b-a)+f(x_{4})(b-a) \right ]=\frac{1}{4}(b-a)\sum_{i=1}^{4}f(x_{i})\approx \int_{a}^{b}f(x)dx$
這就像最開始學積分一樣,把面積分割成n個長方形,寬為1/n,高為函數值,所以0-1之間的定積分可以計算為:$lim\frac{1}{n}\sum_{i=1}^{n}f(x_{i})= \int_{0}^{1}f(x)dx$
只不過這里的采樣,n=4而已,且區間長度不是1。在積分的定義中,n是趨於無窮的。
回想一下期望公式,這里討論連續隨機變量的求期望,因為離散的太容易了,連續變量的求期望就是求積分,比如,當X服從取值在c~d上的分布q(x)時,求$E(f(x))$:
$E(f(x))=\int_{c}^{d}q(x)f(x)dx$
在上面4次隨機采樣的例子中,我們是默認x服從均勻分布,因為我們在[a,b]上的各個點采樣機會都均等,在不做任何前提條件假設的情況下,都認為是服從均勻分布的。就像老師上課點名回答問題,如果事先不知道老師的偏好或者老師是公平的,那么在座所有學生被點名的概率是一樣的;然而如果老師有偏好,比如老師更喜歡點男生,那么男同學就會更緊張一點,因為他們被點到的概率更大。
按照上述連續變量求積分的公式,我們現在取X服從取值在a~b上的分布q(x)為均勻分布,求$E(f(x))$:
$E_{x\sim q(x)}(f(x))=\int_{a}^{b}q(x)f(x)dx=\int_{a}^{b}\frac{1}{a-b}f(x)dx$
會發現這個式子跟求f(x)在[a,b]上的積分只差了一個均勻分布的概率密度函數,我們既然可以通過$S=\frac{1}{4}\left [ f(x_{1})(b-a)+f(x_{2})(b-a)+f(x_{3})(b-a)+f(x_{4})(b-a) \right ]=\frac{1}{4}(b-a)\sum_{i=1}^{4}f(x_{i})\approx \int_{a}^{b}f(x)dx$來采樣近似計算得$\int_{a}^{b}f(x)dx$,那么只要再加上一個$\frac{1}{a-b}$就可以得到$E_{x\sim q(x)}(f(x))$了,這個就提供了一種思想:如果是均勻分布下采樣(任何點采樣機會均等),那么$E_{x\sim q(x)}(f(x))\frac{1}{m}\sum_{i=1}^{m}f(x_{i})$,其中m是采樣的樣本數。
另一種解釋角度就是根據大數定律,樣本均值收斂於期望值:

采樣法的一個最簡單的應用例子是計算圓周率𝜋. 我們知道半徑為𝑟的圓的面積為$𝜋𝑟^{2}$,而直徑為2𝑟的正方形的面積為$4𝑟^{2}$.當我們用正方形去嵌套一個相切的圓時,它們的面積之比是𝜋/4。 當不知道𝜋時,我們無法計算圓的面積。但是我們可以計算正方形的面積,通過二者之比來得到圓的面積,進而反推π的值。因此,需要通過模擬的方法來進行近似估計。首先在正方形內部按均值采樣的方式隨機生成若干點,計算它們與圓心點的距離,從而判斷它們是否落在圓的內部。這些點落在圓內還是圓外取決於正方形和圓形的面積之比, 然后去統計落在圓內部的點占到所有點的比例。當有足夠的點時,這個比例應該接近於𝜋/4,從而近似估算出𝜋的值,接下來是一個代碼實現:
def calpai(): n = 100000 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 in range(0, n): x = random.uniform(x_neg, x_pos) y = random.uniform(y_neg, y_pos) if x*x + y*y <= 1.0: count += 1 if n%200==0: print ((count / float(n)) * 4) ##如果均勻的向正方形內撒點,那么落入圓心在正方形中心,半徑為1的圓內的點數與全部點數的比例應該為PI/4,根據概率統計的規律,只要撒的點足夠多,那么便會得到圓周率PI的非常近似的值。
運行結果為:
四、采樣方法
(一)采樣原理
就像前面說的,采樣主要是為了求期望,前面講的用大量樣本均值去模擬期望叫蒙特卡洛方法。求期望這個用的比較多,期望是一種統計量,如果問題還可以表述成求X的某個統計量,也可以用這種大量采集樣本來估計的方法。蒙特卡洛的關鍵是要得到x的概率分布,基於這個概率分布去采樣n個樣本集,還有個難點就是這么樣讓計算機去基於這個特定的概率采樣,計算機可以簡單的生成服從均勻分布的樣本,如果要得到服從非均勻分布的樣本,就需要一些間接采樣的方法,如拒絕采樣,重要性采樣,吉布斯采樣等,這些方法都是先采一個簡單的樣本,再通過某些條件來選擇一些服從所需概率分布的樣本。
(二)蒙特卡洛采樣
- 先從U(0,1)中隨機生成一個偽隨機數$u^{i}$;
- 然后選擇樣本$x^{i}=cdf^{-1}(u^{i})$,得到的一系列樣本$x^{1},x^{2},x^{3},...$就是采樣點。
其中$cdf$是一個累計分布函數,它表達的含義是$cdf=P(X\leq x^{i})$,所以反函數$cdf^{-1}$的自變量是概率,因變量是樣本點,這里的隨機變量是連續型隨機變量。
(三)拒絕采樣
其實計算累計分布函數本身就是一個很復雜的工序,特別是需要用到采樣的時候往往是因為分布太復雜了無法計算,不得不使用采樣的方法。
拒絕采樣方法引入了一個可采樣分布$q(x)$,再按一定策略拒絕掉一些樣本,以接近不可直接采樣分布$p(x)$:
- 令接受率$\alpha =\frac{p(z^{i})}{kq(z^{i})}$;
- 取$z^{i}\sim q(z)$;
- 取$u^{i}\sim u(0,1)$,if $u^{i}< \alpha $,就采$z^{i}$,否則就拒絕$z^{i}$。

這里定義了一個接受率,取值0-1之間,分子是我們的目標分布,而分母是一個帶系數的可采樣分布,我們要通過可采樣分布,來采近似目標分布的樣本。接受率是用二者的比值計算的,可以想象一條垂直的線條,其中落在目標分布內的部分與落在可采樣分布內的部分之比,就是接受率。先是通過簡單采樣得到了一個樣本$z^{i}$,然后我們取一個均勻分布下的數字$u^{i}$,看$u^{i}$和接受率的比較,為什么要比較它們倆的值呢,有什么意義?意義就是體現了一個隨機性,因為有時候概率大也不一定發生,概率小也不一定不發生,為了衡量這種情況,所以加了一個均勻分布。
(四)重要性采樣

重要性采樣主要是引入了一個重要性權重$\frac{p(x)}{q(x)}$。我們要求的期望就是$E_{x\sim p(x)}(f(x))=\int_{x}^{ }p(x)f(x)dx$這樣的形式,但是因為p(x)太過於復雜了,不好采,於是:
$E_{x\sim p(x)}(f(x))=\int_{x}^{ }p(x)f(x)dx=\int_{x}^{ }q(x)\frac{p(x)f(x)}{q(x)}dx=\int_{x}^{ }q(x)f(x)\frac{p(x)}{q(x)}dx=\int_{x}^{ }q(x)f(x)\omega (x)dx\approx \frac{1}{n}\sum_{i=1}^{n}f(x_{i})\frac{p(x_{i})}{q(x_{i})}$
問題轉化成了在$q(x)$分布下求$f(x)\omega (x)$的期望,其中$\omega (x)=\frac{p(x)}{q(x)}$,稱為重要性權重。
(五)吉布斯采樣
另開博文
(六)馬爾可夫蒙特卡洛采樣
另開博文
