관리 메뉴

ScienceBooks

12편 ‘아무거나’의 수학 본문

(연재) 나는 생각한다, 고로 수학한다

12편 ‘아무거나’의 수학

Editor! 2020. 8. 19. 16:39

친구들과 식당 갈 때, “뭐 먹을래?”라고 물으면, “아무거나.”라고 답하는 사람 있죠? 이런 친구가 꼭 식당 가면, “이건 먹기 싫었는데.”라고 하죠. 독자 여러분은 이런 경험 없으셨나요? 사실 ‘아무거나.’보다 어려운 조건은 없습니다. 수학에서는 이 ‘아무거나’를 ‘난수’라고 하죠. 인류가 ‘난수’라는 개념을 본격적으로 연구하기 시작한 것은 20세기 초반 이후입니다. 100년 정도밖에 안 되었죠. 현대 컴퓨터 과학의 발달이 없었다면, 자연 현상 시뮬레이션이나 데이터 샘플링 또는 암호 만들기에 이용되는 난수 생성 기술은 발전하기 어려웠을 것입니다. 오늘은 이 난수에 대한 이야기입니다. 고호관 선생님은 여기서 인간의 자유 의지가 정말로 존재하는가 하는 철학적 질문까지 도출해 냅니다. ‘아무거나의 수학’을 알게 되면 “아무거나.”라는 대답, ‘아무한테나’ 하지 못하실 겁니다.


고호관의 수요 수학 에세이 12편

나는 생각한다, 고로 수학한다

 

'아무거나'의 수학

 

번개 줄기의 모양은 대표적인 무작위 패턴이다. 이 무작위 패턴을 정확하게 그려 내는 난수 생성기를 인류는 만들 수 있을까?

 

아무 수나 떠올리기, 잘 할 수 있나요?

 

예전의 일이다. 지금은 프로그래밍의 ‘프’자도 모르지만, 어렸을 때 학교에서 MSX(일본 아스키 사에서 1983년에 처음 발매한 8비트 개인용 컴퓨터. 우리나라에서는 1984년에 처음 발매되었다.)를 가지고 베이식(BASIC, 1963년에 개발된 프로그래밍 언어. 초보자용 다목적 기호 명령 코드라는 뜻의 약자)이라는 프로그래밍 언어를 배운 적이 있다. 그때가 컴퓨터를 처음 접하는 것이었는데, 내가 재미있어 하는 게 보였는지 부모님이 같은 컴퓨터를 사 주셔서 집에서도 꽤 오랫동안 가지고 놀았다. 아마도 내가 지금까지 써 본 컴퓨터 중에서 성능을 가장 많이 끌어내 사용한 게 바로 그 컴퓨터일 것이다.

 

프로그래밍이 조금 익숙해지고 나니 으레 그렇듯이 나도 게임을 만들어 보고 싶어졌다. 베이식은 처리 속도가 느려서 간단한 게임밖에 만들지 못했지만, 그래도 내가 직접 만든 게임이 돌아간다는 게 재미있었다. 우주선 두 대가 서로 미사일을 쏴서 맞추는 게임을 만들어 동생과 하기도 했고, 쏟아지는 총알을 피하는 게임을 만들기도 했다.

 

 

위 사진은 국내에서 개발된 IQ2000 컴퓨터. MSX 기반 컴퓨터이다. 아래 사진은 MSX 컴퓨터의 베이식 프로그램 시작 페이지이다. 사진: 모두 위키피디아에서.

 

 

이런 게임을 만들면서 나는 난수(random number)라는 개념을 처음 접했다. 난수란 무작위로 나타나는 수열인데, 난수가 있어야 적이나 총알이 매번 예상치 못한 곳에서 나오게 만들 수 있었다. 항상 똑같은 데서만 나오면 재미가 없을 테니 게임에는 필수적인 개념인 셈이다. 다행히 베이식에는 난수를 만들어 주는 명령어가 있었는데, 특정 수―그때는 몰랐지만, 그 수를 시드(seed, 씨앗)라고 부른다.―를 넣고 실행하면 난수가 주르륵 나왔다.

 

