Chuyển đến nội dung chính

Markov Chain Monte Carlo (MCMC): Lấy mẫu các phân phối xác suất phức tạp

Hướng dẫn về Markov Chain Monte Carlo — bao gồm cách hoạt động, lý do sử dụng, các thuật toán phổ biến và cách áp dụng bằng Python cho suy luận Bayes.
Đã cập nhật 10 thg 6, 2026  · 15 phút đọc

Một số phân phối xác suất quá phức tạp để bạn có thể làm việc trực tiếp với chúng.

Khi bạn mô hình hóa dữ liệu thế giới thực, phép toán thường “vỡ trận” trước khi mang lại điều gì hữu ích. Nhiều khi tích phân trông có vẻ dễ xử lý trên giấy, nhưng lập tức trở nên bất khả thi ngay khi bạn thêm vài biến ẩn. Điều này đặc biệt phổ biến trong suy luận Bayes, nơi phân phối hậu nghiệm kết hợp niềm tin tiên nghiệm của bạn với dữ liệu quan sát — và kết quả là thứ bạn không thể tóm tắt bằng một công thức đơn giản.

Ý tưởng cơ bản của Markov Chain Monte Carlo là thay vì xử lý trực tiếp phép toán, MCMC khám phá phân phối thông qua mô phỏng. Nó lấy mẫu phản ánh hình dạng của phân phối mà không cần tính toán đầy đủ.

Trong bài viết này, tôi sẽ trình bày các khái niệm cốt lõi đằng sau MCMC, đi qua những thuật toán phổ biến nhất và hướng dẫn bạn triển khai bằng Python.

Bạn có cần ôn lại toán với Python không? Hãy đọc loạt bài Giải mã các khái niệm Toán học cho Học sâu của chúng tôi để thấy toán được áp dụng trong Numpy.

Markov Chain Monte Carlo là gì?

Markov Chain Monte Carlo (MCMC) là một họ thuật toán tạo mẫu từ các phân phối xác suất — ngay cả khi các phân phối đó quá phức tạp để làm việc trực tiếp.

Tên gọi tách thành hai phần. Chuỗi Markov kiểm soát cách thuật toán di chuyển qua các trạng thái khả dĩ. Mỗi bước chỉ phụ thuộc vào vị trí hiện tại, không phụ thuộc vào toàn bộ lịch sử bạn đến đó như thế nào. Phần Monte Carlo nghĩa là bạn dùng lấy mẫu ngẫu nhiên để ước lượng các đại lượng quan tâm.

Kết hợp lại, MCMC xây dựng một chuỗi các mẫu ngẫu nhiên mà theo thời gian phản ánh hình dạng của phân phối mục tiêu. Trước hết, đây là một kỹ thuật lấy mẫu. Bạn không giải chính xác phép toán, chỉ xấp xỉ thông qua mô phỏng.

Vì sao cần Markov Chain Monte Carlo

Vấn đề với phân phối dữ liệu thực tế là chúng không hề “sạch” như trong sách giáo khoa.

Trong suy luận Bayes, bạn thường cố tính phân phối hậu nghiệm — xác suất cập nhật của các tham số mô hình sau khi quan sát dữ liệu. Công thức trông dễ trên giấy: chỉ cần nhân tiên nghiệm với khả năng (likelihood), rồi chia cho bằng chứng (marginal likelihood). Hạng tử cuối đòi hỏi tích phân qua mọi giá trị tham số khả dĩ. Ở không gian nhiều chiều, tích phân đó hầu như không thể tính được.

Mọi thứ còn tệ hơn khi mô hình của bạn lớn lên. Khi thêm nhiều tham số hoặc biến ẩn, phép tính chính xác đi vào ngõ cụt. Bạn sẽ gặp điều này trong nhiều tình huống phổ biến:

  • Mô hình phân cấp Bayes: Nơi các tham số phụ thuộc vào các tham số khác, tạo ra các phân phối lồng nhau khó tích phân gọn gàng
  • Hậu nghiệm nhiều chiều: Số lượng tham số khiến các xấp xỉ dạng lưới trở nên không khả thi về tính toán
  • Tiên nghiệm không liên hợp: Khi tiên nghiệm và khả năng không kết hợp thành một phân phối quen thuộc

