4차 산업혁명이란? – 인공지능의 진짜 구조

요즘 4차 산업혁명이라는 단어가 화두다. 도대체 누가 만들어냈는지는 잘 모르겠지만, 그 단어에서 가장 핵심 키워드는 “인공지능”인 것 같은데, 인공지능 만들어 본 적도 없는 사람들이 너무 뇌피셜을 많이 쓰고 있고, 필자에게 이런게 가능하냐고 물어보는 사람들이 너무 많아졌다. 사실 필자도 아는거 별로 없는데, 아래 게임 인공지능 예제로 한번 필자가 알고 있는 내용들을 정리해보고 싶다.

 

들어가며

필자도 여느 80년대생 한국 남성들과 마찬가지로 2000년대 초반에 스타크래프트라는 게임에 빠져 살았다. 처음에는 컴퓨터와 1:1로 연습했고, 나중에는 3:1로 연습해서 이기는 수준이 되니 친구들과 함께 팀플레이할 수 있는 수준이 되더라. 그 시절 게임에 들어있던 “인공지능”이 보통의 한국인 게임 유저 1/3명 정도의 능력을 갖추었다는 이야기다. 물론, 컴퓨터에게 꼼수를 쓰면 더 쉽게 이길 수 있는 방법이 많고, 컴퓨터는 언제나 인간보다 비 효율적으로 유닛을 생산, 조합하고 전략을 짰다.

알파고의 대성공을 보고 지난 1년 반 남짓동안 인공지능 개발에 엄청나게 많은 돈이 투자되었고, 사람들의 기대감도 커졌는지 스타크래프트 인공지능도 지금보다 더 잘하게 만들 수 있지 않을까는 이야기가 계속 돌았다. 최근에는 스타크래프트 프로 선수와 인공지능간 대결이 열렸는데, 필자의 예상대로 인공지능이 참패를 했다.

왜 인공지능의 참패를 예측했냐고? 여기 두 개의 키워드가 있다. 불확실성(Uncertainty)계산비용(Computational Cost).

 

1. 인공지능 모델링

필자의 예측을 설명하기 전에 스타크래프트 인공지능을 어떻게 만들었을지 한번 짐작해보자.

우선 반칙을 안 한다는 전제아래 맵핵을 안 쓰고 다른 유저의 정보를 알려면 정찰 유닛을 보내야하고, 그 유닛의 시야에 들어오는 정보들을 보고 해석해야한다. 미니맵을 실시간으로 스캔하는 알고리즘은 아마도 CNN이었을 것이고, 거기서 우리 편과 색이 다른 유닛이 나오면 적군으로 인지하도록 만들면 되겠다. 근데, 정찰 유닛을 어느 방향으로 보내야할까? 4인 플레이 맵에서 1:1로 경쟁하고 있으면, 내 위치에 따라 유닛을 보내는 방향이 달라질텐데, 그런 부분은 어떻게 Learning을 시켰을까? 여기서 첫번째 난관이 보인다. 이걸 인공지능으로 만들지 말고, 그냥 IF – THEN을 수십가지 경우의 수로 만들어서 내 위치에 따라 정찰 유닛을 보내는 방향을 정한다치면, 상대방과 언제 어느 지점에서 조우하느냐에 따라 또 상대방의 위치를 가늠하는 확률 게임을 해야한다. 당장 정찰 부분부터 IF – THEN으로 도망가고 싶을만큼 고려해야하는 이슈들이 많다.

자 그다음 적군의 방향에 따라, 적군의 설치 유닛에 따라 내가 생산하는 유닛과 수비에 쓰는 유닛이 다 달라지는데, 이런건 또 어떻게 Learning을 시킬 수 있을까? 새로운 정보가 주어지면 실시간으로 업데이트해서 새 전략을 짜내야하는데, 바둑처럼 착점까지 시간을 주는 것도 아니고, 그렇다고 미리 계산했던 값을 계속 써먹을 수 있을만큼 전황이 안정적으로 변하는 것도 아니고…. 실력없는 필자는 더 이상 기획할 용기를 잃었다.

이렇게 “니가 못하니까 인공지능의 참패를 예측했냐?”고 물으실 분도 있을 것 같은데, 위의 간단한 사고 실험에 필자가 제시한  두 가지 키워드가 모두 숨어있다.

 

