用於貝葉斯優化的 GP 回歸中的病態協方差矩陣
背景和問題
我正在使用高斯過程 (GP) 進行回歸和隨後的貝葉斯優化 (BO)。對於回歸,我使用 MATLAB 的gpml包進行了一些定制修改,但問題很普遍。
眾所周知的事實是,當兩個訓練輸入在輸入空間中過於接近時,協方差矩陣可能會變為非正定(本網站上有幾個關於它的問題)。因此,各種 GP 計算所需的協方差矩陣的 Cholesky 分解可能由於數值錯誤而失敗。當我使用我正在使用的目標函數執行 BO 時,這在我身上發生了幾種情況,我想修復它。
建議的解決方案
AFAIK,緩解病態的標準解決方案是在協方差矩陣的對角線上添加一個脊或金塊。對於 GP 回歸,這相當於增加(或增加,如果已經存在)觀察噪聲。
到現在為止還挺好。我修改了gpml精確推斷的代碼,以便每當 Cholesky 分解失敗時,我嘗試將協方差矩陣修復為 Frobenius 範數中最接近的對稱正定 (SPD) 矩陣,這受到 John d’Errico的MATLAB 代碼的啟發。基本原理是盡量減少對原始矩陣的干預。
這種解決方法可以解決問題,但我注意到 BO 的性能在某些功能上大大降低了——可能每當算法需要在某個區域放大時(例如,因為它越來越接近最小值,或者因為長度縮放的問題變得不均勻地小)。這種行為是有道理的,因為每當兩個輸入點靠得太近時,我都會有效地增加噪音,但當然這並不理想。或者,我可以刪除有問題的點,但同樣,有時我需要關閉輸入點。
問題
我不認為 GP 協方差矩陣的 Cholesky 因式分解的數值問題是一個新問題,但令我驚訝的是,除了增加噪聲或刪除彼此太接近的點之外,到目前為止我找不到很多解決方案。另一方面,我的某些功能確實表現得很糟糕,所以也許我的情況並不那麼典型。
任何可能在這裡有用的建議/參考?
另一種選擇是從本質上對導致的點進行平均 - 例如,如果您有 1000 個點和 50 個導致問題,則可以使用前 950 個特徵值/向量進行最佳低秩近似。但是,這離刪除您說您不想這樣做的靠近的數據點不遠了。請記住,當您添加抖動時,您會降低自由度 - 即每個點對您的預測影響較小,因此這可能比使用較少點更糟糕。
另一種選擇(我個人認為很簡潔)是以更聰明的方式將這兩點結合起來。例如,您可以取 2 個點並將它們組合成一個點,但也可以使用它們來確定梯度的近似值。要包含梯度信息,您需要從內核中找到和. 導數通常與他們的觀察沒有相關性,因此您不會遇到條件問題並保留本地信息。
編輯:
根據評論,我想我會詳細說明包括衍生觀察的含義。如果我們使用高斯核(例如),
它的衍生物是,
現在,讓我們假設我們有一些數據點和一個衍生物我會打電話給.
讓,然後我們使用具有協方差矩陣的單個標準 GP,
GP的其餘部分與往常一樣。