ベイジアン最適化のためのGP回帰における不良条件共分散行列


12

背景と問題

回帰とその後のベイズ最適化(BO)にガウス過程(GP)を使用しています。回帰の場合、MATLABでgpmlパッケージを使用し、いくつかのカスタムメイドの変更を加えますが、問題は一般的です。

2つのトレーニング入力が入力空間内で近すぎる場合、共分散行列が非正定値になる可能性があることはよく知られています(このサイトにはいくつかの質問があります)。その結果、さまざまなGP計算に必要な共分散行列のコレスキー分解は、数値誤差により失敗する場合があります。これは、私が使用している目的関数でBOを実行したときにいくつかのケースで発生し、修正したいと思います。

提案されたソリューション

悪条件を緩和するための標準ソリューションであるAFAIKは、共分散行列の対角線にリッジまたはナゲットを追加することです。GP回帰の場合、これは観測ノイズの追加(または、既に存在する場合は増加)に相当します。

ここまでは順調ですね。コードを修正してgpmlを正確に推論し、コレスキー分解が失敗するたびに、ジョンD' Errico によるこのMATLABコードに触発されたフロベニウスノルムの最も近い対称正定(SPD)行列に共分散行列を修正しようとします。理論的根拠は、元のマトリックスへの介入を最小限にすることです。

この回避策は仕事をしますが、いくつかの機能でBOのパフォーマンスが大幅に低下することに気付きました-おそらくアルゴリズムが特定の領域にズームインする必要があるときはいつでも(たとえば、最小に近づくか、長さのスケールのため問題の不均一に小さくなります)。2つの入力ポイントが近づきすぎるとノイズが効果的に増加するため、この動作は理にかなっていますが、もちろん理想的ではありません。または、問題のあるポイントを削除することもできますが、繰り返します、入力ポイントを近づける必要がある場合があります。

質問

GPの共分散行列のコレスキー因数分解に関する数値的な問題は新しい問題ではないと思いますが、驚いたことに、ノイズを増やしたり、互いに近すぎる点を削除したりすることを除けば、これまでのところ多くの解決策を見つけることができませんでした。一方で、私の機能のいくつかは非常に悪い振る舞いをしているので、おそらく私の状況はそれほど典型的ではありません。

ここで役立つ可能性のある提案/参照はありますか?


共分散行列のエントリの作成、およびそのコレスキー分解の計算または更新を、たとえば4倍精度などのより高い精度で検討する場合があります。面倒なことは別として、計算は桁違いに遅くなる場合があります。MATLABには、任意の精度のアドオンがあります。これは理想的とは言いませんが、オプションかもしれません。それらがgpmlでどれだけうまく機能するかはわかりませんが、gpmlのソースコード(mファイル)を変更できれば、おそらくそれを行うことができます。
マークL.ストーン

共分散行列の対角線に小さなジッタを追加しようとしましたか?

@ MarkL.Stone提案をありがとう。残念ながら、トレーニングコードは高速である必要があるため、高精度の数値はおそらくアプリケーションに適していません。
lacerbi

2
この質問は本当に興味深いです。以下のようなあなたのcovaraince行列にナゲット効果を追加する場合は、あなたの可能性でシグマを最適化する、またはされませんσ与えられました。ナゲット効果を最適化すると、測定ノイズが捕捉され、ガウス過程が助けられることに気づきましたσ2Iσ
Wis

1
私は通常最適化します。いくつかのケースで、私はそれを無視しようとしましたが、最適化によって改善はあまり得られませんでした(後部は非常に狭いと思います)。
-lacerbi

回答:


7

別のオプションは、基本的に原因となるポイントを平均化することです。たとえば、1000個のポイントがあり、50個の問題がある場合、最初の950の固有値/ベクトルを使用して最適な低ランク近似を取得できます。ただし、これは、そうしないと言ったデータポイントを近くに削除することからそれほど遠くありません。ただし、ジッタを追加すると、自由度が低下することに注意してください。つまり、各ポイントは予測への影響が少ないため、使用するポイントが少ないほど悪化する可能性があります。

dxk(x,x)dxdxk(x,x)

編集:

コメントに基づいて、微分観測を含めることで私が意味することを詳しく説明すると思いました。(例として)ガウスカーネルを使用する場合、

kx,x=k(x,x)=σexp((xx)2l2)

その派生物は、

kdx,x=dk(x,x)dx=2(xx)l2σexp((xx)2l2

kdx,dx=d2k(x,x)dxdx=2l22(xx)l4σexp((xx)2l2)

{xi,yi;i=1,...,n}x1m1

Y=[m1,y1,,yn]

K=(kdx0,dx0kdx0,x0kdx0,xnkdx0,x0kx0,x0kx0,xnkdx0,xnkx0,xnkxn,xn)

GPの残りの部分は通常と同じです。


近似勾配情報の提案された使用法の詳細を拡大しますか?
マークL.ストーン

@jありがとう-私は低ランクの近似を行うことを考えました、それを試してみるかもしれません(コードの大部分を書き直さなければならないかもしれないので、今のところそれを避けました)。2つのポイントを1つにまとめることに関しては、前の質問で提案しましたが、派生情報を取得することは考えませんでした。原則としてそれはきれいに聞こえますが、入力ディメンションごとに1つのGPを追加する負担で、少数の微分観測(マージされたポイントに対応する)しか持たないため、どのように使用するのかわかりません。
-lacerbi

@j追加の説明をありがとう。これは確かに非常にきれいに見えます。このアプローチの参考文献はありますか(または同様の何か)?
lacerbi

2
Mike Osborneの論文ページ67(robots.ox.ac.uk/~mosb/public/pdf/136/full_thesis.pdf)をご覧ください-彼は微分および積分観測を紹介しています。それが役立つことを願っています:)
j__

4

私たちがオフィスで始めた解決策の1つは、面倒なポイントを変更することです。これは、まっすぐな削除またはより洗練された何かの形をとることができます。本質的に、観測は、近接点が非常に冗長であるということです。実際、非常に冗長であるため、共分散行列のランクが低下します。同様に、1つのポイントは手元の問題にほとんど情報を提供しないので、どちらかを削除する(またはそれらを平均化するか、あるポイントを他のポイントから最小バウンド距離まで「バウンス」するなど)ソリューションをそれほど大きく変えるわけではありません。

どの時点で2つのポイントが「近すぎる」かを判断する方法がわかりません。おそらく、これはユーザーに残されたチューニングオプションかもしれません。

(おっと!これを投稿した後、私は見つけました ここあなたの質問この答えをより精巧なソリューションに進めます。私の答えからリンクすることで、SEOを支援できることを願っています...)


これは非常に役立ちます。可能であれば、これに光を当ててください。
GENIVI-LEARNER
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.