當前位置:
首頁 > 知識 > 解讀 | 得見的高斯過程

解讀 | 得見的高斯過程

機器之心編譯

高斯過程可以讓我們結合先驗知識,對數據做出預測,最直觀的應用領域是回歸問題。本文作者用幾個互動圖生動地講解了高斯過程的相關知識,可以讓讀者直觀地了解高斯過程的工作原理以及如何使其適配不同類型的數據。

引言

即使讀過一些機器學習相關的書,你也未必聽說過高斯過程。當然了,若是聽說過也無妨,複習一下基礎知識也能幫你喚醒記憶。本文旨在向讀者介紹高斯過程,並且把它背後的數學原理講得更加直觀易懂。

高斯過程是機器學習工具箱里一種相當有用的工具 [1]。它讓我們得以結合先驗知識,對數據做出預測。它最直觀的應用領域是回歸問題,比如在機器人學裡會用到。同時,也可以把它拓展到分類和聚類任務里。我們先小小複習一下:回歸的目的是為了找到一個函數來儘可能貼近地描述一組給定的數據點。這個過程叫做用函數擬合數據。對於一組既定的訓練數據點,或許潛在有無限多個函數可以用來做擬合。高斯過程則為此提供了一個優雅的解決方案——給每個這類函數分配一個概率值 [1]。這個概率分布的均值便代表了這個數據最有可能的表徵。而且,概率的方法使我們可以把對預測的置信度結合到回歸的結果里去。

首先,我們將探索高斯回歸的數學基礎。你可以通過文中的互動圖,以及上手感受具體的例子來理解這些知識。它們有助於解釋每個組件的影響,並展示高斯過程的靈活性。希望你在閱讀本文之後,對高斯過程的工作原理以及如何把它適配給不同類型的數據能有一個直觀的理解。

多元高斯分布

在探索高斯分布之前,我們需要理解它們的數學基礎。從名字我們可以得知,高斯分布(也叫做正態分布)是高斯過程的基礎構件。而我們最感興趣的是多元高斯分布,其每個隨機變數都呈正態分布,聯合分布也是高斯的。一般來說,多元高斯分布由均值向量 μ 和協方差矩陣 Σ 定義。

均值向量μ 描述了該分布的期望值,它的每個組件描述了對應維度的均值。Σ 對每個維度的方差進行建模,並確定不同隨機變數之間的關聯。協方差矩陣總是對稱且半正定的(positive semi-definite)[4]。Σ 的對角線由第 i 個隨機變數的標準差σ_i 組成,而非對角線的元素則描述了每個元素σ_ij 之間的相關性。

我們稱 X 符合正態分布。協方差矩陣Σ 描述了該分布的形狀,它由期望值 E 所定義:



從圖形上來看,該分布以均值為中心,由協方差矩陣決定其形狀。下圖展示了這些參數對於一個二維高斯分布的影響。每個隨機變數的標準差在協方差矩陣的對角線上,而其它的值則顯示了它們之間的協方差。


這是一個互動式的圖,通過拖動圖中的三個點,你可以調節每個維度上的方差,以及兩個隨機變數之間的關聯。紫色的部分指的是分布內高概率的區域。

高斯分布被廣泛應用於為真實世界建模,有時在原分布未知的情況下作為替代品,有時用於中心極限定理。接下來我們會進一步講解如何操縱高斯分布,以及如何從中獲得有用的信息。

邊緣化和條件作用

高斯分布有一個很贊的代數性質:它在條件作用和邊緣化情況下是封閉的。意思是,經過這些運算後,在結果中得到的分布依舊是高斯分布,這就使得很多統計學和機器學習中的問題變得易解。接下來,我們將進一步看看這兩個運算,它們是高斯過程的基礎。

邊緣化和條件作用都作用於原始分布的子集,我們將使用以下符號:



其中 X 和 Y 代表原始隨機變數的子集。

通過邊緣化,我們可以獲取多元概率分布的一部分信息。給定隨機變數 X 和 Y 組成的向量的正態概率分布 P(X,Y),我們可以用以下方法確定他們的邊緣概率分布: 




這個公式所表達的意思很直接了當:X 和 Y 這兩個子集各自只依賴於它們 μ 和 Σ 中對應的值。因此,要從高斯分布中邊緣化一個隨機變數,我們只需把μ 和Σ 里那些對應的變數丟掉就行。




這個公式的意思是,如果我們只對 X=x 的概率感興趣,我們要考慮 Y 所有可能的值,它們齊心協力才能得到最終的結果。

高斯過程的另一個重要運算是條件作用,它可以用於得到一個變數在另一個變數條件下的概率分布。和邊緣化類似,這個運算也是封閉的,會得到一個不同的高斯分布。條件運算是高斯過程的基石,它使貝葉斯推斷成為可能。條件作用如下定義:



要注意的是,新的均值只依賴於作為條件的變數,而協方差矩陣則和這個變數無關。

了解了必要的公式以後,我們要思考的是:如何從視覺層面理解這兩個運算。雖然邊緣化和條件作用可以用於多維的多元分布,還是用下圖中的二維分布作為例子更加好理解。邊緣化可以理解為在高斯分布的一個維度上做累加,這也符合邊緣分布的一般定義。條件作用也有個很好的幾何表達——我們可以把它想像成在多元分布上切下一刀,從而獲得一個維數更少的高斯分布。




中間是一個二元正態分布。圖左是該分布關於 Y 做邊緣化的結果,類似於沿著 Y 軸做累加。圖右是以給定的 X 為條件的分布,類似於在原始分布上切下一刀。你可以通過拖動圖中的點來修改這個高斯分布和作為條件的變數。

高斯過程

複習好了多元高斯分布的基礎屬性,我們接著就可以把它們組裝到一起,來定義高斯過程,並展示怎麼用高斯過程來解決回歸問題。

首先,我們把視角從連續函數轉移到函數的離散表達:相比於找一個隱函數而言,我們對預測具體點的函數值更感興趣,這些點叫做測試點 X。對應地,我們把訓練數據稱為 Y。那麼,高斯過程背後的關鍵點在於所有的函數值都來源於多元高斯分布。這意味著聯合概率分布 P(X,Y) 跨越了我們想要預測的函數的可能取值空間。這個測試數據和訓練數據的聯合分布有∣X∣+∣Y∣維。

為了在訓練數據上進行回歸,我們會用貝葉斯推斷來處理這個問題。貝葉斯推斷的核心思想就是:在獲得新的信息以後,更新當前的假設。對於高斯過程來說,這個信息指的就是訓練數據。因此,我們感興趣的是條件概率 P(X|Y)。最後,還記得高斯分布在條件作用下是封閉的嗎?所以 P(X|Y) 也是正態分布的。

好了,我們已經集齊了高斯過程的基本框架,只差一個東西:我們怎麼才能建立起這個分布,定義均值μ 和協方差矩陣Σ?方法是:使用核函數 k,具體細節將在下一節具體討論。但在這之前,我們先回憶一下怎麼用多元高斯分布來估算函數值。下圖中的例子包含十個測試點,我們將在十個點上預測函數。



這也是一個互動式的圖


在高斯過程中,我們把每個測試點作為一個隨機變數,多元高斯分布的維數和隨機變數的數目一致。由於我們想要預測函數在∣X∣=N 個測試點上的取值,對應的多元高斯分布也是 N 維的。用高斯過程做預測最終可以歸結為在這個分布上做採樣。這樣,我們就可以把結果向量上的第 i 個成員作為第 i 個測試點的對應函數值。

核函數

讓我們回想一下,為了建立起我們要的分布,首先要定義 μ 和 Σ。在高斯過程中,我們往往假設 μ =0,這樣可以簡化條件作用所需要的公式。這樣做假設總是沒錯的,就算 μ≠0,我們也可以在預測結束後把μ 加回到結果函數值中。所以配置μ 非常簡單,更有意思的是這個分布的另一個參數。

高斯過程中巧妙的一步是如何設置協方差矩陣Σ。協方差矩陣不僅僅描述了這個分布的形狀,也最終決定了我們想要預測的函數所具有的特性。我們通過求核函數 k 的值來生成協方差矩陣,這個核函數通常也被稱為協方差函數,作用在兩兩成對的所有測試點上。核函數接收到的輸入是兩個點

,返回的是一個標量,表達了這兩個點之間的相似度。



我們將測試點兩兩配對,在這個函數上求值以獲取協方差矩陣,這個步驟在下圖中也有所顯示。為了對核函數的作用有一個更直觀的理解,我們可以想一想協方差矩陣中元素描述的是什麼。Σ_ij 描述的是第 i 個點和第 j 個點之間的相互影響,這和多元高斯分布的定義一致。在多元高斯分布的定義中,Σ_ij 定義了第 i 個隨機變數和第 j 個隨機變數之間的相關性。由於核函數描述的是函數值之間的相似度,它便控制了這個擬合函數可能擁有的形狀。注意,當我們選擇一個核函數時,我們要確保它生成的矩陣遵循協方差矩陣的屬性。

核函數被廣泛應用於機器學習,比方說支持向量機。它之所以這麼受歡迎,是因為它讓我們得以在標準的歐幾里得距離(L2 距離)之外衡量相似度。很多核函數會把輸入點嵌到更高維的空間里去測量相似度。下圖介紹了高斯過程的一些常見核函數。對於每個核函數,我們用 N=25 個呈線性、範圍在 [-5,5] 的點生成協方差矩陣。矩陣中的元素顯示出點和點之間的協方差,取值在 [0,1] 之間。



