Chính xác thì hạt giống trong một trình tạo số ngẫu nhiên là gì?


21

Tôi đã thử một số tìm kiếm thông thường trên google, v.v. nhưng hầu hết các câu trả lời tôi tìm thấy đều hơi mơ hồ hoặc cụ thể về ngôn ngữ / thư viện như Python hoặc C ++, stdlib.hv.v.

Ví dụ, nhiều người nói rằng hạt giống là điểm bắt đầu của trình tạo số ngẫu nhiên và cùng một hạt giống luôn tạo ra cùng một số ngẫu nhiên. Nó có nghĩa là gì? Có phải nó có nghĩa là số đầu ra là một hàm xác định của một hạt giống cụ thể, và tính ngẫu nhiên đến từ giá trị của hạt giống? Nhưng nếu đó là trường hợp, thì bằng cách cung cấp hạt giống, phải chăng chúng ta, những lập trình viên, tạo ra sự ngẫu nhiên thay vì để máy làm điều đó?

Ngoài ra, điểm bắt đầu có ý nghĩa gì trong bối cảnh này? Đây có phải là một cách không nghiêm ngặt để nói một phần tử xX của miền của bản đồ f:XY ? Hay tôi đang nhận được một cái gì đó sai?


7
Tôi không cảm thấy đủ điều kiện để viết câu trả lời, nhưng bạn có thể tìm thấy bài viết Wikipedia về khai sáng Mersenne Twister , đặc biệt là phần khởi tạo . Nói tóm lại, một công cụ tạo số giả như Mersenne Twister cuối cùng sẽ lặp lại đầu ra của nó. Trong trường hợp của MT, khoảng thời gian có độ dài 2^19937 − 1. Hạt giống là điểm của chuỗi cực kỳ dài này, nơi máy phát bắt đầu. Vì vậy, có, nó là xác định.
IonicSolutions

1
Một bộ tạo số giả ngẫu nhiên là một danh sách các số cố định lặp lại vô tận. Nó bắt đầu từ đâu? Bạn có thể nói.
whuber

2
@whuber Tôi thực sự nghĩ rằng nhận xét của bạn sẽ là một câu trả lời tuyệt vời.
David Z

Câu trả lời:


22

Hầu hết các trình tạo số giả ngẫu nhiên (PRNG) được xây dựng trên các thuật toán liên quan đến một số phương pháp đệ quy bắt đầu từ một giá trị cơ sở được xác định bởi một đầu vào gọi là "hạt giống". PRNG mặc định trong hầu hết các phần mềm thống kê (R, Python, Stata, v.v.) là thuật toán Mersenne Twister MT19937, được đặt ra trong Matsumoto và Nishimura (1998) . Đây là một thuật toán phức tạp, vì vậy tốt nhất bạn nên đọc bài báo về nó nếu bạn muốn biết nó hoạt động chi tiết như thế nào. Trong thuật toán cụ thể này, có một mối quan hệ lặp lại của mức và hạt giống đầu vào của bạn là một tập các vectơ ban đầu x 0 , x 1 , . . . ,n . Thuật toán sử dụng mối quan hệ lặp lại tuyến tính tạo ra:x0,x1,...,xn1

xn+k=f(xk,xk+1,xk+m,r,A),

trong đó rA là các đối tượng có thể được chỉ định làm tham số trong thuật toán. Do hạt giống đưa ra tập hợp vectơ ban đầu (và đưa ra các tham số cố định khác cho thuật toán), chuỗi các số giả ngẫu nhiên được tạo bởi thuật toán được cố định. Nếu bạn thay đổi hạt giống thì bạn thay đổi các vectơ ban đầu, thay đổi các số giả ngẫu nhiên được tạo bởi thuật toán. Tất nhiên đây là chức năng của hạt giống.1mnrA

