Hintergrund und Problem
Ich verwende Gaußsche Prozesse (GP) zur Regression und anschließenden Bayes'schen Optimierung (BO). Für die Regression verwende ich das gpml- Paket für MATLAB mit mehreren benutzerdefinierten Modifikationen, aber das Problem ist allgemein.
Es ist eine bekannte Tatsache, dass, wenn zwei Trainingseingaben im Eingaberaum zu nahe beieinander liegen, die Kovarianzmatrix möglicherweise nicht positiv eindeutig wird (auf dieser Site gibt es mehrere Fragen dazu). Infolgedessen kann die Cholesky-Zerlegung der Kovarianzmatrix, die für verschiedene GP-Berechnungen erforderlich ist, aufgrund eines numerischen Fehlers fehlschlagen. Dies ist mir in mehreren Fällen passiert, als ich BO mit den von mir verwendeten Zielfunktionen ausführte, und ich möchte es beheben.
Vorgeschlagene Lösungen
AFAIK, die Standardlösung zur Linderung von Fehlkonditionierungen, besteht darin, der Diagonale der Kovarianzmatrix eine Kante oder ein Nugget hinzuzufügen. Für die GP-Regression bedeutet dies das Hinzufügen (oder Erhöhen, falls bereits vorhanden) von Beobachtungsrauschen.
So weit, ist es gut. Ich habe den Code für die exakte Inferenz von gpml so modifiziert , dass ich bei jedem Fehlschlagen der Cholesky-Zerlegung versuche, die Kovarianzmatrix auf die nächste symmetrische positive definite (SPD) -Matrix in der Frobenius-Norm zu fixieren, inspiriert von diesem MATLAB-Code von John d'Errico. Das Grundprinzip besteht darin, Eingriffe in die ursprüngliche Matrix so gering wie möglich zu halten.
Diese Problemumgehung macht den Job, aber ich habe festgestellt, dass die Leistung von BO für einige Funktionen erheblich reduziert ist - möglicherweise immer dann, wenn der Algorithmus in einen Bereich hineinzoomen muss (z. B. weil er sich dem Minimum nähert oder weil die Länge skaliert des Problems werden ungleichmäßig klein). Dieses Verhalten ist sinnvoll, da ich das Rauschen effektiv erhöhe, wenn zwei Eingangspunkte zu nahe kommen, aber es ist natürlich nicht ideal. Alternativ könnte ich auch nur problematische Punkte entfernen, aber manchmal müssen die Eingabepunkte nahe beieinander liegen.
Frage
Ich denke nicht, dass numerische Probleme mit der Cholesky-Faktorisierung der Kovarianzmatrizen von GP ein neues Problem sind, aber zu meiner Überraschung konnte ich bis jetzt nicht viele Lösungen finden, abgesehen davon, das Rauschen zu erhöhen oder Punkte zu entfernen, die zu nahe beieinander liegen. Andererseits ist es wahr, dass sich einige meiner Funktionen ziemlich schlecht verhalten, so dass meine Situation vielleicht nicht so typisch ist.
Irgendwelche Vorschläge / Verweise, die hier nützlich sein könnten?