Чи існує стандартна методика налагодження програм MCMC?


11

Налагодження програм MCMC, як відомо, важко. Складність виникає через кілька питань, серед яких є:

(а) Циклічність алгоритму

Ітеративно ми намалюємо параметри, що обумовлюються всіма іншими параметрами. Таким чином, якщо реалізація не працює належним чином, важко виділити помилку, оскільки проблема може бути в будь-якому місці ітеративного пробника.

(b) Правильна відповідь не обов'язково відома.

У нас немає способу сказати, чи досягли ми зближення. Певною мірою це можна пом'якшити, перевіривши код на імітованих даних.

У світлі вищезазначених питань мені було цікаво, чи існує стандартна методика, яка може бути використана для налагодження програм MCMC.

Редагувати

Я хотів поділитися підходом, який використовую для налагодження власних програм. Я, звичайно, роблю все те, про що згадував PeterR. Окрім цих, я виконую наступні тести, використовуючи імітовані дані:

  1. Почніть всі параметри з істинних значень і подивіться, чи відібраний у вибірці занадто далеко від справжнього значення.

  2. У мого ітеративного пробовідбірника є прапори для кожного параметра, який визначає, чи я малюю цей параметр в ітераційному пробовідбірнику. Наприклад, якщо для прапора 'gen_param1' встановлено значення true, я малюю 'param1' з його повного умовного в ітеративному пробовідбірнику. Якщо для цього встановлено значення false, то парам1 встановлено його справжнє значення.

Як тільки я закінчую писати пробник, я тестую програму, використовуючи наступний рецепт:

  • Встановіть прапор генерації для одного параметра в true, а в іншому - false та оцініть збіжність відносно істинного значення.
  • Встановіть прапор генерації для іншого параметра спільно з першим і знову оцініть конвергенцію.

Наведені вище кроки мені неймовірно корисні.

Відповіді:


10

Стандартна практика програмування:

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

Бажаю вам удачі та багато кави!


3

У мене тут є депресивний і не дуже специфічний анекдот. Я провів деякий час як співробітник статистичного дослідника МТ. Якщо ви хочете побачити справді велику, складну модель, не дивіться далі.

Він влаштовував мене через буткемп NLP для власної розваги. Я, як правило, такий програміст, який живе і вмирає за допомогою тестування блоку та налагоджувача. Як молодий чоловік в Symbolics, мене вразив афоризм: "програмування налагоджує порожній редакторний буфер". (Начебто тренування моделі перцептрона.)

Отже, я запитав його: "як ви тестуєте та налагоджуєте цей матеріал". Він відповів: "Ви вперше все зрозумієте. Ви продумаєте це (у його випадку, часто на папері) дуже обережно, і це дуже ретельно кодуєте. Тому що, коли ви помилитесь, шанси на усунення проблеми є дуже струнка ».


Я чув цей анекдот і раніше (може, теж від вас?). Це потрапило додому для мене, і з першого разу почувши це, воно справдилося неодноразово (тобто труднощі вирішення проблеми).
redmoskito

3

Гарні поради у відповіді PeterR; Я не маю жодних подальших порад щодо фактичної налагодження, але я виявив дуже корисну процедуру для тестування, якщо у вашому коді може бути помилка. Це описано в цій роботі:

http://pubs.amstat.org/doi/abs/10.1198/016214504000001132

По суті, ідея полягає в тому, щоб два моделювання: одне було вашим MCMC для виведення (імовірно) параметрів вашої моделі. Другий тренажер просто відбирає параметри з попереднього. Вони генерують дані за параметрами обох тренажерів та обчислюють тестову статистику, порівнюючи спільні розподіли параметрів та даних. Якщо код MCMC правильно відбирає параметри з задньої частини, то тестова статистика матиме розподіл N (0,1). Код для розрахунку статистики тесту доступний.


Пов'язаний підхід можна знайти у Cook et al. (2006; stat.columbia.edu/~gelman/research/publish/… ). Я два рази використовував підхід Кука та ін., І мене вразили результати. Я не використовував підходу Geweke, але, за словами Кука та ін., "Підхід Geweke має перевагу в тому, що потрібно виконати лише одну реплікацію ... Недоліком є ​​те, що він вимагає зміни програмного забезпечення для тестування". Вони також кажуть, що підхід Geweke вимагає пріорів з обмеженою дисперсією, тоді як їхній спосіб - ні.
jmtroos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.