如何通俗易懂地介紹 Gaussian Process?

機器學習中常用的Gaussian process用法


謝邀。

看題目標籤是機器學習,以下觀點來自機器學習中常用的Gaussian process用法,不是隨機過程中的更加一般化的Gaussian process介紹。

就拿ML中經典的Gaussian process(GP) regression舉例說明吧,做個簡單粗暴的介紹。

一種理解GP regression的方式是為數據的回歸值建立聯合分布。

假設觀察到的數據集是D = {(mathbf{x}_1, y_1),...,(mathbf{x}_i,y)_i,...,(mathbf{x}_N ,y_N)}

其中 forall i mathbf{x}_iin R^d, y_iin R,需要預測的是新樣本mathbf{x}_{N+1}的回歸值y_{N+1}

為了方便表述,這裡令mathbf{y}_N = [y_1, ..., y_N]^Tmathbf{y}_{N+1} = [y_1, ..., y_N,y_{N+1}]^Tmathbf{X}_{N+1} = {[mathbf{x}_1, ..., mathbf{x}_N, mathbf{x}_{N+1}]}^T注意粗體和非粗體的區別)。

從方法論上說,GP是在為一個關於y_{N+1} | mathbf{y}_N的條件概率P(y_{N+1} | mathbf{y}_N, mathbf{X}_{N+1})進行建模,相當於說給定觀察到的所有數據,問樣本mathbf{x}_{N+1}預測值y_{N+1}的分布。但是GP並沒有直接對這個條件分布進行建模,而是從聯合分布開始,也就是對mathbf{y}_{N+1}的聯合概率P(mathbf{y}_{N+1} | mathbf{X}_{N+1}) 進行建模,當有這個聯合概率已知的時候,就可以通過以下式子得到新樣本預測值的條件概率:

P(y_{N+1} | mathbf{y}_N, mathbf{X}_{N+1}) = frac{P(mathbf{y}_{N+1} | mathbf{X}_{N+1})}{P(mathbf{y}_{N} | mathbf{X}_{N+1})} = frac{P(mathbf{y}_{N+1} | mathbf{X}_{N+1})}{int_{y_{N+1}} P(mathbf{y}_{N+1} | mathbf{X}_{N+1}) d y_{N+1}}

顯然,核心就是建立 P(mathbf{y}_{N+1} | mathbf{X}_{N+1}) 的具體形式,然後求出關於y_{N+1}的條件概率

現在假設 P(mathbf{y}_{N+1}| mathbf{X}_{N+1}, mathbf{w}) = N(mathbf{y}_{N+1} | mathbf{X}_{N+1}mathbf{w}, I sigma_1^2) 是高斯分布,其中mathbf{w}是一個潛在的線性模型的參數,mathbf{w}也服從高斯分布 mathbf{w}sim N(mathbf{w} | 0, Isigma_2^2),那麼就有

P(mathbf{y}_{N+1} | mathbf{X}_{N+1}) = int_{mathbf{w}}N(mathbf{y}_{N+1}|mathbf{X}_{N+1}mathbf{w}, Isigma_1^2)  N(mathbf{w}|0, Isigma_2^2) d mathbf{w} = N(mathbf{y}_{N+1} | 0, Isigma_1^2 +  mathbf{X}_{N+1}mathbf{X}_{N+1}^Tsigma_2^2)

可見P(mathbf{y}_{N+1} | mathbf{X}_{N+1})還是一種高斯分布,並且這裡的mathbf{X}_{N+1}mathbf{X}_{N+1}^T可以替換成kernel矩陣,也就可以引入非線性變換(說替換可能不是很妥,不過容易理解)。

有了mathbf{y}_{N+1}的聯合分布,求其條件分布P(y_{N+1} | mathbf{y}_N, mathbf{X}_{N+1})就非常簡單,如下:

egin{bmatrix}
mathbf{Sigma}_{N}, mathbf{Sigma},其中Sigma是個向量,而mathbf{Sigma}_N是前N個變數的協方差矩陣,有

