Có một kỹ thuật tiêu chuẩn để gỡ lỗi các chương trình MCMC không?


11

Gỡ lỗi các chương trình MCMC nổi tiếng là khó khăn. Khó khăn phát sinh do một số vấn đề trong đó có một số:

(a) Bản chất tuần hoàn của thuật toán

Chúng tôi lặp đi lặp lại vẽ các tham số có điều kiện trên tất cả các tham số khác. Do đó, nếu một triển khai không hoạt động đúng, rất khó để cô lập lỗi vì vấn đề có thể ở bất kỳ đâu trong bộ lấy mẫu lặp.

(b) Câu trả lời đúng không nhất thiết phải biết.

Chúng tôi không có cách nào để biết nếu chúng tôi đã đạt được sự hội tụ. Ở một mức độ nào đó, điều này có thể được giảm thiểu bằng cách kiểm tra mã trên dữ liệu mô phỏng.

Trước những vấn đề trên, tôi đã tự hỏi liệu có một kỹ thuật tiêu chuẩn nào có thể được sử dụng để gỡ lỗi các chương trình MCMC không.

Biên tập

Tôi muốn chia sẻ cách tiếp cận tôi sử dụng để gỡ lỗi các chương trình của riêng tôi. Tôi, tất nhiên, làm tất cả những điều mà PeterR đã đề cập. Ngoài ra, tôi thực hiện các thử nghiệm sau bằng dữ liệu mô phỏng:

  1. Bắt đầu tất cả các tham số từ các giá trị thực và xem nếu bộ lấy mẫu phân kỳ quá xa so với các giá trị thực.

  2. Tôi có các cờ cho mỗi tham số trong bộ lấy mẫu lặp để xác định xem tôi có đang vẽ tham số đó trong bộ lấy mẫu lặp không. Ví dụ: nếu một cờ 'gen_param1' được đặt thành true thì tôi vẽ 'param1' từ điều kiện đầy đủ của nó trong bộ lấy mẫu lặp. Nếu điều này được đặt thành false thì 'param1' được đặt thành giá trị thực của nó.

Sau khi viết xong bộ lấy mẫu, tôi kiểm tra chương trình bằng công thức sau:

  • Đặt cờ tạo cho một tham số thành true và mọi thứ khác thành false và đánh giá sự hội tụ đối với giá trị thực.
  • Đặt cờ tạo cho một tham số khác kết hợp với tham số đầu tiên và một lần nữa đánh giá sự hội tụ.

Các bước trên đã vô cùng hữu ích với tôi.

Câu trả lời:


10

Thực hành lập trình chuẩn:

  • khi gỡ lỗi chạy mô phỏng với các nguồn ngẫu nhiên cố định (nghĩa là cùng một hạt giống) để mọi thay đổi là do thay đổi mã và không phải là các số ngẫu nhiên khác nhau.
  • thử mã của bạn trên một mô hình (hoặc một số mô hình) trong đó câu trả lời IS đã biết.
  • áp dụng thói quen lập trình tốt để bạn giới thiệu ít lỗi hơn.
  • suy nghĩ rất nhiều và lâu dài về những câu trả lời bạn nhận được, cho dù chúng có ý nghĩa, v.v.

Tôi chúc bạn may mắn, và nhiều cà phê!


3

Tôi có một giai thoại buồn và không cụ thể để chia sẻ ở đây. Tôi đã dành thời gian làm đồng nghiệp của một nhà nghiên cứu MT thống kê. Nếu bạn muốn xem một mô hình thực sự lớn, phức tạp, không tìm đâu xa.

Anh ấy đưa tôi qua bootcamp NLP để giải trí. Nói chung, tôi là loại lập trình viên sống và chết bởi bài kiểm tra đơn vị và trình gỡ lỗi. Khi còn trẻ tại Symbolics, tôi đã bị câu cách ngôn, 'lập trình đang gỡ lỗi một bộ đệm biên tập trống.' (Sắp xếp giống như đào tạo một mô hình perceptron.)

Vì vậy, tôi đã hỏi anh ta, 'làm thế nào để bạn kiểm tra và gỡ lỗi những thứ này'. Anh ấy trả lời là: "Bạn hiểu đúng ngay từ lần đầu tiên. Bạn nghĩ rất kỹ (trong trường hợp của anh ấy, thường là trên giấy) và bạn viết mã rất cẩn thận. Bởi vì khi bạn hiểu sai, cơ hội cô lập vấn đề là rất mảnh mai. "


Tôi đã nghe giai thoại này trước đây (có lẽ cũng từ bạn?). Nó đánh vào nhà đối với tôi, và kể từ lần đầu tiên nghe nó, nó đã trở thành sự thật trong nhiều trường hợp (tức là khó khăn trong việc cô lập vấn đề).
redmoskito

3

Những lời khuyên hay trong câu trả lời của PeterR; Tôi không có thêm lời khuyên nào cho việc gỡ lỗi thực tế, nhưng tôi đã tìm thấy một quy trình rất hữu ích để kiểm tra nếu mã của bạn có thể có lỗi. Nó được mô tả trong bài báo này:

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

Về cơ bản, ý tưởng là có hai mô phỏng: Một là MCMC của bạn để suy ra (có lẽ là) các tham số của mô hình của bạn. Trình mô phỏng thứ hai chỉ đơn giản là lấy mẫu các tham số từ trước. Họ tạo dữ liệu từ các tham số của cả hai trình mô phỏng và tính toán một thống kê kiểm tra so sánh các phân phối chung của các tham số và dữ liệu. Nếu mã MCMC lấy mẫu chính xác các tham số từ phía sau, thì thống kê kiểm tra sẽ có phân phối N (0,1). Mã để tính toán thống kê kiểm tra có sẵn.


Một cách tiếp cận liên quan có thể được tìm thấy trong Cook et al. (2006; stat.columbia.edu/~gelman/research/published/iêu ). Tôi đã sử dụng phương pháp của Cook và cộng sự trong hai lần và tôi rất ấn tượng với kết quả này. Tôi chưa sử dụng phương pháp của Geweke, nhưng theo Cook và cộng sự, "Cách tiếp cận của Geweke có một ưu điểm là chỉ cần thực hiện một bản sao ... Một nhược điểm là nó yêu cầu thay đổi phần mềm để được kiểm tra." Họ cũng nói rằng cách tiếp cận của Geweke đòi hỏi các linh mục có phương sai hữu hạn, trong khi phương pháp của họ thì không.
jmtroos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.