2. 불확실성

이미 다른 글에서 여러번 설명했지만, 머신러닝 모델링은 결국 통계적인 테크닉을 이용해 데이터에서 패턴을 찾아내는 작업이다. 그리고 데이터에 복잡한 신호가 여럿 섞여 있으면 정확한 패턴을 찾아내기가 매우 어렵다. 기존에 Deep Neural Net을 비롯한 여러가지 머신러닝 모델들이 성공을 거둔 영역을 보면 데이터의 형태가 정형화되어 있는 바둑 게임, 음성과 문자, 그림 인식 같은 영역에 국한되어 있다. 왜 다른 영역으로 확장되지는 못할까? 왜 주가 예측을 하는 알고리즘은 못 만들어낼까? 주가에는 불확실성으로 야기되는 결과가 엄청나게 반영되어 있기 때문이다. 데이터에 패턴이 있다면 정규 분포를 따를 수가 없는데, 주가를 6개월치 모아서 주가 수익률을 그래프로 그려보라. 영락없이 정규 분포가 나올 것이다. 어릴 때 동전 던지기 게임을 하면 동전이 휘어있지 않은 이상 앞면과 뒷면이 나올 확률은 반반이고, 이런 반반 확률을 수천번 반복하면 앞면이 나오는 숫자가 정규 분포에 수렴하는 모델을 아마도 통계학 수업 시간에 한번쯤은 보고 연습문제를 풀어본 적이 있을 것이다. 반반이라는 이야기는 예측을 못한다는 이야기고, 그렇게 예측을 못하는 데이터를 쌓으면 정규분포가 되었다는 걸 뻔히 보고서 주가 움직임을 보고 패턴을 예측한다는 이야기를 하는 사람들을 보면….

(주가에서 패턴을 찾으려면 주가말고 다른 외부 데이터가 주가에 어떤 영향을 미치는지, 유사한 데이터가 어떤게 있는지 보는게 그나마 좀 합리적인데, 그렇게 상관관계가 높은 변수들이 많이 있을까….)

스타크래프트라는 게임을 한번 해보면 알겠지만, 불확실성의 연속이다. 고려해야하는 경우의 수도 많고, 그 경우의 수의 조합이 실시간으로 바뀐다. 언뜻보면 알파고와 비슷한 것 같지만, 불확실성의 가능성이 훨씬 더 크다. 단적으로, 상대편 배럭에 불이 켜졌을 때, 생산되고 있는 유닛이 마린일지, 파이어뱃일지, 고스트일지, 메딕일지 어떻게 알 수 있을까? 프로토스가 리버 드랍을 시도할 때, 스캐럽이 어디에서 어떻게 터질지 미리 알 수 있는 방법이 있나?

스타크래프트 게임계에서 “황제”라고 불렸던 임요환 선수의 플레이를 보면, 예측하지 못했던 전술로 상대방을 당황시키거나, 아주 찰나의 노출을 보고 순간적으로 전략을 바꾸는 경우를 자주 볼 수 있었다. 수 많은 유저들이 그 선수의 플레이 스타일에 환호했던 가장 큰 이유는 불확실성이 가득한 전장에서 그 불확실성을 무기로 삼기도 하고, 불확실한 정보 속에서 핵심 메세지를 빠르게 찾아내는 점 때문이었을 것이다.

인공지능으로 똑같은 기능을 하는 모델링을 하기 위해서 가장 필수적인 부분은 바로 그런 불확실성을 어떻게 처리하느냐다. 게임 시작하고 3분이 지난 시점에 적이 9시 방향쪽에서 정찰이 오는 것 같은 순간, 3분이라는 시간이 흘렀기 때문에 실제로는 9시 방향에 적 진지가 있는게 아니라, 다른 곳을 다 정찰하고 늦게 도착했다고 판단해서 12시 방향에 적 진지가 있을 것이라는데에 높은 확률을 두고 게임을 진행한다고 해보자. 이 시점에서 9시 지역과 12시 지역에 줄 수 있는 확률이 1:2라고 가정한 상태에서, 내가 정찰하고 있는 유닛이 1시 지역 쯤에서 상대방의 또 다른 정찰 유닛과 만났다면, 12시 지역에 적의 본진이 있고, 9시 지역에 보냈던 정찰 유닛이 아군을 못 발견해서 6시 지역으로 이동하는 동안 1시 쪽 방향으로 추가 정찰 유닛을 보냈을 것이라고 짐작하는 것이 가장 합리적이라고 생각한다.