Bây giờ, điều quan trọng cần lưu ý rằng đây chỉ là một ví dụ, sử dụng thuật toán MT19937. Có nhiều PRNG có thể được sử dụng trong phần mềm thống kê và mỗi PRNG liên quan đến các phương pháp đệ quy khác nhau, và do đó, hạt giống có nghĩa là một điều khác nhau (về mặt kỹ thuật) trong mỗi phần mềm. Bạn có thể tìm thấy một thư viện các PRNGs cho Rtrong tài liệu này , trong đó liệt kê các thuật toán có sẵn và các loại giấy tờ mà mô tả các thuật toán.

Mục đích của hạt giống là cho phép người dùng "khóa" trình tạo số giả ngẫu nhiên, để cho phép phân tích có thể nhân rộng. Một số nhà phân tích muốn đặt hạt giống bằng cách sử dụng trình tạo số ngẫu nhiên (TRNG) thực sự sử dụng đầu vào phần cứng để tạo số hạt giống ban đầu, sau đó báo cáo đây là số bị khóa. Nếu hạt giống được đặt và báo cáo bởi người dùng ban đầu thì kiểm toán viên có thể lặp lại phân tích và thu được cùng một chuỗi các số giả ngẫu nhiên như người dùng ban đầu. Nếu hạt giống không được đặt thì thuật toán thường sẽ sử dụng một số loại hạt giống mặc định (ví dụ: từ đồng hồ hệ thống) và nói chung sẽ không thể sao chép ngẫu nhiên.


+1. Sẽ tốt hơn nếu thêm những gì (thường) xảy ra nếu một người không cung cấp hạt giống một cách rõ ràng.
amip nói phục hồi Monica

1
@amoeba: Đoạn thứ 4 trong câu trả lời của tôi, thảo luận ngắn gọn về điều này.
BruceET

1
Trong khi điều này trả lời những điều cơ bản của câu hỏi. Nó không chạm vào thực tế tại sao chúng ta cần điều này trong các mô phỏng. Rất khó để tạo ra sự ngẫu nhiên ĐÚNG - và khi bạn có điều đó, bạn không thể sao chép câu trả lời ban đầu! Nhập PNRG ... với tất cả các vấn đề của nó.
Paul Palmpje

@amoeba: Theo yêu cầu, tôi đã thêm một đoạn bổ sung cho phần này.
Phục hồi Monica

1
Cảm ơn. "Hạt giống mặc định" nghe có vẻ giống như nó luôn có cùng giá trị hạt giống; ý tôi là thường thì hạt giống được lấy từ đồng hồ hệ thống. Điều này tôi nghĩ là tốt để biết.
amip nói rằng Phục hồi Monica

16

Đầu tiên, không có sự ngẫu nhiên thực sự trong máy tính ngày nay tạo ra "số ngẫu nhiên". Tất cả các trình tạo giả ngẫu nhiên sử dụng các phương pháp xác định. (Có thể, máy tính lượng tử sẽ thay đổi điều đó.)

Nhiệm vụ khó khăn là tạo ra các thuật toán tạo ra đầu ra không thể phân biệt một cách có ý nghĩa với dữ liệu đến từ một nguồn thực sự ngẫu nhiên.

Bạn đúng khi đặt hạt giống bắt đầu bạn tại một điểm bắt đầu được biết đến cụ thể trong một danh sách dài các số giả danh. Đối với các trình tạo được triển khai trong R, Python, v.v., danh sách này cực kỳ dài. Đủ lâu để thậm chí dự án mô phỏng khả thi lớn nhất sẽ không vượt quá 'thời gian' của trình tạo để các giá trị bắt đầu chu kỳ lại.

Trong nhiều ứng dụng thông thường, mọi người không đặt hạt giống. Sau đó, một hạt giống không thể đoán trước được chọn tự động (ví dụ: từ micro giây trên đồng hồ hệ điều hành). Các trình tạo giả ngẫu nhiên trong sử dụng chung đã phải chịu các thử nghiệm về pin, phần lớn bao gồm các vấn đề được chứng minh là khó mô phỏng với các trình tạo không đạt yêu cầu trước đó.

