Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

14 votos

Matriz de covarianza mal acondicionado en regresión de GP para la optimización de Bayesiano

Antecedentes y el problema

Estoy usando Gauss Procesos (GP) para la regresión y la posterior Bayesiana de optimización (BO). Para la regresión yo uso la gpml paquete de MATLAB con varios personalizado-hecho modificaciones, pero el problema es general.

Es un hecho bien conocido que cuando dos entradas de formación están demasiado cerca en el espacio de entrada, la matriz de covarianza puede convertirse en no-positiva definida (hay varias preguntas al respecto en este sitio). Como resultado, la descomposición de Cholesky de la matriz de covarianza, necesarios para los diferentes GP cálculos, puede fallar debido a un error numérico. Esto me pasó a mí, en varios casos, cuando se realiza BO con las funciones objetivo que estoy usando, y me gustaría solucionarlo.

Soluciones propuestas

AFAIK, la solución estándar para aliviar el mal acondicionado para agregar una arista o pepita a la diagonal de la matriz de covarianza. Para el GP de regresión, este asciende a la suma de (o en aumento, si ya existía) observación de ruido.

Hasta ahora tan bueno. He modificado el código exacto de la inferencia de la gpml de manera que siempre que la descomposición de Cholesky falla, yo trate de arreglar la matriz de covarianza para el más cercano simétrica positiva definida (SPD) de la matriz en la norma de Frobenius, inspirado por este código de MATLAB por Juan d'Errico. La razón de ser es la de minimizar la intervención en la matriz original.

Esta solución hace el trabajo, pero me di cuenta de que el rendimiento de BO reducido sustancialmente para algunas funciones, posiblemente cada vez que el algoritmo necesita para ampliar el zoom en algunas áreas (por ejemplo, porque se está acercando a la mínima, o porque la longitud de las escalas del problema se convierten en no-uniformemente pequeñas). Este comportamiento tiene sentido, ya que estoy aumentando efectivamente el ruido siempre dos puntos de entrada acercarse demasiado, pero por supuesto no es lo ideal. Alternativamente, podría quitar puntos problemáticos, pero, de nuevo, a veces me necesita los puntos de entrada a estar cerca.

Pregunta

No creo que numérica de problemas con la factorización de Cholesky de GP de las matrices de covarianza es una novela problema, pero para mi sorpresa no pude encontrar muchas soluciones hasta el momento, aparte de aumentar el ruido o la eliminación de puntos que están demasiado cerca el uno del otro. Por otro lado, es cierto que algunos de mis funciones son bastante maleducado, así que tal vez mi situación no es tan típico.

Cualquier sugerencia/referencia que podría ser útil aquí?

8voto

getmizanur Puntos 290

Otra opción es esencialmente el promedio de los puntos que causan, por ejemplo, si usted tiene 1000 puntos y 50 causar problemas, usted puede tomar el óptimo rango bajo aproximación usando la primera 950 valores propios y vectores. Sin embargo, esto no está muy lejos de la eliminación de los puntos de datos cerca juntos que dice usted que preferiría no hacer. Por favor, tenga en cuenta que a medida que agrega la fluctuación de reducir los grados de libertad - es decir, cada punto influye en su predicción de menos, así que este podría ser peor que con menos puntos.

Otra opción (que yo personalmente creo que es cuidada) es combinar los dos puntos en un desaires forma más inteligente. Usted podría, por ejemplo, tomar 2 puntos y combinarlos en uno, pero también las utilizan para determinar una aproximación del gradiente. Para incluir gradiente de toda la información que necesitas de tu kernel es encontrar a dxk(x,x)dxdxk(x,x). Derivados por lo general no tienen correlación con su observación para que no se quede en el acondicionamiento de los problemas y retener la información local.

Editar:

Basado en los comentarios pensé que iba a elaborar lo que quiere decir incluyendo los derivados de las observaciones. Si se utiliza un núcleo gaussiano (como un ejemplo),

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

sus derivados son,

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

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

Ahora, supongamos que tenemos algunos datos de punto de {xi,yi;i=1,...,n} y de un derivado enx1, lo que voy a llamar a m1.

Deje Y=[m1,y1,,yn], luego se utiliza un único estándar GP con matriz de covarianza como,

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

El resto de la GP es el mismo que de costumbre.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X