알파고 vs 이세돌 Math2016. 3. 13. 23:15
(이 글은 알파고의 기본적인 원리를 일부 설명하고 있으나, 알파고의 정확한 작동 원리를 다루는 글은 아닙니다.)
구글(Google)의 자회사인 딥마인드(DeepMind)에서 개발한 바둑 프로그램인 알파고(AlphaGo)와 이세돌 9단의 5번기가 진행 중이다. 지금까지 컴퓨터 바둑의 수준이 최정상급 프로 기사에게는 한참 모자랐기에 이번 대결은 당연히 이세돌 9단이 손쉽게 승리할 것이라는 예상이 많았다. 날로 먹는 우승 상금 11억원! 심지어 5:0으로 완승할 것이라는 예상도 많았고, 알파고가 어느 정도까지 그럴 듯하게 바둑을 둘 수 있는지 정도가 관심사였다.
5개월 전에 알파고가 유럽 챔피언이었던 판후이(Fan Hui, 樊麾) 2단을 5:0으로 이기기는 했지만, 그 실력은 아마 정상급 정도여서 그 동안 실력이 늘어봐야 이세돌 9단에게는 정선(덤 없이 흑으로 두는 것)도 힘들 것이라는 평가가 대부분이었다. 그런데! 뚜껑을 열어 보니 예상과 전혀 다른 결과가 나왔다. 3월 9일의 제1국, 3월 10일의 제2국을 알파고가 이기더니, 하루 쉬고 진행된 3월 12일의 제3국마저 이겨서 5번기의 승부가 이미 결정되어 버렸다. 날로 먹는 우승 상금이 날아갔다.
꽤나 충격적인 결과여서, 이러다 이세돌 9단이 5:0으로 이기기는커녕 0:5로 지는 게 아닌가 싶었으나, 3월 13일 원기옥을 모아 제4국을 처절하게 두어서 승리를 거두었다. 처음에는 인공지능 따위가 인간을 이길 수 없다고 자신만만해 하던 사람들이, 알파고가 예상 밖으로 막강한 실력을 갖추고 있음이 알려지자 이번에는 이번 대결이 불공정하다느니 구글이 부정하다느니 하는 온갖 헛소리를 쏟아내기도 하였다. 사실 알파고의 원리, 대회의 취지 등을 생각하면 말도 안 되는 멍청하기 짝이 없는 소리들인데도 이런 헛소리가 떠도는 걸 보면 한심할 지경이다.
백만년전쯤에 나온 컴퓨터 바둑은 그 수준이 정말 한심해서, 18급도 조금만 연습하면 만방으로 이길 수 있는 수준이었다. 그럴 수밖에 없는 것이, 바둑은 각 단계에 둘 수 있는 경우의 수가 너무 많아서 곧이곧대로 프로그래밍하는 방식으로는 절대 해결할 수 없어서 컴퓨터 바둑의 수읽기 능력이 매우 제한적이었기 때문이다. 예를 들어, 첫 수를 인간이 우상귀 화점에 두었다면, 컴퓨터가 다음에 둘 자리는 360(=19x19-1) 군데가 된다. 그런데 이 가운데 어느 자리에 두는 것이 적당할지를 알아내려면, 다음에 사람이 둘 자리를 예측해서 우열을 평가해야 한다. 이렇게 되면 360x359 가지 경우에 대해 판단해야 한다. 꼴랑 두 수만 가지고 국면을 평가한다는 것은 말이 안 되니 세 수 정도 둬 본다고 생각하면 360x359x358=46267920이 된다. 그러니까 두 번째 수를 두는 것만으로도 4600만 가지 경우를 다루어야 한다는 것이다. 그것도 고작 세 수(컴퓨터-사람-컴퓨터) 생각해 보는 수준이면서.
컴퓨터에 대해 잘 모르는 사람 가운데는 바둑의 각 단계를 모두 따져 보고 다음 수를 결정하는 줄로 아는 사람도 있던데, 이런 건 당연히 불가능하다. 순진하게 생각해도 이러려면 361!=361x360x...x3x2x1 가지 경우가 필요하고, 이 값이 1 뒤에 0이 768개 붙는 수보다 크니까, 전세계 모든 컴퓨터를 다 긁어 모은다고 해도 이런 일은 불가능하다. 이런 방식을, 마구잡이로 밀어붙인다는 뜻에서 브루트 포스(brute force) 방식이라고 한다. 그러니까 컴퓨터 바둑 프로그램에 대해 이야기하면서 브루트 포스 방식으로 진행된다고 말하는 사람은 그냥 무식한 걸로 생각하면 된다. 게다가 용감하기까지...
이런 식이다 보니, 선사시대의 컴퓨터 바둑은, 주변이 부분적으로 이런 모양이면 다음 수를 이렇게 둔다는 식으로 규칙을 정해 두고 진행하는 것이 기본 원리였다. 당연히 수읽기가 매우 제한적이고, 무엇보다 그 규칙에 따라 진행된 결과가 유리한지 불리한지 판단하기가 매우 어려웠다. 그래서 예전 컴퓨터 바둑은 포석과 정석은 그럴 듯한데, 중반전쯤 되면 온갖 떡수를 늘어놓다가 자멸하는 것이 보통이었다. 정석에 없는 수를 두면 처음부터 헤매기 일쑤였고, 매번 망하면서도 똑같은 수로 응수하는 바보였다.
컴퓨터가 인간 최고수를 꺾었던 체스와 달리 바둑에서는 컴퓨터가 10급 수준에 도달하는 것도 쉽지 않은 일이었다. 이런 상황은 몬테카를로 트리 탐색(Monte Carlo Tree Search, MCTS)이라는 기법이 등장하면서 완전히 바뀌었다. 몬테카를로 트리 탐색은 다음과 같이 진행된다. 편의상 컴퓨터가 흑, 사람이 백이라 하자. 컴퓨터가 둘 차례가 되면 컴퓨터는 현재 상황의 바둑판 아무 곳에나 흑을 둔다. 그리고 이어서 아무 곳에나 백을 둔다. 이 과정을 컴퓨터 혼자서 반복해서 최종 단계에 이르러 집을 세어 승패를 판단한다.
예를 들어, 흑 A라는 수를 둔 상태에서 수만 판 무작위로 진행했더니 승률이 70%쯤 되고, 흑 B라는 수를 둔 상태에서 수만 판 무작위로 진행했더니 승률이 40%쯤 되었다면 컴퓨터는 A에 흑을 두는 것으로 결정한다. 아무렇게나 두어서 승패를 판단하는 게 무슨 의미가 있을까 싶은데, 이런 과정을 수백, 수천, 수만 번 반복하면 얘기가 조금 달라진다. 진행할 수 있는 모든 수를 브루트 포스로 다 조사하는 것은 절대로 불가능하지만, 무작위로 수만 번, 수백만 번 진행하여 승패를 조사하면 통계적으로 모든 경우의 승패 비율과 비슷해지는 것이다. 이와 같이 무작위로 진행된 많은 양의 데이터로 전체의 양상을 추정하는 방식을 몬테카를로 기법(Monte Carlo method)이라 한다. 몬테카를로는 모나코의 도박장 이름으로, 이 기법이 확률에 기반하고 있어서 이런 이름이 붙여졌다.
MCTS가 등장하면서 컴퓨터 바둑은 실력이 엄청나게 늘었다. 겨우 몇 수, 그것도 부분적으로 유불리를 평가하던 단계에서, 통계적인 근사이기는 하지만 승리할 확률을 높이는 수를 두는 것만으로도 이전 시대와는 비교할 수 없이 실력이 늘었다. 예컨대 MCTS를 이용하는 Zen, Crazy Stone, 돌바람 같은 프로그램은 아마추어 상급 수준에 가까우니, 컴퓨터가 10급 수준에 도달하는 데도 몇 십년은 걸릴 것이라고 생각했던 데 비하면 어마어마한 발전이었다.
몇년 전에 컴퓨터가 프로 기사를 상대로 접바둑(흑돌 몇 개를 미리 두고 진행하는 핸디캡 게임)을 이겼다는 소식이 화제가 되었는데, 이 프로그램들이 MCTS를 이용한 것들이었다. 당연한 일이지만 MCTS는 무작위로 진행하는 게임의 양이 많을수록 더 정밀해지므로, 이런 이벤트에서는 PC용 상용 프로그램과는 달리 CPU를 훨씬 많이 장착한 컴퓨터에서 전용 프로그램으로 진행된다. 그러나 MCTS도 만능은 아니다. 무엇보다 정밀한 결과를 얻으려면 데이터가 많아야 하는데, 무한정 시간을 들일 수는 없기 때문이다. 효율적인 진행을 위해서는 불필요한 단계를 걸러내야 하는데 이 부분이 컴퓨터 바둑의 실력을 늘이는 핵심적인 부분이었다. 그러니까, 우하귀에서 수읽기를 시작한다면, 다음 단계에서 좌상귀 1의1 자리 같은 곳을 배제하기만 해도 효율이 올라가는 것이다.
프로 기사들에게 물어보면, MCTS를 기반으로 하는 기존 프로그램은 일곱 점까지도 접어줄 수 있다고 한다. 컴퓨터가 미리 일곱 점을 두고 시작하여도 프로가 잘 지지 않는다는 뜻이다. 아마추어로서 제법 잘 둬도 프로에게는 넘사벽이다. 특히 MCTS의 특성상 완전히 엉뚱해 보이는 수를 두는 경우가 꽤 있어서, 이런 허점을 파고 들면 컴퓨터의 대마 몰살하기 같은 황당한 일도 가능하다고 한다. 수읽기 자체는 MCTS로 흉내낼 수 있지만, 제한된 시간 안에 바둑판 전체를 대상으로 하여 MCTS를 진행하는 것은 한계가 분명하였다. 인간은 현재 상황과 무관한 곳을 직관적으로 무시하고 수읽기를 진행할 수 있지만, 컴퓨터는 이런 직관을 갖고 있지 않다는 것이 문제였다. 현재 상황에서 "둘 만한 곳"을 추려내는 것은 MCTS와는 다른 새로운 기법이 필요하였다. 딥마인드의 알파고가 획기적인 발전을 이룬 부분이 바로 여기였다.
알파고가 "둘 만한 후보지"를 찾는 방식은 사람과 비슷하다. 사람은 경험을 통해, 대략 이런 배치면 이런 정도에 두는 것이 좋다는 것을 학습한다. 가능한 모든 배치를 저장해 둔다는 것은 불가능하므로, 후보지를 고르는 데는 비슷한 상황을 분류할 수 있는 획기적인 알고리듬이 필수적이다. 이것을 일일이 데이터베이스화하는 것은 너무나 어려운 일인데, 딥마인드에서는 최근 각광을 받고 있는 딥러닝(Deep Learning)을 이용하여 해결하였다.
아마도 이 내용은 생물학의 최근 성과와 비교하면 이해하기 쉬울 것 같다. 2014년 생물학에서 획기적인 일이 있었다. 예쁜꼬마선충(Caenorhabditis elegans)의 움직임을 흉내낸 로봇을 만들었는데, 그 움직임을 일일이 프로그램으로 작성한 것이 아니라, 예쁜꼬마선충의 뉴런 상태를 구현하고 연결된 뉴런이 작동하는 방식만 지정하는 식으로 만들어진 것이었다. 그러니까 A 뉴런에 입력이 들어오면, 여기에 연결된 B 뉴런에 신호를 전달하고, 다시 여기에 연결된 C 뉴런에 신호를 전달하고, ... 이런 식으로 연결 상태(connectome)를 구현한 것만으로 로봇이 예쁜꼬마선충처럼 움직이는 것이다. ☞ 네이버 블로그: 인간이 만든 인공생명체
이런 장면을 보면 "과연 생명이란 무엇인가?"라는 의문이 든다. 동물의 행동이 뉴런의 연결 상태만으로 구현된다는 것은, 인간의 사고 또한 단순히 뉴런의 연결 상태로 구현할 수 있을 것이라는 추측을 가능하게 한다. 물론 겨우 302개의 뉴런으로 구성된 예쁜꼬마선충의 움직임과 100억개가 넘는 뉴런으로 구성된 인간의 뇌를 비교하기는 어렵겠지만.
딥마인드에서는 바둑에서 착수 후보지를 고르기 위하여 뉴런의 연결 상태를 구현하는 것과 비슷한 방법을 사용하였다. 바둑판의 현재 상황을 입력하면 착수 후보지를 출력하는 기계를 뉴런의 연결 상태로 구현한 셈이라고 할 수 있다. 물론 100억개의 요소로 이런 연결 상태를 구현하는 것은 불가능하므로, 적당한 개수의 변수에 적당한 입출력량을 정하여야 한다. 처음에는 이러한 신경망의 기본적인 연결 상태를 구현하기 위하여 좋은 데이터를 입력하여야 한다. 이를 위해 인터넷 바둑에서 고수들의 기보 16만개를 입력하여 "이런 국면에서는 이런 수"가 나오도록 알파고에게 "공부"를 시킨다.
이 과정을 오해하여, 알파고는 기보 수만 개를 소장하고 있다가 상대가 두는 수를 그 기보에서 찾아보고 다음 수를 둔다고 생각하는 사람도 있는데, 당연히 말도 안되는 소리이다. 기보는 알파고가 바둑에 대해 알도록 처음에 가르칠 때만 쓰이는 셈이다. 애초에 기보를 검색해서 대응수를 찾는다는 것도 말이 안 된다. 경우의 수를 생각하면 현재 상황과 같은 기보가 존재할 가능성이 거의 0이니까. 또, 이세돌 9단과 대국한 결과를 입력해서 성능이 업그레이드 될 테니 반칙이라고 주장하는 사람도 있던데, 고수들의 기보는 신경망을 처음 구축할 때 쓰이는 것이지 데이터베이스를 만들어 놓고 훔쳐 보려고 쓰는 게 아니다. 어차피 16만개의 기보에 한 두 개 더 보탠다고 신경망 구성이 획기적으로 변하는 것도 아니고.
처음에 알파고가 신경망을 구축하는 것은 바둑의 기본기를 가르치는 것과 비슷하다. 인간은 기본기를 배운 다음 수많은 실전 대국을 통하여 기력을 향상시키는데, 알파고도 마찬가지로 대국을 통해 실력을 키운다. 다만, 그 대국이 자기 자신과 두는 것이고, 먹지도 않고 쉬지도 않고 매일매일 수십 판씩 바둑을 둔다는 점이 다르다. 학습한 기본기를 바탕으로, MCTS를 적용할 범위를 축소하여 효율적인 수읽기를 하면 점점 더 좋은 대국이 가능하므로 시간이 지날수록 실력이 점점 더 늘게 된다.
알파고가 자기 차례에 착수를 결정하는 방법을 정리하면 이렇다.
1. 먼저 현재 국면에서 둘 만한 자리를 몇 군데 고른다.
2. 각 수에 대해 MCTS로 수읽기를 진행하여 이길 확률이 높은 수를 고른다.
3. MCTS를 진행할 때 바둑판 전체에서 무작위로 고르는 대신 "현재 국면에서 둘 만한 자리"를 골라 탐색 범위를 줄인다.
이로부터 컴퓨터 바둑의 기본 원리는 MCTS이지만, MCTS의 효율을 높이는 데는 "현재 국면에서 둘 만한 자리"를 고르는 방법이 결정적인 역할을 함을 알 수 있다. Zen이나 Crazy Stone과 바둑을 둬 보면, 가끔 바둑판 중앙 가까이에 모호한 수를 두는 경우가 있어서 사람이 두는 바둑과는 전혀 다른 위화감을 주는데, 알파고는 상대적으로 그런 일이 덜해서 사람과 두는 느낌을 준다. 이 또한 신경망으로 MCTS의 탐색 범위를 사람이 둘 만한 범위로 축소하기 때문에 가능한 일이다.
MCTS의 한계를 뛰어넘었다는 점에서 알파고는 인공지능 분야에서 대단한 성취라 할 수 있다. 그러나 MCTS가 확률에 기반한 수읽기이며 신경망으로 걸러내는 수가 얼마나 효율적일지는 파악하기가 쉽지 않다는 문제가 있다. 하나의 함수로 이루어져서 입력에 대해 명확하게 출력이 하나로 정해진다면 원리를 파악하기 쉽겠지만, 여러 변수들이 복합적으로 작용하는 신경망은 입출력 원리를 파악하기가 쉽지 않기 때문이다.
비유하자면, 계산기와 인간의 두뇌가 덧셈을 하는 방식을 비교해 볼 수 있겠다. 우리는 계산기의 작동 원리를 알기에 계산기는 덧셈을 잘 한다는 것을 확신한다. 그러나 인간의 두뇌가 어떻게 작동하는지는 아직 잘 모르기 때문에, 덧셈을 막 배운 아이가 덧셈을 잘 하는지는 문제를 여러 개 풀려서 확인하는 수밖에 없다. 그러니 알파고의 성능을 파악하기 위해서는 알파고에 버금가는 상대와 실제로 대국을 해 보는 것이 최선이다. 그 상대가 판후이 2단이었고 그 다음이 이세돌 9단이었던 것이다. 구글의 딥마인드로서야 100억원이 아깝지 않은 일이었다. 게다가 덤으로 홍보 효과까지.
인터넷에는 구글이 이세돌 9단에게 이기려고 부정한 짓이라도 한 줄로 아는 사람들이 있었지만, 당연히 말도 안 되는 헛소리이다. 애초에 알파고가 얼마나 잘 작동하는지 알아보려는 것이므로 최고 사양에 최고의 기술로 성능을 극대화하는 것이 당연하다. 이상한 주장을 하는 사람들은 이세돌 9단이 저사양으로 돌아가는 알파고를 상대로 이기기를 바라기라도 하는 걸까. 최고의 성능으로 작동하는 알파고를 상대로 승리를 거두는 쪽이 훨씬 더 자랑스러운 일일 텐데. 구글이 환호한 것은 이세돌 9단을 이겨서 상금을 안 줘도 되니까가 아니라 자신들이 만든 프로그램이 이세돌 9단에게 승리를 거둘 정도로 잘 작동한다는 사실을 확인했기 때문이다.
알파고에 대한 정보가 부족하다고 부당하다고 주장하는 사람도 있었지만, 이것도 말이 안 된다. 알파고에 대한 정보라면 당연히 기보를 뜻하는데, 기보란 상대가 있어야 하며 알파고의 실력을 제대로 알 수 있는 기보는 알파고를 능가할 수 있는 상대와 맞붙어 봐야 나오는 것이다. 그러니 딥마인드에서 이세돌 9단에게 도전을 한 것이 바로 알파고에 대한 정보를 알아내기 위한 것이다.
알파고의 바둑을 보면서, 알파고가 매번 일정한 수를 두는 줄로 아는 사람도 있었다. 컴퓨터라는 물건이 정해진 입력에 대해 정해진 출력을 내놓는 정확한 기계여서 이런 인식이 많은 것 같은데, 알파고가 수읽기를 하는 방식은 브루트 포스로 모든 경우를 다 따져 보고 그 가운데 가장 좋은 수를 두는 것이 아니라, MCTS로 찾은 확률적인 결과물이다. 따라서 같은 응수에 대해서 판마다 승리 확률이 다르게 나올 수도 있다. 승리 확률이 비슷하면서 높은 수가 여러 개라면 그 가운데 하나를 무작위로 고를 수도 있다. 그러니 같은 수에 대해서 다르게 응수하는 일이 충분히 가능하다. 그런 뜻에서 알파고가 두는 수는 "정수"라기보다는 "정수에 가까울 확률이 큰 수"라 할 수 있다.
알파고의 바둑, 특히 제4국을 보면 후반부에 알파고의 떡수가 난무하는 것을 볼 수 있다. 이것은 MCTS를 이용한 기존 바둑 프로그램에서도 볼 수 있는 현상인데, 컴퓨터가 지고 있다고 판단하면 이상한 수를 두기 시작한다. 아마도 이것은 MCTS의 근본적인 문제점 같다. 이기기 어려운 상황이 되면 사람은 응수하기 까다로운 수를 두어 속칭 "흔들기"를 시도하는 것이 보통인데, 컴퓨터에게는 "응수하기에 더 까다로운 수"라는 개념이 없어서 이런 일이 생긴다. 바둑 프로그램은 어느 경우에도 상대가 최선의 응수를 할 것이라는 가정 아래 작동하기 때문이다. 그러다 보니 안 받으면 가장 이득이 큰 수를 두는 경향이 있고, 이런 수들이 대부분 응수가 눈에 뻔히 보이는 수여서 떡수 소리를 듣게 된다. 마치 천재 기사가 하수에게 "이 수는 이렇게 응수할 것 같아서 안 뒀습니다."라고 하는 느낌이랄까. 그 응수가 대단한 묘수인데도.
컴퓨터 바둑 프로그램이 발전하면서 MCTS의 한계를 극복하기 위한 다양한 노력이 진행되고 있었기에 조만간 상당한 수준에 이른, 사람처럼 두는 프로그램이 개발되리라 생각했다. 그러나 이처럼 빨리 최정상 프로급에 도달한 프로그램이 개발되리라고는 전혀 생각하지 못하였다.
알파고는 어디까지 발전할 수 있을까? 프로도 생각 못한 새로운 수를 제시하여 프로들에게 연구거리를 제공할 수도 있겠다. 응수하기 까다로운 정도를 평가하는 기능을 추가한다면 알파고가 더 인간에 가까운 느낌을 줄 것 같다. 알파고와 다른 스타일의 프로그램을 개발하는 것도 재미있을 것 같다. 지금처럼 MCTS를 이용하여 이길 확률이 높은 수를 고르는 방식으로 진행하면, 확실한 승리를 위해 대마 안 잡고 살려주던 전성기 이창호 9단 바둑과 비슷해질 수밖에 없다. 이길 확률이 조금 떨어지더라도 집 차이를 크게 하는 수를 선호하도록 신경망을 구현하고 공부시킨 프로그램이라면 아마도 엄청나게 전투 지향적인 컴퓨터 바둑이 되지 않을까? 이름은 준키고(JoonkiGo)
그러나 무엇보다도 알파고에서 구현된 기술을 다른 분야에 적용한다면 정말 무궁무진한 가능성이 펼쳐질 것 같다. 딥마인드에서 언급하였던 의료 분야도 그 한 예이다. 정말로 그런 시대가 온다면 인류 역사상 상상력이, 아마도 상상력만이 가장 중요한 시대가 될 것 같다.
'Math' 카테고리의 다른 글
대학수학 맛보기 - 미분형식 (69) | 2016.08.24 |
---|---|
정다면체와 한 점 (6) | 2016.07.09 |
대학수학 맛보기 - 부정적분 (21) | 2015.12.08 |
수학자 Max Zorn (0) | 2015.11.11 |
2016년 수학 달력 (11) | 2015.11.05 |