MCMC là một cách “lách” tốt trong các tình huống này. Thay vì tính phân phối, nó rút mẫu từ phân phối đó. Những mẫu này cho bạn mọi thứ cần thiết mà không bao giờ phải giải tích phân.

Hai ý tưởng đứng sau MCMC

MCMC kết hợp hai ý tưởng vốn đơn giản nếu đứng riêng lẻ, nhưng rất mạnh khi kết hợp. Hãy để tôi dẫn bạn qua chúng.

Chuỗi Markov

Chuỗi Markov là một dãy trạng thái mà mỗi bước chỉ phụ thuộc vào nơi bạn đang ở hiện tại.

Bạn đã ở đâu trước đó không quan trọng. Chỉ trạng thái hiện tại quyết định nơi bạn sẽ đến tiếp theo. Tính chất “không nhớ” này — gọi chính thức là tính Markov — giúp phép toán dễ xử lý và thuật toán trở nên thực tiễn.

Chuỗi di chuyển qua các trạng thái từng bước một, và với thiết lập phù hợp, cuối cùng nó ổn định vào một phân phối dừng — một khuôn mẫu ổn định khi xác suất ở bất kỳ trạng thái nào ngừng thay đổi. Chính phân phối ổn định đó là thứ MCMC được thiết kế để làm việc cùng.

Phương pháp Monte Carlo

Phương pháp Monte Carlo dùng lấy mẫu ngẫu nhiên để ước lượng các đại lượng khó tính trực tiếp.

Ý tưởng là rút đủ số mẫu ngẫu nhiên từ một phân phối, rồi ước lượng trung bình, phương sai, hoặc bất kỳ đặc trưng nào khác chỉ bằng cách quan sát các mẫu. Càng rút nhiều mẫu, ước lượng của bạn càng gần giá trị thật.

Khi đứng riêng, phương pháp Monte Carlo yêu cầu bạn lấy mẫu trực tiếp từ phân phối — chính là vấn đề chúng ta đang cần giải quyết. Chuỗi Markov xử lý phần đó.

Cách Markov Chain Monte Carlo hoạt động

MCMC là một vòng lặp với một quyết định đơn giản ở mỗi bước.

  1. Bắt đầu với trạng thái ban đầu: Chọn một điểm xuất phát trong không gian tham số của bạn, dù chỉ là phỏng đoán thô
  2. Đề xuất trạng thái mới: Dùng một cơ chế đề xuất để gợi ý điểm di chuyển tiếp theo
  3. Quyết định có chấp nhận hay không: So sánh trạng thái đề xuất với trạng thái hiện tại và chấp nhận hoặc từ chối dựa trên mức xác suất của mỗi trạng thái theo phân phối mục tiêu
  4. Lặp lại: Chạy vòng lặp này hàng nghìn lần, thu thập mẫu dọc theo quá trình
  5. Sử dụng các mẫu: Ước lượng trung bình, khoảng tin cậy Bayes, hoặc bất kỳ đại lượng quan tâm nào từ các mẫu đã thu thập

Bước chấp nhận/từ chối là nơi điều “kỳ diệu” xảy ra.

Bằng cách chấp nhận các trạng thái “tốt” thường xuyên hơn trạng thái “xấu”, chuỗi có xu hướng tiến tới các vùng có xác suất cao — mà không bao giờ cần tính toàn bộ phân phối.

Các mẫu ban đầu phụ thuộc vào điểm xuất phát, nên sẽ bị loại bỏ. Sau đủ số vòng lặp, chuỗi “quên” điểm bắt đầu và những mẫu còn lại phản ánh đúng hình dạng của phân phối mục tiêu.

Phân phối mục tiêu và phân phối dừng

MCMC xoay quanh mục tiêu tạo ra các mẫu từ một phân phối mục tiêu mà bạn không thể lấy mẫu trực tiếp.

