Недоброякісна коваріаційна матриця в регресії GP для байєсівської оптимізації


12

Передумови та проблеми

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

Загальновідомий факт, що коли два тренувальних введення занадто близькі у вхідному просторі, коваріаційна матриця може стати не позитивно визначеною (на цьому сайті є кілька питань). Як результат, розклад Холеського матриці коваріації, необхідний для різних обчислень GP, може вийти з ладу через помилку числення. Це траплялося зі мною в декількох випадках, коли виконував БО цільові функції, якими я користуюся, і я хотів би це виправити.

Запропоновані рішення

AFAIK, стандартним рішенням для полегшення поганого кондиціонування є додавання хребта або самородка до діагоналі коваріаційної матриці. Для регресії загальної практики це означає додавання (або збільшення, якщо вже є) спостережного шуму.

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

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

Питання

Я не думаю, що чисельні проблеми з Чолеским коефіцієнтом коваріаційних матриць GP є новою проблемою, але, на мій подив, я не міг знайти багато рішень поки що не збільшуючи шум або видаляючи точки, що знаходяться занадто близько один до одного. З іншого боку, це правда, що деякі мої функції досить погано поводяться, тому, можливо, моя ситуація не така типова.

Будь-яка пропозиція / посилання, які можуть бути корисні тут?


Ви можете вивчити формування записів коваріаційної матриці, а також обчислення або оновлення її коефіцієнта Чолеського з більш високою точністю, наприклад, квадроточність або навіть вище. Крім суєти, обчислення можуть бути на порядок повільнішими. Існують довільні точні додатки для MATLAB. Я не кажу, що це ідеально, але це може бути варіант. Я не знаю, наскільки добре вони грають з gpml, але якщо ви можете змінити вихідний код gpml (m файлів), можливо, ви можете це зробити.
Марк Л. Стоун

Ви намагалися додати невелику тремтіння до діагоналі матриці коваріації?
Дзен

@ MarkL.Stone Дякую за пропозицію. На жаль, мені потрібен тренувальний код, щоб він був швидким, тому високоточна цифра, ймовірно, не стане хорошим вибором для мого застосування.
lacerbi

2
Це питання справді цікаве. Коли ви додаєте ефект самородка до вашої матриці covaraince, такої як оптимізую сигму за вашою ймовірністю, або дається . Я помітив, що оптимізація саморобного ефекту фіксує шум вимірювання та допомагає йому гауссіанським процесомσσ2Яσ
Wis

1
Я зазвичай оптимізую. У кількох випадках я намагався маргіналізувати це, але оптимізація wrt поліпшення не встигла (я припускаю, що задній був дуже вузький).
lacerbi

Відповіді:


7

Іншим варіантом є по суті середнє значення очок, що викликають - наприклад, якщо у вас 1000 очок і 50 проблем, ви можете взяти оптимальне наближення низького рангу, використовуючи перші 950 власних значень / векторів. Однак, це не за горами видалення точок даних близько один до одного, що ви сказали, що не хочете робити. Будь ласка, майте на увазі, що якщо ви додаєте тремтіння, ви зменшуєте ступінь свободи - тобто кожна точка впливає на ваш прогноз менше, тому це може бути гірше, ніж використання менше очок.

Інший варіант (який я особисто вважаю охайним) - поєднати дві точки більш розумним чином. Наприклад, ви можете взяти 2 бали і об'єднати їх в одну, але також використовувати їх для визначення наближення для градієнта. Щоб включити інформацію про градієнт, все, що вам потрібно від вашого ядра, - це знайти та . Похідні зазвичай не співвідносяться зі своїми спостереженнями, тому ви не стикаєтеся з проблемами кондиціонування та зберігаєте місцеву інформацію.d x d x k ( x , x )гхк(х,х')гхгх'к(х,х')

Редагувати:

Грунтуючись на коментарях, я думав, що я би розробив те, що маю на увазі, включаючи похідні спостереження. Якщо ми використовуємо ядро ​​гаусса (як приклад),

кх,х'=к(х,х')=σдосвід(-(х-х')2л2)

його похідні,

кгх,х'=гк(х,х')гх=-2(х-х')л2σдосвід(-(х-х')2л2)

кгх,гх'=г2к(х,х')гхгх'=2л2-2(х-х')л4σдосвід(-(х-х')2л2)

{хi,уi;i=1,...,н}х1м1

Y=[м1,у1,,ун]

К=(кгх0,гх0кгх0,х0кгх0,хнкгх0,х0кх0,х0кх0,хнкгх0,хнкх0,хнкхн,хн)

Решта лікаря - така сама, як зазвичай.


Чи хотіли б ви розширити деталі щодо запропонованого вами використання приблизної інформації про градієнт?
Марк Л. Стоун

@j Дякую - я думав про те, щоб зробити наближення низького рангу, я б спробував це (уникнув цього, оскільки мені, можливо, доведеться переписати великі частини коду). Щодо поєднання двох моментів в одне, я пропонував це в попередньому запитанні , але не думав про отримання похідної інформації. В принципі, це звучить акуратно, але я не впевнений, як би його використовувати, оскільки я мав би лише кілька похідних спостережень (що відповідають об’єднаним точкам), з тягарем додавання одного ГП на вхідний вимір.
lacerbi

@j Дякую за додаткове пояснення. Це справді виглядає дуже акуратно. Чи є у вас посилання на такий підхід (або щось подібне досить)?
lacerbi

2
Перегляньте тезу Майка Осборна на сторінці 67 ( robots.ox.ac.uk/~mosb/public/pdf/136/full_thesis.pdf ) - він вводить похідні та інтегральні спостереження. Сподіваюсь, це допомагає :)
j__

4

Одне з варіантів, яке ми розігнали в офісі - це просто змінити проблемні моменти. Це може мати форму прямого видалення або щось більш складне. По суті, зауваження полягає в тому, що точки близького відставання є надлишковими: насправді настільки надмірними, що зменшують ранг коваріаційної матриці. З тієї ж точки, одна точка в будь-якому випадку надає мало інформації про проблему, тому видалення однієї чи іншої (або щось інше, наприклад, усереднення їх або "відскакування" однієї точки від іншої на деяку мінімально прийнятну відстань) не дуже змінити своє рішення настільки сильно.

Я не впевнений, як судити, в який момент два пункти стають "занадто близькими". Можливо, це може бути варіант налаштування, залишений користувачеві.

(На жаль! Після того, як я опублікував це, я знайшов тут ваше запитання, яке сприяє цій відповіді на набагато більш детальне рішення. Я сподіваюся, що, посилаючись на це з моєї відповіді, я допоможу з SEO ...)


це дуже корисно. Ви можете, будь ласка, також пролити трохи світла на це, якщо можливо.
GENIVI-НАУЧИТИ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.