Що саме є насінням у генераторі випадкових чисел?


21

Я спробував звичайний пошук у Google і т. Д., Але більшість відповідей, які я знаходжу, є чимось неоднозначними, або специфічними для мови / бібліотеки, такими як Python або C ++ stdlib.hтощо.

Як приклад, багато хто говорить, що насіння є початковою точкою генератора випадкових чисел і те саме насіння завжди видає однакове випадкове число. Що це означає? Чи означає це, що вихідний номер є детермінованою функцією конкретного насіння, а випадковість походить від значення насіння? Але якщо це так, то, постачаючи насіння, чи не ми, програмісти, створюємо випадковість, а не дозволяємо машині це робити?

Також, що означає вихідний пункт у цьому контексті? Це не суворий спосіб вимовити елемент домену карти ? Або я щось помиляюсь? f : XYxXf:XY


7
Я не вважаю кваліфікованим написати відповідь, але ви можете знайти статтю Вікіпедії про просвітницьку інформацію Mersenne Twister , особливо розділ про ініціалізацію . Коротше кажучи, генератор псевдовипадкових чисел на зразок Mersenne Twister зрештою повторить свій вихід. У випадку з МТ період має тривалість 2^19937 − 1. Насіння - точка цієї надзвичайно довгої послідовності, з якої запускається генератор. Так так, це детерміновано.
IonicSolutions

1
Генератор псевдовипадкових чисел - це нескінченно повторюваний фіксований список чисел. З чого це починається? Ви можете сказати.
whuber

2
@whuber Я насправді думаю, що ваш коментар буде чудовою відповіддю.
David Z

Відповіді:


22

Більшість генераторів псевдовипадкових чисел (PRNG) будуються на алгоритмах, що передбачають якийсь рекурсивний метод, починаючи з базового значення, яке визначається вхідним сигналом, що називається "насінням". PRNG за замовчуванням у більшості статистичних програм (R, Python, Stata тощо) - алгоритм Mersenne Twister MT19937, викладений у Matsumoto та Nishimura (1998) . Це складний алгоритм, тому було б найкраще прочитати на ньому папір, якщо ви хочете дізнатися, як він детально працює. У цьому конкретному алгоритмі є відношення рецидиву ступеня , і ваше вхідне насіння - це початковий набір векторів . Алгоритм використовує лінійне відношення рецидивування, яке генерує:х 0 , х 1 , . . . , x n - 1nx0,x1,...,xn1

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

де і та - об'єкти, які можна вказати як параметри в алгоритмі. Оскільки насіння дає початковий набір векторів (і задані інші фіксовані параметри алгоритму), фіксується ряд псевдовипадкових чисел, породжених алгоритмом. Якщо ви змінюєте насіння, то ви змінюєте початкові вектори, які змінюють псевдовипадкові числа, породжені алгоритмом. Це, звичайно, функція насіння.1mnrA

Тепер важливо зазначити, що це лише один приклад з використанням алгоритму MT19937. Існує багато PRNG, які можна використовувати в статистичному програмному забезпеченні, і кожен з них передбачає різні рекурсивні методи, і тому насіння означає різну річ (в технічному плані) у кожному з них. Ви можете знайти бібліотеку PRNGs для Rв цій документації , в якому перераховані доступні алгоритми і документи , які описують ці алгоритми.

Мета насіння - дозволити користувачеві "заблокувати" генератор псевдовипадкових чисел, щоб дозволити повторюваний аналіз. Деякі аналітики люблять встановлювати насіння за допомогою справжнього генератора випадкових чисел (TRNG), який використовує апаратні входи для генерації початкового номера насіння, а потім повідомляє про це як заблоковане число. Якщо насіння задано і повідомляється початковим користувачем, то аудитор може повторити аналіз і отримати ту саму послідовність псевдовипадкових чисел, що і вихідний користувач. Якщо насіння не встановлено, алгоритм, як правило, використовує якесь насіння за замовчуванням (наприклад, із системних годин), і, як правило, неможливо повторити рандомізацію.


+1. Було б добре додати, що (як правило) відбувається, якщо явно не надати насіння.
Амеба каже, що повернеться до Моніки

1
@amoeba: 4-й абзац мого відповіді коротко обговорює це.
BruceET

1
Хоча це відповідає на основні запитання. Це не торкається факту, для чого нам це потрібно в симуляціях. Дуже важко виробляти ПРАВИЛЬНУ випадковість - і коли у вас є, ви не можете відтворити оригінальну відповідь! Введіть PNRG ... з усіма його проблемами.
Пол Палмп'є

@amoeba: За запитом я додав додатковий абзац, щоб обгрунтувати це.
Відновіть Моніку

1
Спасибі. "Насіння за замовчуванням" трохи схоже на те, що завжди однакове значення насіння за замовчуванням; Що я мав на увазі, що зазвичай насіння беруть із системного годинника. Це, я думаю, добре знати.
Амеба каже, що повернеться до Моніки

16

По-перше, немає справжньої випадковості в сучасних комп’ютерах, створених "випадковими числами". Всі псевдовипадкові генератори використовують детерміновані методи. (Можливо, квантові комп'ютери це змінять.)

Складне завдання полягає в розробці алгоритмів, які дають вихід, який не може змістовно відрізняти від даних, що надходять із справді випадкового джерела.

Ви маєте рацію, що встановлення насіння запускає вас на певну відому стартову точку у довгому списку псевдовипадкових чисел. Для генераторів, реалізованих у R, Python тощо, цей список надзвичайно довгий. Достатньо довгий, що навіть найбільший здійсненний імітаційний проект не перевищить "періоду" генератора, щоб значення почали повторно кругообіг.

У багатьох звичайних додатках люди не встановлюють насіння. Потім автоматично вибирається непередбачуване насіння (наприклад, з мікросекунд на годиннику операційної системи). Псевдовипадкові генератори загального користування піддавались випробуванням акумуляторів, що значною мірою складаються з проблем, які виявилися важкими для моделювання з попередніми незадовільними генераторами.

Зазвичай вихід генератора складається з значень, які не відрізняються від практичних цілей від чисел, вибраних справді випадковим чином, рівномірним розподілом наТоді цими псевдовипадковими числами маніпулюють так, що відповідають тому, що можна було б отримати вибірковою вибіркою з інших розподілів, таких як двочлен, Пуассон, нормальний, експоненціальний тощо.(0,1).

Одне тестування генератора полягає в тому, щоб переконатися, що його послідовні пари в «спостереженнях», симульованих як насправді виглядають так, що вони заповнюють одиничний квадрат навмання. (Зроблено двічі нижче.) Злегка мармурований вигляд є результатом властивої мінливості. Було б дуже підозріло отримати сюжет, який виглядав ідеально рівномірно сірим. [У деяких резолюціях може бути звичайна муарова модель; будь ласка, змініть збільшення чи вгору, щоб позбутися від цього хибного ефекту, якщо воно виникне.]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))

введіть тут опис зображення

Іноді корисно встановити насіння. Деякі такі сфери використання:

  1. При програмуванні та налагодженні зручно мати передбачуваний вихід. Так багато програмістів ставлять set.seedзаяву на початку програми, поки не буде зроблено написання та налагодження.

  2. При навчанні про моделювання. Якщо я хочу показати учням, що я можу імітувати рулони справедливого штампу, використовуючи sampleфункцію R, я можу обдурити, виконавши багато моделей та вибравши той, який найбільше наближається до цільового теоретичного значення. Але це створило б нереальне враження про те, як моделювання справді працює.

    Якщо я встановити насіння на початку, моделювання буде отримувати однаковий результат кожного разу. Студенти можуть перечитати свою копію моєї програми, щоб переконатися, що вона дає намічені результати. Тоді вони можуть запускати свої власні симуляції, як із власними насінням, так і дозволяючи програмі вибрати власне початкове місце.

    Наприклад, ймовірність отримати загальну кількість 10 при двох справедливих кісток становитьЗа допомогою мільйона експериментів з двома кубиками я маю отримати точність приблизно двох-трьох місць. Похибка моделювання в 95% становить приблизно

    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. При обміні статистичними аналізами, що передбачають моделювання. На сьогоднішній день багато статистичних аналізів включають певне моделювання, наприклад, тест на перестановку або пробу Гіббса. Показавши насіння, ви даєте можливість людям, які читають аналіз, точно повторити результати, якщо вони бажають.

  4. При написанні наукових статей, що стосуються рандомізації. Наукові статті зазвичай проходять кілька раундів експертної оцінки. Ділянка може використовувати, наприклад, випадкові тремтіння точки, щоб зменшити перенапруження. Якщо аналізи потрібно дещо змінити у відповідь на коментарі рецензентів, добре, якщо певне непов'язане тремтіння не зміниться між раундами огляду, що може спричинити занепокоєння для особливо неповажних рецензентів, тому ви встановлюєте насіння перед тремтінням.


1
Дуже приємно, +1. Я взяв на себе сміливість додати четвертий бал.
С. Коласа - Відновіть Моніку

Отже, ви маєте на увазі генератор чисел псевдоандромів, в основному зберігає періодичну послідовність випадкових чисел (рівномірно розподілених у [0, 1]), а насіння є лише індексом послідовності? Так це означає, що випадкове число, що утворюється, є детермінованою функцією насіння?
Делла

9
Вам не потрібен квантовий комп’ютер, щоб використовувати квантові явища, щоб мати генератор випадкових
випадків

1
@Della. У вас, по суті, правильна ідея. Але будь ласка, розумійте, що на практиці "період" повинен бути справді величезним. (Незалежно від того, наскільки великий ваш імітаційний проект, ви не хочете, щоб він повторювався.) Наприклад, IonicSolutions зазначає після Q, що генератор Mersenne Twilster має період дещо більший, ніж я можу легко уявити. // Якщо ви знаєте насіння, ви можете створити звідти псевдовипадкові послідовності. // Генератори використовувались для шифрування повідомлень. Але стандарти безпечних генераторів для шифрування відрізняються від стандартів для генераторів для моделювання ймовірностей. 2199371,
BruceET

@Guiroux. Можливо, я намагався згадати про квантові комп'ютери - це мати справжні генератори випадкових чисел так само швидко, як сьогоднішні псевдовипадкові генератори. У 1950-х роках джерела "справжніх" випадкових чисел використовувались для рандомізації експериментального проектування та для (повільних, обмежених) моделювань. Можливо, дивіться мільйон випадкових цифр .
BruceET

0

TL; DR;

Насіння, як правило, дозволяє відтворити послідовність випадкових чисел. У цьому сенсі вони не є справжніми випадковими числами, а "псевдовипадковими числами", отже, генератором PNR (PNRG). Це справжня допомога в реальному житті!

Трохи детальніше:

Практично всі генератори "випадкових" чисел, реалізовані в комп'ютерних мовах, є генераторами псевдовипадкових чисел. Це тому, що, даючи початкове значення (===> насіння), вони завжди забезпечуватимуть однакову послідовність псевдо випадкових результатів. Хороший генератор створить послідовність, яку неможливо відрізнити - статистично - від справжньої випадкової послідовності (кинути справжню штамп, справжню монету тощо).

У багатьох випадках моделювання ви хочете мати справжній "випадковий" досвід. Однак ви також хочете мати можливість відтворити свої результати. Чому? Ну, принаймні регулятори зацікавлені в тій особливій справі.

Тут можна багато зануритися. Люди навіть роблять аналіз на "найкраще" випадкове насіння. На мій погляд, це приводить до недійсності їхньої моделі, оскільки вони не можуть впоратися з «справжньою» випадковою поведінкою - або їх PRNG не підходить для їх реалізації. Більшу частину часу вони просто не проводять достатньо симуляцій - але вони вимагають часу.

А тепер уявіть собі "справжній" RNG. Можна було б реалізувати це на основі певної випадковості в машині. Якщо ви берете лише випадкове насіння (наприклад, час зараз), ви створюєте вид випадкової вихідної точки, але випадковість послідовності все ще залежить від алгоритму визначення наступних чисел. Це більш важливо, ніж вихідний момент у більшості випадків, оскільки розподіл результатів визначає фактичний "результат". Якщо ваша послідовність має бути справді випадковою, як би ви це реалізували? Часові кліщі комп’ютера можна сказати детермінованими, інакше, ймовірно, буде показано багато автокореляції. Отже, що ти можеш зробити? Найкраща ставка на даний момент - це впровадження міцного PNRG.

Квантові обчислення? Я не впевнений, що це виправить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.