Phân phối mục tiêu là thứ bạn đang cố tìm hiểu — thường là phân phối hậu nghiệm trong suy luận Bayes. Bạn biết hình dạng của nó đến một hằng số chuẩn hóa, nhưng không thể tính trực tiếp hằng số đó. MCMC không cần đến nó.

Mỗi thuật toán MCMC được thiết kế sao cho chuỗi Markov của nó có phân phối dừng khớp với phân phối mục tiêu. Phân phối dừng là phân phối mà chuỗi tiến tới sau đủ số bước.

Giữ chuỗi chạy và nó sẽ bắt đầu tạo ra các mẫu trông giống như được rút trực tiếp từ phân phối mục tiêu của bạn. Tích phân được “bỏ qua”.

Các thuật toán Markov Chain Monte Carlo phổ biến

Có một số thuật toán MCMC bạn sẽ gặp trong thực tiễn. Tất cả đều theo vòng lặp cốt lõi giống nhau, nhưng khác nhau ở cách đề xuất trạng thái mới và cách sử dụng thông tin về phân phối mục tiêu.

Thuật toán Metropolis

Thuật toán Metropolis là thuật toán MCMC đơn giản nhất và là điểm khởi đầu của cả lĩnh vực.

Mỗi bước, nó đề xuất một trạng thái mới bằng cách thêm nhiễu ngẫu nhiên vào trạng thái hiện tại. Nếu trạng thái đề xuất có xác suất cao hơn theo phân phối mục tiêu, nó luôn được chấp nhận. Nếu thấp hơn, nó được chấp nhận với xác suất tỷ lệ với tỉ số của hai xác suất — nếu không, chuỗi giữ nguyên.

Cơ chế chấp nhận/từ chối này khiến chuỗi dành nhiều thời gian hơn ở các vùng có xác suất cao mà không bao giờ phải tính toàn bộ phân phối.

Thuật toán Metropolis dùng phân phối đề xuất đối xứng, nghĩa là khả năng đề xuất bước theo mọi hướng là như nhau. Nó có xu hướng kém hiệu quả khi mô hình lớn dần.

Thuật toán Metropolis-Hastings

Thuật toán Metropolis-Hastings (MH) khái quát Metropolis bằng cách cho phép các phân phối đề xuất bất đối xứng.

MH điều chỉnh xác suất chấp nhận để bù cho việc một số đề xuất có khả năng xảy ra cao hơn những đề xuất khác. Bạn có thể tinh chỉnh phân phối đề xuất theo hình dạng mục tiêu, giúp khám phá tốt hơn và hội tụ nhanh hơn.

Hầu hết các phương pháp MCMC hiện đại là mở rộng của MH hoặc xây dựng trên cùng nguyên lý. Vì vậy nếu bạn hiểu Metropolis-Hastings, bạn sẽ nắm nền tảng của lĩnh vực này.

Lấy mẫu Gibbs

Gibbs cập nhật từng biến một thay vì đề xuất trạng thái mới cho tất cả tham số cùng lúc.

Mỗi bước, nó lấy mẫu từng biến từ phân phối có điều kiện của biến đó — phân phối của biến khi biết các giá trị hiện tại của tất cả biến còn lại. Khi bạn đã đi qua tất cả biến, bạn hoàn thành một vòng lặp đầy đủ.

Cách này hoàn toàn tránh bước chấp nhận/từ chối, vì mỗi lần rút theo điều kiện đều được chấp nhận. Hữu ích khi phân phối chung đầy đủ khó lấy mẫu nhưng các phân phối có điều kiện thì khả thi, điều khá phổ biến trong các mô hình phân cấp Bayes.

Hamiltonian Monte Carlo

Hamiltonian Monte Carlo (HMC) là thuật toán đầu tiên khiến suy luận Bayes hiện đại trở nên khả thi ở quy mô lớn.

Thay vì ngẫu nhiên đề xuất trạng thái mới, HMC sử dụng thông tin gradient từ phân phối mục tiêu để đề xuất những trạng thái xa vị trí hiện tại nhưng vẫn có khả năng được chấp nhận. Nó di chuyển qua không gian tham số tốt hơn nhiều so với các phương pháp bước ngẫu nhiên. Ít đề xuất bị từ chối hơn và khám phá tốt hơn trong các phân phối nhiều chiều.

