MCMC 프로그램을 디버깅하는 표준 기술이 있습니까?


11

MCMC 프로그램을 디버깅하는 것은 매우 어렵습니다. 몇 가지 문제로 인해 어려움이 발생합니다.

(a) 알고리즘의 주기적 특성

우리는 다른 모든 매개 변수에 조건부로 매개 변수를 반복적으로 그립니다. 따라서 구현이 제대로 작동하지 않으면 반복 샘플러의 어느 곳에 나 문제가있을 수 있으므로 버그를 격리하기가 어렵습니다.

(b) 정답은 반드시 알려진 것은 아닙니다.

컨버전스를 달성했는지 알 수있는 방법이 없습니다. 어느 정도까지는 시뮬레이션 된 데이터에 대한 코드를 테스트하여 완화 할 수 있습니다.

위의 문제에 비추어 MCMC 프로그램을 디버깅하는 데 사용할 수있는 표준 기술이 있는지 궁금합니다.

편집하다

내 프로그램을 디버깅하는 데 사용하는 접근 방식을 공유하고 싶었습니다. 물론 PeterR이 언급 한 모든 작업을 수행합니다. 그 외에도 시뮬레이션 데이터를 사용하여 다음 테스트를 수행합니다.

  1. 모든 값을 실제 값에서 시작하고 샘플러가 실제 값과 너무 멀리 떨어져 있는지 확인하십시오.

  2. 반복 샘플러에서 해당 매개 변수를 그리는지 여부를 결정하는 반복 샘플러의 각 매개 변수에 대한 플래그가 있습니다. 예를 들어, 플래그 'gen_param1'이 true로 설정되면 반복 샘플러의 전체 조건부에서 'param1'을 그립니다. 이것이 false로 설정되면 'param1'은 해당 값으로 설정됩니다.

샘플러 작성을 마치면 다음 레시피를 사용하여 프로그램을 테스트합니다.

  • 한 매개 변수의 생성 플래그를 true로 설정하고 다른 모든 매개 변수를 false로 설정하고 실제 값에 대한 수렴을 평가하십시오.
  • 첫 번째 매개 변수와 함께 다른 매개 변수에 대해 생성 플래그를 설정하고 수렴을 다시 평가하십시오.

위의 단계는 매우 도움이되었습니다.

답변:


10

표준 프로그래밍 실습 :

  • 디버깅 할 때 고정 된 임의의 소스 (예 : 동일한 시드)로 시뮬레이션을 실행하여 변경 사항이 다른 임의의 숫자가 아닌 코드 변경으로 인한 것입니다.
  • 답이 알려진 모델 (또는 여러 모델)에서 코드를 사용해보십시오.
  • 버그를 줄이려면 좋은 프로그래밍 습관을 사용하십시오.
  • 이해하기 쉬운 지 여부에 대해 매우 열심히 생각하고 오래 생각하십시오.

행운과 많은 커피를 기원합니다!


3

여기에 공유 할 우울하고 구체적이지 않은 일화가 있습니다. 통계 MT 연구원의 동료로 시간을 보냈습니다. 정말 크고 복잡한 모델을 보려면 더 이상 보지 마십시오.

그는 나 자신의 오락을 위해 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/published/… ). 나는 Cook et al.의 접근법을 두 번 사용했으며 그 결과에 깊은 인상을 받았습니다. 저는 Geweke의 접근 방식을 사용하지는 않았지만 Cook et al.에 따르면 "Geweke의 접근 방식은 한 번의 복제 만 수행하면된다는 장점이 있습니다 ... 단점은 테스트 할 소프트웨어를 변경해야한다는 것입니다." 또한 Geweke의 접근 방식에는 유한 한 차이가있는 사전이 필요하지만 그 방법은 그렇지 않다고 말합니다.
jmtroos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.