Предпосылки и проблемы
Я использую Гауссовские процессы (GP) для регрессии и последующей байесовской оптимизации (BO). Для регрессии я использую пакет gpml для MATLAB с несколькими пользовательскими модификациями, но проблема общая.
Общеизвестно, что когда два входных тренинга находятся слишком близко к входному пространству, ковариационная матрица может стать неположительной (на этом сайте есть несколько вопросов). В результате разложение по Холески ковариационной матрицы, необходимое для различных вычислений ГП, может потерпеть неудачу из-за числовой ошибки. Это случилось со мной в нескольких случаях при выполнении БО с целевыми функциями, которые я использую, и я бы хотел это исправить.
Предлагаемые решения
AFAIK, стандартное решение для устранения плохой обусловленности заключается в добавлении гребня или самородка к диагонали ковариационной матрицы. Для регрессии GP это означает добавление (или увеличение, если оно уже присутствует) шума наблюдения.
Все идет нормально. Я изменил код для точного вывода gpml так, чтобы всякий раз, когда разложение Холецкого не удавалось , я пытаюсь зафиксировать ковариационную матрицу в ближайшей симметричной положительно определенной матрице (SPD) в норме Фробениуса, вдохновленной этим кодом MATLAB Джона д'Эррико. Обоснование состоит в том, чтобы минимизировать вмешательство в исходную матрицу.
Этот обходной путь делает свою работу, но я заметил, что производительность BO существенно снизилась для некоторых функций - возможно, всякий раз, когда алгоритму потребуется увеличить масштаб в некоторой области (например, потому что он приближается к минимуму, или потому что длина масштабируется проблемы становятся неравномерно малыми). Такое поведение имеет смысл, поскольку я эффективно увеличиваю шум, когда две входные точки подходят слишком близко, но, конечно, это не идеально. Кроме того, я мог бы просто удалить проблемные точки, но, опять же, иногда мне нужно, чтобы входные точки были близки.
Вопрос
Я не думаю, что численные проблемы, связанные с факторизацией Холески ковариационных матриц ГП, являются новой проблемой, но, к моему удивлению, я не смог найти много решений до сих пор, кроме увеличения шума или удаления точек, которые находятся слишком близко друг к другу. С другой стороны, это правда, что некоторые из моих функций ведут себя довольно плохо, поэтому, возможно, моя ситуация не столь типична.
Любое предложение / ссылка, которая может быть полезна здесь?