Các phương pháp bước ngẫu nhiên như Metropolis không mở rộng tốt khi số tham số tăng. HMC không gặp vấn đề đó ở cùng mức độ.

HMC là động cơ phía sau Stan, một trong những nền tảng lập trình xác suất được dùng rộng rãi nhất. Bộ lấy mẫu No-U-Turn (NUTS), một phần mở rộng thích nghi của HMC dùng trong PyMC, loại bỏ nhu cầu tinh chỉnh thủ công bước nhảy và số bước.

Markov Chain Monte Carlo trong thống kê Bayes

Nếu có một lĩnh vực nơi MCMC tạo ảnh hưởng lớn nhất, đó là suy luận Bayes.

Thống kê Bayes xoay quanh phân phối hậu nghiệm, tức xác suất cập nhật của tham số mô hình sau khi quan sát dữ liệu. Tính toán nó nghĩa là nhân tiên nghiệm với khả năng rồi chuẩn hóa. Bước chuẩn hóa đó đòi hỏi một tích phân hiếm khi khả thi.

MCMC hoàn toàn loại bỏ bước này. Bạn chỉ cần đánh giá hậu nghiệm chưa chuẩn hóa tại bất kỳ điểm nào và để chuỗi lo phần còn lại.

Đây là một ví dụ đơn giản. Giả sử bạn ước lượng độ lệch của một đồng xu. Bạn bắt đầu với niềm tin tiên nghiệm rằng đồng xu có lẽ công bằng, rồi quan sát một chuỗi tung. Với mô hình đồng xu đơn giản, hậu nghiệm có dạng đóng. Nếu bạn thêm cấu trúc phân cấp, tức ước lượng độ lệch trên hàng trăm đồng xu đồng thời, việc tính toán trở nên bất khả thi.

Với MCMC, bạn chạy chuỗi, thu thập các mẫu từ hậu nghiệm và dùng những mẫu đó để tính điều bạn cần.

Hiểu về đốt nóng (burn-in), hội tụ và trộn (mixing)

Ba khái niệm này dễ gây nhầm lẫn cho các nhà khoa học dữ liệu mới làm quen MCMC. Nếu hiểu sai, bạn vẫn có kết quả, nhưng sẽ không biết vì sao chúng không đáng tin.

Burn-in

Khi một chuỗi Markov bắt đầu, nó chưa biết các vùng có xác suất cao của phân phối mục tiêu ở đâu.

Những mẫu đầu tiên bị ảnh hưởng bởi điểm xuất phát của bạn, không phải bởi phân phối mục tiêu. Burn-in là thực hành loại bỏ chúng. Bạn chạy chuỗi trong một số vòng lặp đầu, bỏ các mẫu đó đi, và chỉ giữ lại những gì đến sau khi chuỗi đã có thời gian tìm được điểm khởi đầu tốt.

Không có quy tắc chung cho độ dài burn-in. Nó phụ thuộc vào mô hình, điểm khởi đầu và mức độ trộn của chuỗi. Trong thực tế, bạn chẩn đoán trực quan bằng biểu đồ vết (trace plot) thay vì chọn sẵn một con số cố định.

Hội tụ

Hội tụ nghĩa là chuỗi không còn bị ảnh hưởng bởi điểm xuất phát và hiện đang rút mẫu phản ánh phân phối mục tiêu.

Một chuỗi chưa hội tụ tạo ra các mẫu thiên lệch. Trung bình bạn tính từ chúng sẽ không khớp với trung bình hậu nghiệm thật. Thay vào đó, nó phản ánh nơi chuỗi bị “kẹt”.

Hội tụ được đánh giá hậu kiểm bằng các chẩn đoán. Chạy nhiều chuỗi từ các điểm bắt đầu khác nhau và kiểm tra xem chúng có đồng thuận không là một trong những cách đáng tin cậy nhất để phát hiện lỗi hội tụ.

