지난 2016년 알파고와 이세돌의 대국을 시작으로, 개발자가 아닌 일반인들도 강화학습이나 인공지능에 대해 관심을 가지는 경우가 많아졌다. 이후 알파고 외에도 <스타크래프트2>의 알파스타, <도타 2>의 'OpenAI' 등과 같은 게임이 인공지능 테스트의 장으로 떠올랐다.
이런 상황에서 스스로를 '헤비 과금러'라고 설명할 만큼 <하스스톤>을 좋아하던 옥찬호 넥슨코리아 프로그래머는 이 카드게임에 '알파스타'같은 인공지능을 만들고자 시도하는 중이다. 왜 그랬는지, 제작하기 위해 어떤 단계를 밟았는지 옥찬호 프로그래머에게 귀를 기울여보자 / 디스이즈게임 오시영 기자
# 왜 하스스톤을 선택했나?
옥찬호 프로그래머는 <하스스톤>에서 다양한 덱을 짜는 것은 좋아한다. 해당 덱이 의도에 맞게 작동하는지 테스트하기 위해 컴퓨터와 자주 대전한다고 한다. 현재 하스스톤의 인공지능은 대체로 사람처럼 행동하는 편이지만, 가끔 이상한 행동을 하는 경우가 많았다.
예를 들어 내 턴이 돌아올 때 필드의 하수인을 모두 제거하는 '종말의 예언자' 하수인을 낸 상태로 적 하수인을 모두 얼려서 공격할 수 없는 상황을 생각해보자. 이 때 컴퓨터는 제압기가 없다면 필드 위의 하수인을 모두 포기하는 것이 합리적이다. 하지만 컴퓨터는 이 상황에서 필드 위 하수인의 능력치를 강화하는 카드를 사용해 결과적으로 무의미한 손해를 보게 되는 경우도 있다.
옥찬호 프로그래머는 '알파고', '알파스타'에 감명받아 하스스톤 인공지능의 이런 '멍청한' 행동을 줄이고 '잘하는' 컴퓨터를 만들어보고 싶어서 작업을 시작했다고 설명했다.
# 천 리 길도 한걸음부터…우선 하스스톤을 만들자!
게임에 강화학습을 적용하려면 크게 세가지 방법이 있다. 우선 '알파스타'처럼 게임사에서 제공받은 API(Application Programing Interpace)를 활용하는 방법이 있다. 이를 이용하면 프로그래밍 언어가 제공하는 기능을 사용할 수 있다. 하지만 <하스스톤>의 경우 이것이 공개되지 않아 이용할 수 없는 방법이다.
둘째는 게임을 후킹(Hooking, 텍스트 코드를 중간에 낚아채는 방식)해 알아낸 정보를 이용하는 것인데, 서비스 중인 게임에 영향을 주는 행위는 불법이므로, 경찰서에 불려갈 있어 포기했다.
마지막 방법은 가장 시간이 많이 걸리지만 확실한 방법이다. 바로 게임을 구현해보는 것이다. 옥찬호 프로그래머는 '맨 땅에 헤딩하는' 느낌으로 프로젝트를 시작했다고 전했다.
<하스스톤>의 게임 요소를 파악하는 과정부터 시작했다. 이 게임은 크게 ▲ 전장 ▲ 영웅 ▲ 손패 ▲ 영웅 능력 ▲ 덱 ▲묘지의 여섯가지 구성 요소로 나눌 수 있고, 각 항목을 파고들면 또 다시 구현해야하는 요소들이 나온다.
# 역시 카드 게임에서 가장 구현하기 어려운 것은 '카드'
현재 하스스톤에서 유저가 수집할 수 있는 카드는 총 1926장이다. 게다가 수집할 수는 없지만 게임 플레이 과정에서 사용되는 카드 등을 모두 합치면 총 6086장이라고 한다. 카드 개수도 많지만 '전투의 함성', '죽음의 메아리'나 고유 효과 같은 카드의 효과도 제각각이라 구현하는데 시간이 정말 많이 걸린다.
옥찬호 프로그래머는 이 과정에서 '하스스톤제이슨(HearthstoneJSON), 파이선하스스톤(Python-Hearthstone), 베터이넘(Better-Enums) 등 사이트의 도움을 받았다고 전했다. 해당 사이트에서 개발에 필요한, 하스스톤 카드의 코드를 일정 부분 구현한 자료나 카드 데이터의 열거체 타입 등을 얻을 수있다는 것이다.
또한 순수한 카드 개체 값을 나타내는 '카드'와 인게임 '하수인'과 같이 플레이에 직접적으로 사용되는, 강화가 가능한 개체인 '엔티티'도 구별해줘야 한다. '엔티티'의 가장 쉬운 예는 카드를 필드에 냈을 때 등장하는 하수인이다. 이후 게임 플레이 흐름을 16가지 단계로 나눠 구현해주면 강화학습 인공지능을 만들 <하스스톤>을 만들 수 있다.
# 강화학습을 적용할 때 알아둬야 할 하스스톤과 타 종목의 차이점
강화학습을 이해할 때, 아이가 첫 걸음을 떼는 과정을 생각하면 편하다. 아기는 걷는 방법을 배운 적이 없지만, 수 많은 시행착오를 거쳐 우연히 걷게 된다. 자신이 하고 있는 행동과 걷는다는 보상 사이의 상관관계를 파악함으로써 더 잘 걷게 되는 것이다. 강화학습을 하는 에이전트도, 보상을 통해 어떤 방향을 향해 가야하는지 알 수 있다.
그렇다면 <하스스톤>은 강화학습 인공지능이 활약했던 종목인 바둑, <스타크래프트 2>와 어떤 차이가 있을까?
우선 바둑은 시야 제한이 없다. 바둑판 위의 모든 정보가 유저에게 공개된다. 또한 턴제로 진행하며 제한시간 안에만 자신의 수를 결정하면 된다. 반면 <스타크래프트 2>는 실시간 전략 게임으로 바둑보다 더 빠른 의사결정이 필요하다. 또한 '유닛의 시야 범위'라는 시야 제한이 있어 정찰을 통해 상대의 상황을 추론해 전략을 결정해야 한다.
<하스스톤>은 카드 게임으로 가려진 상대방의 정보는 물론이고, 나 자신의 정보도 완전히 알 수는 없다는 특징이 있다. 유저가 '오른쪽 메타', '기도 메타'라고 부르는 '카드 드로우' 영역뿐만 아니라 이미 들고 있는 카드를 낼 때도 무작위성이 작용하는 경우가 많다. 이런 특징을 기반으로 하스스톤에 강화학습을 적용하려는 연구가 계속 나오고 있다.
# <하스스톤> 강화학습 환경 조성하기
이렇게 만든 게임에서 AI가 게임을 실제로 펼치게 만들기 위해서는 강화학습 환경을 조성해줘야한다. AI가 행동을 하게하는 통로와 AI가 선택한 값을 게임에 전달하는 과정을 정해줘야 하는 것이다.
이를 위해 게임을 플레이하는 도중 알 수 있는 모든 정보를 데이터화 하는 과정도 거친다. 상대방 손, 덱 카드 개수, 내 덱 카드 개수를 비롯해서 게임 내 모든 카드의 비용, 공격력, 방어력, 심지어는 각종 효과도 데이터화 해서 인공지능에게 전달한다.
이후 인공지능이 전달받은 게임의 상황을 고려해 결정을 내릴 때 파이썬 기반의 'RosettaTorch'라는 프로그램을 활용하게 된다.
옥찬호 프로그래머는 발표 말미에 "프로젝트를 상당 부분 완료한 상태로, 조만간 이를 활용한 예제를 발표할 예정"이라며 "내년에는 완성된 프로젝트를 바탕으로 한 번 더 강의를 진행할 수 있었으면 좋겠다"라고 말했다.