알파고에 활용된 머신러닝 기술

알파고의 바둑 정복

1952년 틱택토를 시작으로 1994년 체커, 1997년 체스 챔피언 Garry Kasparov를 이긴 IBM의 Deep Blue, 2011년 Jeopardy 퀴즈 쇼에 나와 우승한 IBM의 Watson에 이르기까지 컴퓨터는 가장 어렵고 복잡하다고 알려진 게임인 바둑을 제외한 모든 게임에서 사람에게 도전하였고, 승리하였다. 그리고 2016년 구글의 알파고는 이세돌에게 승리하여 인간에게 알려진 가장 어려운 게임, 바둑을 정복하였다.

컴퓨터가 인간의 게임을 이기는 방법은 간단하다. 모든 경우의 수를 시뮬레이션하여 이길 확률이 가장 높은 수를 선택하는 것이다. 틱택토와 체커는 경우의 수가 적기 때문에 간단히 그 문제를 해결할 수 있었다. 체스만 해도 복잡해지는데 이는 컴퓨터의 메모리와 CPU가 발전하면서 가능해졌다. 그러나 바둑의 경우, 모든 가능한 경우의 10의 100승, 즉 “구골 (googol)”을 넘어간다. 아무리 빠른 컴퓨터라고 해도, 분산처리를 한다고 해도, 그 모든 경우의 수를 계산해 낼 수는 없다. 물론 사람도 그 가능성을 다 판단할 수 없기에 모양과 두터움 등을 시각적으로 감지하여 “감”으로 바둑을 둔다.

그런데 딥러닝을 통해 구글은 모든 경우의 수를 계산하는 대신 이길 확률이 높은 경우를 선별적으로 계산할 수 있게 되었으며, 이러한 방법을 통해 게임이 끝날 때까지 모든 가능성이 높은 경우의 수를 다 확인해 보고 한 수를 두는 것이 가능해졌다. 구글은 “딥러닝 Deep Learning”이라는 이름으로 알려진 신경망 Newral Network를 활용하여 가장 확률이 높은 방법을 찾아낸다. 구글의 Deep Learning은 TensorFlow라는 이름으로 오픈소스 되어 있다.

신경망에 대한 간단한 설명

신경망은 대부분 통계적으로 접근하여 확률을 계산하는 다른 기계학습 기술과 달리, 인간의 뇌의 구조를 모방하여 만들어졌다. 사람의 뇌의 신경세포 “뉴런”은 신경 세포체(Soma)와 신경 세포체들을 연결하는 축삭(Axon)과 축삭 말단(Synapse)로 구성되어 있으며, 각 뇌세포와 시냅스가 각각 화학적으로 활성화되어 기억과 판단을 만들어낸다. 아래는 위키피디아의 신경 세포 그림이다.

Screen Shot 2016-03-10 at 7.01.50 AM

신경망은 신경 세포체를 흉내낸 Node와 축삭을 흉내낸 Weighted Edge로 네트워크를 구성한다. 아래의 그림에서 원이 신경 세포체 역할을 하는 Node이고, 화살표 선이 축삭의 역할을 하는 Weighted Edge이다. 각 노드와 엣지는 0에서 1사이의 값을 가진다.

mlp

신경망이 학습을 하는 방법은 Output 노드 들에 원하는 정답을 주고, Input 노드 들에 적절한 입력값을 주면 Input과 Output사이의 패턴을 알아내는 것이다. 위의 신경망에서 Input의 세 노드를 빨강, 노랑, 초록 신호등이라고 생각하고 Output 노드들을 “걷는다”, “기다린다”라고 생각해 보자. 그러면 다음과 같은 정답 패턴 들이 나타난다.

Input 1
빨간신호
Input 2
노란신호
Input 3
파란신호
Output 1
걷는다
Output 2
기다린다
패턴 1 1 0 0 0 1
패턴 2 0 1 0 0 1
패턴 3 0 0 1 1 0

패턴 1, 2, 3을 여러번 신경망에 보여주면, 신경망은 중간의 Hidden Layer를 활용하여 패턴을 학습하고, 다음에 Input으로 파란 신호 (0,0,1)이 들어오면 걸으라는 의미의 (1,0) 결과를 만들어 내게 된다.

신경망 알고리즘

신경망은 1950년대에 만들어진 가장 오래된 기계 학습의 알고리즘 중 하나이다. 그동안 신경망은 활용이 제한적이었는데, 신경망의 규모가 커질수록 기하급수적으로 계산의 양이 많아지고 학습이 느려지기 때문이다. 구글의 TensorFlow는 이러한 신경망을 클라우드 상의 여러 대의 컴퓨터에서 분산 처리할 수 있도록 해 놓은 것이다. 클라우드의 도입으로 컴퓨터 한대의 한계를 벗어나 여러 컴퓨터로 동시에 계산하는 것이 가능해 짐으로써, 신경망은 “딥러닝”이라는 이름으로 바둑의 모든 경우의 수를 시뮬레이션 해 낼 수 있는 성능에 이르게 된 것이다.

1세대 인공지능은 규칙 기반이다. 컴퓨터에게 모든 게임의 규칙을 설명하고 각 선택의 순간에 모든 조건을 종합하여 규칙에 따른 결정을 하라고 하는 것이다. 틱택토나 고스톱 등의 게임을 해결할 수 있는 방법이다. 2세대 인공지능은 시뮬레이션 기반이다. 모든 경우의 수를 계산하고 최선의 수를 찾는 방식으로 체스에 활용되었다. 그리고 알파고가 선택한 3세대 인공지능은 신경망을 통해 가능성이 가장 높은 최선의 수를, 수 많은 경기들을 본 후에, 그 패턴을 인식하여 찾아내는 것이다. 그러므로 3세대 인공 지능의 핵심은 인공지능 모델의 디자인과 함께, 얼마나 많은 예시를 접할 수 있느냐에 있다. 알파고는 그동안 다른 바둑 프로그램과, 실제 사람과의 대국, 그리고 엄청나게 많은 기보를 학습함으로써 바둑의 모든 패턴을 찾아내었다. 그리고 지금도 계속 강해지고 있다.

tN 인사이트: 2006년 신경망을 처음 접했을 때, 인간의 뇌를 가장 닮은 알고리즘이라 scalability 문제만 해결하면 인간의 사고 체계를 완벽히 흉내낸 인공지능을 만들 수 있을꺼라 생각한 적이 있다. 신경망은 이미지 인식 등에 탁월한 성능을 보였지만 지난 10년간 느린 성능으로 인해 다른 기계 학습 알고리즘에 비해 많이 활용되지 못해왔다. 구글의 TensorFlow로 클라우드를 이용하여 scalability 문제를 해결한 신경망은 “딥러닝”이라는 이름으로 돌아와 기계 학습의 새로운 장을 열었다. 인간의 뇌를 재현해, 감각과 느낌으로 두어야 한다고 믿어온 바둑을 배워낸 딥러닝. 흔히 알파고가 몇 수 앞까지 내어다 볼 수 있느냐고 묻는데, 그 답은 “게임 끝날 때까지의 모든 수”라고 해야 할 듯 하다. 바둑을 배워낸 알파고는 인간의 “감”이라는 것도, 결국의 뇌의 계산의 결과와 이전의 경험을 기억한 것이라는 것을 보여주는 듯 하다. 사실 인간의 감정도 기계가 자신의 생존을 스스로 결정하는 시기가 오면 자연스럽게 배울 것이라는 생각이 든다. 지나친 단순화일 수 있겠지만, 인간의 감정도 결국 내 생명을 지키고 새 생명을 만들어 내기 위하여 매 순간 우선 순위를 변화시키는 알고리즘이 아닌가 싶다.

참고: 구글 블로그

유호현: 샌프란시스코 Airbnb에서 일하고 있는 소프트웨어 엔지니어입니다. 이전에는 Twitter의 Language Engineering 팀과 Search Quality 팀에서 일하였습니다.

오픈소스 한국어 처리기 프로젝트인 open-korean-text를 개발했습니다. http://openkoreantext.org