Trộn (mixing)

Một chuỗi hội tụ nhưng trộn kém vẫn là vấn đề.

Mixing mô tả mức độ chuỗi khám phá phân phối mục tiêu. Một chuỗi trộn tốt di chuyển tự do, ghé thăm cả vùng xác suất cao và thấp, và tạo ra các mẫu xấp xỉ độc lập với nhau. Một chuỗi trộn kém ở lì trong một vùng qua nhiều vòng lặp trước khi di chuyển, và tạo ra các mẫu tương quan cao, không đại diện cho toàn bộ phân phối.

Trộn kém thường hiện lên dưới dạng biểu đồ vết trông như một dòng sông chậm rì rì thay vì một dải nhiễu ngang. Khi thấy vậy, bộ lấy mẫu của bạn cần tinh chỉnh — một phân phối đề xuất tốt hơn hoặc một thuật toán khác hẳn.

Biểu đồ so sánh mức độ trộn

Biểu đồ so sánh mức độ trộn

Cách đánh giá kết quả MCMC

Giờ tôi sẽ chỉ cho bạn bốn cách đánh giá MCMC và giải thích khi nào nên dùng mỗi cách.

Biểu đồ vết (trace plot)

Biểu đồ vết hiển thị giá trị được lấy mẫu của một tham số ở mỗi vòng lặp. Đây là thứ đầu tiên bạn nên xem sau khi chạy MCMC.

Một biểu đồ vết “khỏe mạnh” trông như nhiễu trắng quanh một trung bình ổn định. Bạn không nên thấy xu hướng, đoạn phẳng dài, hoặc trôi dạt chậm. Nếu bạn thấy chuỗi lang thang hoặc mắc kẹt trong một vùng qua nhiều vòng lặp, đó là vấn đề trộn và các mẫu của bạn không đáng tin.

Minh họa biểu đồ vết

Minh họa biểu đồ vết

Tự tương quan (autocorrelation)

Các mẫu MCMC không bao giờ hoàn toàn độc lập. Mỗi mẫu bị ảnh hưởng bởi mẫu trước đó. Tự tương quan đo mức độ các mẫu tương quan qua các vòng lặp.

Tự tương quan cao nghĩa là các mẫu của bạn mang ít thông tin hơn số lượng của chúng gợi ý. Hai nghìn mẫu tương quan có thể chỉ cho bạn lượng thông tin tương đương hai trăm mẫu độc lập. Hầu hết thư viện MCMC có kèm biểu đồ tự tương quan để bạn thấy mức tương quan giảm nhanh thế nào khi các mẫu ở xa nhau hơn.

Minh họa biểu đồ tự tương quan

Minh họa biểu đồ tự tương quan

Kích thước mẫu hiệu dụng

Kích thước mẫu hiệu dụng (ESS) chuyển tự tương quan đó thành một con số thực tiễn: chuỗi của bạn tương đương với bao nhiêu mẫu độc lập.

Nếu bạn rút 5.000 mẫu nhưng ESS là 200, bạn đang làm việc với “sức mạnh thống kê” của 200 lần rút độc lập. ESS thấp nghĩa là bạn cần chạy chuỗi lâu hơn, tinh chỉnh bộ lấy mẫu, hoặc cả hai. Phần lớn người thực hành nhắm đến ESS tối thiểu vài trăm trên mỗi tham số trước khi tin tưởng ước lượng.

Chẩn đoán hội tụ

Khi bạn chạy nhiều chuỗi, bạn có thể kiểm tra chính thức xem chúng đã hội tụ về cùng một phân phối chưa. Chẩn đoán Gelman–Rubin, được báo cáo dưới dạng R-hat, so sánh phương sai trong từng chuỗi với phương sai giữa các chuỗi.

R-hat gần 1,0 nghĩa là các chuỗi đồng thuận, đây là dấu hiệu tốt. Giá trị trên 1,01 hoặc 1,05 (tùy ngưỡng thư viện của bạn dùng) gợi ý các chuỗi chưa hội tụ và bạn cần nhiều vòng lặp hơn. Hầu hết thư viện hiện đại như PyMC tự động tính R-hat và cảnh báo khi nó quá cao.