P(y_{N+1} | mathbf{y}_N, mathbf{X}_{N+1}) = N(y_{N+1}|Sigma

這個高斯分布的均值位置Sigma就是y_{N+1}可能性最大的預測值(計算量還是挺大的),GP的一大好處是預測的方差也可以知道。

以上是最簡單的GP regression的形式。GP可以通過多種角度看待,上面這種一般稱作是Weight-space View,此外還有Function-space View。

半夜寫的答案,有公式寫錯的地方,回頭再修改。

參考:

1. Gaussian Processes for Machine Learning

2. Pattern Recognition and Machine Learning


#bayes nonparametrics tutorials#

寫在前面的話:

手機碼字打錯打漏請諒解。

目前答案里暫時沒有intuition。老慣例,我不是很喜歡直接寫公式給新接觸的人看,絕大多時候公式只會把創造的動機給掩蓋掉(至少我不是很喜歡用純數學方法推新工具),同時讓問題是否能tractable變得不那麼清晰。我想找到的從來都是創造工具的動機和背後的問題。有動機有問題可以讓我下次碰到新問題引導我創造新工具,而公式從來只是讓我表示和解決問題的途徑。

以下我來談談我覺得最容易懂的motivation,這個小文章可以上廁所時看。以下gaussian process可簡寫為gp。

------------------------------

正文開始。初學時候常見問題有:

1.等等,憑什麼數據是要服從一個多維高斯分布?有什麼直觀的道理嗎?

2.什麼是kernel?為什麼要引入kernel就好了?

3.高斯過程為什麼能回歸出一個函數,還能確定一個CI(可信區間)?

這篇文章要解決對這三個問題的直觀理解。

先來看一維回歸的情況。

學過functional的都知道這個視角來看問題,假設有一個函數y=f(x),y也可以用一個無窮的序列來表示。那麼我們如果能做無限次在不同x處對f進行採樣,把所有採樣的點記錄下來,理論上是可以得到f本身的。這一點不難理解,假設你是個計算機專業的學生的話,你把函數在x軸上每個點映射的關係都採樣得到,記錄在無限大內存里,無限次操作後這個內存里記錄下的表就是那個f。

但問題關鍵在於:1.我們沒法做無限次採樣 2.即便有人給你無限次採樣好了,我們也無法用這個無限大的表做任何計算。這都是intractable的。

ok,來把問題拉回到現實情況。現實中,數據永遠是有限的,這一點保證了不會因為數據量而變成intractable。

現在問題是,在一維環境下,如何通過有限的數據來推斷出一個無限的序列(或者說一個函數)?

這裡就需要一個有簡單解析形式的,而又在一維上能無限擴展的東西來把有限和無限連接起來。這就是所謂的kernel tricks。kernel就是這座橋。但我在這裡先不談kernel,因為直接引入kernel對於創造出gp的動機理解得會有偏差。

ok,先不直接講kernel,先從一個例子來帶出kernel。要知道gaussian process最先也出現在geostatistics里,叫Kriging。它有很直接的應用性質的假設在背後:如果有三個點ABC,其中其中兩個點AB相比於AC來說更接近,那麼AB就有更高的相關性,而AC就有更低的相關性。(這一點在geostats里有很直觀的解釋:如果發生了一次地震,在北京唐山廣州接受到了數據,北京應該和唐山收到的數據應該可以認為更接近)知道了相關性誰高誰低,那麼如果我們在A出知道了一個數據,我們想用A處的數據推測B處和C處,顯然推測的結果應該在B處有更小的不確定度,因為它和A處更相似。如果我們對整個數軸上都定義這個相似度規則,不就可以用已知的點來推測未知區域了嗎?

ok,現在我們把視角拉到更抽象相對嚴謹的角度來看待這個問題:

1.每一次從不同x處觀察都可以當作一個隨機變數來看待,它們都服從和一個x無關的高斯雜訊分布。比如從x=1處x=2處就是兩個隨機變數。這一點也容易在現實問題中找到依據:我們做的任何觀測本質都是有誤差的,我們做一個gaussian error是能被理解的。

2.對於任意兩個x,x",我們認為x和x"的"距離"決定了他們之間的相關性,而跟具體某個取值無關。比如我可以規定,相差距離小於等於1的,相關係數都是0.8,除此之外相關係數為0;那麼已知數據gaussian error的deviation是1,而一次觀測x=4處得到3,那麼我們推測x=4.5處的數據(因為我們已經把它當隨機變數了,實際推測的是它的均值)只需要找到那些滿足和一個均值是3,方差是1的隨機變數相關性是0.8的點就好了。可是注意到這個計算雖然可行,但實際直接算起來是很複雜的;另外,我對空間的刻畫(即是相差距離小於等於1的,相關係數都是0.8)是很粗糙的。

okay,有沒有更好的函數來刻畫這種相關性?有沒有函數可以簡化pairwise的computation?對第一個問題可以有,比如exponential square,即類似exp(-cd(x,x")2)。顯然這個函數滿足對無窮空間的刻畫,因為數軸上任意遠的兩個點都可以計算;距離近到相關性可以到1,距離遠則可以趨於0。當然這種函數的選擇也可以有很多比如exp(-cd(x,x"))(這個這常常用作OU process的構造)。但核心是,只要我們對整個空間給定一個對距離相關性的度量標準,那麼我們因為這個度量標準可以推測出別處的數據(可能的)分布。以上對相似性的刻畫這個就是kernel function。

比如x=1,2,3均得到了數據,那麼我們要推測x=4處的數據分布就可以通過它和前三個數據的相關性,(say,x=4和x=1,滿足均值相關性為exp(-c3^2),同理另外兩個pairs是類似的),來找到一個合理的bound。這就是為什麼我們要定義數據成為滿足一個多元高斯分布的原因,這也是gp for regression可以做預測/分類問題最layman的解釋。(notes:我們常見的數學定義是從basis的角度下的定義,我這個角度是顯式地定義了kernel的結果。在應用上,兩個說法沒有區別。從basis的角度出發定義我覺得可以理解為嚴謹一些…)

第二個問題也是靠選擇良好的kernel來解答的,比如square exponential。所以剩下gp的技術細節基本就是關於square exponential的矩陣計算,i.e.如何用gaussian distribution如何做bayes inference.即知道p(a)和p(b|a)如何推出p(a|b),這裡ab都是向量。這些都是完成目標的工具,不細講,因為都是固定的,自己推或者看懂證明就好了。我個人覺得用gaussian distribution來解決問題的動機是「如何利用gaussian distribution的良好性質來彌補在計算能力比較差(上世紀)的情況下做推斷」。

從以上例子里可以看到,超參數比如方差是人為設定的。所以gp也需要選擇超參。

anyway,以上基本就是gaussian process引入機器學習的intuition,知道了構造gp的基本的意圖後,我相信你再去看公式和定義就不會迷茫了。

(二維gp 叫gaussian random field,高維可以類推。)

其它扯淡回答:

什麼是狄利克雷分布?狄利克雷過程又是什麼? - 知乎用戶的回答

如何用簡單易懂的例子解釋隱馬爾可夫模型? - 知乎用戶的回答


說幾個intuition 和application

1 首先說Gaussian 的部分。 Multivariate Normal distribution 有個很重要的性質,就是 假設 N 個變數服從 Multivariate Normal distribution , 從裡面任意扣 n&

2 再說 Process 的部分。 Process 的意思就是T=1, T=2, 。。。T=N 時間線 或者空間線上 X=1, X=2,。。。X=N 上連續性的觀測到的 response variable Y_i, i=1, cdots, N 的值。 前面說過了,因為高斯分布的優良性質, 大家喜歡假設 這些 Y 的聯合分布是高斯分布。

3 相鄰 的觀測點 Y_1, Y_2 的關係的刻畫。 也就是說 用一個kernel來刻畫 Y_1 和Y_2 的相關性。

Kernel function (correlation function) 有很多種選擇(各種選擇以及效果回頭有時間再貼), 不同的選擇可以fit 不同形狀的surface。 所以說gaussian process的surface是非常非常flexible的。 如下圖所示,

3 太flexible 的弊端

參數太多, overfitting,

lab 好多人在跑 gaussian process simulation。 大家的經驗是 Gaussian process只有參數和kernel 選的非常好的時候fit 才會好, 不然會失之千里。 相比之下 RBF radio basis function fit surface的效果更穩健。 4 應用

fit surface 做預測, 充當surrogate model 來做 system simulation 的optimization



你不知道函數長什麼樣。但是你有一些樣本,還有這些樣本的函數值(帶雜訊)。高斯過程可以通過kernel距離,給你把這個函數補出來:給一個新的樣本,高斯過程可以告訴你函數值是多少。

用途很廣。比如神經網路有很多超參數要調,神經網路loss可以看作是超參數的函數。你可以用不同超參數訓練,得到樣本和函數值,然後用高斯過程把函數補全,指導你下一步該怎麼設超參數值。


既然實在統計學和機器學習話題下的話,想必指的應該是Gaussian process for machine learning.

%----------------題外話-----------------------------------------

Gaussian Process (GP) 作為一種強大的,有效的非線性問題處理工具事實上早就被提出和應用了好久了,算是大量應用但絕非大紅大紫。每個時代似乎都有一個時代的象徵,比如當年的neural network, 後來的support vector machine,還有現在當紅的deep learning。工具這種東西無所謂強弱,只是看運用的地方以及大家更看中什麼罷了,或許說不定之後的GP也會鋪天蓋地的效果哦。所以為了這個potential 的目標,我也來做一些力所能及的科普吧。

%文字不少,公式不多,因為公式大量都在參考文獻和鏈接中。

%語言算不上嚴謹和精鍊,因為沒有廢話的科學文都在參考文獻和鏈接中。

%圖片中的公式其實也可以忽略,這只是稍稍的拓展。

%-----------------正文--------------------------------------------

1.什麼是GP

GP, Gaussian Process,關鍵詞,Gaussian + Process.

首先說Gaussian, 說到Gaussian (高斯)這個相必應該是大家耳熟能詳的吧,除了那個1+2+...50的故事,還有高斯分布(Gaussian distribution)應該是不會不知道的吧。哦,對了,更多的情況下大家叫正態分布(Normal distribution). 再說Process,這個詞語在數學上多指隨機過程(Stochastic process).簡單來講,隨機過程么,就一系列隨機變數的總和。一般情況下,這個「一系列」是指一段時間,所以例子就比如股票的波動,天氣的變化,當然還有大名鼎鼎的Brownian motion等等。所以,GP么就是一些隨著時間變化的隨機變數,每一個時刻都滿足正態分布。稍嚴格的講

當然此處有一個事實是,給定均值向量和協方差矩陣,我們可以確定一個高斯分布,同樣給定一個均值函數和協方差函數,我們也可以惟一確定一個高斯過程。因此GP的定義可以被重要的改寫為

2.為什麼是GP

這是個簡單又複雜的問題。簡單是是說這個世界的許多自然的也好人為的也罷,各種現象就偏偏滿足正態分布,同時正態分布又恰恰具有許許多多優良的分析性質。複雜在於它也沒有什麼太多的為什麼,它就是好用,它就是總結的自然規律,就好像傅立葉在工程中非常好用一樣。

大家都說高斯分布的性質良好,我們來看看具體高斯分布如何良好了。這裡主要講兩個性質.

簡單的來講就是

i) 整體服從多維高斯分布,那麼其中一部分也服從對應均值和協方差矩陣的正態分布。

ii)整體服從多維高斯分布,條件分布也服從相應的正態分布,並且均值和協方差矩陣可以被唯一確定表示。

這兩個性質非常重要,當然正是這兩個基本的性質保證了之後GP後續各種計算analytically tractable。此外,如果看到了這個核心,那麼我們很快就可以將GP進行推廣,比如說是student t process, matrix Gaussian process 和matrix student t process. 這都是由於student t 分布以及矩陣形式的正態分布和t分布都可以繼續保留這些性質。當然由於複雜度的問題,談到應用那還是GP最為廣泛。

3. 什麼是Gaussian process for machine learning呢?

說了那麼多廢話,這才是重點吧。是呀,很奇怪吧,一個隨機過程,怎麼用來做machine learning呢?高大上的machine learning跟這個最基本的隨機過程有什麼關係呢?

說到這個核心問題,Carl Edward Rasmussen and Christopher K. I. Williams大神寫的核心的書Gaussian Processes for Machine Learning可以找到詳細的答案。

下面我來大致說說大概

首先一般的machine learning 主要是兩件事情,一件是regression另一件classfication, 當然本質上其實也是一回事。我們挑其中大家更多討論的regression說說Gaussian process regression(GPR) 吧(當然更多的我個人感覺GP的regression相對classfication來說相比其他方法更有優勢吧)。