그런데 좀 쓰다 보니 문제가 있었다. 프로그램을 실행할 때마다 매번 나오는 난수가 똑같았던 것이다. 가령 처음 실행했을 때 1, 3, 9, 2, 5, …와 같은 순서로 나왔다면(실제로는 0과 1 사이의 소수로 나왔던 것으로 기억한다.), 그다음에 실행할 때도 똑같은 순서로 똑같은 수가 나왔다. 시드를 바꾸면 다른 수가 나왔지만, 실행할 때마다 똑같이 나오는 건 마찬가지였다. 즉 시드를 무작위로 바꿔 줘야 그나마 매번 나오는 수를 다르게 할 수 있는데, 그건 난수를 만들기 위해 난수를 사용해야 하는 꼴이었다. 난수가 있으면 내가 난수를 만드는 명령어를 사용할 리가 없지 않은가?

 

가만히 생각해 보니 어쩔 수 없는 일이었다. 컴퓨터는 입력값을 받아서 정해진 대로 계산하는 기계인데, 사람처럼 아무 수나 출력할 수 있을 리가 없었다. 그때 썼던 해결책은 현재 시각을 시드로 사용해 난수를 만드는 방법이었다. 어린애였던 내가 스스로 떠올렸을 리는 없고, 아마 누가 가르쳐 줬거나 책에서 본 방법이었을 것이다.

 

 

컴퓨터로 만드는 난수는 가짜 난수

 

그 뒤로도 종종 컴퓨터로 완벽한 난수를 만들려면 어떻게 해야 할지 생각해 보곤 했다. 어떻게 난수를 만들어야 잘 만들었다는 소문이 날까? 컴퓨터가 없던 시절에도 난수는 여러 분야에서 쓰였다. 주사위를 이용한 도박 같은 것도 그렇고, 군용 암호로도 난수는 중요했다. 오늘날 인터넷 뱅킹에 쓰는 OTP도 난수를 이용한다.

 

과거에는 난수를 미리 표로 만들어 놓고 썼다. 규칙 없이 숫자를 나열해 두었다가 특정 방향으로 쭉 읽어 가면 난수열이 된다. 수는 아무렇게나 떠올려서 적어도 되고, 주사위 같은 것을 던져서 나오는 수를 적어도 된다.

 

현재 수식으로 난수를 만드는 데는 여러 가지 방법이 있다. 잘 알려진 방법으로 선형 합동법이 있는데, 수열과 합동을 이용한다. 여기서 합동은 도형의 합동이 아니라 어떤 정수로 나눈 나머지가 서로 같은 두 정수 사이의 관계를 말한다. 시드값이 어떤 수를 곱하고 다시 어떤 수로 나눈 나머지를 출력하고, 그 결과에 대해 똑같은 작업을 반복하는 식으로 난수를 만든다. 시드값을 크게 잡으면 아주 오랫동안 반복되지 않는 난수를 만들 수 있다. 1997년에 나온 메르센 트위스터는 선형 합동법보다 더 나은 난수열을 제공한다. 난수가 반복되는 주기가 2n-1 형태로 나타나는 메르센 소수여서 이런 이름이 붙었다.

 

설명을 보면 알 수 있듯이, 이런 방법으로 만드는 난수열에는 주기가 있다. 난수열이 반복된다는 소리다. 주기가 아무리 길어도 결국 반복된다면 그건 진정한 난수라고 할 수 없다. 그래서 이와 같은 방식으로 만드는 난수를 의사 난수(pseudo-random number)라고 한다. 이름에서부터 ‘가짜’ 난수임을 인정하고 가는 것이다.

 

그렇다면 ‘진짜’ 난수를 만들 방법은 없는 걸까? 있기는 한데, 진짜 난수(true random number)를 만들기 위해서는 어쩔 수 없이 자연을 이용해야 한다. 예측할 수 없는 자연 현상을 바탕으로 난수를 만드는 것이다. 이용할 수 있는 자연 현상은 다양하다. 방사성 동위 원소의 붕괴나 편광판을 통과하는 광자 등을 이용할 수 있다. 난수를 제공하는 웹사이트인 random.org는 대기에서 일어나는 전기적 잡음을 이용해서 난수를 만든다. 이런 자연 현상은 예측 불가능하기 때문에 진짜 난수라 할 수 있다.

 

 

난수를 생성해 주는 웹사이드. 랜덤닷오아르지의 홈페이지. 홈페이지 갈무리.

 