Markov Chain Monte Carlo trong Python

Python có vài thư viện cho MCMC, mỗi cái theo một triết lý khác nhau.

  • PyMC: Lựa chọn dễ tiếp cận nhất cho đa số nhà khoa học dữ liệu. Bạn định nghĩa mô hình bằng cú pháp Python, và PyMC xử lý việc lấy mẫu phía sau bằng NUTS (phiên bản thích nghi của HMC). Đây là lựa chọn mặc định cho mô hình hóa Bayes trong Python.
  • CmdStanPy / PyStan: Giao diện Python tới Stan, một ngôn ngữ lập trình xác suất chuyên dụng. Stan biên dịch mô hình của bạn sang C++ trước khi chạy, giúp nhanh và phù hợp với các mô hình phân cấp phức tạp. Đổi lại là đường cong học tập dốc hơn.
  • NumPy: Không có thư viện MCMC chuyên dụng, nhưng bạn có thể tự cài đặt các thuật toán như Metropolis-Hastings từ đầu. Hữu ích để hiểu chuyện gì xảy ra “bên dưới nắp capo” trước khi chuyển sang công cụ cấp cao.

Với hầu hết công việc thực tế, PyMC là nơi bạn nên bắt đầu. Đây là thứ tôi sẽ dùng, nên nếu bạn làm theo, hãy cài đặt thư viện trước:

pip install pymc

Để đơn giản, tôi sẽ bám vào một ví dụ dễ: ước lượng độ lệch của đồng xu từ một chuỗi tung.

Bước 1: Định nghĩa mô hình

import pymc as pm
import numpy as np

# 1 = heads, 0 = tails
observed_flips = np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 1])

with pm.Model() as coin_model:
    # Prior: we believe the coin is probably fair
    bias = pm.Beta("bias", alpha=2, beta=2)

    # Likelihood: observed flips given the bias
    flips = pm.Bernoulli("flips", p=bias, observed=observed_flips)

Tiên nghiệm pm.Beta mã hóa một niềm tin yếu rằng đồng xu là công bằng. Khả năng pm.Bernoulli kết nối mô hình với dữ liệu quan sát.

Bước 2: Chạy bộ lấy mẫu

with coin_model:
    trace = pm.sample(2000, tune=1000, return_inferencedata=True)

Kết quả khi chạy bộ lấy mẫu

Kết quả khi chạy bộ lấy mẫu

tune thiết lập số bước burn-in — các mẫu đó sẽ bị loại bỏ. sample rút 2000 mẫu hậu nghiệm mỗi chuỗi sau giai đoạn tinh chỉnh.

Bước 3: Kiểm tra hậu nghiệm

import arviz as az

az.plot_trace(trace, var_names=["bias"])
az.summary(trace, var_names=["bias"])

Biểu đồ vết của mô hình và kết quả tóm tắt

Biểu đồ vết của mô hình và kết quả tóm tắt

az.summary() cho bạn trung bình hậu nghiệm, độ lệch chuẩn và R-hat cho mỗi tham số. Nếu R-hat gần 1,0, các chuỗi đã hội tụ. az.plot_trace() vẽ biểu đồ vết và phân phối hậu nghiệm cạnh nhau cho từng tham số.

Với bộ dữ liệu này — 7 ngửa trên 10 lần tung — trung bình hậu nghiệm bằng 0,642 với độ lệch chuẩn 0,124. Điều này phản ánh bằng chứng trong dữ liệu đồng thời vẫn gần với tiên nghiệm đồng xu công bằng. R-hat là 1,00 và ESS vượt xa 2000, nên các chuỗi đã hội tụ và các mẫu đáng tin cậy.

Những lỗi thường gặp với MCMC

