MCMC 프로그램을 디버깅하는 것은 매우 어렵습니다. 몇 가지 문제로 인해 어려움이 발생합니다.
(a) 알고리즘의 주기적 특성
우리는 다른 모든 매개 변수에 조건부로 매개 변수를 반복적으로 그립니다. 따라서 구현이 제대로 작동하지 않으면 반복 샘플러의 어느 곳에 나 문제가있을 수 있으므로 버그를 격리하기가 어렵습니다.
(b) 정답은 반드시 알려진 것은 아닙니다.
컨버전스를 달성했는지 알 수있는 방법이 없습니다. 어느 정도까지는 시뮬레이션 된 데이터에 대한 코드를 테스트하여 완화 할 수 있습니다.
위의 문제에 비추어 MCMC 프로그램을 디버깅하는 데 사용할 수있는 표준 기술이 있는지 궁금합니다.
편집하다
내 프로그램을 디버깅하는 데 사용하는 접근 방식을 공유하고 싶었습니다. 물론 PeterR이 언급 한 모든 작업을 수행합니다. 그 외에도 시뮬레이션 데이터를 사용하여 다음 테스트를 수행합니다.
모든 값을 실제 값에서 시작하고 샘플러가 실제 값과 너무 멀리 떨어져 있는지 확인하십시오.
반복 샘플러에서 해당 매개 변수를 그리는지 여부를 결정하는 반복 샘플러의 각 매개 변수에 대한 플래그가 있습니다. 예를 들어, 플래그 'gen_param1'이 true로 설정되면 반복 샘플러의 전체 조건부에서 'param1'을 그립니다. 이것이 false로 설정되면 'param1'은 해당 값으로 설정됩니다.
샘플러 작성을 마치면 다음 레시피를 사용하여 프로그램을 테스트합니다.
- 한 매개 변수의 생성 플래그를 true로 설정하고 다른 모든 매개 변수를 false로 설정하고 실제 값에 대한 수렴을 평가하십시오.
- 첫 번째 매개 변수와 함께 다른 매개 변수에 대해 생성 플래그를 설정하고 수렴을 다시 평가하십시오.
위의 단계는 매우 도움이되었습니다.