Thông thường, đầu ra của một trình tạo bao gồm các giá trị không, với mục đích thực tế, có thể phân biệt với các số được chọn thực sự ở dạng ngẫu nhiên, phân phối đồng đều trên Sau đó, các số giả ngẫu nhiên đó được thao tác sao cho khớp với những gì người ta sẽ lấy mẫu một cách ngẫu nhiên từ các phân phối khác như nhị thức, Poisson, bình thường, hàm mũ, v.v.(0,1).

Một thử nghiệm của máy phát điện là xem các cặp liên tiếp của nó trong 'các quan sát' được mô phỏng như thực sự trông giống như chúng đang lấp đầy hình vuông đơn vị một cách ngẫu nhiên. (Thực hiện hai lần dưới đây.) Cái nhìn hơi giống nhau là kết quả của sự biến đổi vốn có. Sẽ rất đáng ngờ khi có được một cốt truyện trông hoàn toàn đồng nhất màu xám. [Tại một số độ phân giải, có thể có một mẫu moire thông thường; vui lòng thay đổi độ phóng đại lên hoặc xuống để loại bỏ hiệu ứng không có thật đó nếu nó xảy ra.]Unif(0,1)

set.seed(1776);  m = 50000
par(mfrow=c(1,2))
  u = runif(m);  plot(u[1:(m-1)], u[2:m], pch=".")
  u = runif(m);  plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))

nhập mô tả hình ảnh ở đây

Nó đôi khi hữu ích để thiết lập một hạt giống. Một số cách sử dụng như sau:

  1. Khi lập trình và gỡ lỗi , thuận tiện để có đầu ra dự đoán. Vì vậy, nhiều lập trình viên đưa ra một set.seedtuyên bố khi bắt đầu một chương trình cho đến khi viết và gỡ lỗi được thực hiện.

  2. Khi dạy về mô phỏng. Nếu tôi muốn cho học sinh thấy rằng tôi có thể mô phỏng các cuộn chết bằng cách sử dụng samplehàm trong R, tôi có thể gian lận, chạy nhiều mô phỏng và chọn một mô phỏng gần nhất với giá trị lý thuyết mục tiêu. Nhưng điều đó sẽ cho một ấn tượng không thực tế về cách mô phỏng thực sự hoạt động.

    Nếu tôi đặt hạt giống khi bắt đầu, mô phỏng sẽ nhận được kết quả tương tự mỗi lần. Học sinh có thể đọc lại bản sao chương trình của tôi để đảm bảo nó mang lại kết quả như mong muốn. Sau đó, họ có thể chạy mô phỏng của riêng mình, bằng hạt giống của mình hoặc bằng cách để chương trình chọn nơi bắt đầu.

    3/36=1/12=0.08333333.
    2(1/12)(11/12)/106=0.00055.
    set.seed(703);  m = 10^6
    s = replicate( m, sum(sample(1:6, 2, rep=T)) )
    mean(s == 10)
    [1] 0.083456         # aprx 1/12 = 0.0833
    2*sd(s == 10)/sqrt(m)
    [1] 0.0005531408     # aprx 95% marg of sim err.
    
  3. Khi chia sẻ các phân tích thống kê liên quan đến mô phỏng. Ngày nay, nhiều phân tích thống kê liên quan đến một số mô phỏng, ví dụ thử nghiệm hoán vị hoặc bộ lấy mẫu Gibbs. Bằng cách hiển thị hạt giống, bạn cho phép những người đọc phân tích sao chép chính xác kết quả, nếu họ muốn.

  4. Khi viết bài báo học thuật liên quan đến ngẫu nhiên. Các bài báo học thuật thường trải qua nhiều vòng đánh giá ngang hàng. Một âm mưu có thể sử dụng, ví dụ, các điểm bị xáo trộn ngẫu nhiên để giảm quá mức. Nếu các phân tích cần được thay đổi một chút để phản hồi các bình luận của người đánh giá, thật tốt nếu một sự xáo trộn không liên quan cụ thể không thay đổi giữa các vòng đánh giá, điều này có thể gây khó chịu cho những người đánh giá đặc biệt khó chịu, vì vậy bạn đặt hạt giống trước khi bị xáo trộn.


1
Rất đẹp, +1. Tôi đã tự do thêm một điểm thứ tư.
S. Kolassa - Tái lập Monica

Vì vậy, bạn có nghĩa là một trình tạo số giả ngẫu nhiên về cơ bản lưu trữ một chuỗi số ngẫu nhiên định kỳ (phân bố đồng đều trong [0, 1]) và một hạt giống chỉ là một chỉ mục cho chuỗi? Vì vậy, nó có nghĩa là số ngẫu nhiên được tạo ra là một hàm xác định của hạt giống?
Della

9
Bạn không cần máy tính lượng tử sử dụng hiện tượng lượng tử để có một trình tạo ngẫu nhiên ( en.wikipedia.org/wiki/Hardware_random_number_generator )
Guiroux

1
2199371,

@ Guiroux. Khả năng tôi đang cố gắng đề cập đến các máy tính lượng tử lại là có các trình tạo số ngẫu nhiên thực sự nhanh như các trình tạo giả ngẫu nhiên ngày nay. Trong những năm 1950, các nguồn số ngẫu nhiên 'thật' đã được sử dụng cho ngẫu nhiên trong thiết kế thử nghiệm và cho các mô phỏng thăm dò (chậm, hạn chế). Có lẽ xem Triệu chữ số ngẫu nhiên .
BruceET

0

TL; DR;

Một hạt giống thường cho phép bạn tái tạo chuỗi các số ngẫu nhiên. Theo nghĩa đó, chúng không phải là số ngẫu nhiên thực sự mà là "số ngẫu nhiên giả", do đó là Trình tạo PNR (PNRG). Đây là một trợ giúp thực sự trong cuộc sống thực!

Chi tiết hơn một chút:

Hầu như tất cả các trình tạo số "ngẫu nhiên" được triển khai bằng ngôn ngữ máy tính đều là các trình tạo số ngẫu nhiên giả. Điều này là do được đưa ra một giá trị bắt đầu (===> hạt giống), chúng sẽ luôn cung cấp cùng một chuỗi các kết quả ngẫu nhiên giả. Một trình tạo tốt sẽ tạo ra một chuỗi không thể phân biệt - theo thuật ngữ thống kê - từ một chuỗi ngẫu nhiên thực sự (ném một cái chết thực sự, đồng tiền thật, v.v.).

Trong nhiều trường hợp mô phỏng, bạn muốn có trải nghiệm "ngẫu nhiên" thực sự. Tuy nhiên, bạn cũng muốn có thể tái tạo kết quả của bạn. Tại sao? Vâng, ít nhất các cơ quan quản lý quan tâm đến điều đặc biệt đó.

Có rất nhiều thứ để lặn. Mọi người thậm chí còn phân tích thành hạt giống ngẫu nhiên "tốt nhất". Theo tôi, điều này làm mất hiệu lực mô hình của họ vì họ không thể xử lý hành vi ngẫu nhiên "thật" - hoặc PRNG của họ không phù hợp để thực hiện. Hầu hết thời gian họ không làm đủ mô phỏng - nhưng họ mất thời gian.

Bây giờ hãy tưởng tượng một RNG "thật". Người ta có thể thực hiện điều này dựa trên một loại ngẫu nhiên trong máy. Nếu bạn chỉ lấy một hạt giống ngẫu nhiên (ví dụ như thời gian bây giờ), bạn tạo ra một điểm bắt đầu ngẫu nhiên nhưng tính ngẫu nhiên của chuỗi vẫn phụ thuộc vào thuật toán để xác định các số tiếp theo. Điều này quan trọng hơn điểm bắt đầu trong hầu hết các trường hợp vì phân phối kết quả xác định "kết quả" thực tế. Nếu trình tự của bạn phải thực sự ngẫu nhiên, bạn sẽ thực hiện điều này như thế nào? Đồng hồ tích tắc của máy tính có thể nói là xác định và nếu không có lẽ sẽ hiển thị rất nhiều tương quan tự động. vậy, bạn có thể làm gì? Đặt cược tốt nhất cho đến nay là thực hiện một PNRG vững chắc.

Tính toán lượng tử? Tôi không chắc chắn rằng nó sẽ sửa chữa nó.

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.