오늘 이세돌이 패배함으로써 인간 고수대 인공지능의 대결은 1승 4패로 인공지능의 승리로 돌아갔습니다. 4번째 대국에서 이세돌이 승리했기에 저는 내심 ‘이세돌이 4번째 대국과 정확하게 동일한 수로 진행하면 어떨까?’하는 생각을 잠깐 해 보았습니다.
물론 알파고는 학습이 가능하기에 어제의 기보도 실시간으로 학습되었을 수 있습니다만, 이미 수억번의 훈련을 거친 후이기 때문에 어제의 단 한번의 패배가 인공신경망 계수(weight)값들에 큰 영향을 주었을 지 궁금했기 때문입니다. 극단적인 비유를 하자면 제가 지난번에 만들었던 인공신경망 ‘시노자키 AI’에게 지금까지 훈련 데이터로 사용한 입/출력값과 다른 훈련 데이터인 “입력이 일반인(0.5)과 시노자키 아이(1)일 때 출력이 썸(1)”이라는 데이터로 한 두 번 훈련시킨다 해도, 출력값이 크게 달라질 수는 없을 것입니다.
구글 딥마인드 CEO 트윗으로는 79수 이전까지는 알파고의 승리확률이 70%였다는데, 그렇다면 4국과 동일한 수를 두어도 79수 근처까지는 아마도 동일하게 진행되고, 그 후로는 바뀔 수도 있고 아닐 수도 있다고 봅니다. 이세돌과의 대국 기보는 중요한 정보이므로 일반적인 기보로 훈련할 때와는 달리 제4국 기보로 훈련을 여러 번 시키거나 가중치를 주어서 훈련시켰을 수도 있고, 그런 경우 알파고의 후속 수는 바뀔 수도 있을 것입니다. M형 탈모 아저씨는 이미 5국이 시작되기 전에 동일한 게임 진행을 해 보아서 그 결과를 알고 있지 않았을까요.
본론으로 들어가서 알파고의 동작을 이해하기 위해 주로 두 개의 문서를 참고했습니다. SPRi 소프트웨어 정책연구소에서 작성한 “AlphaGo의 인공지능 알고리즘 분석” 과 구글 딥마인드에서 네이처를 통해 발표한 “Mastering the game of Go with deep neural networks and tree search” 입니다. 전자는
http://spri.kr/post/14725 에서 다운로드 받을 수 있습니다.
이번 글은 지난번 글보다는 복잡하고 이해하기 힘들 수 있습니다만, 최대한 간략하게 풀어서 설명해 보겠습니다. 지나치게 테크니컬한 부분의 설명은 차라리 논문을 읽어보는 것이 나을 것이기에 생략하겠습니다. 또한 저는 이제 전공자가 아니기 때문에 논문을 해석하는데 있어서 잘못된 부분이 분명 있을 수 있습니다. 이 점 양해 부탁드립니다. 이 글에서 pi, sigma, rho 라는 말은 각각 그리스어 알파벳임을 아시면 그림과 글을 연관지어서 보기 쉬울 것입니다.
알파고가 바둑을 진행하는데 있어서 가장 중요한 요소는 인공신경망과 몬테카를로 트리 탐색 (Monte CalroTree Search) 알고리즘입니다. 몬테카를로 트리 탐색 알고리즘은 바둑에서 가장 널리 사용되는 인공지능 알고리즘이라고 합니다. 먼저 그나마 익숙한 인공신경망부터 알아보도록 하겠습니다.
알파고의 인공신경망은 정책망(policy network)과 가치망(value network)으로 구성됩니다. 정책망의 입력값은 현재 진행되는 바둑의 상태이고 출력값은 다음 수를 어느 위치에 두어야 할 지에 대한 확률분포입니다. 가치망의 입력값은 정책망과 거의 비슷하고 출력값은 현재 바둑 상태에서의 승산입니다.
정책망과 가치망의 입력 데이터는 위의 표에 나와있습니다. 바둑판의 19*19개 자리 모두에 대해서 표의 정보들이 생성되어 인공신경망의 입력 데이터로 사용되는 것입니다. 보시다시피 단순히 현재 바둑판의 단순한 상태만을 입력으로 삼는 것이 아니라, 각각의 자리에서 마지막 움직임 후에 몇 턴이 지났는지(Turns since), 축, 활로 등의 부가정보가 담겨있습니다. (그러므로 알파고의 바둑이 연속성이 전혀 없다는 말, 즉 매 턴마다 새로운 사람이 와서 두는 바둑과 같다는 말은 엄밀히 말하면 ‘Turns since’ 입력값 때문에 틀린 말입니다. 바둑판 상태를 처음부터 보지 않은 사람은 알 수 없는 정보이기 때문입니다.) 맨 밑에 player color는 가치망에서만 사용하고 정책망일때는 제외되는 입력값인데, 가치망에서는 승산 계산을 해야 하므로 7집 반의 덤 때문에 필요한 값이 아닌가 추측해봅니다.
바둑판 19*19 개의 모든 자리 대해서 위의 데이터들이 생성되는 것이므로, 정책망은 48*19*19개, 가치망은 49*19*19개의 바이너리 데이터를 입력값으로 사용하는 것입니다. 두 개의 망 모두 layer는 13입니다. 지난번 글에서 제가 보여드렸던 입력 2, 출력 1, layer 3짜리 시노자키 AI 신경망과 비교하면 규모면에서도 엄청난 차이가 느껴집니다.
위의 그림은 정책망, 가치망의 입출력을 보여줍니다. 왼쪽의 정책망은 현재의 바둑 정보를 이용해서 전체 바둑판에 대한 다음 수의 확률을 계산합니다. 출력값은 바둑판 위치 19*19개 각각에 대한 확률값입니다. 초록색 그래프가 높은 위치가 다음 수가 놓일 확률이 높은 자리라고 볼 수 있습니다. 오른쪽의 가치망은 현재의 바둑 정보에서 최종 승산을 출력값 하나로 생성합니다.
위의 그림은 정책망과 가치망을 어떻게 훈련시켰는지 보여줍니다. 정책망은 두 종류가 있는데, 간단히 설명하면 하나는 입력값이 단순하고 계산이 빠르지만 정확도는 떨어지고(정책망pi) 또 하나는 입력값이 복잡하고 느리지만 정확도는 더 높습니다(정책망sigma). KGS Go Server 프로 6단에서 9단사이의 실제 대국 16만개의 기보로부터 3000만 개의 바둑 상태를 추출하여 그 중 2900만개를 이용하여 이 두 개의 정책망을 훈련시켰다고 합니다. 나머지 100만개의 상태는 훈련된 정책망을 테스트하는데 사용했다고 합니다.
이 부분을 부연설명하자면, 16만개의 기보 중 어느 한 대국, 어느 한 시점에서의 바둑 상태와 그 시점에 프로기사가 놓은 돌의 위치 정보를 2900만개 모아서 입력데이터와 출력데이터로 사용하여 훈련시켰다는 말입니다. 즉 이런 상황(입력값)에서 다음 수는 이 위치(출력값), 이렇게 훈련시킨 것이죠. 나머지 100만 가지 상태로 정책망sigma를 테스트해 본 결과 57%의 정확도를 보였다고 합니다.
이렇게 프로기사의 돌 놓는 방법을 훈련시킨 정책망sigma를 이용해서 스스로 대국하는 것(알파고 vs 알파고)을 128만번 수행하여 인공신경망의 계수값들을 강화시켰다고 합니다. 이렇게 강화된 정책망을 정책망rho라고 합니다. 또한 이 자체대국 과정에서 생성된 3000만개의 바둑 상태를 이용해서 가치망을 훈련시켰다고 합니다.
가치망을 훈련시키는 과정은 아마도 “이러한 바둑 상태(입력값)에서는 이겼다(출력값=1)” 혹은 “이러한 바둑 상태(입력값)에서는 졌다(출력값=0)” 이런 식으로 아니었을까 합니다.
여기까지 생성한 정책망rho 만으로도 사실 바둑 두는 것이 가능합니다. 현재의 바둑 상황을 입력하면 프로 기사들이 그 다음 수로 놓을 만한 가장 확률 높은 자리가 출력으로 나오니, 이것을 반복하면 되겠죠. 실제로 이것만으로도 Pachi라는 기존의 바둑 프로그램에게 85%의 승률을 보였다고 합니다. 여기에 몬테카를로 트리 검색 알고리즘이 추가됩니다. –꼐속