說到GPR當然也會有一堆文獻綜述和歷史發展軌跡,這個我這裡不想多說了,有一點有覺得非常重要。Radford M. Neal(1995) 在他的文章Bayesian learning for neural networks中指出許多基於神經網路的貝葉斯回歸模型在無窮多網路的情況下可以收斂到GP。

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.446.9306rep=rep1type=pdf

個人認為這也是為什麼GP具有強大的解決非線性問題能力的原因。

至於具體的問題,看了一眼回答 @li Eta ,對於GPR的weight-space view推倒已經非常詳細了,我大致從function-space view來看看GPR,並且這個角度也更粗暴簡單,同時比較易於推廣。

簡單的來講,首先我們現在有一堆x和y,當然必須是一一對應的哈。我們不妨記做m{y} = [y_1,ldots,y_n]^{T}, m{X}= [x_1,ldots,x_n]^{T}。 既然是一一對應的,我們不妨可以將y看作是x的函數,當然嚴格上說應該是y看作是x的函數外加一定的noise,即

m{y} = f(m{X}) + varepsilon , 此處varepsilon 是滿足同分布的高斯雜訊,均值為0方差是sigma^2_n.

現在我們知道所有的m{X}m{y},並且當我們想做的是,當給定一個m{X}_*,我們是否可以去預測對應的m{f}_*。答案是肯定的,只要現在我們假設[m{y},m{f}_*]^{T}滿足一個多維的高斯分布(至於為什麼那麼假設,那我只能說因為這個假設最好用,最實用,當然這是假設也可以最推廣到更一般的分布假設,比如是student-t distribution).