上圖展示了高斯過程可以使用的各種核函數。每個核函數的參數不同,你可以拖動滑塊改變這些參數的值。當你點擊某個滑塊時,可以看到圖右側中當前參數是如何影響核函數的。

核函數可分為平穩和非平穩的類型。平穩核函數,例如徑向基函數核(RBF)或者周期核,都具有平移不變性,兩點之間的協方差只取決於它們之間的相對位置。非平穩核函數,比如線性核,就沒有這個限制且取決於絕對位置。徑向基函數核的平穩特性可以從其協方差矩陣的對角線帶來觀察(如下圖)。增加長度參數會使得這個帶狀區域變得更寬,因為距離較遠的點彼此之間的相關性增加了。對於周期核,我們還有個參數 P 來決定周期,從而控制了函數每次重複之間的距離。相比之下,線性核的參數 C 讓我們得以改變各個函數交匯的點。

還有很多其它的核函數可以描述不同類別的函數,它們使函數擁有我們所希望的形狀。Duvenaud 的《Automatic model construction with Gaussian processes》對不同核函數進行了概覽,值得一觀。我們還可以把幾個核函數結合起來用,不過這個以後再講。



先驗分布

回到我們原來的回歸任務,正如我們之前提到過的,高斯過程定義了潛在函數的概率分布。由於這是一個多元高斯分布,這些函數也呈正態分布。我們通常假設μ= 0,姑且先考慮還沒有觀察到任何訓練數據的情況。在貝葉斯推斷的框架下,我們稱之為先驗分布 P(X)。



如果還沒觀察到任何訓練樣本,該分布會如我們剛開始所假設的,圍繞 μ=0 展開。先驗分布的維數和測試點的數目 N=∣X∣一致。我們將用核函數來建立協方差矩陣,維數為 N×N。

我們在上一章看過不同核函數的例子,由於核函數被用於定義協方差矩陣的內容,它也就決定了在這個包含所有可能的函數的空間里,哪些類型的函數可能性更大。先驗分布還不包含任何額外的信息,這就給了我們一個絕佳的機會來呈現核函數對於函數分布的影響。下圖顯示了用不同核函數產生的先驗分布可以獲取到的潛在函數的一些樣本。



點擊圖片可以得到一系列在高斯過程中使用指定核函數時的連續採樣。在每次採樣過後,之前的樣本會在背景里被淡化。一段時間後,大概可以看到這些函數圍繞均值 μ呈正態分布。

通過調節參數,你可以控制所獲得的函數的形狀,這同時也會改變預測的置信度。方差σ 是一個所有核函數都常見的參數,如果減小它,採樣到的函數就會更加緊密地圍繞在均值μ 周圍。對於線性核而言,設置 σb = 0,我們會得到一組精確地交匯在點 c 的函數,而設置σ_b = 0.2,則會引入一些不確定性,採樣到的各個函數會大致經過點 c 附近。



後驗分布


那麼如果我們觀察到了訓練數據,會發生什麼呢?我們來回顧一下貝葉斯推斷的模型,它告訴我們可以把這個額外的信息結合到模型里去,從而得到後驗分布 P(X|Y)。我們來進一步看看在高斯過程里怎麼用上它。

首先,我們得到測試點 X 和訓練點 Y 之間的聯合分布 P(X,Y),這是一個維數為∣Y∣+∣X∣的多元高斯分布。下圖中可以看到,我們把訓練點和測試點拼接到一起,計算對應的協方差矩陣。

接下來我們要在高斯分布上做一個之前定義過的運算:通過條件作用從 P(X,Y) 得到 P(X|Y)。這個新分布的維數和測試點的數目 N 一致,呈正態分布。要重點注意的是,條件作用以後均值和標準差會相應發生變化:X∣Y~N(μ′,Σ′),具體的細節可以在講邊緣化和條件作用的章節找到。直觀上講,就是訓練點為候選的函數設了一個限定範圍:要經過訓練點。



增加訓練點 (■) 會改變多元高斯分布的維數;

通過兩兩配對核函數的值生成協方差矩陣,結果是一個十二維的分布;在條件作用下,我們會得到一個分布,這個分布可以描述我們對於給定 x 值所預測的函數值。

和先驗分布類似,我們可以通過對該分布採樣獲得一個預測結果。然而,由於採樣包含隨機性,我們無法保證結果能很好地擬合數據。為了優化預測結果,我們可以用到高斯分布的另一個基礎運算。

