Contexte et problème
J'utilise des processus gaussiens (GP) pour la régression et l'optimisation bayésienne subséquente (BO). Pour la régression, j'utilise le paquet gpml pour MATLAB avec plusieurs modifications personnalisées, mais le problème est général.
C'est un fait bien connu que lorsque deux entrées d'apprentissage sont trop proches dans l'espace d'entrée, la matrice de covariance peut devenir définie non positive (il y a plusieurs questions à ce sujet sur ce site). Par conséquent, la décomposition de Cholesky de la matrice de covariance, nécessaire pour divers calculs GP, peut échouer en raison d'une erreur numérique. Cela m'est arrivé dans plusieurs cas lors de l'exécution de BO avec les fonctions objectives que j'utilise, et j'aimerais y remédier.
Solutions proposées
AFAIK, la solution standard pour atténuer les mauvais conditionnements consiste à ajouter une crête ou une pépite à la diagonale de la matrice de covariance. Pour la régression GP, cela revient à ajouter (ou à augmenter, s'il est déjà présent) du bruit d'observation.
Jusqu'ici tout va bien. J'ai modifié le code pour une inférence exacte de gpml afin que chaque fois que la décomposition de Cholesky échoue, j'essaie de fixer la matrice de covariance à la matrice symétrique positive définie (SPD) la plus proche dans la norme Frobenius, inspirée par ce code MATLAB de John d'Errico. La justification est de minimiser l'intervention sur la matrice d'origine.
Cette solution de contournement fait le travail, mais j'ai remarqué que les performances de BO diminuaient considérablement pour certaines fonctions - peut-être chaque fois que l'algorithme aurait besoin de zoomer dans une certaine zone (par exemple, parce qu'il se rapproche du minimum ou parce que les échelles de longueur du problème deviennent non uniformément petits). Ce comportement est logique car j'augmente effectivement le bruit chaque fois que deux points d'entrée sont trop proches, mais bien sûr ce n'est pas idéal. Alternativement, je pourrais simplement supprimer les points problématiques, mais encore une fois, j'ai parfois besoin que les points d'entrée soient proches.
Question
Je ne pense pas que les problèmes numériques avec la factorisation de Cholesky des matrices de covariance de GP soient un problème nouveau, mais à ma grande surprise, je n'ai pas trouvé de solutions jusqu'à présent, à part augmenter le bruit ou supprimer des points trop proches les uns des autres. D'un autre côté, il est vrai que certaines de mes fonctions se comportent assez mal, donc peut-être que ma situation n'est pas si typique.
Toute suggestion / référence qui pourrait être utile ici?