所以說,當我們給定具體數據,且給定具體的mean function and covariance function之後,我們就可以輕易的得出m{f}_*的具體分布。

到這裡,其實回歸的理論部分已經差不多了,模型也基本建立了。仔細觀察可以發現,這其中有兩個決定性的因素:mean function and covariance function. 其中mean function 刻畫的相對比較遠期的情況,並且在一定程度可以被轉化,比如數據的預處理或者是轉化到covaniance function裡面去,一般情況下我們都假定mean function =0。所以,最後也是最重要的就是處理這個covariance function。因此covariance function還被稱作kernel。這個詞語可是在核學習中的高頻辭彙哈,包括SVM,PCA等等的方法中都會被反覆提到。當然在 GPR中這也是重中之重,它決定了inputs之後的關係,同時也反映了我們對數據本身的一種先驗看法。具體的可以詳見我的另一個直觀的答案

機器學習里的kernel是指什麼? - 驀風的回答

說是差不多了,其實還差一步,其實也是實現的這一步。看到現在有人或許會有疑惑,數據給定了,kernel給定了,什麼都給定了,那結果也給定了,那還learning什麼呢?錯,kernel是給定了,但是記住kernel裡面的超參數(hyperparameters)並沒有給定,所謂的learning就是指給定數據之後,我們learning得出這一系列的hyperparameters。只有當這些hyperparameters都確定了,我們才可以順利的得到最終的結果。那麼具體如何操作呢?這裡有兩種方法:

