Antecedentes y problema
Estoy usando procesos gaussianos (GP) para la regresión y la posterior optimización bayesiana (BO). Para la regresión, uso el paquete gpml para MATLAB con varias modificaciones personalizadas, pero el problema es general.
Es un hecho bien conocido que cuando dos entradas de entrenamiento están demasiado cerca en el espacio de entrada, la matriz de covarianza puede volverse no positiva definida (hay varias preguntas al respecto en este sitio). Como resultado, la descomposición de Cholesky de la matriz de covarianza, necesaria para varios cálculos GP, puede fallar debido a un error numérico. Esto me sucedió en varios casos al realizar BO con las funciones objetivas que estoy usando, y me gustaría solucionarlo.
Soluciones propuestas
AFAIK, la solución estándar para aliviar el mal acondicionamiento es agregar una cresta o pepita a la diagonal de la matriz de covarianza. Para la regresión GP, esto equivale a agregar (o aumentar, si ya está presente) ruido de observación.
Hasta aquí todo bien. Modifiqué el código para la inferencia exacta de gpml, de modo que cada vez que falla la descomposición de Cholesky, trato de arreglar la matriz de covarianza a la matriz simétrica positiva definida (SPD) más cercana en la norma Frobenius, inspirada en este código MATLAB de John d'Errico. La razón es minimizar la intervención en la matriz original.
Esta solución hace el trabajo, pero noté que el rendimiento de BO se redujo sustancialmente para algunas funciones, posiblemente cada vez que el algoritmo necesitaría acercarse en alguna área (por ejemplo, porque se está acercando al mínimo o porque la longitud se escala del problema se vuelven no uniformemente pequeños). Este comportamiento tiene sentido ya que estoy aumentando efectivamente el ruido cada vez que dos puntos de entrada se acercan demasiado, pero por supuesto no es lo ideal. Alternativamente, podría eliminar puntos problemáticos, pero nuevamente, a veces necesito que los puntos de entrada estén cerca.
Pregunta
No creo que los problemas numéricos con la factorización de Cholesky de las matrices de covarianza de GP sean un problema nuevo, pero para mi sorpresa no pude encontrar muchas soluciones hasta ahora, aparte de aumentar el ruido o eliminar puntos que están demasiado cerca el uno del otro. Por otro lado, es cierto que algunas de mis funciones se comportan bastante mal, por lo que tal vez mi situación no sea tan típica.
¿Alguna sugerencia / referencia que pueda ser útil aquí?