MCMC dễ chạy, nhưng cũng dễ dùng sai. Dưới đây là những lỗi thường gặp nhất.

  • Kết luận hội tụ quá sớm: Chỉ vì bộ lấy mẫu chạy không lỗi không có nghĩa là nó đã hội tụ. Luôn kiểm tra R-hat và biểu đồ vết trước khi tin vào kết quả. Một chuỗi có thể trông ổn định nhưng vẫn bị kẹt trong một vùng của không gian tham số.
  • Bỏ qua burn-in: Các mẫu đầu tiên bị thiên lệch theo điểm xuất phát của bạn, không phải phân phối mục tiêu. Hãy loại bỏ chúng. Hầu hết thư viện xử lý tự động thông qua tham số tune, nhưng hãy kiểm tra để đảm bảo bạn không vô tình đưa các mẫu đó vào phân tích.
  • Trộn kém: Một chuỗi di chuyển quá chậm tạo ra các mẫu tương quan cao, mang ít thông tin hơn con số của chúng gợi ý. Nếu biểu đồ vết trông như trôi dạt chậm thay vì một dải nhiễu ngang, phân phối đề xuất của bạn cần tinh chỉnh, hoặc bạn cần thuật toán tốt hơn. Chuyển từ Metropolis sang NUTS thường khắc phục triệt để.
  • Quá ít mẫu: ESS thấp nghĩa là ước lượng của bạn không đáng tin, ngay cả khi chuỗi về mặt kỹ thuật đã hội tụ. Nếu ESS chỉ là một phần nhỏ so với tổng số lượt rút, hãy chạy chuỗi lâu hơn hoặc cải thiện trộn trước khi kết luận.

MCMC so với các phương pháp lấy mẫu khác

MCMC không phải là cách duy nhất để xấp xỉ một phân phối. Dưới đây là so sánh với các lựa chọn khác.

  • Lấy mẫu bác bỏ (rejection sampling) rút đề xuất từ một phân phối đơn giản hơn và chấp nhận chúng dựa trên mức độ phù hợp với phân phối mục tiêu. Khi áp dụng được thì cho kết quả chính xác, nhưng tỉ lệ chấp nhận sụt giảm mạnh ở không gian nhiều chiều.
  • Lấy mẫu tầm quan trọng (importance sampling) gán trọng số cho các mẫu từ phân phối đề xuất để xấp xỉ kỳ vọng theo phân phối mục tiêu. Nhanh và hiệu quả ở số chiều thấp, nhưng phương sai của trọng số tăng vọt khi số chiều tăng. Trên thực tế, một vài mẫu gánh gần như toàn bộ trọng số, khiến ước lượng không đáng tin.
  • Suy luận biến phân (VI) khớp một phân phối đơn giản hơn để xấp xỉ phân phối mục tiêu bằng cách tối thiểu hóa một độ đo phân kỳ. VI nhanh hơn MCMC nhiều và mở rộng lên bộ dữ liệu lớn, nhưng đưa vào sai số xấp xỉ. Phân phối được khớp có thể bỏ lỡ cấu trúc hậu nghiệm mà MCMC bắt được.

Tóm tắt ngắn gọn:

MCMC so với các phương án khác

MCMC so với các phương án khác

MCMC là lựa chọn đúng khi độ chính xác quan trọng hơn tốc độ. Nếu bạn cần mở rộng lên dữ liệu lớn hoặc chạy suy luận theo thời gian thực, suy luận biến phân có thể đáng để đánh đổi độ chính xác.

Kết luận

MCMC là một trong những công cụ trông đáng sợ từ bên ngoài nhưng lại rất “hợp lý” khi bạn hiểu nó thực sự làm gì — xây dựng một chuỗi mẫu dần dần phản ánh hình dạng của một phân phối mà bạn không thể tính trực tiếp.

Nó cũng dễ hiểu hơn nhiều khi bạn tách nó thành hai phần: Chuỗi Markov và phương pháp Monte Carlo.

Vai trò của nó trong thống kê Bayes là rất lớn. Các phân phối hậu nghiệm vốn ngoài tầm với trở nên khả thi ngay khi bạn có một bộ lấy mẫu đáng tin. Đó là lý do MCMC là lõi của các thư viện lập trình xác suất như PyMC và Stan.