i) maximum likelihood(ML), 所謂ML就是以給定數據的likelihood最大為目標函數的最優化問題,從而估計出kernel裡面的hyperparameters.

ii) Monte Carlo, 這個就是所謂的暴力破解,利用Bayesian formula,結果高斯先驗(也就是我們的多維高斯分布的假設)和likelihood(noise的分布)的知識去強力計算後驗的分布。

兩種方法各有優缺點,第一種由於是一個最優化問題,我們知道如果目標函數不是convex的,那麼最後就不一定可以找到global optima,也就是說最後的解容易受到初始值的影響而陷入局部最優,從而可能會影響模型最後的效果。對於這個問題,下面的文章就有所探討

How priors of initial hyperparameters affect Gaussian process regression models

不過,好處的是速度快,大多數情況下可以得出令人滿意的結果。所以第一種方法結果conjugate gradient是最主要是被採用的方法。第二種方法的缺點是運算代價大,但是好處是一番暴力破解後總是可以找到合適的解,只要你不差時間。

寫到這裡才算是結束模型和實現哈!

4. Gaussian process regression核心問題是什麼?

結合上面的內容,我們可以發現

i)kernel的選擇與構造

ii)kernel裡面的hyperparameters的估計

所以說GPR本身就是一種kernel learning的模型,現在主要有關於GP的研究就是基於這兩個基本點。

套用個廣告詞,kernel好了,一切都好了!

5. GP有什麼應用?

這個問題好大,其實什麼什麼應用都有,簡單就是做做天氣預報,預測分析一下死亡率之類的,當然最近看開會看到有人還可以用來做殺蟲劑相關的,反正我不懂。不過,最近剛學到的一個就是用Expected improvement演算法基於GP去做Global Optimization。如果有興趣可以上這個網站看看做法,當然這裡還有GP的介紹呢。

http://gpss.cc/gpuqss16/program

6. 學習GP for machine learning有什麼推薦

i) Carl Edward Rasmussen and Christopher K. I. Williams大神寫的書Gaussian Processes for Machine Learning

ii) 網站http://gpss.cc/gpuqss16/program

iii)Quora上Neil Lawrence的相關回答

剩下的就是一些零星的內容了,比如說kernel design,個人感覺Andrew Gordon Wilson做的spectral mixture kernel非常厲害,同時Nicolas Durrande最近的一些關於kernel的也比較有意思。

7.GP for machine learning的編程推薦

i) GPML Documentation for GPML Matlab Code

首推當然是這個啦,功能強大,kernel 豐富,demo詳細,操作容易,畢竟它是Carl他們組做的東西啊!關鍵關鍵它是matlab!內牛滿面啊!

ii) GPstuff- Gaussian process models for Bayesian analysis

這個應該是Finland的一個machine learning組做的,用過一兩次,感覺還可以,特定的問題有所方便,但是函數可讀性沒有上一個高。它有matlab和R兩個版本呢,有R哦,哦,是嗎?可是我不是很熟悉哎。

iii)GPy 以及GPyOpt

這個是Sheffield他們學校Neil他們的machine group做的吧,去summer school的時候用過,感覺好多東西都設置好了。關鍵,關鍵,它是python的,還是不怎麼喜歡python,雖然各種大神都說python是未來趨勢,只是我還是鍾愛matlab.不過自從發現了spyder2之後就在python中有一種家的感覺,感覺棒棒嗒!

iv)這是個R的包,用過一次,不知道效果

library(DiceDesign)
library(DiceKriging)
library(DiceView)