인간 플레이어는 이런 정보를 바탕으로 단순히 적군의 위치만 파악하는 정도에서 끝나는게 아니라, 적이 정찰 유닛을 2개나 보낼만큼 아군의 위치를 빨리 알아내야하는 전략을 쓰고 있다는 생각까지 할 수 있다. 정찰 유닛의 종류에 따라 적군이 어떤 초반 전략을 짜고 있는지도 예상해볼 수 있고, 적군 진지를 살펴보지 않더라도 미리 방어 전략을 짤 수도 있다.

(오랜만에 스타크래프트 하고 싶어져서 큰일이다 ㅎㅎ)

인공지능이 게임하는 방식을 보니, 예상대로 불확실성에 맞게 대응하는 방식으로 만드는 걸 포기했다는 감이 왔다. 대규모 물량전을 펼치는 위주로 단조로운 빌드만 전개되던데, 아마 스타크래프트 인공지능 개발하던 사람도 필자가 위에 제시했던 내용을 갖고 불확실성을 어떻게 처리할지 심각하게 고민했을 것이다. 그리고 결과물에서 봤듯이 불확실성을 다루는 쪽으로 모델링을 한게 아니라, 불확실성을 없애는 쪽으로 모델링을 했다. 알파고는 인간이 바둑판 위에서 반응할 수 있는 데이터 조합에 적절한 반응만하면 되었지만, 스타크래프트에서 인간이 반응할 수 있는 가능성의 조합은 바둑판처럼 1차원적이지 않고, 유닛의 종류, 반응 위치 등등 조합이 너무 다차원적이다.

 

3. 계산비용

며칠전 수업 시간에 Neural Net을 열심히 설명하면서 Logistic regression을 여러개 중첩한 것과 같고, 이 때 Feed forward + Back propagation 매커니즘은 사실 각 Node의 가중치를 행렬로 계산하는 작업에 불과하다고 설명하고 있었다. 그 때 학생 한 분이 그럼 그 모델은 어디에 저장하냐고 물으시더라. 보통 이렇게 만든 모델은 실시간으로 꺼내써야하는데, 대형 서버에서 큰 데이터 베이스를 이용해 복잡한 계산을 한 결과값은 어디에 저장하면 될까? 실시간으로 꺼내써야하니 보통은 Memory DB라고 속도가 빠르고 좀 비싼 데이터 베이스에 저장한다. 그래야 새로운 데이터가 입력되었을 때 그 값에 맞춰서 바로 결과값이 나오고 반응을 결정할 수 있기 때문이다.

문제는 대형 데이터를 이용해서 모델링을 할 때, 엄청난 계산 비용, 특히 시간이 많이 걸리기 때문에 단순히 광고 타겟팅 하는 모델만해도 실시간으로 업데이트하기가 매우 힘들다. 보통 2시간 단위, 4시간 단위로 데이터를 모아서 계산한 결과값을 Memory DB에 새로 업데이트 해주는 방식으로 돌아가는데, 저 위의 스타크래프트용 인공지능 모델은 도대체 몇 개의 반응 함수를 만들어야할까? 특히 불확실성을 다 고려하도록 만들려면 숫자가 어마어마하게 많을텐데? 거기다 알파고처럼 정해진 규칙이 있고 단차원적인 데이터 매칭으로 대응 방식을 짜는게 아니라, 다차원적인 불확실성을 다 감당해야하는데? 그걸 다 계산한 값을 운좋게 만들어낼 수 있다고해도 Memory DB에 입력해야하는 값만해도 엄청나게 클 것 같다. 

스타크래프트 인공지능 제작팀이 불확실성에 대한 대응을 포기하고 물량전으로 전략을 잡은 두번째 이유가 바로 이 “계산비용” 때문이라고 본다. 실시간으로 전략 수정을 계속해주려면 인간 유저의 반응이 이미 데이터화 되어 있어서 그 값에 맞게 바로 대응 전략 X번을 고르도록 하거나, 아니면 뒤에서 돌아가고 있는 모델이 엄청나게 빠른 속도로 계산을 해내야하는데, 이 두가지 모두가 불가능한 상황이었을 것이다.

