안녕하세요?


무작위로 정해지는 수를 '난수'라고 하며, 코딩을 할 때 거의 등장하는 단어가 'Ramdom'이었습니다. 그래서 저는 지금까지도 컴퓨터가 자체적인 '주사위'프로그램을 가지고 있는 것으로 생각을 했지만, 최근에 '존 폰 노이만'이라는 과학자가 '의사난수'라고 해서, 일정한 규칙에 따라 랜덤한 수를 만드는 방법을 개발 하였다고 합니다.



말이 상당히 모순이 되는게, 일단 '난수'라는 것은 문자 그대로 '랜덤(Random)'이라서, 숫자의 생성에 어떤 규칙도 없어야 합니다. 그런데 일정 규칙으로 아무런 규칙이 없는 수를 만든다는 것이 절말 모순은 모순이라고 할 수 있습니다. 아무튼 이런 이유로 컴퓨터가 생성하는 난수는 '진정한 난수'가 아니라, 난수에 가깝다는 의미에서 '의사난수'라고 부릅니다.



그럼 이런 의사 난수를 어떻게 만드는가 하면, 의사 난수의 원조라고 할 수 있는 '재제곱 채중법(midsquare method)'라고 해서 '평방 채중법'이 위 그림에서 묘사되고 있습니다. 먼저 씨앗이라고 해서 난수의 종자가 되는 수를 선택하는데, 여기서는 1234를 우선 선택하였습니다.




그리고 나서 씨앗을 제곱 하여서 8자리의 수를 얻는데, 자릿수가 모자라는 경우에는 0을 보충해 주도록 합니다. 그리고 나서 가운데 4자리의 수를 난수로 해서 선택을 하고, 첫번째 의사 난수를 계산해낸 것과 같이, 가운데 4자리의 수를 제곱하여서 8자리의 수를 얻은 다음에 가운데 4자리의 수를 선택하는 방식을 계속 반복하는 것으로 차례차례 난수를 얻습니다.



물론 폰 노이만이 고안한 것이 원조이기는 하지만, 의사 난수를 생성하는 방법은 '선형합동법'과 같이 좀 더 발전된 형태로 개발이 되기도 하였습니다. 여기서 더 좋은 의사 난수의 생성법은 평가하는 기준은 크게 '얼마나 진정한 난수와 비슷하냐?' 와 '얼마나 빠른 속도로 난수가 생성이 되는가?'로 평가를 합니다.



그나마 이런 '선형합동법'도 완벽한 것은 아니라서, 3개의 의사 난수를 좌표로 해서 3차원 공간에 2^31 - 1 개의 점을 배치하면, 일정한 규칙으로 점이 배치 된다는 것을 알 수 있습니다. 그래서 현 시점에서 가장 좋은 난수로 평가받는 것이 바로 '메르센 트위스터(Mersenne Twister)법'입니다.




여기서 난수를 발생시키는 장치가 '게임'이라고 해서 '컴퓨터 게임'에만 필요한 것이 아니냐고 할 수 도 있지만, 어이 없게도 '인공지능'의 개발에서도 '난수'가 필요합니다. 그 중요한 예시 중에 하나가 '몬테 카를로법(Monte Carlo Method)'라고 해서, 난수를 이용해서 수치를 계산하고 시뮬레이션을 합니다.



그래서 '진정한 규칙이 없는 수-난수'에 최대한 가깝게 '의사 난수'를 만드는 것은 상당히 중요한 일임에는 틀림없지만, 결론적으로 애초에 '의사 난수'라는 것 자체가 상당히 모순을 지녔기 때문에 한계는 있다고 생각합니다. 다만 컴퓨터가 스스로 주사위를 굴려서 나왔는 값을 인식할 수 있는 시대가 오기 전 까지는 이런 '의사 난수'를 계속해서 쓰게 될 듯 합니다.

+ Recent posts

티스토리 툴바