不推導公式,只講思路!

  1. machine learning 里的Gaussian process regression就是一般意義的Gaussian process在machine learning下面的應用,並不是什麼截然不同的概念,沒必要也不應該劃清界線!
  2. 在傳統的回歸分析里,假設y=f(x)+ e, e是random error term,f(x)是x的一個函數,比如f(x)=x*w, 這裡w是一個常數(不論已知還是未知),那麼f(x)就是確定的,也就是說x確定了f(x)也就確定了。在Gaussian process回歸里,給定了x,f(x)仍然是一個隨機變數,為什麼?因為w是隨機的,也就是說Gaussian process其實是bayesian框架下的。
  3. 先來看一個一般意義下的Gaussian process,比如一個定義在連續時間上的Wiener process W(t)(加下圖),E(W(t))=0, Cov(W(t), W(s))=min(s,t)。

    只要這兩條就可以確定一個Gaussian process,因為Gaussian process只需要用到2階距,這也是Gaussian process容易處理的地方。那怎麼把Gaussian process用到回歸分析上呢?我們可以假設 f(x)就是一個定義在x上面的隨機過程,這裡的x可以和Winener process的時間t對應。回歸分析的主要目的就是對新的樣本預測,假設x*是新樣本,Gaussian process回歸是去建立給定訓練數據和新樣本時,f(x*)的概率分布函數,也就是p(f(x*)|x,y,x*)
  4. 那麼怎麼算這個分布函數呢?先來看一個簡單情況,不考慮random error term,也就是假設y=f(x)。Gaussian process的定義上就是說從這個隨機過程任意取一些隨機變數,他們服從多維正太分布,換句話說,f(x) 服從一個多維正太分布,f(x*)服從一個多維正太分布,(f(x)』,f(x*)』)』仍然服從多維正太分布,然後呢,多維正太分布有一個非常好的性質,就是給定其中一部分,另一部分的條件分布還是一個正太分布(可以看這裡Multivariate normal distribution)。也就是說,f(x*)|f(x)是一個正太分布。那剩下的問題就是計算這個分布的參數了。
  5. 怎麼算這個條件正太分布參數?如果我們在最開始的Gaussian process回歸模型中就指定covariance matrix的形式問題就簡單了,比如x(t)和x(s)兩個點,我們指定cov(f(x(t)),f(x(s)))=exp(-0.5*(|x(t)-x(s)|)),那covariance matrix就可以算出來(因為矩陣上每一點都可以算了),相應的參數都可得到,然後概率分布函數就可以得到了,常見的covariance形式可以看看Gaussian process。
  6. 上面討論的是簡單情況,忽略了random error,引入正太分布的error,我們可以得到f(x*)|x,y,x*還是一個正太分布
  7. 知道了f(x*)的條件分布,那預測可以取mode,對正太分布來說,mean就是mode,所以就可以用f(x*)|x,y,x*的期望作為預測。
  8. 具體的推導過程可以看看http://www.gaussianprocess.org/gpml/chapters/RW.pdf第二章
  9. 歡迎大家指正。


我最開始看的是地統計學裡的kriging,我對kriging的理解就是通過部分點,得到了一個張開的面,從而可以預測這個面上其他點位置的值,也就是空間插值。kriging 是Gaussian process 的一個應用吧


高斯過程的思想非常直接,我來捋一下這個過程。這裡只用最簡單的高斯過程回歸來說。

首先,回歸嘛,就是給一堆已知的x和y,然後當拿出一個新x的時候,能夠預測出對應的y。高斯過程是一種貝葉斯方法,能夠預測出新y的分布來。

如何預測?高斯過程的出發點就是,如果兩個x比較近,那麼對應的y一定是比較接近。然後呢,給出的新x,它對應的新y怎麼求?就看這個新x與之前給出的一堆x有多近,從而知道新y與之前的一堆y有多近,新y自然知道。

現在問題變成了,如何度量x之間有多近,這個『近』又如何反應到y有多近。

我們先看y。在貝葉斯的世界裡,y都是滿足某種分布的隨機變數,兩個y有多近呢,我們想想一般隨機變數有多近如何表示?嗯,相關係數啊。好了,那我們就看一下這兩個y聯合分布的協方差矩陣就行了,嗯,協方差矩陣上的元素不就是相關係數嗎。

說了半天,跟高斯有什麼關係呢?到了這裡,高斯終於要出現了!高斯其實是作為一種先驗,即我們認為所有的y,服從一個多維的聯合高斯分布。要預測新y的分布,只需要把這個多維聯合分布的協方差矩陣算好,然後按照公式計算新y的邊緣分布就行了。

ok,現在解決如何計算協方差矩陣就萬事大吉。

協方差表示了y之間有多近,而這個是由x有多近決定的。x之間怎麼度量呢?兩個向量如何度量多近?內積嗎?內積太線性太簡單了,不能刻畫複雜的情況,嗯,怎麼才能不線性,對,就是算kernel。

好了,現在一切都解決了,用新老x之間加kernel,來填充y之間的協方差矩陣,然後計算新y的邊緣分布。通過老x和老y,給定新x計算新y的任務完成了!


通俗地講,GPs = bayes + kernel。具體推導參考gaussian processes for machine learning第二章regression。

個人認為,當你只想通俗地理解機器學習里的模型、演算法,而不是親手去推推公式,我覺得你還不如不理解,因為這對於你解決實際問題毫無意義。用GP對數據建模,首先得考慮下面幾個問題:

(1)如何選擇核函數

選什麼核函數(這點非常重要)?選最常用的SE還是SMP還是混合(基於對數據的理解)?

(2)超參數物理含義是什麼?

訓練完模型後,大部分情況下測試效果不會很好,再回頭看看學到的超參數變化如何?那麼問題來了,這些超參數又代表什麼物理含義呢(基於對核函數的理解)?

(3)非高斯似然函數

對常見的分類任務來說,似然非高斯分布,此時共軛優勢不復存在,如何找到最有效逼近後驗的方法(EP?VI?)

(4)異方差

事實上,很多lable都不是簡單的高斯分布,甚至label雜訊都是異方差分布(比如label值跨度超多幾個數量級),又該如何解決(可參考warped GPs)?

(5)如何用於大數據

最後的最後,面對大數據呢,GPs最大的瓶頸就是立方複雜度,這裡有很方法,個人覺得最巧妙的想法還是FITC,還有採用分而治之想法的BCM等;

(6)與dl的結合

參考deep GPs


就是將柱子圖變成波浪圖,引申到多維操作同理。比如,用探針有限次採樣的方式,得到一個表面數據,將數據進行一次平滑運算,就是一個高斯模糊過程。


請問從哪可以找到一些常式呢,想用高斯過程對多維輸入一維輸出進行概率預測,我看的Documentation for GPML Matlab code version 4.0 ,上面有一維的輸入常式,請大神給個指點,謝謝啦


首先大家理解什麼是高斯分布吧,就是那麼個鐘罩一樣的分布。

那麼大家能不能理解兩維的高斯分布呢?就是兩維空間裡面的一個橢圓一樣的東西?

長這樣

如果兩維的也能理解,那就好辦了。

因為我相信你大約可以理解n維的高斯分布了。

長這樣:

現在假設我們想研究時間從0到T這個時刻的一個過程f(t)。

那麼首先想像我們把0到T分成N份,t1 t2 t3 ... tN, 或者說把這段時間離散化了。

然後我們就會有一堆函數f(t1), f(t2), f(t3), f(t4)... f(tN).

也可以寫成

(f1,f2,f3,f4...fN)

這是一個N維的矢量。

現在我告訴你,這個N維的矢量滿足N維的高斯分布。

當然了,因為這個N維是腦補出來的,因為f(t)大概不是離散的而是連續的,或者說N趨於無窮大。

那麼這個f(t)就是高斯過程。

小朋友們,你們懂了嗎?


晚點來寫,不過我不太喜歡張口閉口說在machine learning裡面什麼什麼的。這種東西還是在Bayesian 的framework 下解釋好。:)


推薦閱讀:

為什麼用歷史數據回測得出的結果很誇張,而實證檢驗時又不那麼理想?
平均值為什麼被叫做期望值?
智商和學習成績之間的關係,有沒有相關的數據模型?
為什麼有的孩子「一誇就落後,一批評就進步」?
包含兩個部分相減的目標函數有什麼好的方法讓其中一個部分優先得到優化?

TAG:統計學 | 機器學習 |