필자가 요즘은 게임을 잘 안 해서 최신 경험치를 갖고 있지는 않지만, 일반적인 컴퓨터 인공지능이 예전과 비교해서 구조적으로 크게 바뀐 점은 없다. 예전에도 IF – THEN을 이용해서 XXX라는 조건이 발동되면 YYY라는 대응을 하도록 하는 알고리즘을 만들고, 그런 알고리즘 몇 개가 대부분의 경우의 수를 커버할 수 있도록 단순하고 포괄적인 알고리즘을 만들었을 것이다. 그러다 패턴을 좀 더 복잡하게 인식할 수 있게 되면서, 좀 더 다양한 알고리즘으로 좀 더 복잡한 대응을 할 수 있도록 알고리즘을 만들게 된 부분이 있고, 그런 복잡한 알고리즘을 만들 때 드는 계산 비용이 감소했다는 점이 예전과 달라진 부분이다.

온도차에 따라 금속의 팽창이 달라지는 점을 이용해 전원을 끄고 켜는 바이메탈은 단순한 목적을 수행하면서 온도가 금속의 팽창에 전달되는데 걸리는 시간만큼의 “시간 비용”이 들었다. 로봇 청소기 정도로 진화한 인공지능은 더 이상 앞으로 나아갈 수 없는 벽을 만나면 되돌아 가도록 프로그래밍을 했는데, 센서가 가져다 주는 정보와 벽에 대해서 기존에 갖고 있는 정보가 일치하는데 걸리는 시간만큼의 “시간 비용”이 드는 방식이다. 알파고는 이세돌의 한 수에 어떻게 반응해야할지 데이터 베이스를 다 훑어서 승리로 이끌어주는 최적 Path 몇 개를 찾아내는 (계산하는게 아니라, 찾아내는) 시스템이고, 그 데이터 베이스를 뒤지는 시간만큼이 “시간 비용”이 된다.

 

정리하며

알고리즘이 작동하는데 “시간 비용”이 매우 작아야하는 스타크래프트 인공지능은 불확실성을 어디까지 고려할 것인가, 얼마나 빠른 시간 안에 전략을 선택할 수 있을까에 대한 상충관계를 타협할 수 있는 새로운 알고리즘을 만들어내기 전까지는 더 이상 큰 발전을 하기 힘들 것이라고 생각한다. 구글의 딥마인드가 바둑 이외에 다른 전략 시뮬레이션 게임에 같은 수준의 인공지능을 못 만들어내는 것도 같은 이유다.

좀 더 쉽게 정리하면, 4차 산업혁명이라고 설레발을 치고, 인공지능이 뭔가 새로운 것인처럼 포장하는 것도 과대포장에 지나지 않는다는 뜻이다. 솔직하게 “비선형 패턴 찾기” 알고리즘이라고 말하면 아무도 관심을 안 가질 것 같으니까 그럴듯한 용어로 포장되어있고, 그 포장을 더 큰 포장으로 장식하면서 밥 벌어먹고 사는 사람이 참 많은 것 같다.

저런 알고리즘 만들어 내는데 가장 중요한 능력이 뭘까? 코딩을 잘 하는 능력? 글쎄다… 일단 기획을 어떻게 해야할지, 불확실성을 어떻게 모델 안에 내재화해야할지 전혀 감이 없는 필자의 입장에서 가장 필요한 능력은 수학과 통계학인 것 같다. 요즘 초등 교육에도 코딩 넣는다고 그러던데, 필자의 짧은 소견으로는 코딩을 넣을게 아니라 저런 수학적인 알고리즘 만들어 낼 수 있는 몇 명의 천재를 양성할 수 있는 교육이 진정한 4차 산업혁명용 교육인 것 같다.

어차피 코딩 교육도 다른 과목처럼 학교 졸업하면 다 까먹는 애들이 태반일테지만, 수학 천재가 만들어놓은 혁신은 영원하지 않을까?

 

 

 

X