Matrice de covariance mal conditionnée dans la régression GP pour l'optimisation bayésienne


12

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?


Vous pourriez envisager de former les entrées de la matrice de covariance, ainsi que de calculer ou de mettre à jour sa factorisation de Cholesky, avec une précision plus élevée, par exemple, une précision quadruple ou même plus. Mis à part les tracas, les calculs peuvent être plus lents. Il existe des modules complémentaires de précision arbitraire pour MATLAB. Je ne dis pas que c'est idéal, mais c'est peut-être une option. Je ne sais pas à quel point ils jouent avec gpml, mais si vous pouvez changer le code source gpml (fichiers m), vous pouvez peut-être le faire.
Mark L. Stone

Avez-vous essayé d'ajouter une petite gigue à la diagonale de la matrice de covariance?
Zen

@ MarkL.Stone Merci pour la suggestion. Malheureusement, j'ai besoin que le code de formation soit rapide, donc les chiffres de haute précision ne seront probablement pas un bon choix pour mon application.
lacerbi

2
Cette question est vraiment intéressante. Lorsque vous ajoutez l'effet de pépite à votre matrice de covaraince tel que , vous optimisez sigma selon vos probabilités, ou est-ce que donné. J'ai remarqué que l'optimisation de l'effet de pépite capture le bruit de mesure et aide le processus gaussienσ2Iσ
Wis

1
J'optimise généralement. Dans quelques cas, j'ai essayé de le marginaliser, mais je n'ai pas obtenu beaucoup d'amélioration par rapport à l'optimisation (je suppose que le postérieur était très étroit).
lacerbi

Réponses:


7

Une autre option consiste à faire la moyenne des points causant essentiellement - par exemple, si vous avez 1000 points et 50 problèmes, vous pouvez prendre l'approximation optimale de bas rang en utilisant les 950 premières valeurs / vecteurs propres. Cependant, ce n'est pas loin de supprimer les points de données proches les uns des autres, ce que vous avez dit de ne pas faire. Veuillez garder à l'esprit cependant que lorsque vous ajoutez de la gigue, vous réduisez les degrés de liberté - c'est-à-dire que chaque point influence moins votre prédiction, donc cela pourrait être pire que d'utiliser moins de points.

Une autre option (que je pense personnellement intéressante) est de combiner les deux points de manière plus intelligente. Vous pouvez par exemple prendre 2 points et les combiner en un seul, mais aussi les utiliser pour déterminer une approximation du gradient également. Pour inclure des informations sur le gradient, tout ce dont vous avez besoin depuis votre noyau est de trouver et . Les produits dérivés n'ont généralement pas de corrélation avec leur observation, vous ne rencontrez donc pas de problèmes de conditionnement et ne conservez pas les informations locales.dxk(x,x)dxdxk(x,x)

Éditer:

Sur la base des commentaires, j'ai pensé que j'élaborerais ce que je voulais dire en incluant des observations dérivées. Si nous utilisons un noyau gaussien (comme exemple),

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

ses dérivés sont,

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

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

Supposons maintenant que nous avons un point de données et un dérivé à que j'appellerai .{xi,yi;i=1,...,n}x1m1

Soit , puis nous utilisons un seul GP standard avec matrice de covariance comme,Y=[m1,y1,,yn]

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

Le reste du GP est le même que d'habitude.


Souhaitez-vous développer les détails de votre utilisation proposée des informations approximatives sur le gradient?
Mark L. Stone

@j Merci - J'ai pensé à faire une approximation de bas rang, je pourrais essayer (je l'ai évité jusqu'à présent car je pourrais avoir à réécrire de grandes parties du code). Concernant la combinaison de deux points en un, je l'avais proposé dans une question précédente , mais je ne pensais pas à obtenir des informations dérivées. En principe, cela semble net mais je ne sais pas comment je l'utiliserais car je n'aurais que quelques observations dérivées (correspondant aux points fusionnés), avec la charge d'ajouter un GP par dimension d'entrée.
lacerbi

@j Merci pour l'explication supplémentaire. Cela a l'air très bien en effet. Avez-vous des références pour cette approche (ou quelque chose d'assez similaire)?
lacerbi

2
Consultez la page 67 de la thèse de Mike Osborne ( robots.ox.ac.uk/~mosb/public/pdf/136/full_thesis.pdf ) - il présente des observations dérivées et intégrales. J'espère que ça aide :)
j__

4

Une solution que nous avons lancée au bureau consiste simplement à modifier les points problématiques. Cela peut prendre la forme d'une suppression directe ou de quelque chose de plus sophistiqué. Essentiellement, l'observation est que les points proches sont très redondants: en fait, tellement redondants qu'ils réduisent le rang de la matrice de covariance. De la même manière, un point contribue de toute façon peu d'informations au problème en question, donc supprimer l'un ou l'autre (ou faire autre chose, comme les faire la moyenne ou «rebondir» un point loin de l'autre à une distance minimale acceptable) pas vraiment beaucoup changer votre solution.

Je ne sais pas comment juger à quel moment les deux points deviennent "trop ​​proches". Cela pourrait peut-être être une option de réglage laissée à l'utilisateur.

(Oups! Après avoir posté cela, j'ai trouvé votre question ici qui fait avancer cette réponse vers une solution beaucoup plus élaborée. J'espère qu'en y associant à partir de ma réponse, je vais aider avec le référencement ...)


ceci est très utile, pouvez-vous s'il vous plaît également éclairer cela si possible.
GENIVI-LEARNER
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.