한국어
    • 한국어
    • ENGLISH
    • 日本語
    • 中文-繁體

    2017.10.16 AI

    게임과 AI #3 블레이드 & 소울과 게임 AI Part. 2

    대한민국 게임회사 최초로 AI Lab을 구축하고, 게임 AI에 대한 R&D 연구를 선도한 엔씨소프트.

    ‘게임과 AI’ 3편에서는 지난 시간에 이어 <블레이드 & 소울> 속 게임 AI 개발 과정 스토리를 들려드리겠습니다.


    지난 시간까지는 <블레이드 & 소울> AI(이하 B&S AI)를 소개하면서 강화학습 전 단계로, 심층신경망(Deep Neural Network)을 포함한 AI 구조를 설계하고 강화학습 시스템을 만드는 내용을 다루었습니다.

    이번 편에서는 강화학습 단계의 알고리즘을 주제로 다룰 예정으로, 강화학습을 시행하면서 겪었던 어려움과 현재 실험 결과 등에 대해 소개하겠습니다.

    아래 그림은 강화학습이 이뤄지는 전체 과정을 나타낸 도표입니다.

    1. Pre-training을 위한 지도학습(Supervised Learning)

    첫 번째 과정은 사용자들의 로그로 신경망(Neural Network)을 Pre-training하는 것입니다.

    저희를 가장 힘들게 하는 이슈 중 하나는 스킬이 너무 많고 복잡해서 초반 성능 향상이 너무 어렵다는 점입니다.

    스킬 개수도 많지만 스킬 사용 타이밍도 결정되어야 해서 실제로 AI에게 주어지는 경우의 수가 엄청납니다.

    Atari 게임기 - 할 수 있는 조작은 조이스틱과 버튼 1개뿐입니다

    <블레이드 & 소울>의 스킬 개수와 종류

    이런 점은 특히, 학습 초반에 성능 향상을 정말 어렵게 만듭니다.

    초반에는 사실 전투라는 게 성립이 잘 안 될 정도로 못 싸우는데요. 무작위 선택(Random Selection)에 가까운 상태에서 50개 가까운 스킬을 사용해서 성능이 향상되도록 바라는 것은 정말 어려운 일입니다.

    다행히 저희는 사용자들의 로그가 있기 때문에 지도학습(Supervised Learning)을 통해서 초반의 어려운 학습 단계를 뛰어넘고자 합니다.

    Pre training을 통한 초기 성능 Boosting

    2. 성능 고도화를 위한 강화학습(Reinforcement Learning)

    두 번째 과정은 초기 Pre-train된 네트워크(Network)가 준비되면 본격적으로 강화학습(Reinforcement Learning)을 시작합니다.

    이때 PvP이기 때문에 스파링 상대가 필요한데 처음에는 당연히 그런 AI가 없습니다. 그래서 저희가 생각한 것은 지도학습(Supervised Learning)을 통해 다양한 버전들의 AI가 나오면 AI Pool에 이를 모아두고, 스파링 상대로 활용하는 것입니다.

    또한 학습을 거듭하면 지금 고정된 상대방이야 꺾을 수 있겠지만, 지속적으로 성능이 향상되게 하려면 계속해서 상대방의 실력도 좋아져야 하겠죠.

    그래서 학습이 되고 나면, 자기 자신을 상대로 또다시 전투를 벌이는 방식의 Self Play와 같은 방식의 학습 방식을 사용합니다. 이 과정을 전체적으로 보면 다음과 같습니다.

    B&S AI Learning Process

    3. Self Play: PvP 게임 특성을 고려한 Multi Trainer 상대 학습

    위와 같이 만들고 나면 본격적으로 학습 과정에서 어려움이 시작됩니다. PvP 게임이기 때문에 전투를 펼칠 상대방이 필요하죠.

    처음 저희가 생각했던 Self Play학습 방식의 이상적인 상황은 다음과 같았습니다. 자기 자신을 상대로 계속 학습하다 보면 점진적으로 전투 실력이 향상될 것이라는 것이죠.

    그런데 실제 학습을 해보면 큰 문제가 발생합니다. 학습이 진행됨에 따라 지속적으로 전투 성능이 향상되는 것이 아니고, 가위/바위/보처럼 학습이 되는 것이죠.

    v3.0이 v2.0은 잘 이기지만, 그렇다고 v1.0을 이긴다는 보장이 없고 실제로 그런 현상이 나타나기도 합니다.

    저희가 기대한 것은 v3.0이 나오면 v2.0뿐만 아니라 v1.0도 당연히 쉽게 이길 것이라 생각했지만, 실제로는 그렇게 학습되지 않았습니다.

    특히 위와 같은 과정을 진행하면서, Human Test를 통해 이런 현상을 검증했는데 새로운 AI들이 사람 상대로 더 잘 싸운다고 보장할 수 없다는 결론을 얻었습니다.

    그래서 저희는 학습할 때 이미 학습이 끝난 상대들도 AI Pool에 저장해두었다가, 학습 시에 동시에 전투를 붙이는 Multi Trainer 방식의 강화학습을 사용해 이런 현상을 완화했습니다. A3C처럼 여러 Agent를 통해 학습하는 것과 유사하다고도 볼 수 있겠죠.

    즉, v3.0을 만들 때 학습 상대로 v2.0뿐만 아니라, v0.0, v1.0 등도 모두 스파링 상대로 학습하면 이런 현상을 완화할 수 있습니다.

    4. 학습 속도 이슈: 스마트한 Exploration

    앞에서와 같이 Multi Trainer 방식으로 학습하면, 느리긴 하지만 서서히 전투 성능이 향상됩니다.

    그런데 문제는 느려도 너무 느리다는 것입니다. 원래 강화학습의 최대 약점은 학습이 오래 걸린다는 것인데, 이렇게 행동 방식이 다른 여러 스파링 파트너를 상대로 학습하다 보니 적정한 시간 내에 학습되기가 어려워졌습니다.

    결국 어떻게 하면 Exploration을 효율적으로 해서, 학습 속도를 빠르게 할 수 있을지 고민했습니다.

    저희가 생각한 핵심 아이디어는 특정 상황(State)에서 어떤 행동(Action)을 선택했을 때, 예상 결과가 좋지 않으면 Exploration을 대폭 수행하는 것이죠. 그런데 문제는 어떻게 그 행동(Action)의 결과가 좋지 않을 것이라는 걸 예상할 수 있겠느냐는 것입니다.

    그래서 기존의 메인 네트워크(Main Network)위에 1개 층(Layer)을 더 만들어, 스킬의 기대 보상(Expected Reward)을 출력하는 네트워크(Network)을 만들었습니다.

    기대 보상(Expected Reward)가 작으면 (즉, 기대 효과가 좋지 않을 것 같으면) Exploration Rate를 크게 해서 Exploration이 될 확률을 높이는 것이죠.

    B&S AI 2.0 Reward 네트워크(Network) 구조

    B&S AI 2.0 Exploration 방식

    5. 현재 성능 수준

    현재 위와 같이 만들어진 B&S AI 2.0 버전은 역사 vs. 역사 1개 사례에 대해서 Rating 1,850 ~ 1,900점 정도 성능으로 자체 예상하고 있습니다.

    위의 결과는 내부 테스트 결과이며 아직 비무장 등에서 검증된 결과는 아닙니다. 그러나 유의미한 수준의 성능 향상을 관측할 수 있다고 판단되고, 강화학습을 개선하여 전투 성능을 더 높일 수 있을 것으로 기대하고 있습니다.

    또한 AI가 가지고 있는 반응 속도 문제 등을 해결해서 AI들을 테스트할 수 있는 환경도 고려하고 있습니다. 유의미한 결과가 나왔다고 판단되면 다시 정식으로 공개할 수 있도록 하겠습니다.

    6. 사람을 이기려면 무엇을 잘 해야 할까요?

    AI를 만드는 일을 하면서 느끼는 점은, 정말 사람이란 대단한 존재라는 것입니다.

    사람에게는 무척 간단하고 쉬운 일도 AI한테 하게 하려면 정말 많은 노력이 들어가죠. 그래서 어떤 분야에서 사람을 이기는 것은 엄청나게 어려운 일입니다.

    종합적인 측면에서는 제가 논하기 어려운 부분이고, B&S AI 측면에서 사람을 이기는 문제에 대해서 이야기 해보려고 합니다. 좀 더 구체적으로 예를 들어 정상급 프로게이머를 이기는 문제에 대해서 살펴보겠습니다.

    첫 번째는 전략적인 측면입니다. 모든 게임이 그렇지만 Micro Control을 잘하면 어느 정도는 잘 할 수 있지만 결국, 최고 레벨로 올라가면 ‘작전’에 의해서 승부가 결정됩니다.

    저희도 처음 AI를 만들 때 가장 관심이 있었던 것은 ‘스킬 콤보를 어떻게 하면 효율적으로 Planning할 수 있을까?’ 이런 질문들이었습니다.

    스킬 연계나 스킬을 연속으로 아무 실수 없이 사용하면 이길 수 있다고 생각했습니다. 그리고 사실 그런 부분들은 아래 동영상처럼 잘 만들 수 있었습니다.

    스킬 연계가 서서히 학습되는 모습

    그런데 프로게이머 수준의 경기를 보면 스킬 콤보는 사실 별로 관심사가 아닙니다. 프로게이머 수준 정도되면 그런 부분은 ‘그냥 당연히 잘하는’ 정도의 능력입니다.

    승부는 결국 ‘내가 이번 판에는 이런 식으로 함정을 파서 상대를 끌어드리겠다’라든지, ‘이번 판에는 초반에 허허실실 맞아주다가 한 번에 몰아쳐서 승리해야겠다’ 등 상대에 따라서 작전을 어떻게 짜는지에 따라 결정되고, 이게 굉장히 효과적이죠.

    문제는 아쉽게도 아직까지 순수 강화학습은 이런 수준의 Decision Making에 굉장히 약합니다. (Sparse Reward 문제) 알파고는 이런 문제를 몬테카를로 탐색기법(Monte Carlo Tree Search, MCTS) 등을 통해 보완했다고 생각되는데, 순수 강화학습으로 이런 장기(Long Term) 전략을 결정하는 것이 굉장히 어려운 문제입니다.

    한 가지 생각해볼 수 있는 대안은 AI 구조를 계층적으로 만들고 강화학습하는 것이겠죠. <몬테주마의 복수(Montezuma’s Revenge)> 문제를 풀었던 Hierarchical Deep 강화학습(Reinforcement Learning)이 그런 문제를 대체할 수 있을 것으로 생각합니다.

    Hierarchical Deep 강화학습

    Hierarchical Deep 강화학습 강의

    두 번째는 적응 능력입니다.

    만약에 게임이 보통 단판이라면 AI한테도 승률이 꽤 높을 것입니다. 그런데 게임은 보통 여러 판 반복해서 진행되죠. 그러면 사람은 정말 놀라운 속도로 상대방에게 적응해서 작전을 변경합니다.

    그런데 대부분 머신러닝(Machine Learning) 학습이 그렇지만 통계적으로 유의미한 양의 반복된 데이터와 시간이 필요합니다. 상대에게 적응해서 두 번째 경기, 세 번째 경기에 바로 플레이 스타일을 바꾸고 작전을 바꾸게 하는 것은 사실 머신러닝(Machine Learning) 영역의 문제는 아닌 것 같습니다.

    이처럼 이런 중요한 문제들이 무수히 많이 남아 있는 상황이고, 앞으로 이런 문제들을 저희는 하나 하나 풀어나가면서 B&S AI를 정복해 나가고자 합니다.

    마치며

    지금까지 강화학습을 이용한 B&S AI에 대해서 살펴보았습니다.

    이번 연재는 게임 AI 중에서 대표적인 분야라고 할 수 있는, 게임을 플레이할 수 있는 AI에 대해서만 다루었습니다. 또한 <블레이드 & 소울>에서 연구했던 경험을 토대로 다른 게임, 다른 장르의 게임에서 동작하는AI들을 만들 수 있을지 실험하고 있습니다.

    Game AI Lab은 그 동안 NPC AI와 같이 게임을 플레이할 수 있는 AI를 개발하고, 이를 이용해서 어떻게 하면 AI를 이용해서 재미있는 게임을 만들 수 있을까에 대해서 주로 고민해왔습니다.

    이제 저희는 다른 분야로도 R&D 영역을 점차적으로 확장해나가고 있습니다. 게임을 개발하고 서비스하는 데 필요한 AI, 게임을 개발하고 게임에 필요한 아트 작업을 진행할 때, 사람의 지루한 수작업을 줄여줄 수 있는 AI 등을 개발하기 위해 노력하고 있습니다.

    게임 개발 과정은 수백억 원의 돈과 수백 명의 인력, 장기간의 시간이 투여되는 엄청난 작업입니다. 또한 이제는 모바일 게임 중심으로 시장이 재편되면서 트렌드에 맞추어 발 빠르게 개발하고 움직여야 살아남을 수 있습니다.

    이런 상황에서 AI 기술을 통해 무수한 시행착오와 소요되는 시간, 비용을 단축할 수 있을 것이고 이는 새로운 경쟁력이 될 수 있다고 생각합니다.


    게임 AI R&D 분야

    저희는 앞으로도 계속 AI를 만들어 나갈 것이며, 지속적으로 영역을 확장해 나갈 것입니다.

    게임은 저희가 AI를 연구하는 신나는 놀이터이며, 앞으로 게임 안에서 연구한 결과들을 현실 세계로 가지고 나갈 준비도 할 것입니다.

    계속해서 저희의 연구는 진행할 것이고, 다음에 그 결과와 성과를 여러분께 공개할 수 있는 기회를 갖도록 하겠습니다.