Плохо обусловленная ковариационная матрица в регрессии ГП для байесовской оптимизации

12

Предпосылки и проблемы

Я использую Гауссовские процессы (GP) для регрессии и последующей байесовской оптимизации (BO). Для регрессии я использую пакет gpml для MATLAB с несколькими пользовательскими модификациями, но проблема общая.

Общеизвестно, что когда два входных тренинга находятся слишком близко к входному пространству, ковариационная матрица может стать неположительной (на этом сайте есть несколько вопросов). В результате разложение по Холески ковариационной матрицы, необходимое для различных вычислений ГП, может потерпеть неудачу из-за числовой ошибки. Это случилось со мной в нескольких случаях при выполнении БО с целевыми функциями, которые я использую, и я бы хотел это исправить.

Предлагаемые решения

AFAIK, стандартное решение для устранения плохой обусловленности заключается в добавлении гребня или самородка к диагонали ковариационной матрицы. Для регрессии GP это означает добавление (или увеличение, если оно уже присутствует) шума наблюдения.

Все идет нормально. Я изменил код для точного вывода gpml так, чтобы всякий раз, когда разложение Холецкого не удавалось , я пытаюсь зафиксировать ковариационную матрицу в ближайшей симметричной положительно определенной матрице (SPD) в норме Фробениуса, вдохновленной этим кодом MATLAB Джона д'Эррико. Обоснование состоит в том, чтобы минимизировать вмешательство в исходную матрицу.

Этот обходной путь делает свою работу, но я заметил, что производительность BO существенно снизилась для некоторых функций - возможно, всякий раз, когда алгоритму потребуется увеличить масштаб в некоторой области (например, потому что он приближается к минимуму, или потому что длина масштабируется проблемы становятся неравномерно малыми). Такое поведение имеет смысл, поскольку я эффективно увеличиваю шум, когда две входные точки подходят слишком близко, но, конечно, это не идеально. Кроме того, я мог бы просто удалить проблемные точки, но, опять же, иногда мне нужно, чтобы входные точки были близки.

Вопрос

Я не думаю, что численные проблемы, связанные с факторизацией Холески ковариационных матриц ГП, являются новой проблемой, но, к моему удивлению, я не смог найти много решений до сих пор, кроме увеличения шума или удаления точек, которые находятся слишком близко друг к другу. С другой стороны, это правда, что некоторые из моих функций ведут себя довольно плохо, поэтому, возможно, моя ситуация не столь типична.

Любое предложение / ссылка, которая может быть полезна здесь?

lacerbi
источник
Вы можете изучить формирование элементов ковариационной матрицы, а также вычислить или обновить ее факторизацию Холецкого, с более высокой точностью, например, с четверной точностью или даже выше. Помимо хлопот, вычисления могут быть на несколько порядков медленнее. Существуют надстройки произвольной точности для MATLAB. Я не говорю, что это идеально, но это может быть вариант. Я не знаю, насколько хорошо они играют с gpml, но если вы можете изменить исходный код gpml (m файлов), возможно, вы сможете это сделать.
Марк Л. Стоун
Вы пытались добавить небольшой джиттер к диагонали ковариационной матрицы?
Дзен
@ MarkL.Stone Спасибо за предложение. К сожалению, мне нужно, чтобы обучающий код был быстрым, поэтому высокоточные числа, вероятно, не будут хорошим выбором для моего приложения.
Lacerbi
2
Этот вопрос действительно интересный. При добавлении эффекта самородка к вашей матрице ковариации, такой как оптимизирую сигма по вашей вероятности или задана . Я заметил , что оптимизация самородка эффект захватывает измерение шума и помощи , которую он gausssian процессσσ2Iσ
штат Висконсин
1
Я обычно оптимизирую. В некоторых случаях я пытался обойти это, но не получил значительных улучшений по сравнению с оптимизацией (я полагаю, что апостериор был очень узким).
Lacerbi

Ответы:

7

Другой вариант - по существу усреднить баллы, вызывающие - например, если у вас есть 1000 баллов и 50 причинных проблем, вы можете выбрать оптимальное приближение низкого ранга, используя первые 950 собственных значений / векторов. Тем не менее, это не за горами удаления точек данных близко друг к другу, что вы, скорее всего, не сделаете. Имейте в виду, однако, что, добавляя джиттер, вы уменьшаете степени свободы - т.е. каждая точка меньше влияет на ваш прогноз, поэтому это может быть хуже, чем использование меньшего количества точек.

dxk(x,x)dxdxk(x,x)

Редактировать:

Основываясь на комментариях, я подумал, что уточню, что я имел в виду, включая производные наблюдения. Если мы используем ядро ​​Гаусса (в качестве примера),

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

его производные,

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

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

{xi,yi;i=1,...,n}x1m1

Y=[m1,y1,,yn]

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

В остальном ГП такой же, как обычно.

j__
источник
Не могли бы вы расширить детали вашего предполагаемого использования приблизительной информации о градиенте?
Марк Л. Стоун
@j Спасибо - я думал о приближении низкого ранга, я мог бы попробовать его (пока избегал, поскольку мне, возможно, пришлось переписывать большие части кода). Что касается объединения двух пунктов в одно, я предложил это в предыдущем вопросе , но я не думал о получении производной информации. В принципе, это звучит аккуратно, но я не уверен, как бы я его использовал, поскольку у меня было бы только несколько производных наблюдений (соответствующих объединенным точкам) с бременем добавления одного GP на входное измерение.
Lacerbi
@j Спасибо за дополнительное объяснение. Это выглядит очень аккуратно. У вас есть ссылки на этот подход (или что-то похожее)?
Lacerbi
2
Проверьте тезис Майка Осборна на странице 67 ( robots.ox.ac.uk/~mosb/public/pdf/136/full_thesis.pdf ) - он вводит производные и интегральные наблюдения. Надеюсь, это поможет :)
J__
4

Одно из решений, которое мы нашли в офисе, - просто изменить проблемные моменты. Это может принять форму прямого удаления или чего-то более сложного. По сути, наблюдение состоит в том, что точки сближения сильно избыточны: фактически настолько избыточны, что они уменьшают ранг ковариационной матрицы. Точно так же одна точка в любом случае вносит мало информации в имеющуюся проблему, поэтому удаление одной или другой (или выполнение чего-то другого, например, усреднение их или «отскакивание» одной точки от другой на некоторое минимально допустимое расстояние) не так уж сильно изменить ваше решение.

Я не уверен, как судить, в какой момент эти две точки становятся «слишком близкими». Возможно, это может быть опцией настройки, оставленной пользователю.

(Ой! После того, как я опубликовал это, я нашел ваш вопрос здесь, который продвигает этот ответ к гораздо более сложному решению. Я надеюсь, что, ссылаясь на него из моего ответа, я буду помогать с SEO ...)

Sycorax говорит восстановить Монику
источник
это очень полезно, пожалуйста, также, если возможно, пролить свет на это .
GENIVI-LEARNER