背景与问题
我正在使用高斯过程(GP)进行回归和随后的贝叶斯优化(BO)。为了进行回归,我使用了针对MATLAB 的gpml包,并进行了一些自定义修改,但是问题很普遍。
众所周知的事实是,当两个训练输入在输入空间中太近时,协方差矩阵可能变为非正定的(此站点上有几个问题)。结果,由于数值误差,各种GP计算所需的协方差矩阵的Cholesky分解可能会失败。在使用我使用的目标函数执行BO时,在某些情况下这发生在我身上,我想对其进行修复。
拟议的解决方案
AFAIK,减轻不适的标准解决方案是在协方差矩阵的对角线上添加一个脊或块。对于GP回归,这等于增加(或增加,如果已经存在)观察噪声。
到现在为止还挺好。我修改了gpml的精确推论代码,以便每当Cholesky分解失败时,我都会尝试将协方差矩阵固定为Frobenius范数中最接近的对称正定(SPD)矩阵,这是受约翰d'Errico的MATLAB代码启发的。这样做的理由是要尽量减少对原始矩阵的干预。
这个变通办法可以完成工作,但是我注意到对于某些功能,BO的性能大大降低了-可能是每当算法需要放大某些区域时(例如,因为算法越来越接近最小值,或者因为长度缩放)问题变得越来越小)。这种行为是有道理的,因为每当两个输入点距离太近时,我都会有效地增加噪声,但这当然不是理想的选择。或者,我可以删除有问题的点,但是,有时候,我需要输入点很接近。
题
我认为GP协方差矩阵的Cholesky因式分解的数值问题不是一个新问题,但令我惊讶的是,除了增加噪声或消除彼此之间太近的点外,到目前为止,我找不到许多解决方案。另一方面,我的某些功能确实表现得很差,所以也许我的情况不是那么典型。
有什么建议/参考可以在这里有用吗?