1. 程式人生 > >高斯過程(轉)

高斯過程(轉)

完全 核函數 -h 讓我 alpha 例如 其他 left size

http://36kr.com/p/5114423.html

http://bridg.land/posts/gaussian-processes-1

http://www.gaussianprocess.org/

http://www.360doc.com/content/17/0810/05/43535834_678049865.shtml

大數據文摘作品,編譯:丁慧、文明、Katherine Hou、雲舟

高斯過程可能不是當前機器學習最火的研究方向,但仍然在很多前沿的研究中被使用到——例如,最近在AlphaGo Zero中自動調整MCTS超參數就使用了它。在建模能力和進行不確定性估計方面,它們具有非常高的易用性。

然而,高斯過程很難掌握,尤其是當你習慣了深度學習中其他常見的模型之後。所以本文希望在具備相當少的ML知識背景下,對高斯過程提供一個直觀的理論介紹,請學習者下載notebook並實現本文中提到的所有代碼。

Jupyter notebook 版本:

https://gist.github.com/Bridgo/429594942ff51037ecc703905e40c562

什麽是高斯過程,為什麽使用它?

高斯過程(Gaussian process, GP)是一個強大的模型,可以用來表示函數的分布。機器學習中的大多數現代技術都傾向於通過參數化函數,然後對這些參數(例如線性回歸中的權重)進行建模來避免這種情況。

然而,GP是直接對函數建模的非參模型。這種方法帶來的一個非常重要的好處是:不僅可以擬合任何黑箱函數,還可以擬合我們的不確定性。量化不確定性是非常有價值的——例如,如果允許我們隨意探索(需要更多的數據),我們就可以選擇盡可能高效地探索最不確定的領域。這是貝葉斯優化背後的主要思想。

如果你給我幾張貓和狗的照片作為學習資料,然後給我一張新的貓的照片讓我分類——我應該給出一個置信度相當高的預測。但是如果你給我一張鴕鳥的照片,強迫我判斷它是貓還是狗——我最好還是給出一個置信度非常低的預測。

——Yarin Gal

對於這個介紹,我們將考慮一個沒有噪聲的簡單回歸模型設置(但GP可以擴展到多維和噪聲數據):

  • 假設我們需要擬合某個隱函數f:R—> R

  • 已知數據X = [x1,…,xN]T,Y = [y1,…,yN]T,其中yi = f(xi)

  • 我們要預測一些新的未觀測點x*的函數值

使用高斯擬合函數

GP背後的關鍵思想是可以使用無限維多元高斯分布擬合函數。換句話說,輸入空間中的每個點與一個隨機變量相關聯,並將多元高斯分布用來擬合這些點的聯合分布。

那麽,這究竟意味著什麽呢?讓我們從一個更簡單的情況開始:一個二維高斯。已知:

技術分享圖片

通常它是高度表示概率密度的3D鐘形曲線。但是,假如不是表示整個分布,我們只需要從分布中抽樣。然後我們將得到兩個值,我們可以繪制點d並在它們之間畫一條線。

技術分享圖片

技術分享圖片

觀察圖中的這些直線,看起來像我們僅僅抽取了10個線性函數樣本……如果我們現在使用20維的高斯函數,依次連接每個樣本點,會發生什麽樣的變化呢?

技術分享圖片

技術分享圖片

這些絕對看起來像多個函數,但相對於我們的目的,它們看起來噪聲太大所以不可用。讓我們進一步考慮可以從這些樣本中得到什麽,以及如何改變分布從而獲得更好的樣本……

多元高斯有兩個參數,即均值和協方差矩陣。如果我們改變了均值的話,我們只會改變整體趨勢(即如果均值是上升的整數,如np.arange(D),那麽樣本會呈現出整體正向線性趨勢),但是仍然會出現鋸齒形的噪聲形狀。出於這個原因,我們將GP的均值設置為0——它們實際上已經足夠強大,可以在不改變均值的情況下擬合各種函數。

相反,我們需要一些平滑的概念:即如果兩個輸入點彼此鄰近,那麽我們期望這些點的函數值是相似的。就我們的模型而言,對用於相鄰點的隨機變量在它們的聯合分布(即高斯協方差)下采樣時應該具有相似的值。

這些點的協方差被定義為高斯的協方差矩陣。假設我們有N維高斯模型y0,…yN,協方差矩陣Σ是N╳N維且它的第(i,j)個元素是Σij = cov(yi,yj)。換句話說,Σ是對稱的而且存儲著所有隨機變量的聯合模型的成對協方差。

用核技巧進行平滑處理

那麽如何定義我們的協方差函數呢?這時大量關於核的文獻可以派上用場。我們將選擇平方指數核(最簡單的形式)來達到我們的目的,定義如下:

技術分享圖片

當x = x’時,函數值(我們剛剛繪制的)為1並且隨著點的不同而趨於0

