Có lẽ khái niệm, tại sao nó được sử dụng, và một ví dụ.
Có lẽ khái niệm, tại sao nó được sử dụng, và một ví dụ.
Câu trả lời:
Đầu tiên, chúng ta cần hiểu chuỗi Markov là gì. Hãy xem xét ví dụ thời tiết sau từ Wikipedia. Giả sử rằng thời tiết vào bất kỳ ngày nào cũng có thể được phân thành hai trạng thái: nắng và mưa. Dựa trên kinh nghiệm trong quá khứ, chúng tôi biết những điều sau đây:
Vì, thời tiết ngày hôm sau trời nắng hoặc mưa nên theo:
Tương tự, hãy:
Do đó, nó theo sau:
Bốn số trên có thể được biểu diễn ngắn gọn dưới dạng ma trận chuyển tiếp thể hiện xác suất của thời tiết chuyển từ trạng thái này sang trạng thái khác như sau:
Chúng tôi có thể hỏi một số câu hỏi có câu trả lời sau:
Câu 1: Nếu hôm nay trời nắng thì thời tiết có khả năng là ngày mai?
A1: Vì, chúng tôi không biết điều gì sẽ xảy ra chắc chắn, điều tốt nhất chúng tôi có thể nói là có khả năng trời sẽ có nắng và trời sẽ mưa.10 %
Q2: Thế còn hai ngày kể từ hôm nay?
A2: Dự đoán một ngày: nắng, mưa. Do đó, hai ngày kể từ bây giờ:10 %
Ngày đầu tiên trời có thể nắng và ngày hôm sau cũng có thể có nắng. Cơ hội của điều này xảy ra là: .
Hoặc là
Ngày đầu tiên có thể mưa và ngày thứ hai có thể có nắng. Cơ hội của điều này xảy ra là: .
Do đó, xác suất thời tiết sẽ có nắng trong hai ngày là:
Tương tự, xác suất trời sẽ mưa là:
Trong đại số tuyến tính (ma trận chuyển tiếp) các phép tính này tương ứng với tất cả các hoán vị chuyển tiếp từ bước này sang bước tiếp theo (nắng sang nắng ( ), nắng sang mưa ( ), mưa sang nắng ( ) hoặc mưa to đến mưa ( )) với xác suất được tính toán của chúng:
Ở phần dưới của hình ảnh, chúng ta thấy cách tính xác suất của trạng thái trong tương lai ( hoặc ) với các xác suất (hàm khối lượng xác suất, ) cho mọi trạng thái (nắng hoặc mưa) tại thời điểm 0 (hiện tại hoặc ) dưới dạng phép nhân ma trận đơn giản.
Nếu bạn tiếp tục dự báo thời tiết như thế này, bạn sẽ nhận thấy rằng cuối cùng thì dự báo ngày thứ , trong đó rất lớn (giả sử ), giải quyết các xác suất 'cân bằng' sau đây:
và
Nói cách khác, dự báo của bạn cho ngày thứ và ngày thứ vẫn giữ nguyên. Ngoài ra, bạn cũng có thể kiểm tra xem xác suất 'cân bằng' không phụ thuộc vào thời tiết hôm nay. Bạn sẽ nhận được dự báo tương tự cho thời tiết nếu bạn bắt đầu bằng cách giả sử rằng thời tiết hôm nay nắng hoặc mưa.
Ví dụ trên sẽ chỉ hoạt động nếu xác suất chuyển trạng thái thỏa mãn một số điều kiện mà tôi sẽ không thảo luận ở đây. Nhưng, hãy chú ý các tính năng sau của chuỗi Markov 'đẹp' này (đẹp = xác suất chuyển tiếp thỏa mãn điều kiện):
Bất kể trạng thái bắt đầu ban đầu, cuối cùng chúng ta sẽ đạt được phân phối xác suất cân bằng của các trạng thái.
Markov Chain Monte Carlo khai thác tính năng trên như sau:
Chúng tôi muốn tạo ra các trận hòa ngẫu nhiên từ một phân phối mục tiêu. Sau đó, chúng tôi xác định một cách để xây dựng chuỗi Markov 'đẹp' sao cho phân phối xác suất cân bằng của nó là phân phối mục tiêu của chúng tôi.
Nếu chúng ta có thể xây dựng một chuỗi như vậy thì chúng ta tùy ý bắt đầu từ một số điểm và lặp lại chuỗi Markov nhiều lần (như cách chúng ta dự báo thời tiết lần). Cuối cùng, các khoản rút mà chúng tôi tạo ra sẽ xuất hiện như thể chúng đến từ phân phối mục tiêu của chúng tôi.
Sau đó, chúng tôi ước tính số lượng quan tâm (ví dụ: trung bình) bằng cách lấy trung bình mẫu của các lần rút sau khi loại bỏ một vài lần rút ban đầu là thành phần Monte Carlo.
Có một số cách để xây dựng chuỗi Markov 'đẹp' (ví dụ: bộ lấy mẫu Gibbs, thuật toán Metropolis-Hastings).
Tôi nghĩ rằng có một trực giác tốt đẹp và đơn giản để đạt được từ thuật toán (chuỗi độc lập) Metropolis-Hastings.
Đầu tiên, mục tiêu là gì? Mục tiêu của MCMC là rút ra các mẫu từ một số phân phối xác suất mà không cần phải biết chiều cao chính xác của nó tại bất kỳ điểm nào. Cách MCMC đạt được điều này là "đi lang thang" trên bản phân phối đó theo cách mà lượng thời gian dành cho mỗi vị trí tỷ lệ thuận với chiều cao của bản phân phối. Nếu quy trình "đi loanh quanh" được thiết lập chính xác, bạn có thể đảm bảo rằng tỷ lệ này (giữa thời gian sử dụng và chiều cao của phân phối) đã đạt được.
Theo trực giác, những gì chúng ta muốn làm là đi bộ trên một bề mặt (sần) theo cách mà thời gian chúng ta dành (hoặc # mẫu được vẽ) ở mỗi vị trí tỷ lệ thuận với chiều cao của bề mặt tại vị trí đó. Vì vậy, ví dụ, chúng tôi muốn dành gấp đôi thời gian trên một đỉnh đồi ở độ cao 100m như chúng tôi làm trên một ngọn đồi gần đó ở độ cao 50m. Điều tuyệt vời là chúng ta có thể làm điều này ngay cả khi chúng ta không biết độ cao tuyệt đối của các điểm trên bề mặt: tất cả những gì chúng ta phải biết là độ cao tương đối . ví dụ: nếu một đỉnh đồi A cao gấp đôi đỉnh đồi B, thì chúng ta muốn dành thời gian gấp đôi thời gian tại A như chúng ta dành cho B.
Biến thể đơn giản nhất của thuật toán Metropolis-Hastings (lấy mẫu chuỗi độc lập) đạt được điều này như sau: giả sử rằng trong mỗi bước (rời rạc), chúng tôi chọn một vị trí "đề xuất" ngẫu nhiên mới (được chọn thống nhất trên toàn bộ bề mặt). Nếu vị trí được đề xuất cao hơn vị trí chúng ta đang đứng, hãy di chuyển đến vị trí đó. Nếu vị trí được đề xuất thấp hơn, sau đó di chuyển đến vị trí mới với xác suất p, trong đó p là tỷ lệ chiều cao của điểm đó với chiều cao của vị trí hiện tại. (ví dụ, lật một đồng xu với xác suất p nhận được đầu; nếu nó ngẩng đầu lên, di chuyển đến vị trí mới; nếu nó xuất hiện đuôi, hãy giữ nguyên vị trí của chúng ta). Giữ một danh sách các vị trí bạn đã từng ở mỗi bước và danh sách đó sẽ (theo nguyên tắc) có tỷ lệ thời gian phù hợp dành cho mỗi phần của bề mặt.
Có nhiều kế hoạch phức tạp hơn để đề xuất địa điểm mới và các quy tắc chấp nhận chúng, nhưng ý tưởng cơ bản vẫn là: (1) chọn một địa điểm "được đề xuất" mới; (2) tìm ra vị trí đó cao hơn hoặc thấp hơn so với vị trí hiện tại của bạn; (3) chắc chắn ở lại đặt hoặc di chuyển đến vị trí đó theo cách tôn trọng mục tiêu chung là dành thời gian tỷ lệ thuận với chiều cao của địa điểm.
Điều này hữu ích cho việc gì? Giả sử chúng ta có một mô hình xác suất của thời tiết cho phép chúng ta đánh giá A * P (thời tiết), trong đó A là một hằng số chưa biết. (Điều này thường xảy ra - nhiều mô hình thuận tiện để xây dựng theo cách mà bạn không thể xác định A là gì). Vì vậy, chúng tôi không thể đánh giá chính xác P ("mưa ngày mai"). Tuy nhiên, chúng tôi có thể chạy bộ lấy mẫu MCMC một lúc rồi hỏi: phần nào của các mẫu (hoặc "vị trí") đã kết thúc ở trạng thái "mưa ngày mai". Phần đó sẽ là dự báo thời tiết xác suất (dựa trên mô hình).
Có lẽ tôi sẽ nói một cái gì đó như thế này:
"Bất cứ khi nào chúng tôi muốn nói về xác suất, chúng tôi thực sự tích hợp mật độ. Trong phân tích Bayes, rất nhiều mật độ chúng tôi đưa ra không thể phân tích được: bạn chỉ có thể tích hợp chúng - nếu bạn có thể tích hợp chúng - với rất nhiều đau khổ. Vì vậy, những gì chúng ta làm thay vào đó là mô phỏng biến ngẫu nhiên rất nhiều, và sau đó tìm ra xác suất từ các số ngẫu nhiên mô phỏng của chúng ta. Nếu chúng ta muốn biết xác suất X nhỏ hơn 10, chúng ta sẽ tính tỷ lệ kết quả biến ngẫu nhiên mô phỏng nhỏ hơn 10 và sử dụng như ước tính của chúng tôi. Đó là phần "Monte Carlo", đó là ước tính xác suất dựa trên các số ngẫu nhiên. Với đủ số ngẫu nhiên mô phỏng, ước tính là rất tốt, nhưng vẫn còn vốn dĩ ngẫu nhiên.
"Vậy tại sao" Chuỗi Markov "? Bởi vì trong một số điều kiện kỹ thuật nhất định, bạn có thể tạo ra một quy trình không bộ nhớ (còn gọi là Markovian) có phân phối giới hạn giống như biến ngẫu nhiên mà bạn đang cố gắng mô phỏng. Bạn có thể lặp lại bất kỳ số loại quy trình mô phỏng khác nhau tạo ra các số ngẫu nhiên tương quan (chỉ dựa trên giá trị hiện tại của các số đó) và bạn được đảm bảo rằng một khi bạn kết hợp đủ kết quả, bạn sẽ kết thúc với một đống số trông " như thể "bằng cách nào đó bạn đã xoay sở để lấy các mẫu độc lập khỏi phân phối phức tạp mà bạn muốn biết.
"Vì vậy, ví dụ, nếu tôi muốn ước tính xác suất một biến ngẫu nhiên tiêu chuẩn bình thường nhỏ hơn 0,5, tôi có thể tạo ra mười nghìn nhận thức độc lập từ phân phối chuẩn thông thường và đếm số nhỏ hơn 0,5; giả sử tôi có 6905 ít hơn 0,5 trên tổng số 10000 mẫu, ước tính của tôi cho P (Z <0,5) sẽ là 0,655, không quá xa so với giá trị thực. Đó là ước tính của Monte Carlo.
danh sách các số tôi nhận được từ thủ tục sẽ được phân phối giống như một số lượng lớn rút ra từ thứ gì đó tạo ra các biến ngẫu nhiên bình thường. Điều này sẽ cho tôi một mô phỏng Markov Chain Monte Carlo cho một biến ngẫu nhiên tiêu chuẩn thông thường. Nếu tôi sử dụng điều này để ước tính xác suất, đó sẽ là ước tính MCMC. "
Hãy tưởng tượng bạn muốn tìm một chiến lược tốt hơn để đánh bại bạn bè của mình tại hội đồng quản trị trò chơi Monopoly. Đơn giản hóa những thứ quan trọng trong trò chơi cho câu hỏi: những thuộc tính nào mà mọi người nhắm đến nhiều nhất? Câu trả lời phụ thuộc vào cấu trúc của bảng, quy tắc của trò chơi và ném hai con xúc xắc.
Một cách để trả lời câu hỏi này là. Chỉ cần làm theo một mảnh duy nhất xung quanh bảng khi bạn ném xúc xắc và làm theo các quy tắc. Đếm số lần bạn hạ cánh trên mỗi tài sản (hoặc lập trình máy tính để thực hiện công việc cho bạn). Cuối cùng, nếu bạn có đủ kiên nhẫn hoặc bạn đã lập trình các quy tắc đủ tốt trong máy tính của mình, bạn sẽ xây dựng một bức tranh tốt về những tài sản nào có được nhiều doanh nghiệp nhất. Điều này sẽ giúp bạn giành chiến thắng thường xuyên hơn.
Những gì bạn đã làm là một phân tích Markov Chain Monte Carlo (MCMC). Hội đồng quản trị xác định các quy tắc. Nơi bạn hạ cánh tiếp theo chỉ phụ thuộc vào vị trí hiện tại của bạn chứ không phải nơi bạn đã ở trước đó và xác suất cụ thể được xác định bởi sự phân phối ném của hai con xúc xắc. MCMC là ứng dụng của ý tưởng này cho các hệ thống toán học hoặc vật lý như thời tiết ngày mai sẽ ra sao hoặc khi một hạt phấn hoa được đệm ngẫu nhiên bởi các phân tử khí sẽ kết thúc.
OK đây là nỗ lực tốt nhất của tôi tại một lời giải thích không chính thức và thô thiển.
Chuỗi Markov là một quá trình ngẫu nhiên có thuộc tính mà tương lai chỉ phụ thuộc vào trạng thái hiện tại của quy trình chứ không phải quá khứ tức là nó không có bộ nhớ. Một ví dụ về một quá trình ngẫu nhiên có thể là sàn giao dịch chứng khoán. Một ví dụ về Chuỗi Markov sẽ là một trò chơi cờ như Monopoly hoặc Snakes and Ladder nơi vị trí tương lai của bạn (sau khi lăn chết) sẽ chỉ phụ thuộc vào nơi bạn bắt đầu từ trước khi lăn, chứ không phải bất kỳ vị trí nào trước đó của bạn. Một ví dụ trong sách giáo khoa của Chuỗi Markov là "bước đi của người say rượu". Hãy tưởng tượng ai đó đang say và chỉ có thể di chuyển sang trái hoặc phải một bước. Người say di chuyển sang trái hoặc phải với xác suất bằng nhau. Đây là Chuỗi Markov nơi vị trí tương lai / tiếp theo của người say rượu chỉ phụ thuộc vào vị trí hiện tại của anh ta.
Các phương pháp Monte Carlo là các thuật toán tính toán (đơn giản là các bộ hướng dẫn) lấy mẫu ngẫu nhiên từ một số quy trình đang nghiên cứu. Chúng là một cách để ước tính một cái gì đó quá khó khăn hoặc tốn thời gian để tìm ra một cách xác định. Về cơ bản, chúng là một dạng mô phỏng máy tính của một số quy trình toán học hoặc vật lý. Tên gọi Monte Carlo xuất phát từ sự tương đồng giữa một sòng bạc và thế hệ số ngẫu nhiên. Quay trở lại ví dụ về trò chơi hội đồng quản trị của chúng tôi trước đó, có lẽ chúng tôi muốn biết liệu một số tài sản trên bảng Độc quyền có được truy cập thường xuyên hơn các tài sản khác không. Một thí nghiệm ở Monte Carlo sẽ liên quan đến việc gieo xúc xắc nhiều lần và đếm số lần bạn hạ cánh trên mỗi tài sản. Nó cũng có thể được sử dụng để tính tích phân số. (Rất không chính thức, chúng ta có thể nghĩ về một tích phân là khu vực dưới biểu đồ của một số chức năng. ) Tích hợp Monte Carlo hoạt động tuyệt vời trên các hàm chiều cao bằng cách lấy một mẫu ngẫu nhiên các điểm của hàm và tính toán một số loại trung bình tại các điểm khác nhau này. Bằng cách tăng kích thước mẫu, định luật về số lượng lớn cho chúng ta biết chúng ta có thể tăng độ chính xác của phép tính gần đúng bằng cách bao hàm ngày càng nhiều hàm.
Hai khái niệm này có thể được kết hợp để giải quyết một số vấn đề khó khăn trong các lĩnh vực như suy luận Bayes, sinh học tính toán, v.v ... trong đó các tích phân đa chiều cần được tính toán để giải quyết các vấn đề phổ biến. Ý tưởng là xây dựng Chuỗi Markov hội tụ đến phân phối xác suất mong muốn sau một số bước. Trạng thái của chuỗi sau một số lượng lớn các bước sau đó được sử dụng làm mẫu từ phân phối mong muốn và quy trình được lặp lại. Có nhiều thuật toán MCMC khác nhau sử dụng các kỹ thuật khác nhau để tạo Chuỗi Markov. Những cái phổ biến bao gồm Metropolis-Hastings và Gibbs Sampler.
Trích từ phương pháp Bayes cho tin tặc
Khi chúng tôi thiết lập một vấn đề suy luận Bayes với ẩn số, chúng tôi đang ngầm tạo một không gian cho các phân phối trước đó tồn tại. Liên kết với không gian là một chiều bổ sung, mà chúng tôi có thể mô tả là bề mặt hoặc đường cong của không gian , điều đó phản ánh xác suất trước của một điểm cụ thể. Bề mặt của không gian được xác định bởi các phân phối trước của chúng tôi. Ví dụ: nếu chúng ta có hai ẩn số và và cả hai đều đồng nhất trên [0,5], không gian được tạo là hình vuông có chiều dài 5 và bề mặt là một mặt phẳng phẳng nằm trên hình vuông (đại diện cho mọi điểm có khả năng như nhau).
Ngoài ra, nếu hai linh mục là và , thì không gian là tất cả các số thứ tự trên mặt phẳng 2 chiều và bề mặt do các linh mục tạo ra trông giống như một mặt nước rơi bắt đầu tại điểm (0,0) và chảy qua các số dương.Exp ( 10 )
Hình dung dưới đây chứng minh điều này. Màu đỏ càng đậm, xác suất trước mà các ẩn số ở vị trí đó càng nhiều. Ngược lại, các khu vực có màu xanh đậm hơn thể hiện rằng các linh mục của chúng tôi chỉ định xác suất rất thấp cho những điều chưa biết đang ở đó.
Đây là những ví dụ đơn giản trong không gian 2D, nơi bộ não của chúng ta có thể hiểu rõ các bề mặt. Trong thực tế, không gian và bề mặt được tạo ra bởi các linh mục của chúng tôi có thể có chiều cao hơn nhiều.
Nếu những bề mặt mô tả của chúng tôi phân phối trước khi vào ẩn số, những gì xảy ra với không gian của chúng tôi sau khi chúng tôi đã quan sát dữ liệu . Dữ liệu không thay đổi không gian, nhưng nó thay đổi bề mặt của không gian bằng cách kéo và kéo căng vải của bề mặt để phản ánh nơi các tham số thực có khả năng sống. Nhiều dữ liệu hơn có nghĩa là kéo và kéo dài hơn, và hình dạng ban đầu của chúng ta trở nên sai lệch hoặc không đáng kể so với hình dạng mới được hình thành. Ít dữ liệu hơn và hình dạng ban đầu của chúng tôi hiện diện nhiều hơn. Bất kể, bề mặt kết quả mô tả phân phối sau . Một lần nữa tôi phải nhấn mạnh rằng, thật không may, không thể hình dung điều này trong các kích thước lớn hơn. Đối với hai chiều, dữ liệu về cơ bảnXđẩy lên bề mặt ban đầu để làm cho những ngọn núi cao . Lượng đẩy lên được chống lại bởi xác suất trước, do đó xác suất trước ít hơn có nghĩa là nhiều kháng cự hơn. Do đó, trong trường hợp gấp đôi theo cấp số nhân ở trên, một ngọn núi (hoặc nhiều ngọn núi) có thể phun trào gần góc (0,0) sẽ cao hơn nhiều so với những ngọn núi phun trào gần hơn (5,5), vì có nhiều lực cản gần hơn (5,5). Ngọn núi, hoặc có lẽ nói chung hơn, các dãy núi, phản ánh xác suất sau của nơi các thông số thực sự có khả năng được tìm thấy.
Giả sử các linh mục được đề cập ở trên đại diện cho các tham số khác nhau của hai phân phối Poisson. Chúng tôi quan sát một vài điểm dữ liệu và hình dung cảnh quan mới.
Biểu đồ bên trái là cảnh quan bị biến dạng với các mục sư và cốt truyện bên phải là cảnh quan bị biến dạng với các thầy tu theo cấp số nhân. Các cảnh quan phía sau trông khác nhau. Cảnh quan theo cấp số mũ đặt rất ít trọng lượng sau cho các giá trị ở góc trên bên phải: điều này là do ưu tiên không đặt nhiều trọng lượng ở đó , trong khi cảnh quan trước đồng nhất rất vui khi đặt trọng lượng sau ở đó. Ngoài ra, điểm cao nhất, tương ứng với màu đỏ đậm nhất, bị lệch về phía (0,0) trong trường hợp hàm mũ, là kết quả của số mũ trước khi đặt nhiều wieght trước vào góc (0,0).
Dấu chấm màu đen đại diện cho các tham số thực sự. Ngay cả với 1 điểm mẫu, như những gì đã được mô phỏng ở trên, các ngọn núi cố gắng chứa tham số thực sự. Tất nhiên, suy luận với cỡ mẫu là 1 là vô cùng ngây thơ, và việc chọn cỡ mẫu nhỏ như vậy chỉ mang tính minh họa.
Chúng ta nên khám phá không gian sau bị biến dạng được tạo ra bởi bề mặt trước đó và dữ liệu quan sát để tìm các dãy núi phía sau. Tuy nhiên, chúng ta không thể ngây thơ tìm kiếm không gian: bất kỳ nhà khoa học máy tính nào cũng sẽ nói với bạn rằng việc vượt qua không gian chiều là khó khăn theo cấp số nhân trong : kích thước của không gian nhanh chóng tăng lên khi chúng ta tăng (xem lời nguyền của chiều ). Hy vọng gì chúng ta phải tìm thấy những ngọn núi ẩn? Ý tưởng đằng sau MCMC là thực hiện tìm kiếm thông minh về không gian. Để nói "tìm kiếm" ngụ ý chúng tôi đang tìm kiếm một đối tượng cụ thể, có lẽ không phải là một mô tả chính xác về những gì MCMC đang làm. Nhớ lại: MCMC trả về mẫuN Ntừ phân phối sau, không phải phân phối chính nó. Kéo dài sự tương tự miền núi của chúng tôi đến giới hạn của nó, MCMC thực hiện một nhiệm vụ tương tự như liên tục hỏi "Khả năng viên sỏi này tôi tìm thấy là từ ngọn núi mà tôi đang tìm kiếm?", Và hoàn thành nhiệm vụ của mình bằng cách trả lại hàng ngàn viên sỏi được chấp nhận với hy vọng tái tạo lại ngọn núi nguyên thủy. Trong biệt ngữ MCMC và PyMC, chuỗi "sỏi" được trả về là các mẫu, thường được gọi là dấu vết .
Khi tôi nói MCMC tìm kiếm thông minh, ý tôi là MCMC hy vọng sẽ hội tụ về phía các khu vực có xác suất hậu nghiệm cao. MCMC thực hiện điều này bằng cách khám phá các vị trí gần đó và di chuyển vào các khu vực có xác suất cao hơn. Một lần nữa, có lẽ "hội tụ" không phải là một thuật ngữ chính xác để mô tả sự tiến triển của MCMC. Hội tụ thường ngụ ý di chuyển về một điểm trong không gian, nhưng MCMC di chuyển tới một khu vực rộng hơn trong không gian và đi ngẫu nhiên trong khu vực đó, lấy mẫu từ khu vực đó.
Lúc đầu, việc trả lại hàng ngàn mẫu cho người dùng nghe có vẻ như là một cách không hiệu quả để mô tả các bản phân phối sau. Tôi sẽ tranh luận rằng điều này là cực kỳ hiệu quả. Xem xét các khả năng thay thế ::
Bên cạnh các lý do tính toán, có thể lý do mạnh nhất để trả lại các mẫu là chúng ta có thể dễ dàng sử dụng Định luật số lớn để giải quyết các vấn đề khó khăn khác. Tôi hoãn cuộc thảo luận này cho chương tiếp theo.
Có một nhóm lớn các thuật toán thực hiện MCMC. Đơn giản, hầu hết các thuật toán có thể được thể hiện ở mức cao như sau:
1. Start at current position.
2. Propose moving to a new position (investigate a pebble near you ).
3. Accept the position based on the position's adherence to the data
and prior distributions (ask if the pebble likely came from the mountain).
4. If you accept: Move to the new position. Return to Step 1.
5. After a large number of iterations, return the positions.
Bằng cách này, chúng tôi di chuyển theo hướng chung về phía các khu vực nơi phân phối sau tồn tại và thu thập các mẫu một cách tiết kiệm trên hành trình. Khi chúng tôi đạt đến phân phối sau, chúng tôi có thể dễ dàng thu thập các mẫu vì tất cả chúng đều thuộc về phân phối sau.
Nếu vị trí hiện tại của thuật toán MCMC nằm trong khu vực có xác suất cực kỳ thấp, thường xảy ra khi thuật toán bắt đầu (thường ở một vị trí ngẫu nhiên trong không gian), thuật toán sẽ di chuyển ở các vị trí không có khả năng từ phía sau nhưng tốt hơn mọi thứ khác gần đó. Do đó, các bước di chuyển đầu tiên của thuật toán không phản ánh của hậu thế.
Vì vậy, có rất nhiều câu trả lời ở đây được diễn giải từ sách giáo khoa thống kê / xác suất, Wikipedia, v.v. Tôi tin rằng chúng ta có "cư sĩ" nơi tôi làm việc; Tôi nghĩ rằng họ đang ở trong bộ phận tiếp thị. Nếu tôi phải giải thích bất cứ điều gì về kỹ thuật cho họ, tôi sẽ áp dụng quy tắc "hiển thị đừng nói." Với quy tắc đó trong tâm trí, tôi có thể sẽ cho họ thấy một cái gì đó như thế này.
Ý tưởng ở đây là cố gắng viết mã thuật toán mà tôi có thể dạy đánh vần - không phải bằng cách học tất cả hàng trăm (hàng nghìn?) Quy tắc như Khi thêm một kết thúc vào một từ kết thúc bằng một chữ im lặng, bỏ e cuối cùng nếu kết thúc bắt đầu bằng một nguyên âm . Một lý do không hiệu quả là tôi không biết các quy tắc đó (tôi thậm chí không chắc rằng quy tắc tôi vừa đọc là chính xác). Thay vào đó, tôi sẽ dạy nó đánh vần bằng cách hiển thị cho nó một loạt các từ được viết đúng chính tả và để nó trích xuất các quy tắc từ những từ đó, ít nhiều là bản chất của Machine Learning, bất kể thuật toán - trích xuất mẫu và nhận dạng mẫu .
Tiêu chí thành công là đánh vần chính xác một từ mà thuật toán chưa từng thấy trước đây (tôi nhận ra điều đó có thể xảy ra do cơ hội thuần túy, nhưng điều đó sẽ không xảy ra với những người tiếp thị, vì vậy tôi sẽ bỏ qua - cộng với tôi sẽ có thuật toán cố gắng đánh vần không phải một từ, nhưng rất nhiều, vì vậy không có khả năng chúng ta sẽ bị lừa bởi một vài dự đoán may mắn).
Một giờ trước, tôi đã tải xuống (dưới dạng tệp văn bản đơn giản) từ Trang web Project Gutenberg xuất sắc, tiểu thuyết Siddhartha của Herman Hesse . Tôi sẽ sử dụng các từ trong tiểu thuyết này để dạy thuật toán cách đánh vần.
Vì vậy, tôi đã mã hóa thuật toán bên dưới để quét cuốn tiểu thuyết này, ba chữ cái cùng một lúc (mỗi từ có một ký tự bổ sung ở cuối, đó là 'khoảng trắng' hoặc cuối từ). Chuỗi ba chữ cái có thể cho bạn biết rất nhiều - ví dụ, chữ 'q' gần như luôn luôn được theo sau bởi 'u'; chuỗi 'ty' thường xảy ra ở cuối từ; z hiếm khi làm, và như vậy. (Lưu ý: Tôi có thể dễ dàng cho nó ăn toàn bộ từ để huấn luyện nó nói thành câu hoàn chỉnh - chính xác cùng một ý tưởng, chỉ cần một vài điều chỉnh cho mã.)
Mặc dù vậy, không có gì liên quan đến MCMC, điều đó xảy ra sau khi đào tạo, khi chúng tôi đưa ra thuật toán một vài chữ cái ngẫu nhiên (như một hạt giống) và nó bắt đầu hình thành 'từ'. Làm thế nào để thuật toán xây dựng các từ? Hãy tưởng tượng rằng nó có khối 'qua'; nó thêm chữ cái nào tiếp theo? Trong quá trình đào tạo, thuật toán đã xây dựng một ma trận tần số l * etter-sequ * lớn từ tất cả hàng ngàn từ trong tiểu thuyết. Ở đâu đó trong ma trận đó là khối ba chữ cái 'qua' và tần số cho các ký tự có thể theo trình tự. Thuật toán chọn một chữ cái dựa trên các tần số có thể theo nó. Vì vậy, chữ cái mà thuật toán chọn tiếp theo phụ thuộc vào - và chỉ dựa vào - ba chữ cái cuối cùng trong hàng đợi xây dựng từ.
Vì vậy, đó là một thuật toán Markov Chain Monte Carlo.
Tôi nghĩ có lẽ cách tốt nhất để minh họa cách nó hoạt động là hiển thị kết quả dựa trên các cấp độ đào tạo khác nhau. Mức độ đào tạo được thay đổi bằng cách thay đổi số lần vượt qua thuật toán mặc dù cuốn tiểu thuyết - càng nhiều lần vượt qua thì độ trung thực của ma trận tần số chuỗi ký tự của nó càng lớn. Dưới đây là kết quả - dưới dạng đầu ra chuỗi 100 ký tự theo thuật toán - sau khi đào tạo về tiểu thuyết 'Siddharta'.
Một lần đi qua cuốn tiểu thuyết, Siddhartha :
sau đó whoicks ger wiff all mothany stand ar you livid theartim mulled sullintion
(Ngay lập tức, nó học được cách nói tiếng Wales gần như hoàn hảo; tôi không mong đợi điều đó.)
Sau hai lần đi qua tiểu thuyết:
ack wor prenskinith cho thấy một twor nhìn thấy theatin theatin đất đai là hình bầu dục ở đó
Sau 10 lần vượt qua:
Mặc dù vậy, nên cầu nguyện với ack bây giờ có nước con chó của cô ấy đau chân không phải là bộ nhớ yếu
Và đây là mã (trong Python, tôi gần như chắc chắn rằng điều này có thể được thực hiện trong R bằng cách sử dụng gói MCMC, trong đó có một số, chỉ trong 3-4 dòng)
def create_words_string(raw_string) :
""" in case I wanted to use training data in sentence/paragraph form;
this function will parse a raw text string into a nice list of words;
filtering: keep only words having more than 3 letters and remove
punctuation, etc.
"""
pattern = r'\b[A-Za-z]{3,}\b'
pat_obj = re.compile(pattern)
words = [ word.lower() for word in pat_obj.findall(raw_string) ]
pattern = r'\b[vixlm]+\b'
pat_obj = re.compile(pattern)
return " ".join([ word for word in words if not pat_obj.search(word) ])
def create_markov_dict(words_string):
# initialize variables
wb1, wb2, wb3 = " ", " ", " "
l1, l2, l3 = wb1, wb2, wb3
dx = {}
for ch in words_string :
dx.setdefault( (l1, l2, l3), [] ).append(ch)
l1, l2, l3 = l2, l3, ch
return dx
def generate_newtext(markov_dict) :
simulated_text = ""
l1, l2, l3 = " ", " ", " "
for c in range(100) :
next_letter = sample( markov_dict[(l1, l2, l3)], 1)[0]
simulated_text += next_letter
l1, l2, l3 = l2, l3, next_letter
return simulated_text
if __name__=="__main__" :
# n = number of passes through the training text
n = 1
q1 = create_words_string(n * raw_str)
q2 = create_markov_dict(q1)
q3 = generate_newtext(q2)
print(q3)
MCMC thường được sử dụng thay thế cho các kỹ thuật mô phỏng Monte Carlo thô. Cả MCMC và các kỹ thuật Monte Carlo khác đều được sử dụng để đánh giá các tích phân khó nhưng MCMC có thể được sử dụng chung hơn.
Ví dụ, một vấn đề phổ biến trong thống kê là tính toán kết quả trung bình liên quan đến một số mô hình xác suất / ngẫu nhiên. Cả hai kỹ thuật MCMC và Monte Carlo sẽ giải quyết vấn đề này bằng cách tạo ra một chuỗi các kết quả mô phỏng mà chúng ta có thể sử dụng để ước tính giá trị trung bình thực.
Cả MCMC và các kỹ thuật Monte Carlo thô đều hoạt động như tỷ lệ mô phỏng dài hạn bằng với kết quả nhất định sẽ bằng * với xác suất được mô hình hóa của kết quả đó. Do đó, bằng cách tạo ra đủ mô phỏng, kết quả được tạo ra bởi cả hai phương pháp sẽ chính xác.
* Tôi nói bình đẳng mặc dù nói chung tôi nên nói về các bộ có thể đo lường được. Tuy nhiên, một giáo dân có lẽ sẽ không hứng thú với điều này *
Tuy nhiên, trong khi Monte Carlo thô liên quan đến việc tạo ra nhiều mô phỏng độc lập, mỗi mô phỏng được phân phối theo phân phối được mô hình hóa, MCMC liên quan đến việc tạo ra một bước đi ngẫu nhiên trong "chuyến thăm" dài hạn mỗi kết quả với tần suất mong muốn.
Do đó, mẹo cho MCMC là chọn một bước đi ngẫu nhiên sẽ "truy cập" từng kết quả với tần suất dài hạn mong muốn.
Một ví dụ đơn giản có thể là mô phỏng từ một mô hình cho biết xác suất kết quả "A" là 0,5 và kết quả "B" là 0,5. Trong trường hợp này, nếu tôi bắt đầu đi bộ ngẫu nhiên ở vị trí "A" và quy định rằng trong mỗi bước, nó chuyển sang vị trí khác với xác suất 0,2 (hoặc bất kỳ xác suất nào khác lớn hơn 0), tôi có thể chắc chắn rằng sau một mức lớn số bước đi bộ ngẫu nhiên sẽ truy cập vào mỗi "A" và "B" trong khoảng 50% các bước - phù hợp với xác suất được quy định bởi mô hình của chúng tôi.
Đây rõ ràng là một ví dụ rất nhàm chán. Tuy nhiên, hóa ra MCMC thường được áp dụng trong các tình huống khó áp dụng tiêu chuẩn Monte Carlo hoặc các kỹ thuật khác.
Bạn có thể tìm thấy một bài viết bao gồm những điều cơ bản về nó là gì và tại sao nó hoạt động ở đây:
Tôi là một nhà phân tích DNA sử dụng phần mềm xác định kiểu gen xác suất hoàn toàn liên tục để giải thích bằng chứng DNA và tôi phải giải thích cách thức hoạt động của ban giám khảo. Phải thừa nhận rằng, chúng tôi đơn giản hóa hơn và tôi nhận ra một số điều này qua việc đơn giản hóa hy sinh tính chính xác của các chi tiết cụ thể nhân danh cải thiện sự hiểu biết chung. Nhưng, trong bối cảnh bồi thẩm đoàn hiểu cách quy trình này được sử dụng trong diễn giải DNA mà không cần bằng cấp học thuật và nhiều năm kinh nghiệm chuyên môn, họ có được ý chính :)
Bối cảnh: Phần mềm sử dụng đô thị Hastings MCMC và một mô hình sinh học mô phỏng hành vi đã biết của cấu hình DNA (mô hình được xây dựng dựa trên dữ liệu xác thực được tạo bởi phòng thí nghiệm phân tích nhiều cấu hình DNA từ các điều kiện đã biết thể hiện phạm vi gặp phải trong casework chưa biết). Có 8 chuỗi độc lập và chúng tôi đánh giá sự hội tụ để xác định xem có nên chạy lại tăng ghi và chấp nhận hay không (mặc định burnin 100k chấp nhận và đăng 400k chấp nhận)
Khi được hỏi bởi công tố / bào chữa về MCMC: chúng tôi giải thích nó là viết tắt của chuỗi markov Monte Carlo và đại diện cho một lớp / loại thuật toán đặc biệt được sử dụng để giải quyết vấn đề phức tạp và thuật toán chỉ là một từ ưa thích đề cập đến một loạt các thủ tục hoặc thói quen được thực hiện bởi một máy tính ... thuật toán mcmc hoạt động bằng cách đề xuất một giải pháp, mô phỏng giải pháp đó, sau đó đánh giá mức độ mô phỏng đó phản ánh dữ liệu bằng chứng thực tế được quan sát ... một mô phỏng phù hợp với quan sát bằng chứng có xác suất cao hơn mô phỏng không phù hợp với quan sát tốt ... qua nhiều lần lấy mẫu / dự đoán lặp lại các giải pháp được đề xuất, chuỗi Markov di chuyển khỏi các giải pháp xác suất thấp đối với các giải pháp xác suất cao phù hợp hơn / giải thích hồ sơ bằng chứng quan sát được, cho đến khi cân bằng cuối cùng đạt được,có nghĩa là thuật toán có khả năng hạn chế để lấy mẫu các đề xuất mới mang lại xác suất tăng đáng kể
Khi được hỏi về đô thị Hastings: chúng tôi giải thích đó là sự tinh chỉnh đối với thuật toán MCMC mô tả quá trình ra quyết định của nó chấp nhận hoặc từ chối đề xuất ... thông thường điều này được giải thích với sự tương tự của trò chơi trẻ em "nóng / lạnh" nhưng tôi có thể đã cân nhắc sử dụng " vuốt sang phải hoặc trái "khi ban giám khảo đặc biệt trẻ !! : p Nhưng bằng cách sử dụng phép tương tự nóng / lạnh, chúng tôi luôn chấp nhận dự đoán nóng và đôi khi sẽ chấp nhận dự đoán lạnh một phần nhỏ thời gian và giải thích mục đích đôi khi chấp nhận dự đoán lạnh là để đảm bảo chuỗi có phạm vi khả năng rộng hơn như trái ngược với việc bị mắc kẹt xung quanh một đề xuất cụ thể trước khi cân bằng thực tế
Chỉnh sửa để thêm / làm rõ: với sự tương tự nóng / lạnh, chúng tôi giải thích rằng trong trò chơi của trẻ em, nhà lãnh đạo chọn một đối tượng / khu vực mục tiêu trong phòng và người chơi thay phiên nhau đoán hướng di chuyển so với vị trí / vị trí hiện tại của họ. Người lãnh đạo bảo họ thay đổi vị trí / di chuyển nếu đó là một phỏng đoán nóng và họ mất lượt / giữ nguyên vị trí nếu đó là một phỏng đoán lạnh lùng. Tương tự, trong phần mềm của chúng tôi, quyết định di chuyển / chấp nhận chỉ phụ thuộc vào xác suất của đề xuất so với xác suất của vị trí hiện đang giữ ... TUY NHIÊN, mục tiêu được xác định trước / được biết bởi nhà lãnh đạo trong trò chơi trẻ em trong khi mục tiêu trong phần mềm của chúng tôi không được xác định trước - nó hoàn toàn không biết (cũng là lý do tại sao nó '
Như tôi đã nói, siêu siêu cơ bản và hoàn toàn thiếu chi tiết kỹ thuật vì mục đích cải thiện khả năng hiểu - chúng tôi cố gắng giải thích ở cấp độ giáo dục trung học cơ sở. Hãy góp ý. Tôi sẽ kết hợp chúng.
Câu hỏi này rộng nhưng câu trả lời thường khá bình thường. Ngoài ra, bạn có thể xem bài viết này cung cấp một mô tả toán học ngắn gọn về một loại rộng các thuật toán MCMC bao gồm các thuật toán Metropolis-Hastings, lấy mẫu Gibbs, phương pháp biến đổi trong các phương pháp và các biến phụ trợ, lấy mẫu lát, đề xuất đệ quy, lấy mẫu định hướng, Langevin và Hamiltonian Monte Carlo, lấy mẫu NUTS, thuật toán giả đô-đô-la giả, và giả giả Hamiltonian Monte Carlo, như các tác giả đã thảo luận.
Một đánh giá đáng tin cậy được đưa ra ở đây
Tôi sẽ tìm thêm thời gian để xây dựng nội dung của nó theo định dạng của stackexchange.
Video này (bắt đầu từ 5:50) có một tuyên bố trực giác rất tốt.
Hãy tưởng tượng bạn muốn lấy mẫu các điểm nằm trên các nhánh màu xanh lá cây (đa chiều) trong bức tranh này. Nếu bạn ném các điểm lên khắp siêu không gian màu đen và kiểm tra giá trị của chúng, thì bạn đang CHẤT LƯỢNG rất nhiều năng lượng lấy mẫu (tìm kiếm). Vì vậy, sẽ hợp lý hơn khi kiểm soát chiến lược lấy mẫu của bạn (có thể được tự động hóa) để chọn các điểm gần hơn với các nhánh xanh (nơi quan trọng). Các nhánh màu xanh lá cây có thể được tìm thấy bằng cách vô tình bị đánh trúng (hoặc bị kiểm soát) và phần còn lại của nỗ lực lấy mẫu (điểm đỏ) sẽ được tạo sau đó. Lý do màu đỏ bị thu hút vào đường màu xanh là do ma trận chuyển tiếp chuỗi Markov hoạt động như công cụ lấy mẫu của bạn.
Vì vậy, theo thuật ngữ của giáo dân, MCMC là một phương pháp lấy mẫu tiết kiệm năng lượng (chi phí thấp), đặc biệt là khi làm việc trong một không gian rộng lớn và 'tối' (đa chiều).