그렇다면 사람은 진짜 난수를 만들 수 있을까?

 

결국 순수하게 알고리듬을 이용해 완전한 난수를 만드는 건 불가능한 모양이다. 어떤 자료를 봐도 정해진 대로 계산하게 되어 있는 알고리듬으로는 완전한 난수를 만들 수 없다는 대답만 찾을 수 있었다.

 

그러면 한 가지 의문이 생긴다. 앞으로는 사람과 똑같은, 혹은 사람의 넘어서는 수준의 인공 지능이 나온다고 하는데, 그런 인공 지능은 사람처럼 아무 수나 떠올릴 수 있어야 하지 않을까? 만약 알고리듬에 따른 가짜 난수만 내놓을 수 있다면, 정말로 사람과 같은 수준의 인공 지능이라고 할 수 있을까? 만약 인공 지능이 사람처럼 생각만으로 완전한 난수를 만들어 내는 게 불가능하다면, 그건 사람과 같은 인공 지능을 만드는 게 불가능하다는 뜻 아닐까?

 

여기서 어떤 결론을 내리기 전에 살펴봐야 할 점이 하나 있다. 과연 인간은 완전한 난수를 만들어 낼 수 있을까? 지금 당장 0~9까지의 수 중 하나를 떠올려 보자. 쉽게 할 수 있다. 사람이니까 원하는 대로 아무렇게나 죽죽 수를 나열할 수 있을 것 같다. 그런데 전 국민에게 0~9까지의 수 중 하나를 떠올리라고 한 뒤 통계를 내 보면 어떨까? 0, 1, 2, 3, 4, 5, 6, 7, 8, 9가 골고루 분포되어 있을까? 정말로 난수라면 모든 수가 고르게 나와야 한다.

 

그런데 막상 해 보면 쉽지 않다. 사람이 완전한 난수열을 만들어 내는 건 생각과 달리 어렵다는 소리다. 못 믿겠다면, 지금 머릿속으로 수를 나열해 보자. 아무 수나 떠올린다는 말과 달리 우리는 기억과 생각을 한다. ‘방금 3을 썼으니까 또 3을 쓰기는 그렇고, 조금 멀리 있는 수를 쓸까…….’ 이런 식이다. 진짜 난수라면 앞에서 나온 어떤 수와도 독립적이어야 한다.

 

 

사람이 완전한 난수열을 만들어 내는 건 생각과 달리 어렵다. 인류가 완전한 난수를 생성해 낼 수 없다는 것은 인간의 자유 의지가 생각만큼 자유롭지 않다는 뜻일 수도 있지 않을까?

 

‘아무렇게나’는 쉽지 않은 일

 

1960년대 이래 사람이 완전한 난수를 만들어 낼 수 있는지 확인하기 위해 여러 실험이 이루어졌다. 그 결과 현재 사람은 그다지 훌륭한 난수 생성기가 아니라는 사실이 잘 알려져 있다. 몇 가지 실험 사례를 보자.

 

2007년 폴란드와 영국 연구진이 발표한 논문(논문 링크)에 따르면, 사람은 난수를 생성할 때 바로 앞에 나온 수에 신경을 쓴다. 이 연구는 사람이 의식적으로 난수를 생성할 수 있다는 타 연구 결과에 반박하기 위해 진행한 것으로, 성인 37명에게 0~9까지의 수 중 하나를 골라 난수열을 만들라고 주문했다. 그리고 이 난수열을 분석했는데, 참가자들이 만든 난수의 평균은 4.5에 가까웠다.

 

여기까지만 보면 0~9가 무작위적으로 균등하게 나열된 것처럼 보인다. 그러나 연구진이 연이어 있는 두 수의 경향을 살펴보자 그렇지 않다는 사실이 드러났다. 두 수가 연달아 나올 확률, 예를 들어 5 다음에 다시 5가 나올 확률은 원래 10퍼센트다. 그러나 참가자들이 만든 난수열에서는 7.5퍼센트 정도로 낮았다. 바로 앞에 나왔던 수를 의식적으로 피하는 경향이 있었다고 해석할 수 있다.

 