技術分享圖片

我們可以繪制這個核函數來展示它在x = x’時是最大的,然後隨著兩個輸入的不同開始平滑的下降

技術分享圖片

技術分享圖片

因此,為了得到我們想要的那種平滑性,我們將考慮在xi和xj處繪制兩個隨機變量yi和yj,來得到它們的協方差cov(yi,yj) = k(xi,xj) ——它們越接近,它們的協方差越高。

使用上面的核函數我們可以得到k(xs,xs)這個矩陣。現在我們試著從20維高斯中抽取另外10個樣本,但是這次使用新的協方差矩陣。當我們這樣做時,我們可以得到:

技術分享圖片

技術分享圖片

現在我們有了一些開始看起來像一個(有用的)函數分布。而且我們可以看到,隨著維數趨於無窮大,我們不再需要連接這些點,因為我們可以為每一個可能的輸入指定一個點。

讓我們使用更多維度,並在更大範圍的輸入中查看他的外形:

技術分享圖片

技術分享圖片用先驗和觀測進行預測

現在我們有了函數的分布,我們如何通過訓練數據擬合隱函數從而進行預測?

首先,我們需要獲取訓練數據。 這可以通過構造我們的秘密函數f來生成數據。

目標函數

本教程中我們使用一個五次多項式:

技術分享圖片我選擇它是因為這個函數有個漂亮的波浪圖形。當然,我們也可以用其它的函數。

技術分享圖片

技術分享圖片數學推導

現在我們已經進入高斯過程的核心了。這需要更多的數學知識,不過不用擔心,我們只需要鞏固已有的知識就行,然後用一個小技巧在觀測數據上決定我們的聯合概率分布:

到目前為止,我們已知能夠用多元正態分布來模擬p(y|x)了。

技術分享圖片其中,

技術分享圖片

這是一個先驗分布,它表示在沒有任何觀測數據的情況下,技術分享圖片出現時,技術分享圖片出現的概率。

現在,我們有了訓練集,其訓練得到的模型輸入為技術分享圖片輸出技術分享圖片當有新樣本技術分享圖片其預測值為
技術分享圖片

技術分享圖片

回顧之前高斯過程的定義,我們將擬合技術分享圖片技術分享圖片的聯合概率分布。

技術分享圖片

其中技術分享圖片和前面一樣,我們將均值設為0.

但是,這是在擬合技術分享圖片而我們僅需要技術分享圖片的分布。

條件多元高斯

與其從頭開始計算技術分享圖片的分布,我們可以使用標準結果。如果我們有了前面提到過的技術分享圖片技術分享圖片的聯合概率分布,而要得到技術分享圖片的條件概率分布,可以用如下的公式:

技術分享圖片

現在我們就可以用先驗分布和觀測數據計算後驗分布了

註意:下面給的代碼在實際過程中並沒有用到,因為K通常處於較差條件,所以它的逆通常不準確。在本教程第二部分中我們將給出一個更好的方法。

技術分享圖片這就是上面公式的代碼實現! 現在就可以用這兩個參數從條件概率分布中采樣了。我們將它們與真實函數(虛線)畫在一起對比。因為我們用的是高斯過程,它包含有不確定性信息,這種不確定性信息以隨機變量的方差形式表示出來。我們知道第i個隨機變量的方差為∑*ii,換句話說,方差就是∑*的對角線值。下圖中的樣本包含了標準方差為±2的不確定性。

技術分享圖片

技術分享圖片接下來講什麽?高斯過程回歸和噪聲數據處理

實際上,我們需要做更多的工作才能得到更好的預測結果。你可能已經註意到核中包含兩個參數-σ和l。如果你在采樣過程中試著改變這兩個參數,你會發現σ影響縱坐標的變化而l影響橫坐標的範圍。

因此,我們需要改變它們來反映我們對隱函數的先驗置信度。譬如,如果我們希望隱函數有更大的輸出範圍(一個我們感興趣的範圍),那麽我們需要相應的增加技術分享圖片的值(試著將隱函數返回的值放大100倍,看會出現什麽,然後將sigma設置為100再看)。事實上,任何用到核的函數,我們都可以通過改變核得到一個完全不一樣的函數(例如,周期函數)。

核的選擇需要人工進行,但參數可以通過最小化損失函數來自動優化。這就是高斯過程回歸的內容。

最後,我們需要考慮怎麽處理含有噪聲的數據,例如,在實際過程中我們可能無法獲得符合隱函數的標準數據。在這種情況下我們需要將這種不確定性納入模型中以獲得更好的泛化能力。

參考資料:

    • 《Machine Learning - A Probabilistic Perspective》第十五章,作者 Kevin P. Murphy

    • YouTube上Nando de Freitas 發布的Introduction to Gaussian processes視頻

高斯過程(轉)