Nhưng trước khi lao vào triển khai, bạn nên nắm đúng trực giác. Hiểu vì sao chuỗi cần burn-in, mixing thực sự nghĩa là gì, và cách đọc biểu đồ vết. Bản thân mã nguồn là phần dễ, vì các thư viện Python ẩn mọi trừu tượng sau những lời gọi hàm đơn giản.

Nếu bạn muốn thành thạo machine learning, hãy đăng ký lộ trình Machine Learning Scientist in Python của chúng tôi. 85 giờ nội dung sẽ giúp bạn sẵn sàng cho công việc vào năm 2026.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.

Câu hỏi thường gặp về MCMC

Mục đích sử dụng Markov Chain Monte Carlo là gì?

MCMC được dùng để rút mẫu từ các phân phối xác suất quá phức tạp để làm việc trực tiếp. Nó phổ biến nhất trong thống kê Bayes, nơi nó ước lượng các phân phối hậu nghiệm mà không cần nghiệm dạng đóng. Bạn cũng sẽ thấy nó trong mô phỏng vật lý, sinh học tính toán và bất kỳ lĩnh vực nào mà suy luận chính xác là không khả thi.

MCMC khác gì so với lấy mẫu ngẫu nhiên thông thường?

Lấy mẫu ngẫu nhiên thông thường giả định bạn có thể rút trực tiếp từ phân phối mục tiêu. MCMC lách vấn đề đó bằng cách xây dựng một chuỗi mẫu dần hội tụ về phân phối mục tiêu. Bạn không cần biết toàn bộ phân phối, chỉ cần biết cách đánh giá nó tại bất kỳ điểm nào. Đổi lại, các mẫu MCMC có tương quan, nghĩa là bạn cần nhiều mẫu hơn để có ước lượng đáng tin.

Làm sao biết bộ lấy mẫu MCMC đã hội tụ?

Kiểm tra phổ biến nhất là chẩn đoán Gelman–Rubin, báo cáo dưới dạng R-hat. Giá trị gần 1,0 cho thấy các chuỗi đã hội tụ về cùng một phân phối. Biểu đồ vết và kích thước mẫu hiệu dụng (ESS) cũng hữu ích. Một biểu đồ vết “khỏe” trông như nhiễu ngẫu nhiên quanh một trung bình ổn định, và ESS cao nghĩa là các mẫu của bạn mang đủ thông tin để tin cậy ước lượng.

Sự khác biệt giữa Metropolis-Hastings và Hamiltonian Monte Carlo là gì?

Metropolis-Hastings đề xuất trạng thái mới bằng cách thêm nhiễu ngẫu nhiên vào vị trí hiện tại, có thể chậm khi phân phối mục tiêu có hình học phức tạp. Hamiltonian Monte Carlo dùng thông tin gradient để đề xuất các trạng thái ở xa vị trí hiện tại nhưng vẫn có khả năng được chấp nhận, nhờ đó khám phá tốt hơn nhiều ở không gian nhiều chiều. Với hầu hết quy trình Bayes hiện đại, HMC — và phiên bản thích nghi của nó, NUTS — là lựa chọn ưu tiên.

Khi nào nên dùng suy luận biến phân thay vì MCMC?

Khi tốc độ và khả năng mở rộng quan trọng hơn độ chính xác. MCMC tạo ra các mẫu chất lượng cao nhưng mở rộng kém với bộ dữ liệu lớn và mô hình nhiều chiều. Suy luận biến phân khớp một phân phối đơn giản hơn để xấp xỉ hậu nghiệm, nhanh hơn nhiều nhưng đưa vào sai số xấp xỉ mà MCMC tránh được. Nếu bạn cần thử nghiệm ở quy mô lớn hoặc suy luận thời gian thực, suy luận biến phân là sự đánh đổi đáng giá.

Chủ đề

Học cùng DataCamp

Tracks

Học tăng cường trong Python

12 giờ
Nắm vững các nguyên lý cơ bản của học tăng cường (RL) để phát triển các mô hình có khả năng điều hướng trong các môi trường thực tế phức tạp và đào tạo các mô hình ngôn ngữ lớn (LLMs).
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow