진정한 난수 생성이 왜 불가능합니까?


47

백만 개의 난수 생성이 필요한 취미 문제를 해결하려고했습니다. 그러나 나는 그것들을 독특하게 만드는 것이 어려워지고 있다는 것을 빨리 깨달았습니다. 난수 생성에 대해 읽으려면 알고리즘 디자인 매뉴얼 을 선택했습니다 .

나는 완전히 이해할 수없는 다음 단락이 있습니다.

불행히도 난수 생성은 실제보다 훨씬 쉽습니다. 실제로 모든 결정 론적 장치에서 진정한 난수를 생성하는 것은 근본적으로 불가능합니다. 폰 노이만 (Von Neumann) [Neu63]은“난수를 생성하는 산술적 방법을 고려하는 사람은 물론 죄의 상태에있다”고 가장 잘 말했다. 그들이 무작위로 생성 된 경우.

결정적 장치에서 진정한 난수를 생성하는 것이 왜 불가능합니까? 이 문장은 무엇을 의미합니까?


86
결정적 장치 에서 실제로 임의의 숫자를 생성 할 수없는 이유 를 실제로 묻고 있습니까? 질문에 이미 답변이 포함되어 있지 않습니까?
herby

37
생성 한 모든 숫자가 고유해야하는 경우 실제로 임의의 숫자는 아닙니다. 진정한 난수 생성기는 동일한 결과를 10 번 연속으로 줄 수 있습니다.
TMN

28
고유 한 난수 를 찾는 데 결함 이 있습니다 . 숫자를 고유 하게 제한하는 경우 무작위 가 아니더라도 아무리 불가능하더라도 반복 가능성이 필요하기 때문에 무작위 가 아닙니다 .
Mark Booth

13
컴퓨터 외부에서 임의의 숫자가 실제로 임의의 숫자입니까? 주사위를 던져라. 단지 많은 벡터를 가진 물리학이다.
MPelletier

9
@MPelletier :별로. 양자 역학 (한 번 과학자들이 더 많은 것을 알아 낸 경우)은 임의성에 대한 정의에 따라 진정한 임의성의 존재를 암시 할 수 있습니다.
Brian

답변:


65

암호화 적으로 안전한 의사 난수 생성기를 찾아야합니다 . 대부분의 PRNG는 선형 합동 생성기 ( next number의 선형 함수이기도 함 previous number)이므로 플로팅 next numberprevious number평행선 차트를 얻을 수 있습니다. CSPRNG는 그렇게하지 않습니다. 단점은 느리다는 것입니다.

난수 생성기를 3 가지 범주분류합니다 .

  1. 숙제하기에 충분합니다.
  2. 회사에 베팅하기에 충분합니다.
  3. 당신의 나라에 베팅하기에 충분합니다.

어떤 결정 론적 장치에서 진정한 난수를 생성하는 것이 왜 불가능합니까?

결정 론적 장치는 동일한 시작 조건과 입력이 주어질 때 항상 동일한 출력을 생성합니다 deterministic. 그것이 의미하는 것 입니다. "진정한 난수"는 철학적 관점에 더 random가깝 습니다. 그것이 의미하는 것은 철학적 배꼽 응시의 핵심이기 때문입니다. 아직). 암호로 안전한 난수 생성기는 외부 엔트로피 소스를 사용하여 장치를 비 결정적으로 만듭니다.


1
이것이 진정한 난수를 얻는 것이 불가능한 이유입니다. 시퀀스가 반복되지 않더라도 ( 난수에 대해서는 보장되지 않음) 동일한 입력 가진 프로그램을 다시 실행 하면 동일한 결과 생성됩니다. 따라서 다른 사람 이 나중에 난수를 재생산 할 수 있습니다. 즉, 난수가 전혀 무작위가 아님을 의미합니다.
Spencer Rathbun

2
@ user973810 정보 이론에서이 정의의 문제점은 실제 임의 순서의 인스턴스를 표시 할 수 없다는 것입니다. 우리는 합리적인 정의 언어에 대해 거의 모든 무한 시퀀스 (기술적 인 의미에서)가 언어로 전혀 설명 할 수 없기 때문에 무작위임을 증명할 수 있습니다. 더 유용한 것은 랜덤 시퀀스 생성기의 개념입니다. 랜덤 시퀀스를 생성하는 것이 아니라 무작위로 시퀀스를 생성하는 것입니다.
Gilles 'SO- 악의

13
약간의 이쑤시개 : 일부 사람들, 즉 핵 및 입자 물리학자는 원자 붕괴와 같은 과정 실제로 무작위 적임을 확신합니다 .
David Z

9
@David : 우리는 그것보다 조금 더 나아갈 수 있습니다. 벨 불평등에 대한 다양한 실험은 특정 양자 과정이 예측할 수 없음을 보여준다. 그것들은 어떤 철학적 의미에서 임의적 일 수도 있고 비-로컬 숨겨진 변수에 의존 할 수도 있지만 어느 경우 든 신뢰할 수있는 예측을 방해합니다.
dmckee

7
@ dmckee : 예, 방금 prog.SE에 대한 의견에서 벨의 불평등과 파동 붕괴 사이의 연결을 설명하려고 시도하는 것이 더 쉬울 것이라고 생각했습니다. 사람들 이 궁금하다면 항상 우리 사이트를 방문 할 수 있습니다 .-) Tangurena : 사실, 아인슈타인은 그런 말을했지만 실제로 우주가 결정론 적이기를 정말로 원했습니다. 그러나 그렇지 않습니다. 아인슈타인의 죽음 이후에 수행 된 실험은 꽤 결정적인 것으로 나타났습니다 (비 국소 적 숨겨진 변수, 일명 기묘함 제외). 그가 아인슈타인이라고해서 모든 것에 대해 옳았다는 의미는 아닙니다.
David Z

22

진정한 무작위성은 비결정론을 의미합니다. 결정 론적이라면 정확하게 예측할 수 있습니다 (결정론이 의미하는 바입니다). 예측할 수 있으면 무작위가 아닙니다.

결정 론적 의사 난수 생성기에서 얻을 수있는 가장 좋은 방법은주기가 매우 긴 숫자 스트림입니다 (RNG 장치에 무제한 저장 공간이없는 한 반복되지 않는 것은 불가능합니다). 랜덤 시퀀스의 다른 모든 속성 (가장 흥미로운 값의 균일 한 분포)을 충족시키는 스트림 번호.

이 문제를 해결하기 위해 많은 현대 유닉스와 유닉스 계열은 실제 노이즈 소스를 사용하여 진정한 임의성을 생성하는 커널 RNG를 가지고 있습니다.

또 다른 일반적인 방법은 현재 시간을 결정 론적 RNG의 시드 ( srand(time(NULL));C)로 사용하는 것입니다. 암호로 말하면, 이것은 현재 시간이 비밀이 아니기 때문에 가치가 없지만 물리적 시뮬레이션이나 비디오 게임의 경우 충분합니다.


제한된 출력 값 (제한된 비트 수)을 가진 모든 발전기의 경우 비 반복이 불가능합니다. 그러나 결정 론적 생성기의 사이클 길이는 아마도 가능한 모든 순열 인 이론적 최대 값보다 훨씬 짧을 것입니다.
9000

@ 9000 : 물론 이것은 사실이 아닙니다. "임의의"순서로 숫자 (모든베이스)를 무리없이 사용하십시오. 팔! 반복되지 않는 시퀀스 (정의에 따라) 및 여전히 (베이스에) 바인딩됩니다.
ThePopMachine

@ThePopMachine : 무한 길이의 비 반복 시퀀스와 동등한 길이의 비 반복 비트 시퀀스를 생성 할 수 있습니다. 제한된 크기의 정수 (예 : 32 비트)의 반복되지 않는 시퀀스를 생성 할 수 없습니다. 32 비트 값의 모든 순열을 생성하면 시퀀스가 ​​반복되어야합니다. 당신이 맞아요. 우리는 단지 다른 것들에 대해 이야기하고 있습니다.
9000

@ 9000 : Weaseling 없음. 당신은 허위 진술을했습니다. 실제로 n 개의 다른 값에 대해 길이가 k 개의 n ^ k 개의 다른 시퀀스가 ​​없으므로 반복 해야하는 경우 이것은 매우 분명하고 흥미롭지 않습니다.
ThePopMachine

2
@ ThePopMachine : 조금만 내면 고맙겠습니다. 인용하자면,«비 반복은 제한된 출력 값 (제한된 비트 수)을 가진 생성기에서도 불가능합니다». 당신이 명시 적으로 이야기하는 것은 비합리적인 숫자의 [이진] 숫자의 시퀀스로서 무한한 비트 수입니다. 귀하의 진술은 사실이지만 문제와 관련이 없습니다.
9000

10

Discrete-Event Simulation : Lawrence Leemis 의 첫 번째 코스 의 두 번째 장에서는 난수 생성기 (보다 정확하게는 의사 난수 생성기)에 대한 환상적인 소개를 제공합니다.

그의 책에서 발췌 한 내용이 제 의견으로는 잘 설명되어 있습니다.

역사적으로 세 가지 유형의 난수 생성기가 계산 응용 분야에서 옹호되었습니다. (b) 예를 들어 열 "백색 잡음"디바이스와 같은 하드웨어 생성기; 및 (c) 알고리즘 (소프트웨어) 생성기. 이 세 가지 유형 중 알고리즘 생성기 만 널리 채택되었습니다. 그 이유는 알고리즘 생성기 만이 일반적으로 잘 받아 들여지는 다음의 난수 생성 기준을 모두 만족시킬 가능성이 있기 때문입니다. 발전기는 다음과 같아야합니다.

  • 랜덤-임의의 모든 합리적인 통계 테스트를 통과하는 출력을 생성 할 수 있습니다.
  • 제어 가능-원하는 경우 출력을 재생할 수 있습니다.
  • 휴대용-다양한 컴퓨터 시스템에서 동일한 출력을 생성 할 수 있습니다.
  • 최소한의 컴퓨터 리소스 요구 사항으로 효율적이고 빠릅니다.
  • 문서화-이론적으로 분석하고 광범위하게 테스트했습니다.

따라서 화이트 노이즈 발생기를 사용하여 "더 나은"난수를 얻을 수는 있지만 위의 기준을 대부분 따르지 않기 때문에 수용되지 않았습니다.

나는 당신이 그 책의 사본 (또는 비슷한 것)에 손을 넣기를 권장합니다. PRNG의 작업 방식을 정확하게 이해하면 노력에 확실히 도움이됩니다.


7

임의의 숫자를 생성하기 위해 코드를 작성해야하고 코드는 임의 가 아닙니다 . (결정적입니다)

따라서 "랜덤"(일반적으로 현재 타임 스탬프)에서 선택한 "시드 값"으로 시작한 다음 알고리즘에서이를 사용하여 숫자 생성을 시작합니다. 그러나 전체 집합은 원래 시드 값을 기반으로합니다!

따라서 동일한 Seed 값으로 코드를 다시 실행하면 정확히 같은 숫자 집합을 얻을 수 있습니다! 합리적으로 사람이 어떻게 무작위로 부를 수 있습니까? 그러나 확실히 무작위를 찾습니다 .


그것들을 독특하게 만드는 것과 관련하여, 숫자를 생성 한 후에는 이미 그 숫자가 있는지 확인하고, 있다면 버리고 새 숫자를 생성하십시오.


13
플러스 측면에서 반복 가능한 의사 난수는 디버깅에 좋습니다.
David Thornley

5

난수를 생성하므로 생성 된 값이 고유하지 않을 것으로 예상해야합니다. 이것은 임의의 속성입니다. 이러한 요구 사항은 범위의 최종 값을 예측하고 확률을 변경 할 수 있기 때문에 실제로 임의의 (또는 의사 임의의) 숫자 시퀀스가 ​​고유하다고 말할 수는 없습니다. 새로운 번호가 선택 될 때마다 선택되지 않은 모든 번호.


1
이것은 실제로 질문에 대답 하지 않기 때문에 실제로 답변이 아닌 주석 입니다.
Mark Booth

5

Pseudo Random에 대한 매우 간단한 정의가 있습니다 .

예측할 수없는 알 수없는 변수가 너무 많습니다.

또한 True Random에 대한 간단한 정의가 있습니다 .

알 수없는 무한 변수.

컴퓨터의 문제점은 모든 변수를 항상 알고 있다는 것입니다. 난수는 단순히 일부 시드 값 의 수학 함수입니다 .
우리가 할 수있는 최선의 방법은 컴퓨터에 의사 난수 시드 값을 지정하는 것입니다. 이는 일반적으로 예측할 수없는 변수 (예 : 정확한 시간)를 기반으로합니다.

컴퓨터가 난수를 생성 할 수는 없지만 예측하기에는 너무 많은 변수를 도입하는 것이 좋습니다!


1
"시간"은 예측할 수없는 나쁜 예입니다. 한편 마우스 움직임, 마이크 입력 등은 예측할 수없는 입력입니다.
HoLyVieR

3

다른 사람들이 지적했듯이 소프트웨어에서 진정한 난수를 생성 하는 것은 실제로 불가능하지만 하드웨어를 사용하면 진정한 난수를 생성 할 수있는 장치를 구축 할 수 있습니다 *. 인터넷에는 이것에 대한 몇 가지 예가 있으며, 가이거 카운터에서 틱 사이의 시간을 읽는 것에서부터 조정되지 않은 수신기의 백색 잡음 (대부분 우주에서 배경 방사선)을 샘플링하는 것까지 다양한 방법이 있습니다. 나는 나 자신이 사용할 수있는 몇 가지 방법을 사용하여 몇 가지만들었습니다 .

* 물리학 전문가라면 우주가 작동하는 방식을 고려할 때 이러한 기술 중 어느 것도 초 임의적으로 무작위 적이지는 않지만 결과를 예측할 수있는 합리적인 방법이 없으므로이 논의를 위해 충분합니다.


5
파트 타임 물리 전문가로서 양자 이벤트를 기반으로 한 생성기는 실제로 임의적입니다. 무작위성을 싫어하는 사람들은 시작된 이후 양자 역학에서 무작위성을 빼려고 노력해 왔으며, 그 모든 것이 실제로 무작위라는 증거를 쌓아 두었습니다.
David Thornley

@DavidThornley, ... 누군가 공식을 알아낼 때까지.
CaffGeek

1
@Chad : 일반적인 의미에는 공식이 없습니다. 그것은 EPR 실험에 의해 배제되었습니다. 확실히 결정적이지만 이해하기 쉬운 방식은 아니라고 생각할 수 있습니다.
David Thornley

@DavidThornley, 나는 그것이 잘못된 단어라는 것을 알았습니다. 우리는 내가 말하려는 것을 알고 있다고 생각합니다. 누군가가 무언가가 불가능하다고 말할 때마다, 누군가는 결국 그것들이 틀렸다는 것을 증명합니다. 인간의 본성입니다.
CaffGeek

2
그것은 누군가 누군가 불가능하다고 말했기 때문에 결국 누군가가 멈춤 문제를 해결할 수있는 기계를 만들 것이라고 말하는 것과 같습니다. 방정식을 찾는 것은 중요하지 않습니다. 실제로 실행 된 모든 실험과이를 뒷받침하는 수학에 따라 무작위입니다.
Alex

2

특별한 하드웨어없이 난수를 생성 할 수있는 방법은 없습니다. 내 신입생 년에 두 명의 반 친구와 나는 기본적으로 AM 수신기가 있고 4 개의 다른 채널로 조정 된 난수 생성기를 제안하고 A ~ D 변환기로 입력을 가져 와서 모두 추가합니다 (최대 수). 임의의 수의 스테이션으로부터의 아날로그 입력의 조합은 임의적이기 때문에 A2D 변환기로부터 많은 수의 난수를 생성 할 수 있기 때문에 이것은 좋은 발전기가 될 수 있다고 제안했습니다. 물론, 철학적 의미에서는 이것이 실제로 무작위 적이지는 않지만, 대부분의 실질적인 목적을 위해 이것이 효과가있을 수 있습니다.


2

결정론은 본질적으로 함수입니다. 대수학에서 함수는 도메인과 범위 간의 대응 관계이므로 도메인의 각 멤버는 정확히 범위의 한 멤버에 해당합니다.

따라서 f (x) = z이면 y가 z가 아닌 한 f (x)! = y입니다. 그것은 기능입니다. 자바 스크립트를 상상해보십시오.

function Add(A, B) {
      return A + B;
}

var addedNumber = Add(2,3);//returns 5
addedNumber = Add(2,3);//still 5

호출 횟수에 관계없이 Add(2,3)항상 5를 반환합니다. 즉, Add ()는 결정적인 함수입니다.

외부 요인으로 인해 Add가 비 결정적 방식으로 작동 할 수 있습니다. 예를 들어 방정식에 멀티 스레딩을 도입 한 경우입니다. 인간의 입력은 또한 비결정론을 유발합니다.

자, 여기가 흥미로운 일입니다.

"무작위 숫자를 생성하는 산술적 방법을 고려하는 사람은 물론 죄의 상태에 있습니다."

Von Neumann은 "[...] 생산의 산술 방법"이라고 언급했다. 이것은 결정적인 기능에 대한 임의의 입력 을 생성하는 정확한 계측기 또는 기타 비 알고리즘 방식에서 읽은 사람 입력, 동시성, 샘플 풍속에 관한 것이 아닙니다 .

이것은 단순히 기능 또는 기능 시스템이 갑자기 비 결정적이지 않을 것이라고 말합니다. 즉, Add (2,3)은 동일한 입력이 주어지면 어떻게 든 6 또는 5 이외의 것을 반환하지 않습니다 . 불가능합니다.

인용 저자는 한 단계 더 나아갑니다.

우리가 기대할 수있는 최선은 의사 난수, 무작위로 생성 된 것처럼 보이는 일련의 숫자입니다.

컨텍스트는 이전에 "결정적 장치"로 정의되어 있습니다. 나는 여기서 논쟁을 끝낼 수 있었다. 그러나 시스템에 새로운 요소를 도입하여 컨텍스트를 변경하면 어떻게 될까요? 입력으로 추가 된 비 결정적 요소는 시스템을 비 결정적 시스템으로 만듭니다. 비 결정적 요소를 제거함으로써 결정적 시스템으로 되돌아갑니다. 입력을 추적하거나 다른 방식으로 재생할 수 있으면 결과를 재현 할 수 있습니다. 그러나이 전체 단락은 저자가 말한 것과 유사합니다. 상황을 기억하십시오.

비결정론의 의미에 대해 논쟁 할 수있다. 다시 한번, tangetenial. 상황을 기억하십시오.

그래서 그는 맞습니다. 결정 론적 장치 에서 결정 론적 시스템이 진정한 무작위 결과를 생성하는 것은 불가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.