2012년에 나온 독일과 스위스 연구진의 논문(논문 링크)에 따르면, 사람에 따라 만드는 난수열에 어느 정도 패턴이 있었다. 이들은 참가자 스무 명에게 1~9의 수를 가지고 300항의 난수열을 만들라고 주문했다. 그리고 이 난수열을 분석해 어떤 사람이 만들어 낼 난수열을 예측하는 게 어느 정도 가능하다는 사실을 보였다. 무작위로 찍는다면 다음에 나올 수를 맞힐 확률이 약 11퍼센트지만, 연구진은 이 확률을 최대 40퍼센트대까지 높일 수 있었다. 또, 어떤 한 사람이 만든 난수열 두 개와 다른 사람이 만든 난수열 한 개를 섞어 놓고 다른 사람이 만든 난수열을 찾아내는 실험에서는 최대 88퍼센트의 정확도를 냈다.

 

 

난수와 창의성의 관계는?

 

인공 지능을 이야기하기 전에 당장 우리부터가 완전한 난수를 만들어 내지 못하는 셈이다. 아무 수나 떠올린다는 아주 간단해 보이는 일에 얼마나 많은 요소가 영향을 끼치고 있는 걸까? 어쩌면 아무렇게나 떠올린다고 하는 것과 달리 우리 머릿속에서도 모종의―사람마다 조금씩 다른―알고리듬이 돌아가고 있는 걸지도 모른다.

 

그렇다면 자유 의지라는 철학적인 주제까지 건드리지 않을 수 없다. 우리의 생각이 사실은 미리 정해진 알고리듬에 따라 돌아가는 거라면, 우리가 과연 자유 의지대로 행동하는 것인지 심각하게 의심해 볼 수밖에 없다.

 

어릴 적 게임 만들던 이야기에서 시작해 너무 거창한 주제까지 흘러오게 되었는데, 오늘날 난수는 게임은 물론 통계 조사, 시뮬레이션, 암호, 예술 등 다양한 분야에서 실용적으로 쓰이고 있다. 이런 분야에 활용하기에 컴퓨터보다 창의성이 뛰어나다고 여겨지는 사람이 만든 난수보다 컴퓨터가 만든 가짜 난수가 더 낫다는 사실이 놀라울 뿐이다. 우리의 창의성에 관해서도 다시 생각해 봐야 할지도 모르겠다.

 

 

컴퓨터보다 창의성이 뛰어나다고 여겨지는 사람이 만든 난수보다 컴퓨터가 만든 가짜 난수가 더 낫다는 사실이 놀라울 뿐이다. 인간의 창의성이라는 것, 생각보다 대단한 게 아닐지도 모른다.

 

 

 

참고 문헌

「질서도 없고 규칙도 없다, 난수」, 《수학동아》, 2016년 3월호.

Małgorzata Figurska, Maciej Stan´czyk, Kamil Kulesza, “Humans cannot consciously generate random numbers sequences: Polemic study,” Medical Hypotheses(2008) 70, 182–185.

Marc-Andre´ Schulz, Barbara Schmalbach, Peter Brugger, Karsten Witt, “Analysing Humanly Generated Random Number Sequences: A Pattern-Based Approach,” PLoS ONE 7(7).


고호관

대학에서 건축과 과학사를 공부했다. 《과학동아》 기자, 《수학동아》 편집장으로 일했고, 현재 과학 저술가이자 SF 작가 또는 번역자로 활동 중이다. 『우주로 가는 문 달』을 썼고, 『아서 클라크 단편 전집』 등을 옮겼다.

 

 

 

함께 읽으면 좋은 책들

 

『세상 모든 비밀을 푸는 수학』 [도서정보]
재난 예측에서 온라인 광고까지 미래 수학의 신세계

 

 

『수학의 파노라마』 [도서정보]
수학을 다시 시작하는 이들을 위한 최고의 비주얼 가이드

 

 

『자연의 패턴』 [도서정보]
우리 시대의 과학 큐레이터가 엄선한 형태학 미술관을 탐험하라

 

 

『세계를 바꾼 17가지 방정식』 [도서정보]
위대한 방정식에 담긴 영감과 통찰

 

 

『수학 학습 심리학』 [도서정보]
수학 학습을 위한 독창적인 아이디어로 가득한 고전

 

 

 

『아서 클라크 단편 전집 1953-1960』 [도서정보]
경이로운 소설가이자 예언자인 아서 클라크의 걸작 단편




0 Comments
댓글쓰기 폼