通過對每個隨機變數做邊緣化操作,我們可以為第 i 個測試點提取到對應的均值函數的值μ i,以及標準差σ i=Σ ii。和先驗分布不同的是,我們做先驗分布時會設μ= 0,在那個情況下均值並不太重要。而當我們把條件作用施加在測試數據和訓練數據的聯合分布上時,得到的分布往往會有個非零的均值,μ′≠ 0。提取μ′ 和 σ′ 不僅會使預測更有意義,還表示出了預測值的置信度。

下圖(原圖為互動圖)展示了一個條件分布的例子。剛開始的時候,沒有觀察到任何訓練點,所以預測的均值保持在 0,標準差對每個測試點來說都是一樣的。把游標懸停在協方差矩陣上,你可以看到每個點對當前測試點的影響。只要還沒觀察到任何訓練點,只有相鄰的點對彼此有影響。

通過點擊可以激活訓練點,從而得到一個受到約束的分布。這個變化體現在協方差矩陣的內容里,並且會改變預測到的函數具有的均值和標準差。正如我們所料,在靠近訓練數據的區域,預測的不確定性很小,離得越遠,不確定性越大。




沒激活任何訓練數據的時候,圖中顯示的是一個高斯過程的先驗分布,它使用的是徑向基函數核。游標懸停在協方差矩陣上時,漸變色上的不透明度顯示了一個函數值對它的相鄰點的影響。當我們觀察到訓練數據的時候,這個分布會發生變化。可以通過點擊單個點激活它們。然後,高斯過程被約束,傾向於給那些與這些點相交的函數更高的概率。對訓練數據的最佳闡釋就蘊含在更新過的均值函數里。

在受到約束的協方差矩陣中,我們可以看到相鄰點之間的相關性會被訓練數據所影響。如果預測的點在訓練數據上,它和其他點就不存在相關性,所以,這個函數必須直接經過它。更遠的預測值也會受到訓練數據的影響,程度和它的距離相關。

結合不同的核函數

正如我們之前介紹的,高斯過程的強大在於它所選的核函數。這一點使得專家可以把某個領域的知識引入到這個過程中,使得高斯過程足夠靈活,足以捕捉訓練數據中的趨勢。比如,一個專家可以通過為徑向基函數核選取一個合適的帶寬,來控制結果中的函數的平滑度。

核函數的一大優勢是,它們可以被結合起來,形成一個更加專精的核函數。這使得某個領域的專家可以加入更多的信息,使預測更加精確。通常我們結合不同核函數的方法是把它們相乘。我們可以考慮一下兩個核函數的情況,比如說一個徑向基函數核 k_rbf 和一個周期核 k_per。我們是這樣把它們結合起來的:



在下圖(原圖為互動圖)中,原始的訓練數據呈上升趨勢並有周期性偏離。如果只用一個線性核,可能會得到這些點的一個普通線性回歸。乍一看,徑向基函數核可以準確地逼近這些點。但由於徑向基函數核是平穩的,在遠離觀察到的訓練數據的地方,它總是會回到均值μ= 0。這就使得預測特別早或者特別晚的時間點時,結果不太準確。只有通過結合幾個核函數,才能同時保持數據的周期特性和均值非零的趨勢。比如,這個方法可以用於分析天氣數據。



通過點擊複選框,我們可以把不同的核函數結合成一個新的高斯過程。只有結合了多個核函數,我們才可能捕捉到更複雜的訓練數據的特性。

結論


讀過本文以後,你應該對高斯過程有了一個整體的印象,更加了解它們是如何運作的。正如我們所見,高斯過程為回歸問題提供了一個靈活的框架,並且擁有一些拓展功能使它更加通用。如果要處理真實世界的數據,我們經常會發現測量值受到不確定性和誤差的影響。利用高斯過程可以定義一個核函數來擬合我們的數據,並為預測結果增加不確定性。比如,McHutchon 等人 [7] 對高斯過程進行了一個特殊的拓展,使其可以兼容包含噪音的輸入。

雖然我們大都在回歸問題的語境下討論高斯過程,它也可以用在其它的任務上,比如模型剝離和假設檢驗。通過比較不同核函數在數據集上的效果,某個領域的專家可以藉由恰當地結合核函數或是為其選擇參數,來嵌入額外的知識。由於在很多情況下我們無法擁有這樣的專家,人們也在研究如何使用深度學習 [8, 9] 從給定數據中學得專用的核函數。此外,也有多篇論文 [10, 11] 探討了貝葉斯推斷、高斯過程和深度學習之間的聯繫。

推薦閱讀


2019年跳槽BATJ,準備好了嗎?和一線大佬面對面!


資源 | 正則表達式的功法大全


春節假期十大AI事件,看看你都錯過了啥


GitHub不為人知的小秘密…讓你的工作更高效


畢業論文無從下手?一文幫你理清頭緒


Python可視化神器——pyecharts的超詳細使用指南!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |