Налагодження програм MCMC, як відомо, важко. Складність виникає через кілька питань, серед яких є:
(а) Циклічність алгоритму
Ітеративно ми намалюємо параметри, що обумовлюються всіма іншими параметрами. Таким чином, якщо реалізація не працює належним чином, важко виділити помилку, оскільки проблема може бути в будь-якому місці ітеративного пробника.
(b) Правильна відповідь не обов'язково відома.
У нас немає способу сказати, чи досягли ми зближення. Певною мірою це можна пом'якшити, перевіривши код на імітованих даних.
У світлі вищезазначених питань мені було цікаво, чи існує стандартна методика, яка може бути використана для налагодження програм MCMC.
Редагувати
Я хотів поділитися підходом, який використовую для налагодження власних програм. Я, звичайно, роблю все те, про що згадував PeterR. Окрім цих, я виконую наступні тести, використовуючи імітовані дані:
Почніть всі параметри з істинних значень і подивіться, чи відібраний у вибірці занадто далеко від справжнього значення.
У мого ітеративного пробовідбірника є прапори для кожного параметра, який визначає, чи я малюю цей параметр в ітераційному пробовідбірнику. Наприклад, якщо для прапора 'gen_param1' встановлено значення true, я малюю 'param1' з його повного умовного в ітеративному пробовідбірнику. Якщо для цього встановлено значення false, то парам1 встановлено його справжнє значення.
Як тільки я закінчую писати пробник, я тестую програму, використовуючи наступний рецепт:
- Встановіть прапор генерації для одного параметра в true, а в іншому - false та оцініть збіжність відносно істинного значення.
- Встановіть прапор генерації для іншого параметра спільно з першим і знову оцініть конвергенцію.
Наведені вище кроки мені неймовірно корисні.